Membuat tampilan

Dokumen ini menjelaskan cara membuat tampilan di BigQuery.

Anda dapat membuat tampilan di BigQuery dengan cara berikut:

  • Menggunakan Konsol Google Cloud.
  • Menggunakan perintah bq mk alat command line bq.
  • Memanggil metode API tables.insert.
  • Menggunakan library klien.
  • Mengirimkan pernyataan bahasa definisi data (DDL) CREATE VIEW.

Batasan tampilan

Tampilan BigQuery memiliki batasan sebagai berikut:

  • Tampilan bersifat hanya baca. Misalnya, Anda tidak dapat menjalankan kueri yang menyisipkan, memperbarui, atau menghapus data.
  • Set data yang berisi tampilan Anda dan set data yang berisi tabel yang dirujuk oleh tampilan tersebut harus berada di lokasi yang sama.
  • Referensi di dalam tampilan harus memenuhi syarat dengan set data. Set data default tidak memengaruhi isi tampilan.
  • Anda tidak dapat menggunakan metode JSON API TableDataList untuk mengambil data dari tampilan. Untuk mengetahui informasi selengkapnya, lihat Tabledata: daftar.
  • Anda tidak dapat menggabungkan kueri GoogleSQL dan legacy SQL saat menggunakan tampilan. Kueri GoogleSQL tidak dapat mereferensikan tampilan yang ditentukan menggunakan sintaksis legacy SQL.
  • Anda tidak dapat mereferensikan parameter kueri dalam tampilan.
  • Skema tabel yang mendasarinya disimpan dengan tampilan saat tampilan dibuat. Jika kolom ditambahkan, dihapus, atau diubah setelah tampilan dibuat, skema yang dilaporkan tidak akan akurat hingga tampilan diperbarui. Meskipun skema yang dilaporkan mungkin tidak akurat, semua kueri yang dikirimkan memberikan hasil yang akurat.
  • Anda tidak dapat memperbarui tampilan legacy SQL ke sintaksis GoogleSQL secara otomatis. Untuk mengubah kueri yang digunakan untuk menentukan tampilan, Anda dapat menggunakan hal berikut:
  • Anda tidak dapat menyertakan fungsi yang ditentukan pengguna sementara atau tabel sementara dalam kueri SQL yang menentukan tampilan.
  • Anda tidak dapat mereferensikan tampilan dalam kueri tabel karakter pengganti.

Untuk mengetahui informasi tentang kuota dan batas yang berlaku untuk tampilan, lihat Batas tampilan.

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

Tampilan diperlakukan sebagai resource tabel di BigQuery, sehingga pembuatan tampilan memerlukan izin yang sama seperti pembuatan tabel. Anda juga harus memiliki izin untuk membuat kueri setiap tabel yang direferensikan oleh kueri SQL tampilan.

Untuk membuat tampilan, Anda memerlukan izin IAM bigquery.tables.create. Peran IAM roles/bigquery.dataEditor yang telah ditetapkan mencakup izin yang diperlukan untuk membuat tampilan.

Selain itu, jika Anda memiliki izin bigquery.datasets.create, Anda dapat membuat tampilan dalam set data yang Anda buat. Agar dapat membuat tampilan untuk data yang bukan milik Anda, Anda harus memiliki izin bigquery.tables.getData untuk tabel tersebut.

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

Penamaan tampilan

Saat Anda membuat tampilan di BigQuery, nama tampilan harus unik per set data. Nama tampilan dapat:

  • Berisi karakter dengan total hingga 1.024 UTF-8 byte.
  • Berisi karakter Unicode dalam kategori L (huruf), M (tanda), N (angka), Pc (penghubung, termasuk garis bawah), Pd (tanda pisah), Zs (spasi). Untuk informasi selengkapnya, lihat Kategori Umum.

Berikut adalah contoh nama tampilan yang valid: view 01, ग्राहक, 00_お客様, étudiant-01.

Peringatan:

  • Nama tabel peka huruf besar/kecil secara default. mytable dan MyTable dapat berada dalam set data yang sama, kecuali jika keduanya merupakan bagian dari set data yang tidak peka huruf besar/kecil.
  • Beberapa nama tampilan dan awalan nama tampilan dicadangkan. Jika Anda menerima error yang menyatakan bahwa nama atau awalan tampilan dicadangkan, pilih nama yang berbeda dan coba lagi.
  • Jika Anda menyertakan beberapa operator titik (.) secara berurutan, operator duplikat tersebut akan dihapus secara implisit.

    Misalnya, contoh ini: project_name....dataset_name..table_name

    Menjadi seperti ini: project_name.dataset_name.table_name

Membuat tampilan

Anda dapat membuat tampilan dengan menulis kueri SQL yang digunakan untuk menentukan data yang dapat diakses oleh tampilan. Kueri SQL harus terdiri dari pernyataan SELECT. Jenis pernyataan lain (seperti pernyataan DML) dan kueri multi-pernyataan tidak diizinkan dalam kueri tampilan.

Untuk membuat tampilan:

Konsol

  1. Setelah menjalankan kueri, klik tombol Simpan tampilan di atas jendela hasil kueri untuk menyimpan kueri sebagai tampilan.

    Simpan tampilan.

  2. Pada dialog Simpan tampilan:

    • Untuk Nama project, pilih project untuk menyimpan tampilan.
    • Untuk Nama set data, pilih set data untuk menyimpan tampilan. Set data yang berisi tampilan Anda dan set data yang berisi tabel yang dirujuk oleh tampilan harus berada di lokasi yang sama.
    • Untuk Nama tabel, masukkan nama tampilan.
    • Klik Save.

SQL

Gunakan pernyataan CREATE VIEW. Contoh berikut akan membuat tampilan bernama usa_male_names dari set data publik nama USA:

  1. Di Konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, masukkan pernyataan berikut:

    CREATE VIEW mydataset.usa_male_names(name, number) AS (
      SELECT
        name,
        number
      FROM
        bigquery-public-data.usa_names.usa_1910_current
      WHERE
        gender = 'M'
      ORDER BY
        number DESC
    );

  3. Klik Run.

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

bq

Gunakan perintah bq mk dengan flag --view. Untuk kueri GoogleSQL, tambahkan flag --use_legacy_sql dan tetapkan ke false. Parameter opsional mencakup --expiration, --description, dan --label.

Jika kueri Anda merujuk ke resource fungsi yang ditentukan pengguna eksternal (UDF) yang disimpan di Cloud Storage atau di file lokal, gunakan flag --view_udf_resource untuk menentukan resource tersebut. Flag --view_udf_resource tidak ditunjukkan di sini. Untuk mengetahui informasi selengkapnya tentang penggunaan UDF, lihat UDF.

Jika Anda membuat tampilan dalam project selain project default, tentukan project ID menggunakan flag --project_id.

bq mk \
--use_legacy_sql=false \
--view_udf_resource=PATH_TO_FILE \
--expiration INTEGER \
--description "DESCRIPTION" \
--label KEY:VALUE \
--view 'QUERY' \
--project_id PROJECT_ID \
DATASET.VIEW

Ganti kode berikut:

  • PATH_TO_FILE adalah URI atau jalur sistem file lokal ke file kode yang akan dimuat dan dievaluasi segera sebagai resource UDF yang digunakan oleh tampilan. Ulangi flag untuk menentukan beberapa file.
  • INTEGER menetapkan masa aktif (dalam detik) untuk tampilan. Jika INTEGER adalah 0, tampilan tidak akan habis masa berlakunya. Jika Anda tidak menyertakan flag --expiration, BigQuery akan membuat tampilan dengan masa aktif tabel default set data.
  • DESCRIPTION adalah deskripsi tampilan dalam tanda kutip.
  • KEY:VALUE adalah pasangan nilai kunci yang mewakili label. Ulangi flag --label untuk menentukan beberapa label.
  • QUERY adalah kueri yang valid.
  • PROJECT_ID adalah project ID Anda (jika Anda tidak memiliki project default yang dikonfigurasi).
  • DATASET adalah set data dalam project Anda.
  • VIEW adalah nama tampilan yang ingin Anda buat.

Contoh:

Masukkan perintah berikut untuk membuat tampilan bernama myview di mydataset dalam project default Anda. Waktu habis masa berlaku ditetapkan ke 3.600 detik (1 jam), deskripsi ditetapkan ke This is my view, dan label ditetapkan ke organization:development. Kueri yang digunakan untuk membuat tampilan mengkueri data dari set data publik Data Nama USA.

bq mk \
--use_legacy_sql=false \
--expiration 3600 \
--description "This is my view" \
--label organization:development \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Masukkan perintah berikut untuk membuat tampilan bernama myview di mydataset di myotherproject. Deskripsi ditetapkan ke This is my view, label ditetapkan ke organization:development, dan masa berlaku tampilan ditetapkan ke waktu habis masa berlaku tabel default set data. Kueri yang digunakan untuk membuat tampilan mengkueri data dari set data publik Data Nama USA.

bq mk \
--use_legacy_sql=false \
--description "This is my view" \
--label organization:development \
--project_id myotherproject \
--view \
'SELECT
  name,
  number
FROM
  `bigquery-public-data.usa_names.usa_1910_current`
WHERE
  gender = "M"
ORDER BY
  number DESC' \
mydataset.myview

Setelah tampilan dibuat, Anda dapat memperbarui waktu habis masa berlaku, deskripsi, dan label tampilan. Untuk mengetahui informasi selengkapnya, lihat Memperbarui tampilan.

Terraform

Gunakan resource google_bigquery_table.

Contoh berikut membuat tampilan bernama myview:

resource "google_bigquery_dataset" "default" {
  dataset_id                      = "mydataset"
  default_partition_expiration_ms = 2592000000  # 30 days
  default_table_expiration_ms     = 31536000000 # 365 days
  description                     = "dataset description"
  location                        = "US"
  max_time_travel_hours           = 96 # 4 days

  labels = {
    billing_group = "accounting",
    pii           = "sensitive"
  }
}

resource "google_bigquery_table" "default" {
  dataset_id          = google_bigquery_dataset.default.dataset_id
  table_id            = "myview"
  deletion_protection = false # set to "true" in production

  view {
    query          = "SELECT global_id, faa_identifier, name, latitude, longitude FROM `bigquery-public-data.faa.us_airports`"
    use_legacy_sql = false
  }

}

Untuk menerapkan konfigurasi Terraform di project Google Cloud, selesaikan langkah-langkah di bagian berikut.

Menyiapkan Cloud Shell

  1. Luncurkan Cloud Shell.
  2. Tetapkan project Google Cloud default tempat Anda ingin menerapkan konfigurasi Terraform.

    Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.

Menyiapkan direktori

Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).

  1. Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki ekstensi .tf—misalnya main.tf. Dalam tutorial ini, file ini disebut sebagai main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.

    Salin kode contoh ke dalam main.tf yang baru dibuat.

    Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.

  3. Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
  4. Simpan perubahan Anda.
  5. Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
    terraform init

    Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi -upgrade:

    terraform init -upgrade

Menerapkan perubahan

  1. Tinjau konfigurasi dan pastikan resource yang akan dibuat atau diupdate oleh Terraform sesuai yang Anda inginkan:
    terraform plan

    Koreksi konfigurasi jika diperlukan.

  2. Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan yes pada prompt:
    terraform apply

    Tunggu hingga Terraform menampilkan pesan "Apply complete!".

  3. Buka project Google Cloud Anda untuk melihat hasilnya. Di Konsol Google Cloud, buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.

API

Panggil metode tables.insert dengan resource tabel yang berisi properti view.

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// createView demonstrates creation of a BigQuery logical view.
func createView(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydatasetid"
	// tableID := "mytableid"
	ctx := context.Background()

	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	meta := &bigquery.TableMetadata{
		// This example shows how to create a view of the shakespeare sample dataset, which
		// provides word frequency information.  This view restricts the results to only contain
		// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
	}
	if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); err != nil {
		return err
	}
	return nil
}

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 mengetahui 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;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to create a view
public class CreateView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String query =
        String.format(
            "SELECT TimestampField, StringField, BooleanField FROM %s.%s", datasetName, tableName);
    createView(datasetName, viewName, query);
  }

  public static void createView(String datasetName, String viewName, String query) {
    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, viewName);

      ViewDefinition viewDefinition =
          ViewDefinition.newBuilder(query).setUseLegacySql(false).build();

      bigquery.create(TableInfo.of(tableId, viewDefinition));
      System.out.println("View created successfully");
    } catch (BigQueryException e) {
      System.out.println("View was not created. \n" + e.toString());
    }
  }
}

Node.js

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

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

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function createView() {
  // Creates a new view named "my_shared_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const myDatasetId = "my_table"
  // const myTableId = "my_table"
  // const projectId = "bigquery-public-data";
  // const sourceDatasetId = "usa_names"
  // const sourceTableId = "usa_1910_current";
  const myDataset = await bigquery.dataset(myDatasetId);

  // For all options, see https://cloud.google.com/bigquery/docs/reference/v2/tables#resource
  const options = {
    view: `SELECT name
    FROM \`${projectId}.${sourceDatasetId}.${sourceTableId}\`
    LIMIT 10`,
  };

  // Create a new view in the dataset
  const [view] = await myDataset.createTable(myTableId, options);

  console.log(`View ${view.id} created.`);
}

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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'W'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'W%'"

# Make an API request to create the view.
view = client.create_table(view)
print(f"Created {view.table_type}: {str(view.reference)}")

Setelah membuat tampilan, Anda akan mengkuerinya seperti Anda mengkueri tabel.

Keamanan tampilan

Untuk mengontrol akses ke tampilan di BigQuery, lihat Tampilan yang diotorisasi.

Langkah selanjutnya