Mengelola tampilan terwujud

Dokumen ini menjelaskan cara mengelola tampilan terwujud di BigQuery.

Pengelolaan tampilan terwujud BigQuery mencakup operasi berikut:

Untuk mengetahui informasi selengkapnya tentang tampilan terwujud, lihat artikel berikut:

Sebelum memulai

Berikan peran Identity and access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini. Izin yang diperlukan untuk melakukan tugas (jika ada) tercantum di bagian "Izin yang diperlukan" pada tugas.

Mengubah tampilan terwujud

Anda dapat mengubah tampilan terwujud melalui Konsol Google Cloud atau alat command line bq, menggunakan bahasa definisi data (DDL) dengan ALTER MATERIALIZED VIEW dan SET OPTIONS. Untuk daftar opsi tampilan terwujud, lihat materialized_view_set_options_list.

Berikut adalah contoh yang menetapkan enable_refresh ke true. Sesuaikan dengan kebutuhan untuk kasus penggunaan Anda.

Izin yang diperlukan

Untuk mengubah tampilan terwujud, Anda memerlukan izin IAM bigquery.tables.get dan bigquery.tables.update.

Setiap peran IAM yang telah ditetapkan berikut mencakup izin yang Anda perlukan untuk mengubah tampilan terwujud:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Untuk mengetahui informasi selengkapnya tentang Identity and Access Management (IAM) BigQuery, lihat Peran dan izin yang telah ditetapkan.

SQL

Untuk mengubah tampilan terwujud, gunakan pernyataan DDL ALTER MATERIALIZED VIEW SET OPTIONS:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
    SET OPTIONS (enable_refresh = true);

    Ganti kode berikut:

    • PROJECT: nama project yang berisi tampilan terwujud
    • DATASET: nama set data yang berisi tampilan terwujud
    • MATERIALIZED_VIEW: nama tampilan terwujud yang ingin Anda ubah

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

Jalankan perintah bq update:

bq update \
--enable_refresh=true \
--refresh_interval_ms= \
PROJECT.DATASET.MATERIALIZED_VIEW

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.MaterializedViewDefinition;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;

// Sample to update materialized view
public class UpdateMaterializedView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String materializedViewName = "MY_MATERIALIZED_VIEW_NAME";
    updateMaterializedView(datasetName, materializedViewName);
  }

  public static void updateMaterializedView(String datasetName, String materializedViewName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, materializedViewName);

      // Get existing materialized view
      Table table = bigquery.getTable(tableId);
      MaterializedViewDefinition materializedViewDefinition = table.getDefinition();
      // Update materialized view
      materializedViewDefinition
          .toBuilder()
          .setEnableRefresh(true)
          .setRefreshIntervalMs(1000L)
          .build();
      table.toBuilder().setDefinition(materializedViewDefinition).build().update();
      System.out.println("Materialized view updated successfully");
    } catch (BigQueryException e) {
      System.out.println("Materialized view was not updated. \n" + e.toString());
    }
  }
}

Mencantumkan tampilan terwujud

Anda dapat mencantumkan tampilan terwujud melalui Konsol Google Cloud, alat command line bq, atau BigQuery API.

Izin yang diperlukan

Untuk mencantumkan tampilan terwujud dalam set data, Anda memerlukan izin IAM bigquery.tables.list.

Setiap peran IAM yang telah ditetapkan berikut mencakup izin yang Anda perlukan untuk mencantumkan tampilan terwujud dalam set data:

  • roles/bigquery.user
  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

Untuk mengetahui informasi lebih selengkapnya tentang peran dan izin IAM di IAM, lihat Peran dan izin yang telah ditetapkan.

Proses untuk mencantumkan tampilan terwujud identik dengan proses untuk mencantumkan tabel. Untuk mencantumkan tampilan terwujud dalam set data:

Konsol

  1. Di panel Explorer, luaskan project Anda dan pilih set data.

  2. Scroll melalui daftar untuk melihat tabel di set data. Tabel, tampilan, dan tampilan terwujud diidentifikasi dengan ikon yang berbeda.

    Ikon tabel dan tampilan

bq

Berikan perintah bq ls. Flag --format dapat digunakan untuk mengontrol output. Jika Anda mencantumkan tampilan terwujud dalam project selain project default, tambahkan project ID ke set data dalam format berikut: project_id:dataset.

bq ls --format=pretty project_id:dataset

Dengan keterangan:

  • project_id adalah project ID Anda.
  • dataset adalah nama set data.

Saat Anda menjalankan perintah, kolom Type akan menampilkan jenis tabel. Contoh:

+-------------------------+--------------------+----------------------+-------------------+
|         tableId         | Type               |        Labels        | Time Partitioning |
+-------------------------+--------------------+----------------------+-------------------+
| mytable                 | TABLE              | department:shipping  |                   |
| mymatview               | MATERIALIZED_VIEW  |                      |                   |
+-------------------------+--------------------+----------------------+-------------------+

Contoh:

Masukkan perintah berikut untuk mencantumkan tampilan terwujud dalam set data mydataset di project default Anda.

bq ls --format=pretty mydataset

Masukkan perintah berikut untuk mencantumkan tampilan terwujud dalam set data mydataset di myotherproject.

bq ls --format=pretty myotherproject:mydataset

API

Untuk mencantumkan tampilan terwujud menggunakan API, panggil metode tables.list.

Go

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listTables demonstrates iterating through the collection of tables in a given dataset.
func listTables(w io.Writer, projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ts := client.Dataset(datasetID).Tables(ctx)
	for {
		t, err := ts.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Table: %q\n", t.TableID)
	}
	return nil
}

Python

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset that contains
#                  the tables you are listing.
# dataset_id = 'your-project.your_dataset'

tables = client.list_tables(dataset_id)  # Make an API request.

print("Tables contained in '{}':".format(dataset_id))
for table in tables:
    print("{}.{}.{}".format(table.project, table.dataset_id, table.table_id))

Mendapatkan informasi tentang tampilan terwujud

Anda bisa mendapatkan informasi tentang tampilan terwujud menggunakan SQL, alat command line bq, atau BigQuery API.

Izin yang diperlukan

Untuk membuat kueri informasi tentang tampilan terwujud, Anda memerlukan izin Identity and Access Management (IAM) berikut:

  • bigquery.tables.get
  • bigquery.tables.list
  • bigquery.routines.get
  • bigquery.routines.list

Setiap peran IAM yang telah ditetapkan berikut mencakup izin sebelumnya:

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.admin

Untuk mengetahui informasi selengkapnya tentang izin BigQuery, lihat Kontrol akses dengan IAM.

Untuk mendapatkan informasi tentang tampilan terwujud, termasuk replika tampilan terwujud dependen:

SQL

Untuk mendapatkan informasi tentang tampilan terwujud, buat kueri tampilan INFORMATION_SCHEMA.TABLES:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    SELECT * FROM PROJECT_ID.DATASET_ID.INFORMATION_SCHEMA.TABLES
    WHERE table_type = 'MATERIALIZED VIEW';

    Ganti kode berikut:

    • PROJECT_ID: nama project yang berisi tampilan terwujud
    • DATASET_ID: nama set data yang berisi tampilan terwujud

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

Gunakan perintah bq show:

bq show --project=project_id --format=prettyjson dataset.materialized_view

Ganti kode berikut:

  • project_id: project ID. Anda hanya perlu menyertakan flag ini untuk mendapatkan informasi tentang tampilan terwujud dalam project yang berbeda dengan project default.
  • dataset: nama set data yang berisi tampilan terwujud.
  • materialized_view: nama tampilan terwujud yang informasinya Anda inginkan.

Contoh:

Masukkan perintah berikut untuk menampilkan informasi tentang tampilan terwujud my_mv dalam set data report_views di project myproject.

bq show --project=myproject --format=prettyjson report_views.my_mv

API

Untuk mendapatkan informasi tampilan terwujud menggunakan API, panggil metode tables.get.

Menghapus tampilan terwujud

Anda dapat menghapus tampilan terwujud melalui Konsol Google Cloud, alat command line bq, atau API.

Menghapus tampilan terwujud juga akan menghapus izin apa pun yang terkait dengan tampilan terwujud ini. Saat membuat ulang tampilan terwujud yang dihapus, Anda juga harus mengonfigurasi ulang izin akses apa pun yang sebelumnya terkait dengannya secara manual.

Izin yang diperlukan

Untuk menghapus tampilan terwujud, Anda memerlukan izin IAM bigquery.tables.delete.

Setiap peran IAM yang telah ditetapkan berikut menyertakan izin yang Anda perlukan untuk menghapus tampilan terwujud:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Untuk mengetahui informasi selengkapnya tentang Identity and Access Management (IAM) BigQuery, lihat Peran dan izin yang telah ditetapkan.

SQL

Untuk menghapus tampilan terwujud, gunakan pernyataan DDL DROP MATERIALIZED VIEW:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    DROP MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW;

    Ganti kode berikut:

    • PROJECT: nama project yang berisi tampilan terwujud
    • DATASET: nama set data yang berisi tampilan terwujud
    • MATERIALIZED_VIEW: nama tampilan terwujud yang ingin Anda hapus

  3. Klik Run.

Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.

bq

Gunakan perintah bq rm untuk menghapus tampilan terwujud.

API

Panggil metode tables.delete dan tentukan nilai untuk parameter projectId, datasetId, dan tableId:

  • Tetapkan parameter projectId ke project ID Anda.
  • Tetapkan parameter datasetId ke ID set data Anda.
  • Tetapkan parameter tableId ke ID tabel tampilan terwujud yang Anda hapus.

Java

Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.

Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;

// Sample to delete materialized view
public class DeleteMaterializedView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String materializedViewName = "MY_MATERIALIZED_VIEW_NAME";
    deleteMaterializedView(datasetName, materializedViewName);
  }

  public static void deleteMaterializedView(String datasetName, String materializedViewName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, materializedViewName);

      boolean success = bigquery.delete(tableId);
      if (success) {
        System.out.println("Materialized view deleted successfully");
      } else {
        System.out.println("Materialized view was not found");
      }
    } catch (BigQueryException e) {
      System.out.println("Materialized view was not found. \n" + e.toString());
    }
  }
}

Memuat ulang tampilan terwujud

Memuat ulang tampilan terwujud akan memperbarui data yang di-cache untuk mencerminkan status tabel dasarnya saat ini.

Saat Anda membuat kueri tampilan terwujud, BigQuery akan menampilkan hasil dari data tampilan terwujud yang di-cache dan data yang diambil dari tabel dasar. Jika memungkinkan, BigQuery hanya akan membaca perubahan sejak terakhir kali tampilan dimuat ulang. Meskipun data yang baru di-streaming mungkin tidak disertakan selama pemuatan ulang tampilan terwujud, kueri selalu membaca data yang di-streaming, terlepas dari apakah tampilan terwujud digunakan atau tidak.

Menampilkan hasil kueri langsung dari tabel dasar akan menimbulkan biaya komputasi yang lebih tinggi daripada menampilkan hasil dari data tampilan terwujud yang di-cache. Memuat ulang data yang di-cache tampilan terwujud secara berkala akan mengurangi jumlah data yang ditampilkan langsung dari tabel dasar, sehingga mengurangi biaya komputasi.

Bagian ini menjelaskan cara melakukan hal berikut:

Pemuatan ulang otomatis

Anda dapat mengaktifkan atau menonaktifkan pemuatan ulang otomatis kapan saja. Tugas pemuatan ulang otomatis dilakukan oleh akun layanan bigquery-adminbot@system.gserviceaccount.com dan muncul dalam histori tugas project tampilan terwujud.

Secara default, data dalam cache di tampilan terwujud akan otomatis dimuat ulang dari tabel dasar dalam waktu 5 hingga 30 menit setelah perubahan pada tabel dasar, misalnya, penyisipan baris atau penghapusan baris.

Anda dapat menetapkan batas frekuensi pemuatan ulang untuk mengelola frekuensi pemuatan ulang otomatis data dalam cache, sehingga mengelola biaya dan performa kueri tampilan terwujud.

Mengaktifkan dan menonaktifkan pemuatan ulang otomatis

Untuk menonaktifkan pemuatan ulang otomatis saat Anda membuat tampilan terwujud, tetapkan enable_refresh ke false.

CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
PARTITION BY RANGE_BUCKET(column_name, buckets)
OPTIONS (enable_refresh = false)
AS SELECT ...

Untuk tampilan terwujud yang ada, Anda dapat mengubah nilai enable_refresh menggunakan ALTER MATERIALIZED VIEW.

ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
SET OPTIONS (enable_refresh = true);

Menetapkan batas frekuensi

Anda dapat mengonfigurasi batas frekuensi terkait seberapa sering pemuatan ulang otomatis dijalankan. Secara default, tampilan terwujud dimuat ulang tidak lebih dari setiap 30 menit.

Batas frekuensi pemuatan ulang dapat diubah kapan saja.

Untuk menetapkan batas frekuensi pemuatan ulang saat membuat tampilan terwujud, tetapkan refresh_interval_minutes di DDL (atau refresh_interval_ms dalam API dan alat command line bq), ke nilai yang Anda inginkan.

CREATE MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
OPTIONS (enable_refresh = true, refresh_interval_minutes = 60)
AS SELECT ...

Demikian pula, Anda dapat menetapkan batas frekuensi saat mengubah tampilan terwujud. Contoh ini mengasumsikan bahwa Anda telah mengaktifkan pemuatan ulang otomatis, dan hanya ingin mengubah batas frekuensi:

ALTER MATERIALIZED VIEW PROJECT.DATASET.MATERIALIZED_VIEW
SET OPTIONS (refresh_interval_minutes = 60);

Batas frekuensi pemuatan ulang minimum adalah 1 menit. Batas frekuensi pemuatan ulang maksimum adalah 7 hari.

Anda dapat melakukan pemuatan ulang manual dari tampilan terwujud kapan saja, dan waktunya tidak tunduk pada batas frekuensi.

Upaya terbaik

Pemuatan ulang otomatis dilakukan berdasarkan upaya terbaik. BigQuery akan mencoba memulai pemuatan ulang dalam waktu 5 menit setelah perubahan pada tabel dasar (jika pemuatan ulang sebelumnya dilakukan lebih awal dari 30 menit yang lalu), tetapi tidak menjamin bahwa pemuatan ulang akan dimulai pada saat itu, juga tidak menjamin kapan pemuatan ulang akan selesai.

Pemuatan ulang otomatis diperlakukan mirip dengan kueri dengan prioritas batch. Jika project tampilan terwujud tidak memiliki kapasitas saat saat ini, pemuatan ulang akan tertunda. Jika project berisi banyak tampilan yang pemuatan ulangnya ternyata mahal, setiap tampilan mungkin mengalami keterlambatan secara signifikan dibandingkan tabel dasarnya.

Pemuatan ulang manual

Anda dapat memuat ulang tampilan terwujud secara manual kapan saja.

Izin yang diperlukan

Untuk memuat ulang tampilan terwujud secara manual, Anda memerlukan izin IAM bigquery.tables.getData, bigquery.tables.update, dan bigquery.tables.updateData.

Setiap peran IAM yang telah ditetapkan berikut menyertakan izin yang Anda perlukan untuk memuat ulang tampilan terwujud secara manual:

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

Untuk mengetahui informasi selengkapnya tentang Identity and Access Management (IAM) BigQuery, lihat Peran dan izin yang telah ditetapkan.

Untuk memperbarui data dalam tampilan terwujud, panggil prosedur sistem BQ.REFRESH_MATERIALIZED_VIEW. Ketika prosedur ini dipanggil, BigQuery akan mengidentifikasi perubahan yang telah terjadi di tabel dasar dan menerapkan perubahan tersebut pada tampilan terwujud. Kueri untuk menjalankan BQ.REFRESH_MATERIALIZED_VIEW selesai saat pemuatan ulang selesai.

CALL BQ.REFRESH_MATERIALIZED_VIEW('PROJECT.DATASET.MATERIALIZED_VIEW');

Memantau tampilan terwujud

Anda bisa mendapatkan informasi tentang tampilan terwujud dan tugas pembaruan tampilan terwujud menggunakan BigQuery API. Untuk mengetahui informasi selengkapnya, lihat Memantau tampilan terwujud.