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
Buka halaman BigQuery di Konsol Google Cloud.
Di panel navigasi, di bagian Explorer, luaskan project Anda dan pilih set data.
Di panel detail, luaskan Sharing, lalu klik Authorize Routines.
Di halaman Rutinitas yang diotorisasi, di bagian Memberi otorisasi kepada rutinitas, pilih Project, Dataset, dan Routine untuk rutinitas yang ingin Anda beri otorisasi.
Klik Tambahkan otorisasi.
bq
Gunakan perintah
bq show
untuk mendapatkan representasi JSON dari set data yang Anda ingin rutinitas akses. Output dari perintah ini adalah representasi JSON dari resourceDataset
. 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.
Edit file untuk menambahkan objek JSON berikut ke array
access
di resourceDataset
:{ "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.
Gunakan perintah
bq update
untuk memperbarui set data.bq update --source dataset.json TARGET_DATASET
API
Panggil metode
datasets.get
untuk mengambil set data yang Anda ingin rutinitas akses. Isi respons berisi representasi resourceDataset
.Tambahkan objek JSON berikut ke array
access
di resourceDataset
:{ "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.
Panggil metode
dataset.update
dengan representasiDataset
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.
Buat dua set data bernama
private_dataset
danpublic_dataset
. Untuk mengetahui informasi selengkapnya tentang cara membuat set data, lihat Membuat set data.Jalankan pernyataan berikut untuk membuat tabel bernama
private_table
diprivate_dataset
:CREATE OR REPLACE TABLE private_dataset.private_table AS SELECT key FROM UNNEST(['key1', 'key1','key2','key3']) key;
Jalankan pernyataan berikut untuk membuat UDF bernama
count_key
dipublic_dataset
. UDF mencakup pernyataanSELECT
padaprivate_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));
Berikan peran
bigquery.dataViewer
kepada pengguna di set datapublic_dataset
. Peran ini mencakup izinbigquery.routines.get
, yang memungkinkan pengguna memanggil rutinitas. Untuk mengetahui informasi tentang cara menetapkan kontrol akses ke set data, lihat Mengontrol akses ke set data.Pada tahap ini, pengguna memiliki izin untuk memanggil rutinitas
count_key
, tetapi tidak dapat mengakses tabel diprivate_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.
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
.Edit
dataset.json
untuk menambahkan objek JSON berikut ke arrayaccess
:{ "routine": { "datasetId": "public_dataset", "projectId": "PROJECT_ID", "routineId": "count_key" } }
Ganti PROJECT_ID dengan ID project untuk
public_dataset
.Dengan menggunakan alat command line bq, jalankan perintah
update
sebagai berikut:bq update --source dataset.json private_dataset
Untuk memverifikasi bahwa UDF memiliki akses ke
private_dataset
, pengguna dapat menjalankan kueri berikut:SELECT public_dataset.count_key('key1');