Pengantar rutinitas
Dokumen ini menjelaskan cara memilih rutinitas, yang merupakan jenis resource yang Anda gunakan untuk membuat fungsi atau prosedur tersimpan di BigQuery.
Rutinitas yang didukung
BigQuery mendukung rutinitas berikut:
- Fungsi yang ditentukan pengguna (UDF)
- Fungsi agregat yang ditentukan pengguna (UDAF)
- Fungsi tabel
- Fungsi jarak jauh
- Prosedur tersimpan
Cara memilih rutinitas
Bagian ini menjelaskan faktor-faktor yang perlu dipertimbangkan saat memilih rutinitas dan membandingkan rutinitas berdasarkan tugas.
Faktor yang perlu dipertimbangkan
Untuk memilih rutinitas, pertimbangkan faktor-faktor berikut, yang dijelaskan di bagian untuk setiap jenis rutinitas:
- Jenis tugas yang akan diterapkan.
- Bahasa pemrograman yang akan digunakan.
- Jenis persistensi yang akan diterapkan untuk rutinitas: sementara atau persisten.
- Jenis penggunaan kembali yang diperlukan untuk rutinitas: di satu atau beberapa kueri.
- Pertimbangan performa.
- Mengakses layanan eksternal.
- Membagikan rutinitas kepada pengguna.
Membandingkan rutinitas menurut tugas
Tabel berikut menunjukkan jenis tugas yang dapat Anda lakukan untuk setiap jenis rutinitas:
Tugas |
Jenis resource rutin |
---|---|
Membuat fungsi yang melakukan tugas umum di BigQuery. |
UDF SQL atau JavaScript UDAF SQL atau JavaScript |
Buat fungsi yang melakukan tugas umum di BigQuery dan berkomunikasi dengan sistem Google Cloud eksternal menggunakan koneksi resource Cloud. |
UDF Python |
Buat fungsi yang menggabungkan data. |
UDAF |
Buat tabel menggunakan parameter. |
Fungsi tabel |
Membuat fungsi yang menggunakan bahasa, library, atau layanan yang tidak didukung di BigQuery. Fungsi ini terintegrasi langsung dengan fungsi Cloud Run dan Cloud Run. |
Fungsi jarak jauh |
Jalankan beberapa pernyataan dalam satu kueri sebagai kueri multi-pernyataan menggunakan bahasa procedural. Anda dapat menggunakan kueri multi-pernyataan untuk melakukan hal berikut:
Membuat dan memanggil prosedur tersimpan untuk Apache Spark di BigQuery. |
Prosedur tersimpan |
Fungsi yang ditentukan pengguna (UDF)
UDF memungkinkan Anda membuat fungsi menggunakan ekspresi SQL, kode JavaScript, atau kode Python. UDF menerima kolom input, melakukan tindakan pada input, dan menampilkan hasil tindakan tersebut sebagai nilai.
Anda dapat menentukan UDF sebagai persistent atau temporary. Anda dapat menggunakan kembali persistent UDF di beberapa kueri, sedangkan temporary UDF hanya ada dalam cakupan satu kueri.
Anda dapat membuat UDF untuk digunakan dengan rutinitas penyamaran kustom, yang menampilkan nilai kolom setelah menerapkan UDF ke kolom. Setelah Anda membuat rutinitas penyamaran kustom, rutinitas tersebut akan tersedia sebagai aturan penyamaran di bagian Membuat kebijakan data.
Untuk informasi selengkapnya tentang UDF, lihat referensi berikut:
- Fungsi yang ditentukan pengguna
- Fungsi yang ditentukan pengguna (UDF) di SQL lama
- Membandingkan UDF dan UDAF
UDF berbasis bahasa
- UDF berbasis SQL mendukung parameter UDF bertemplate, yang dapat cocok dengan lebih dari satu jenis argumen saat UDF dipanggil. UDF SQL juga dapat menampilkan nilai subkueri skalar.
- UDF berbasis JavaScript memungkinkan Anda memanggil kode yang ditulis dalam JavaScript dari kueri SQL.
- UDF JavaScript biasanya menggunakan lebih banyak resource slot dibandingkan dengan kueri SQL standar sehingga menurunkan performa tugas.
- Jika fungsi dapat dinyatakan dalam SQL, menjalankan kode sebagai tugas kueri SQL standar sering kali akan lebih optimal.
- UDF berbasis Python dibuat dan dijalankan di resource terkelola BigQuery. UDF ini memungkinkan Anda menerapkan fungsi di Python dan menggunakannya dalam kueri SQL.
- Anda dapat mengakses layanan Google Cloud atau layanan eksternal dari UDF Python menggunakan akun layanan Koneksi resource Cloud.
- Anda juga dapat menginstal library pihak ketiga dari Python Package Index (PyPI).
UDF kontribusi komunitas
Selain UDF yang Anda buat, UDF yang dikontribusikan komunitas tersedia di set data publik bigquery-public-data.persistent_udfs
dan repositori GitHub bigquery-utils
open source.
Fungsi agregat yang ditentukan pengguna (UDAF)
UDAF memungkinkan Anda membuat fungsi agregat menggunakan ekspresi yang berisi kode SQL atau JavaScript. UDAF menerima kolom input, melakukan penghitungan pada sekelompok baris sekaligus, lalu menampilkan hasil penghitungan tersebut sebagai nilai tunggal.
UDAF tidak dapat mengubah data, berkomunikasi dengan sistem eksternal, atau mengirim log ke Google Cloud Observability atau aplikasi serupa.
Untuk informasi selengkapnya, lihat referensi berikut:
UDAF SQL
UDAF SQL biasanya menggabungkan parameter fungsi di semua baris dalam
grup.
Namun, Anda dapat menentukan parameter fungsi sebagai non-agregat menggunakan
kata kunci NOT AGGREGATE
. Parameter fungsi non-agregat adalah parameter fungsi skalar
dengan nilai konstan untuk semua baris dalam grup. UDAF SQL dapat berisi parameter agregat dan non-agregat.
UDAF JavaScript
UDAF JavaScript dapat menyertakan library JavaScript. Isi fungsi JavaScript dapat menyertakan kode JavaScript kustom seperti variabel global JavaScript dan fungsi kustom.
Karena fungsi berbasis JavaScript biasanya menggunakan lebih banyak resource, membaca tips performa ini dapat membantu.
UDAF JavaScript memiliki beberapa batasan. Hanya encoding jenis tertentu yang diizinkan, dan ada persyaratan untuk serialisasi dan deserialisasi.
Membandingkan UDF dan UDAF
Memilih UDF, bukan UDAF, bergantung pada tugas spesifik yang Anda coba lakukan.
- Untuk melakukan penghitungan atau transformasi pada setiap nilai data, gunakan UDF.
- Untuk melakukan hal yang sama pada grup nilai data, gunakan UDAF.
Misalnya, jika Anda ingin menghitung rata-rata kolom angka, gunakan UDAF. Jika Anda ingin mengonversi kolom string menjadi huruf besar, gunakan UDF.
UDF dan UDAF memiliki kesamaan berikut:
- UDF dan UDAF tidak dapat mengubah data, berkomunikasi dengan sistem eksternal, atau mengirim log ke Google Cloud Observability atau aplikasi serupa. Pengecualian adalah UDF Python, yang dapat mengakses layanan eksternal menggunakan koneksi resource Cloud. Namun, UDF Python tidak mendukung kontrol layanan VPC atau kunci enkripsi yang dikelola pelanggan (CMEK).
- UDAF memiliki batasan yang sama dengan UDF, ditambah beberapa lagi.
- UDF dan UDAF memiliki kuota dan batas yang sama.
UDF dan UDAF memiliki perbedaan berikut:
Atribut |
UDF |
UDAF |
---|---|---|
Definisi |
Fungsi yang ditentukan pengguna (UDF) menerima kolom input, melakukan tindakan pada input, dan menampilkan hasil tindakan tersebut sebagai nilai. |
Fungsi agregat yang ditentukan pengguna (UDAF) menerima kolom input, melakukan penghitungan pada sekelompok baris sekaligus, lalu menampilkan hasil penghitungan tersebut sebagai satu nilai. |
Bahasa yang didukung |
SQL, JavaScript, dan Python |
SQL dan JavaScript |
Persistensi |
|
|
Argumen dan jenis data |
UDF menerima nilai parameter yang sesuai dengan GoogleSQL untuk jenis data BigQuery. Beberapa jenis SQL memiliki pemetaan langsung ke jenis JavaScript, tetapi yang lainnya tidak. Lihat jenis yang didukung untuk JavaScript. Untuk UDF SQL, nilai parameter dapat berupa Hanya UDF JavaScript yang memiliki penentu determinisme yang memberikan petunjuk kepada BigQuery tentang apakah hasil kueri dapat di-cache. |
UDAF SQL dan JavaScript menerima nilai parameter yang sesuai dengan jenis data GoogleSQL untuk BigQuery. Parameter fungsi dapat berupa agregat atau non-agregat. |
Penggunaan |
UDF biasanya digunakan untuk pembersihan, transformasi, dan validasi data. |
UDAF biasanya digunakan untuk menghitung statistik ringkasan, seperti rata-rata, jumlah, dan jumlah. |
Fungsi tabel
Fungsi tabel, yang juga disebut fungsi bernilai tabel (TVF), adalah UDF yang menampilkan tabel. Anda dapat menggunakan fungsi tabel di mana pun Anda dapat menggunakan tabel. Fungsi tabel berperilaku mirip dengan tampilan, tetapi fungsi tabel dapat mengambil parameter.
Anda dapat melakukan hal berikut dengan fungsi tabel:
- Teruskan beberapa parameter.
- Panggil fungsi tabel dalam konteks apa pun jika tabel tersebut valid.
- Gabungkan output dari fungsi tabel dengan tabel lain.
- Gunakan fungsi tabel dalam subkueri.
Untuk mengetahui informasi selengkapnya tentang fungsi tabel, lihat Fungsi tabel, Batasan, dan Kuota dan batas.
Fungsi jarak jauh
Fungsi jarak jauh memungkinkan Anda menerapkan fungsi dalam bahasa selain SQL dan JavaScript, atau memungkinkan Anda menggunakan library atau layanan yang tidak didukung di UDF BigQuery.
Fungsi jarak jauh BigQuery mengintegrasikan fungsi Google SQL Anda dengan fungsi Cloud Run dan Cloud Run menggunakan bahasa yang didukung, lalu memanggil fungsi tersebut dari kueri Google SQL.
Tugas berikut adalah contoh hal yang dapat Anda lakukan dengan fungsi jarak jauh:
Membuat fungsi jarak jauh memerlukan langkah-langkah berikut:
- Buat endpoint HTTP di fungsi Cloud Run atau Cloud Run.
- Buat fungsi jarak jauh di BigQuery menggunakan jenis koneksi
CLOUD_RESOURCE
. - Gunakan fungsi jarak jauh dalam kueri sama seperti UDF lainnya untuk BigQuery.
Untuk mengetahui informasi selengkapnya tentang fungsi jarak jauh, lihat Fungsi jarak jauh, Batasan, dan Kuota dan batas.
Prosedur tersimpan
Prosedur tersimpan SQL adalah kumpulan pernyataan yang dapat dipanggil dari kueri lain atau prosedur tersimpan lainnya. Anda memberi nama dan menyimpan prosedur dalam set data BigQuery.
Prosedur tersimpan mendukung pernyataan bahasa prosedur, yang memungkinkan Anda melakukan hal-hal seperti menentukan variabel dan menerapkan alur kontrol. Anda dapat mempelajari pernyataan bahasa prosedur lebih lanjut dalam Referensi bahasa prosedur.
Prosedur tersimpan dapat melakukan hal berikut:
- Mengambil argumen input dan menampilkan nilai sebagai output.
- Mengakses atau mengubah data di beberapa set data oleh beberapa pengguna.
- Berisi kueri multi-pernyataan.
Beberapa prosedur tersimpan telah diintegrasikan ke dalam BigQuery dan tidak perlu dibuat. Ini disebut prosedur sistem, dan Anda dapat mempelajarinya lebih lanjut dalam Referensi prosedur sistem.
Prosedur tersimpan untuk Spark di BigQuery juga didukung. Prosedur ini memiliki kuota dan batas.
Untuk mempelajari prosedur tersimpan lebih lanjut, lihat prosedur tersimpan SQL.