Pengantar kueri gabungan
Halaman ini memperkenalkan cara menggunakan kueri gabungan dan memberikan panduan untuk mengkueri data Spanner dan Cloud SQL dari BigQuery.
Kueri gabungan memungkinkan Anda mengirim pernyataan kueri ke database Spanner atau Cloud SQL dan mendapatkan kembali hasilnya sebagai tabel sementara. Kueri gabungan menggunakan BigQuery Connection API untuk membuat koneksi dengan Spanner atau Cloud SQL.
Dalam kueri Anda, gunakan fungsi EXTERNAL_QUERY
untuk mengirim pernyataan kueri ke database eksternal, menggunakan dialek SQL database tersebut.
Hasilnya dikonversi ke jenis data GoogleSQL.
Penyimpanan data yang didukung
Anda dapat menggunakan kueri gabungan dengan penyimpanan data berikut:
Alur kerja
- Identifikasi project Google Cloud yang menyertakan sumber data yang ingin Anda buat kuerinya.
- Pengguna
bigquery.admin
membuat resource koneksi di BigQuery. - Pengguna admin tersebut memberikan izin untuk menggunakan resource koneksi kepada pengguna B.
- Jika admin dan pengguna B adalah orang yang sama, izin tidak perlu diberikan.
- Pengguna B menulis kueri di BigQuery dengan fungsi SQL
EXTERNAL_QUERY
yang baru.
Region yang didukung
Kueri gabungan hanya didukung di region yang mendukung sumber data eksternal dan BigQuery. Untuk mengetahui daftar lokasi yang didukung, lihat bagian berikut:
- Konfigurasi regional dan multi-regional Spanner.
- Lokasi instance Cloud SQL.
- Lokasi set data BigQuery.
Anda dapat membuat koneksi dan menjalankan kueri gabungan di berbagai region sesuai dengan aturan berikut:
Satu region
Satu region BigQuery hanya dapat membuat kueri resource di region yang sama.
Misalnya, jika set data Anda di us-east4
, Anda dapat membuat kueri instance Cloud SQL atau database Spanner yang hanya berada di us-east4
. Lokasi pemrosesan kueri adalah satu region BigQuery.
Multi-region
Multi-region BigQuery dapat membuat kueri region sumber data apa pun di area geografis yang luas dan sama (Amerika Serikat, Uni Eropa). Lokasi multi-regional tidak tersedia untuk instance Cloud SQL karena hanya digunakan untuk pencadangan. Multi-region BigQuery juga dapat membuat kueri instance Spanner di multi-region yang sama.
Kueri yang berjalan di multi-region Amerika Serikat BigQuery dapat membuat kueri setiap region di area geografis Amerika Serikat, seperti
us-central1
,us-east4
, atauus-west2
.Kueri yang berjalan di multi-region Uni Eropa BigQuery dapat membuat kueri setiap wilayah di negara anggota Uni Eropa, seperti
europe-north1
ataueurope-west3
.Lokasi tempat kueri berjalan harus sama dengan lokasi resource koneksi. Misalnya, kueri yang dijalankan dari multi-region Amerika Serikat harus menggunakan koneksi yang berada di multi-region Amerika Serikat juga.
Performa kueri bervariasi berdasarkan kedekatan antara set data dan sumber data eksternal. Misalnya, kueri gabungan antara set data di multi-region Amerika Serikat dan instance Cloud SQL di us-central1
dapat dijalankan dengan cepat. Namun, jika Anda menjalankan kueri yang sama antara multi-region Amerika Serikat dan instance Cloud SQL di us-east4
, performanya mungkin lebih lambat.
Lokasi pemrosesan kueri adalah lokasi multi-region, baik US
atau EU
.
Pemetaan jenis data
Saat Anda menjalankan kueri gabungan, data dari sumber data eksternal akan dikonversi ke jenis GoogleSQL. Untuk mengetahui informasi selengkapnya, lihat Kueri gabungan Cloud SQL.
Kuota dan batas
- Kueri gabungan lintas region: jika lokasi pemrosesan kueri BigQuery dan lokasi sumber data eksternal berbeda, berarti ini adalah kueri lintas region. Anda dapat menjalankan hingga 1 TB dalam kueri lintas region per project per hari. Berikut contoh kueri lintas region.
- Instance Cloud SQL berada di
us-west1
, sedangkan koneksi BigQuery berbasis di multi-region Amerika Serikat. Lokasi pemrosesan kueri BigQuery adalahUS
.
- Instance Cloud SQL berada di
- Kuota: pengguna harus mengontrol kuota kueri di sumber data eksternal, seperti Cloud SQL. Tidak ada setelan kuota tambahan untuk kueri gabungan. Untuk mencapai isolasi workload, sebaiknya hanya buat kueri replika baca database.
- Byte maksimum yang diizinkan untuk ditagih: kolom ini tidak didukung untuk kueri gabungan saat ini. Penghitungan byte yang ditagih sebelum benar-benar menjalankan kueri gabungan tidak dapat dilakukan untuk saat ini.
- Jumlah koneksi: kueri gabungan dapat memiliki maksimal 10 koneksi unik.
- Kuota dan batasan Cloud SQL untuk MySQL dan PostgreSQL berlaku.
Batasan
Kueri gabungan tunduk pada batasan berikut:
Performa. Kueri gabungan kemungkinan tidak akan secepat membuat kueri penyimpanan BigQuery saja. BigQuery harus menunggu database sumber untuk menjalankan kueri eksternal dan memindahkan data untuk sementara dari sumber data eksternal ke BigQuery. Selain itu, database sumber mungkin tidak dioptimalkan untuk kueri analisis yang kompleks.
Performa kueri juga bervariasi berdasarkan kedekatan antara set data dan sumber data eksternal. Untuk mengetahui informasi selengkapnya, lihat Region yang didukung.
Kueri gabungan bersifat hanya baca. Kueri eksternal yang dijalankan dalam database sumber harus bersifat hanya baca. Oleh karena itu, pernyataan DML atau DDL tidak didukung.
Jenis data yang tidak didukung. Jika kueri eksternal Anda berisi jenis data yang tidak didukung di BigQuery, kueri tersebut akan langsung gagal. Anda dapat mentransmisikan jenis data yang tidak didukung ke jenis data lain yang didukung.
Project. Anda harus membuat resource koneksi dalam project yang sama dengan instance Cloud SQL.
Harga
Jika menggunakan model harga on-demand, Anda akan dikenai biaya untuk jumlah byte yang ditampilkan dari kueri eksternal saat menjalankan kueri gabungan dari BigQuery. Untuk mengetahui informasi selengkapnya, lihat Harga analisis on-demand.
Jika menggunakan edisi BigQuery, Anda akan dikenai biaya berdasarkan jumlah slot yang digunakan. Untuk mengetahui informasi selengkapnya, lihat Harga komputasi kapasitas.
Pushdown SQL
Kueri gabungan tunduk pada teknik pengoptimalan yang dikenal sebagai pushdown SQL.
Fungsi ini meningkatkan performa kueri dengan mendelegasikan operasi seperti memfilter ke sumber data eksternal, bukan melakukannya di BigQuery.
Mengurangi jumlah data yang ditransfer dari sumber data eksternal dapat mengurangi waktu eksekusi kueri dan mengurangi biaya. Pushdown SQL mencakup pruning kolom (klausa SELECT
) dan pushdown filter (klausa WHERE
).
Saat Anda menggunakan fungsi EXTERNAL_QUERY
, pushdown SQL bekerja dengan menulis ulang kueri yang asli.
Pada contoh berikut, fungsi EXTERNAL_QUERY
digunakan untuk berkomunikasi dengan database Cloud SQL:
SELECT COUNT(*)
FROM (
SELECT * FROM EXTERNAL_QUERY("<connection>", "select * from operations_table")
)
WHERE a = 'Y' AND b NOT IN ('COMPLETE','CANCELLED');
Tanpa pushdown SQL, kueri berikut akan dikirim ke Cloud SQL:
SELECT *
FROM operations_table
Ketika kueri ini dijalankan, seluruh tabel akan dikirim kembali ke BigQuery meskipun hanya beberapa baris dan kolom yang diperlukan.
Dengan pushdown SQL, kueri berikut dikirim ke Cloud SQL:
SELECT `a`, `b`
FROM (
SELECT * FROM operations_table) t
WHERE ((`a` = 'Y') AND (NOT `b` IN ('COMPLETE', 'CANCELLED'))
Saat kueri ini dijalankan, hanya dua kolom yang dijalankan dan baris yang cocok dengan predikat pemfilteran akan dikirim kembali ke BigQuery.
Anda dapat memeriksa bentang bawah yang diterapkan (jika ada) dalam paket kueri.
Batasan
- Pushdown SQL hanya diterapkan pada kueri gabungan dengan format
SELECT * FROM T
. - Hanya pruning kolom dan pushdown filter yang didukung. Pushdown komputasi, gabungan, dan agregasi tidak didukung.
- Untuk pushdown filter, literal harus berupa salah satu dari jenis berikut:
BOOL
,INT64
,FLOAT64
,STRING
,DATE
,DATETIME
,TIMESTAMP
. Literal yang berupa struct atau array tidak didukung. - Bentang bawah SQL hanya didukung untuk Cloud SQL dan Spanner. Bentang bawah SQL tidak didukung untuk SAP Datasphere.
Fungsi yang didukung oleh sumber data
Berikut ini adalah fungsi SQL yang didukung oleh sumber data. Tidak ada fungsi yang didukung untuk SAP Datasphere.
Cloud SQL untuk MySQL
- Operator logika:
AND
,OR
,NOT
. - Operator perbandingan:
=
,>
,>=
,<
,<=
,<>
,IN
,BETWEEN
,IS NULL
. - Operator aritmetika:
+
,-
,*
(hanya untukINT64
danFLOAT64
).
Fungsi yang didukung oleh Cloud SQL untuk PostgreSQL
- Operator logika:
AND
,OR
,NOT
. - Operator perbandingan:
=
,>
,>=
,<
,<=
,<>
,IN
,BETWEEN
,IS NULL
. - Operator aritmetika:
+
,-
,*
,/
(hanya untuk jenisINT64
,FLOAT64
, danDATE
, kecuali untuk penguranganDATE
).
Spanner - Dialek PostgreSQL
- Operator logika:
AND
,OR
,NOT
. - Operator perbandingan:
=
,>
,>=
,<
,<=
,<>
,IN
,BETWEEN
,IS NULL
. - Operator aritmetika:
+
,-
,*
,/
(hanya untukINT64
,FLOAT64
,NUMERIC
).
Spanner - Dialek GoogleSQL
Dialek GoogleSQL mendukung fungsi yang sama dengan dialek PostgreSQL dan juga:
- Operator aritmetika yang aman:
SAFE_ADD
,SAFE_SUBTRACT
,SAFE_MULTIPLY
,SAFE_DIVIDE
(hanya untukINT64
,FLOAT64
,NUMERIC
).
Langkah selanjutnya
- Pelajari cara melakukan kueri data SAP Datasphere
- Pelajari cara membuat kueri data Spanner.
- Pelajari cara membuat kueri data Cloud SQL.