Bekerja dengan kueri multi-pernyataan
Dokumen ini menjelaskan cara menggunakan kueri multi-pernyataan di BigQuery, seperti cara menulis kueri multi-pernyataan, menggunakan tabel sementara dalam kueri multi-pernyataan, variabel referensi dalam kueri multi-pernyataan, dan men-debug kueri multi-pernyataan.
Kueri multi-pernyataan adalah kumpulan pernyataan SQL yang dapat Anda jalankan dalam satu permintaan. Dengan kueri multi-pernyataan, Anda dapat menjalankan beberapa pernyataan secara berurutan, dengan status bersama. Kueri multi-pernyataan dapat memiliki efek samping seperti menambah atau mengubah data tabel.
Kueri multi-pernyataan sering digunakan dalam prosedur tersimpan dan mendukung pernyataan bahasa prosedur, yang memungkinkan melakukan hal-hal seperti penentuan variabel dan penerapan kontrol alur.
Menulis, menjalankan, dan menyimpan kueri multi-pernyataan
Kueri multipernyataan terdiri dari satu atau beberapa pernyataan SQL yang dipisahkan dengan titik koma. Setiap pernyataan SQL yang valid dapat digunakan dalam kueri multi-pernyataan. Kueri multipernyataan juga dapat menyertakan pernyataan bahasa prosedur, yang memungkinkan Anda menggunakan variabel atau menerapkan alur kontrol dengan pernyataan SQL.
Menulis kueri multi-pernyataan
Anda dapat menulis kueri multi-pernyataan di BigQuery. Kueri pernyataan multi-kueri berikut
mendeklarasikan variabel dan menggunakan
variabel di dalam pernyataan
IF
:
DECLARE day INT64;
SET day = (SELECT EXTRACT(DAYOFWEEK from CURRENT_DATE));
if day = 1 or day = 7 THEN
SELECT 'Weekend';
ELSE
SELECT 'Weekday';
END IF
BigQuery menafsirkan setiap permintaan dengan beberapa pernyataan sebagai
kueri multi-pernyataan, kecuali jika pernyataan tersebut seluruhnya terdiri atas
pernyataan CREATE TEMP FUNCTION
diikuti dengan satu pernyataan SELECT
.
Misalnya, hal berikut tidak dianggap sebagai kueri multi-pernyataan:
CREATE TEMP FUNCTION Add(x INT64, y INT64) AS (x + y);
SELECT Add(3, 4);
Menjalankan kueri multi-pernyataan
Anda dapat menjalankan kueri multi-pernyataan dengan cara yang sama seperti kueri lainnya, misalnya, di Konsol Google Cloud atau menggunakan alat command line bq.
Uji coba kueri multi-pernyataan
Untuk memperkirakan jumlah byte yang dibaca oleh kueri multi-pernyataan, pertimbangkan
uji coba. Uji coba kueri
multi-pernyataan paling akurat untuk kueri yang hanya berisi
pernyataan SELECT
.
Uji coba memiliki penanganan khusus untuk jenis kueri dan pernyataan berikut:
- Pernyataan
CALL
: uji coba memvalidasi bahwa prosedur yang dipanggil ada dan memiliki tanda tangan yang cocok dengan argumen yang diberikan. Konten prosedur yang dipanggil dan semua pernyataan setelah pernyataanCALL
tidak divalidasi. - Pernyataan DDL:
uji coba memvalidasi pernyataan DDL pertama, lalu
berhenti. Semua pernyataan berikutnya akan dilewati. Uji coba pernyataan
CREATE TEMP TABLE
tidak didukung. - Pernyataan DML: uji coba memvalidasi pernyataan DML, lalu terus memvalidasi pernyataan berikutnya. Dalam hal ini, estimasi byte didasarkan pada ukuran tabel asli, dan tidak memperhitungkan hasil pernyataan DML.
- Pernyataan
EXECUTE IMMEDIATE
: uji coba memvalidasi ekspresi kueri, tetapi tidak mengevaluasi kueri dinamis itu sendiri. Semua pernyataan setelah pernyataanEXECUTE IMMEDIATE
dilewati. - Kueri yang menggunakan variabel dalam filter partisi: uji coba memvalidasi kueri awal dan pernyataan berikutnya. Namun, uji coba tidak dapat menghitung nilai runtime variabel dalam filter partisi. Hal ini memengaruhi estimasi byte yang dibaca.
- Kueri yang menggunakan variabel dalam ekspresi stempel waktu
klausa
FOR SYSTEM TIME AS OF
: uji coba menggunakan konten tabel saat ini dan mengabaikan klausaFOR SYSTEM TIME AS OF
. Hal ini memengaruhi estimasi byte yang dibaca jika ada perbedaan ukuran antara tabel saat ini dan iterasi tabel sebelumnya. - Pernyataan kontrol
FOR
,IF
, danWHILE
: uji coba langsung berhenti. Ekspresi kondisi, isi pernyataan kontrol, dan semua pernyataan berikutnya tidak divalidasi.
Uji coba beroperasi berdasarkan upaya terbaik, dan proses yang mendasarinya dapat berubah. Uji coba tunduk kepada ketentuan berikut:
- Kueri yang berhasil menyelesaikan uji coba mungkin tidak berhasil dijalankan. Misalnya, kueri mungkin gagal saat runtime karena alasan yang tidak terdeteksi oleh uji coba.
- Kueri yang berhasil dijalankan mungkin tidak berhasil menyelesaikan uji coba. Misalnya, kueri mungkin gagal karena alasan eksekusi.
- Uji coba yang berhasil dijalankan hari ini tidak dijamin selalu akan berjalan di masa mendatang. Misalnya, perubahan pada implementasi uji coba mungkin mendeteksi error dalam kueri yang sebelumnya tidak terdeteksi.
Menyimpan kueri multi-pernyataan
Untuk menyimpan kueri multi-pernyataan, lihat Menggunakan kueri tersimpan.
Menggunakan variabel dalam kueri multi-pernyataan
Kueri multipernyataan dapat berisi variabel buatan pengguna dan variabel sistem.
Anda dapat mendeklarasikan variabel buatan pengguna, menetapkan nilai pada variabel tersebut, dan mereferensikannya di seluruh kueri.
Anda dapat mereferensikan variabel sistem dalam kueri dan menetapkan nilai ke sebagian variabel tersebut, tetapi tidak seperti variabel buatan pengguna, Anda tidak mendeklarasikannya. Variabel sistem terdapat dalam BigQuery.
Mendeklarasikan variabel buatan pengguna
Anda harus mendeklarasikan variabel buatan pengguna di awal
kueri multipernyataan atau di awal
blok BEGIN
. Variabel yang dideklarasikan di awal kueri multi-pernyataan berada dalam cakupan
untuk seluruh kueri. Variabel yang dideklarasikan di dalam blok BEGIN
memiliki cakupan untuk
blok tersebut. Keduanya berada di luar cakupan setelah pernyataan END
yang sesuai. Ukuran
maksimum variabel adalah 1 MB dan ukuran maksimum semua variabel yang digunakan
dalam kueri multipernyataan adalah 10 MB.
Anda dapat mendeklarasikan variabel
dengan pernyataan prosedur DECLARE
seperti ini:
DECLARE x INT64;
BEGIN
DECLARE y INT64;
-- Here you can reference x and y
END;
-- Here you can reference x, but not y
Menetapkan variabel buatan pengguna
Setelah mendeklarasikan variabel buatan pengguna, Anda dapat menetapkan nilai pada variabel tersebut dengan
pernyataan prosedur SET
seperti ini:
DECLARE x INT64 DEFAULT 0;
SET x = 10;
Menetapkan variabel sistem
Anda tidak membuat variabel sistem, tetapi Anda dapat mengganti nilai default untuk beberapa variabel seperti ini:
SET @@dataset_project_id = 'MyProject';
Anda juga dapat menetapkan dan secara implisit menggunakan variabel sistem dalam kueri multi-pernyataan. Misalnya, dalam kueri berikut, Anda harus menyertakan project setiap kali ingin membuat tabel baru:
BEGIN
CREATE TABLE MyProject.MyDataset.MyTempTableA (id STRING);
CREATE TABLE MyProject.MyDataset.MyTempTableB (id STRING);
END;
Jika tidak ingin menambahkan project ke jalur tabel beberapa kali, Anda dapat
menetapkan MyProject
project ID set data ke variabel sistem
@@dataset_project_id
di kueri multi-pernyataan. Penetapan ini akan menjadikan MyProject
project default untuk kueri lainnya.
SET @@dataset_project_id = 'MyProject';
BEGIN
CREATE TABLE MyDataset.MyTempTableA (id STRING);
CREATE TABLE MyDataset.MyTempTableB (id STRING);
END;
Demikian pula, Anda dapat menetapkan variabel sistem @@dataset_id
untuk menetapkan
set data default untuk kueri. Contoh:
SET @@dataset_project_id = 'MyProject';
SET @@dataset_id = 'MyDataset';
BEGIN
CREATE TABLE MyTempTableA (id STRING);
CREATE TABLE MyTempTableB (id STRING);
END;
Anda juga dapat secara eksplisit mereferensikan variabel sistem seperti
@@dataset_id
di banyak bagian kueri multi-pernyataan. Untuk mempelajari lebih lanjut, lihat
Mereferensi variabel sistem.
Mereferensi variabel buatan pengguna
Setelah mendeklarasikan dan menetapkan variabel buatan pengguna, Anda dapat mereferensikannya dalam kueri multi-pernyataan. Jika sebuah variabel dan kolom memiliki nama yang sama, kolom tersebut akan diprioritaskan.
Tindakan ini akan menampilkan column x
+ column x
:
DECLARE x INT64 DEFAULT 0;
SET x = 10;
WITH Numbers AS (SELECT 50 AS x)
SELECT (x+x) AS result FROM Numbers;
+--------+
| result |
+--------+
| 100 |
+--------+
Tindakan ini akan menampilkan column y
+ variable x
:
DECLARE x INT64 DEFAULT 0;
SET x = 10;
WITH Numbers AS (SELECT 50 AS y)
SELECT (y+x) AS result FROM Numbers;
+--------+
| result |
+--------+
| 60 |
+--------+
Mereferensi variabel sistem
Anda dapat mereferensikan variabel sistem dalam kueri multi-pernyataan.
Kueri berikut mengembalikan zona waktu default:
BEGIN
SELECT @@time_zone AS default_time_zone;
END;
+-------------------+
| default_time_zone |
+-------------------+
| UTC |
+-------------------+
Anda dapat menggunakan variabel sistem dengan kueri DDL dan DML.
Misalnya, berikut ini beberapa cara untuk menggunakan variabel sistem @@time_zone
saat membuat dan memperbarui tabel:
BEGIN
CREATE TEMP TABLE MyTempTable
AS SELECT @@time_zone AS default_time_zone;
END;
BEGIN
CREATE OR REPLACE TABLE MyDataset.MyTable(default_time_zone STRING)
OPTIONS (description = @@time_zone);
END;
BEGIN
UPDATE MyDataset.MyTable
SET default_time_zone = @@time_zone
WHERE TRUE;
END;
Ada beberapa tempat dengan variabel sistem yang tidak dapat digunakan dalam
kueri DDL dan DML. Misalnya, Anda tidak dapat menggunakan variabel sistem sebagai
nama project, set data, atau nama tabel. Tindakan ini akan menghasilkan error saat Anda mencoba
menyertakan variabel sistem @@dataset_id
dalam jalur tabel:
BEGIN
CREATE TEMP TABLE @@dataset_id.MyTempTable (id STRING);
END;
Menggunakan tabel sementara dalam kueri multi-pernyataan
Tabel sementara memungkinkan Anda menyimpan hasil menengah ke tabel. Tabel sementara dikelola oleh BigQuery, sehingga Anda tidak perlu menyimpan atau mengelolanya dalam set data. Anda akan dikenai biaya untuk penyimpanan tabel sementara.
Anda dapat membuat dan mereferensikan tabel sementara dalam kueri multi-pernyataan. Setelah selesai dengan tabel sementara, Anda dapat menghapusnya secara manual untuk meminimalkan biaya penyimpanan, atau menunggu BigQuery menghapusnya setelah 24 jam.
Membuat tabel sementara
Anda dapat membuat tabel sementara untuk kueri multi-pernyataan dengan
pernyataan CREATE TABLE
.
Contoh berikut membuat tabel sementara untuk menyimpan hasil kueri
dan menggunakan tabel sementara dalam subkueri:
-- Find the top 100 names from the year 2017.
CREATE TEMP TABLE top_names(name STRING)
AS
SELECT name
FROM `bigquery-public-data`.usa_names.usa_1910_current
WHERE year = 2017
ORDER BY number DESC LIMIT 100
;
-- Which names appear as words in Shakespeare's plays?
SELECT
name AS shakespeare_name
FROM top_names
WHERE name IN (
SELECT word
FROM `bigquery-public-data`.samples.shakespeare
);
Selain penggunaan TEMP
atau TEMPORARY
, sintaksis-nya identik dengan
sintaksis CREATE TABLE
.
Saat Anda membuat tabel sementara, jangan gunakan penentu project atau set data dalam nama tabel. Tabel secara otomatis dibuat dalam set data khusus.
Mereferensi tabel sementara
Anda dapat mereferensi ke tabel sementara berdasarkan nama untuk durasi
kueri multi-pernyataan saat ini. Referensi ini mencakup tabel sementara yang dibuat oleh prosedur
dalam kueri multi-pernyataan. Anda tidak dapat membagikan tabel sementara. Tabel sementara
berada di set data _script%
tersembunyi dengan nama yang dibuat secara acak.
Artikel Menampilkan daftar set data menjelaskan cara menampilkan daftar set data tersembunyi.
Menghapus tabel sementara
Anda dapat menghapus tabel sementara secara eksplisit sebelum kueri
multi-pernyataan selesai menggunakan pernyataan DROP TABLE
:
CREATE TEMP TABLE table1(x INT64); SELECT * FROM table1; -- Succeeds DROP TABLE table1; SELECT * FROM table1; -- Results in an error
Setelah kueri multi-pernyataan selesai, tabel sementara akan ada hingga 24 jam.
Melihat data tabel sementara
Setelah membuat tabel sementara, Anda dapat melihat struktur tabel dan data apa pun di dalamnya. Untuk melihat struktur dan data tabel, ikuti langkah-langkah berikut:
Di Konsol Google Cloud, buka halaman Explorer BigQuery.
Klik Histori kueri.
Pilih kueri yang membuat tabel sementara.
Di baris Tabel tujuan, klik Tabel sementara.
Kualifikasi tabel sementara dengan _SESSION
Saat tabel sementara digunakan bersama dengan set data default, nama tabel tanpa penentuan merujuk pada tabel sementara jika ada, atau tabel dalam set data default. Pengecualian diberikan untuk pernyataan CREATE TABLE
, saat tabel target
dianggap sebagai tabel sementara jika dan hanya jika kata kunci TEMP
atau TEMPORARY
tersedia.
Misalnya, pertimbangkan kueri multi-pernyataan berikut:
-- Create table t1 in the default dataset CREATE TABLE t1 (x INT64); -- Create temporary table t1. CREATE TEMP TABLE t1 (x INT64); -- This statement selects from the temporary table. SELECT * FROM t1; -- Drop the temporary table DROP TABLE t1; -- Now that the temporary table is dropped, this statement selects from the -- table in the default dataset. SELECT * FROM t1;
Anda dapat secara eksplisit menunjukkan bahwa Anda merujuk ke tabel sementara
dengan memenuhi penentuan nama tabel menggunakan _SESSION
:
-- Create a temp table CREATE TEMP TABLE t1 (x INT64); -- Create a temp table using the `_SESSION` qualifier CREATE TEMP TABLE _SESSION.t2 (x INT64); -- Select from a temporary table using the `_SESSION` qualifier SELECT * FROM _SESSION.t1;
Jika Anda menggunakan penentu _SESSION
untuk kueri tabel sementara yang tidak
ada, kueri multi-pernyataan akan menampilkan error yang menunjukkan bahwa tabel
tersebut tidak ada. Misalnya, jika tidak ada tabel sementara bernama t3
,
kueri multi-pernyataan akan menampilkan error meskipun tabel bernama t3
ada di
set data default.
Anda tidak dapat menggunakan _SESSION
untuk membuat tabel yang bukan sementara:
CREATE TABLE _SESSION.t4 (x INT64); -- Fails
Mengumpulkan informasi tentang tugas kueri multi-pernyataan
Tugas kueri multi-pernyataan berisi informasi tentang kueri multi-pernyataan yang telah dijalankan. Beberapa tugas umum yang dapat Anda lakukan dengan data tugas meliputi menampilkan pernyataan terakhir yang dijalankan dengan kueri multi-pernyataan atau menampilkan semua pernyataan yang dieksekusi dengan kueri multi-pernyataan.
Menampilkan pernyataan yang terakhir dijalankan
Metode jobs.getQueryResults
menampilkan hasil kueri untuk pernyataan terakhir yang akan dijalankan dalam
kueri multi-pernyataan. Jika tidak ada pernyataan yang dieksekusi, tidak ada hasil
yang ditampilkan.
Menampilkan semua pernyataan yang dijalankan
Untuk mendapatkan hasil dari semua pernyataan dalam
kueri multi-pernyataan, enumerasi tugas turunan
dan panggil jobs.getQueryResults
di setiap mereka.
Menghitung tugas turunan
Kueri multi-pernyataan dijalankan di BigQuery menggunakan
jobs.insert
, serupa dengan kueri lainnya, dengan kueri multi-pernyataan yang ditentukan sebagai
teks kueri. Saat kueri multi-pernyataan dijalankan, tugas tambahan, yang dikenal sebagai
tugas turunan, akan dibuat untuk setiap pernyataan dalam kueri multi-pernyataan. Anda
dapat menghitung tugas turunan dari kueri multi-pernyataan dengan memanggil
jobs.list
, yang meneruskan
ID tugas kueri multi-pernyataan sebagai parentJobId
parameter kueri.
Men-debug kueri multi-pernyataan
Berikut beberapa tips untuk men-debug kueri multi-pernyataan:
Gunakan pernyataan
ASSERT
untuk menyatakan bahwa kondisi Boolean benar.Gunakan
BEGIN...EXCEPTION...END
untuk menemukan error dan menampilkan pesan error serta pelacakan tumpukan.Gunakan
SELECT FORMAT("....")
untuk menampilkan hasil menengah.Saat menjalankan kueri multi-pernyataan di Google Cloud Console, Anda dapat melihatstack traceoutput setiap pernyataan dalam kueri multi-pernyataan. Perintah 'bq query` pada alat command line bq juga menampilkan hasil setiap langkah saat Anda menjalankan kueri multi-pernyataan.
Di Konsol Google Cloud, Anda dapat memilih satu pernyataan di dalam editor kueri dan menjalankannya.
Izin
Izin untuk mengakses tabel, model, atau resource lainnya diperiksa pada saat dijalankan. Jika sebuah pernyataan tidak dieksekusi, atau ekspresi tidak dievaluasi, BigQuery tidak akan memeriksa apakah pengguna yang menjalankan kueri multi-pernyataan memiliki akses ke resource apa pun yang direferensikan olehnya.
Dalam kueri multi-pernyataan, izin untuk setiap ekspresi atau pernyataan divalidasi secara terpisah. Contoh:
SELECT * FROM dataset_with_access.table1; SELECT * FROM dataset_without_access.table2;
Jika pengguna yang menjalankan kueri memiliki akses ke table1
tetapi tidak memiliki akses ke table2
, kueri pertama akan berhasil sementara
kueri kedua akan gagal. Tugas kueri multi-pernyataan itu sendiri
juga akan gagal.
Batasan keamanan
Dalam kueri multi-pernyataan, Anda dapat menggunakan SQL dinamis untuk membuat pernyataan SQL saat runtime. Cara ini memang praktis, tetapi juga bisa memberikan peluang baru untuk penyalahgunaan. Misalnya, menjalankan kueri berikut akan menimbulkan potensi ancaman keamanan injeksi SQL karena parameter tabel dapat difilter dengan tidak benar, memungkinkan akses, dan dijalankan pada tabel yang tidak diinginkan.
-- Risky query vulnerable to SQL injection attack.
EXECUTE IMMEDIATE CONCAT('SELECT * FROM SensitiveTable WHERE id = ', @id);
Untuk menghindari ekspos atau kebocoran data sensitif dalam tabel atau menjalankan
perintah seperti DROP TABLE
untuk menghapus data dalam tabel, pernyataan prosedur
dinamis BigQuery mendukung beberapa langkah keamanan untuk
mengurangi eksposur terhadap serangan injeksi SQL, termasuk:
- Pernyataan
EXECUTE IMMEDIATE
tidak mengizinkan kuerinya, yang diperluas dengan parameter dan variabel kueri, untuk menyematkan beberapa pernyataan SQL. - Perintah berikut dibatasi agar tidak dijalankan secara dinamis:
BEGIN
/END
danCALL
danCASE
danIF
danLOOP
danWHILE
, danEXECUTE IMMEDIATE
singkat ini.
Batasan kolom konfigurasi
Kolom kueri konfigurasi tugas berikut tidak dapat ditetapkan untuk kueri multi-pernyataan:
clustering
create_disposition
destination_table
destination_encryption_configuration
range_partitioning
schema_update_options
time_partitioning
user_defined_function_resources
write_disposition
Harga
Harga untuk kueri multi-pernyataan mencakup tagihan untuk kueri (saat menggunakan model penagihan on-demand) dan penyimpanan untuk tabel sementara. Saat Anda menggunakan reservations, penggunaan kueri akan tercakup dalam tagihan reservasi Anda.
Penghitungan ukuran kueri sesuai permintaan
Jika Anda menggunakan penagihan on-demand, BigQuery mengenakan biaya untuk kueri multi-pernyataan berdasarkan jumlah byte yang diproses selama operasi kueri multi-pernyataan.
Untuk mendapatkan perkiraan jumlah byte yang mungkin diproses oleh kueri multi-pernyataan, Anda dapat menjalankan uji coba.
Harga berikut berlaku untuk kueri multi-pernyataan ini:
DECLARE
: jumlah byte yang dipindai untuk tabel yang direferensikan dalam ekspresiDEFAULT
. PernyataanDECLARE
tanpa referensi tabel tidak akan dikenai biaya.SET
: jumlah byte yang dipindai untuk tabel yang dirujuk dalam ekspresi. PernyataanSET
tanpa referensi tabel tidak akan dikenai biaya.IF
: jumlah byte yang dipindai untuk tabel yang direferensikan dalam ekspresi kondisi. Ekspresi kondisiIF
tanpa referensi tabel tidak dikenai biaya. Setiap pernyataan dalam blokIF
yang tidak dieksekusi tidak akan dikenai biaya.WHILE
: jumlah byte yang dipindai untuk tabel yang direferensikan dalam ekspresi kondisi. PernyataanWHILE
tanpa referensi tabel dalam ekspresi kondisi tidak dikenai biaya. Setiap pernyataan dalam blokWHILE
yang tidak dieksekusi tidak akan dikenai biaya.CONTINUE
atauITERATE
: Tidak ada biaya terkait.BREAK
atauLEAVE
: Tidak ada biaya terkait.BEGIN
atauEND
: Tidak ada biaya terkait.
Jika kueri multi-pernyataan gagal, biaya pernyataan apa pun hingga kegagalan akan masih tetap berlaku. Pernyataan yang gagal tidak akan menimbulkan biaya apa pun.
Misalnya, kode contoh berikut berisi komentar sebelum setiap pernyataan yang menjelaskan biaya yang, jika ada, yang dikeluarkan oleh setiap pernyataan:
-- No cost, since no tables are referenced. DECLARE x DATE DEFAULT CURRENT_DATE(); -- Incurs the cost of scanning string_col from dataset.table. DECLARE y STRING DEFAULT (SELECT MAX(string_col) FROM dataset.table); -- Incurs the cost of copying the data from dataset.big_table. Once the -- table is created, you are not charged for storage while the rest of the -- multi-statement query runs. CREATE TEMP TABLE t AS SELECT * FROM dataset.big_table; -- Incurs the cost of scanning column1 from temporary table t. SELECT column1 FROM t; -- No cost, since y = 'foo' doesn't reference a table. IF y = 'foo' THEN -- Incurs the cost of scanning all columns from dataset.other_table, if -- y was equal to 'foo', or otherwise no cost since it is not executed. SELECT * FROM dataset.other_table; ELSE -- Incurs the cost of scanning all columns from dataset.different_table, if -- y was not equal to 'foo', or otherwise no cost since it is not executed. UPDATE dataset.different_table SET col = 10 WHERE true; END IF; -- Incurs the cost of scanning date_col from dataset.table for each -- iteration of the loop. WHILE x < (SELECT MIN(date_col) FROM dataset.table) DO -- No cost, since the expression does not reference any tables. SET x = DATE_ADD(x, INTERVAL 1 DAY); -- No cost, since the expression does not reference any tables. IF true THEN -- LEAVE has no associated cost. LEAVE; END IF; -- Never executed, since the IF branch is always taken, so does not incur -- a cost. SELECT * FROM dataset.big_table; END WHILE;
Untuk mengetahui informasi selengkapnya, lihat Penghitungan ukuran kueri.
Harga penyimpanan
Anda akan dikenai biaya untuk tabel sementara yang dibuat oleh kueri multi-pernyataan. Anda dapat menggunakan tampilan
TABLE_STORAGE
atau
TABLE_STORAGE_USAGE_TIMELINE
untuk melihat penyimpanan yang digunakan oleh tabel sementara ini. Tabel sementara
berada di set data _script%
tersembunyi dengan nama yang dibuat secara acak.
Kuota
Untuk mengetahui informasi tentang kuota kueri multi-pernyataan, lihat Kuota dan batas.
Melihat jumlah kueri multi-pernyataan
Anda dapat melihat jumlah kueri multi-pernyataan aktif menggunakan
tampilan INFORMATION_SCHEMA.JOBS_BY_PROJECT
.
Contoh berikut menggunakan tampilan INFORMATION_SCHEMA.JOBS_BY_PROJECT
untuk
menampilkan jumlah kueri multi-pernyataan dari hari sebelumnya:
SELECT
COUNT(*)
FROM
`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
creation_time BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AND CURRENT_TIMESTAMP()
AND job_type = "QUERY"
AND state = 'RUNNING'
AND statement_type = 'SCRIPT'
Untuk informasi selengkapnya tentang membuat kueri INFORMATION_SCHEMA.JOBS
untuk
kueri multi-pernyataan, lihat Tugas kueri multi-pernyataan.