Rutinitas yang diotorisasi

Rutinitas yang diotorisasi memungkinkan Anda membagikan hasil kueri kepada pengguna atau grup tertentu tanpa memberi mereka akses ke tabel dasar yang membuat hasil tersebut. Contohnya, rutinitas yang diotorisasi dapat melakukan komputasi agregasi atas data atau mencari nilai tabel dan menggunakan nilai tersebut dalam komputasi.

Secara default, jika pengguna memanggil rutinitas, pengguna harus memiliki akses untuk membaca data dalam tabel. Sebagai alternatif, Anda dapat memberi otorisasi kepada rutinitas untuk mengakses set data yang berisi tabel yang direferensikan. Rutinitas yang diotorisasi dapat membuat kueri tabel dalam set data, meskipun pengguna yang memanggil rutinitas tidak dapat membuat kueri tabel tersebut secara langsung.

Jenis rutinitas berikut ini bisa diotorisasi:

Memberi otorisasi kepada rutinitas

Untuk memberi otorisasi kepada rutinitas, gunakan konsol Google Cloud, alat command line bq, atau REST API:

Konsol

  1. Buka halaman BigQuery di Konsol Google Cloud.

    Buka BigQuery

  2. Di panel navigasi, di bagian Explorer, luaskan project Anda dan pilih set data.

  3. Di panel detail, luaskan Sharing, lalu klik Authorize Routines.

  4. Di halaman Rutinitas yang diotorisasi, di bagian Memberi otorisasi kepada rutinitas, pilih Project, Dataset, dan Routine untuk rutinitas yang ingin Anda beri otorisasi.

  5. Klik Tambahkan otorisasi.

bq

  1. Gunakan perintah bq show untuk mendapatkan representasi JSON dari set data yang Anda ingin rutinitas akses. Output dari perintah ini adalah representasi JSON dari resource Dataset. Simpan hasilnya ke file lokal.

    bq show --format=prettyjson TARGET_DATASET > dataset.json

    Ganti TARGET_DATASET dengan nama set data yang dapat diakses oleh rutinitas.

  2. Edit file untuk menambahkan objek JSON berikut ke array access di resource Dataset:

    {
     "routine": {
       "datasetId": "DATASET_NAME",
       "projectId": "PROJECT_ID",
       "routineId": "ROUTINE_NAME"
     }
    }

    Dengan keterangan:

    • DATASET_NAME adalah nama set data yang berisi rutinitas.
    • PROJECT_ID adalah ID project untuk project yang berisi rutinitas.
    • ROUTINE_NAME adalah nama rutinitas.
  3. Gunakan perintah bq update untuk memperbarui set data.

    bq update --source dataset.json TARGET_DATASET

API

  1. Panggil metode datasets.get untuk mengambil set data yang Anda ingin rutinitas akses. Isi respons berisi representasi resource Dataset.

  2. Tambahkan objek JSON berikut ke array access di resource Dataset:

    {
     "routine": {
       "datasetId": "DATASET_NAME",
       "projectId": "PROJECT_ID",
       "routineId": "ROUTINE_NAME"
     }
    }

    Dengan keterangan:

    • DATASET_NAME adalah nama set data yang berisi UDF.
    • PROJECT_ID adalah ID project untuk project yang berisi UDF.
    • ROUTINE_NAME adalah nama rutinitas.
  3. Panggil metode dataset.update dengan representasi Dataset yang diubah.

Kuota dan batas

Rutinitas yang diotorisasi tunduk kepada batasan set data. Untuk mengetahui informasi selengkapnya, lihat Batas set data.

Contoh rutinitas yang diotorisasi

Berikut adalah contoh end-to-end dalam membuat dan menggunakan UDF yang diotorisasi.

  1. Buat dua set data bernama private_dataset dan public_dataset. Untuk mengetahui informasi selengkapnya tentang cara membuat set data, lihat Membuat set data.

  2. Jalankan pernyataan berikut untuk membuat tabel bernama private_table di private_dataset:

    CREATE OR REPLACE TABLE private_dataset.private_table
    AS SELECT key FROM UNNEST(['key1', 'key1','key2','key3']) key;
    
  3. Jalankan pernyataan berikut untuk membuat UDF bernama count_key di public_dataset. UDF mencakup pernyataan SELECT pada private_table.

    CREATE OR REPLACE FUNCTION public_dataset.count_key(input_key STRING)
    RETURNS INT64
    AS
    ((SELECT COUNT(1) FROM private_dataset.private_table t WHERE t.key = input_key));
    
  4. Berikan peran bigquery.dataViewer kepada pengguna di set data public_dataset. Peran ini mencakup izin bigquery.routines.get, yang memungkinkan pengguna memanggil rutinitas. Untuk mengetahui informasi tentang cara menetapkan kontrol akses ke set data, lihat Mengontrol akses ke set data.

  5. Pada tahap ini, pengguna memiliki izin untuk memanggil rutinitas count_key, tetapi tidak dapat mengakses tabel di private_dataset. Jika pengguna mencoba memanggil rutinitas, mereka akan mendapatkan pesan error yang serupa dengan yang berikut ini:

    Access Denied: Table myproject:private_dataset.private_table: User does
    not have permission to query table myproject:private_dataset.private_table.
    
  6. Dengan menggunakan alat command line bq, jalankan perintah show sebagai berikut:

    bq show --format=prettyjson private_dataset > dataset.json

    Outputnya disimpan ke file lokal bernama dataset.json.

  7. Edit dataset.json untuk menambahkan objek JSON berikut ke array access:

    {
     "routine": {
       "datasetId": "public_dataset",
       "projectId": "PROJECT_ID",
       "routineId": "count_key"
     }
    }

    Ganti PROJECT_ID dengan ID project untuk public_dataset.

  8. Dengan menggunakan alat command line bq, jalankan perintah update sebagai berikut:

    bq update --source dataset.json private_dataset
  9. Untuk memverifikasi bahwa UDF memiliki akses ke private_dataset, pengguna dapat menjalankan kueri berikut:

    SELECT public_dataset.count_key('key1');