Kueri gabungan Spanner
Sebagai analis data, Anda dapat membuat kueri data di Spanner dari BigQuery menggunakan kueri gabungan.
Penggabungan BigQuery Spanner memungkinkan BigQuery membuat kueri data yang ada di Spanner secara real-time, tanpa menyalin atau memindahkan data.
Anda dapat membuat kueri data Spanner dengan dua cara:
- Buat set data eksternal Spanner.
- Gunakan fungsi
EXTERNAL_QUERY
.
Menggunakan set data eksternal
Cara termudah untuk membuat kueri tabel Spanner adalah dengan membuat set data eksternal. Setelah membuat set data eksternal, tabel dari database Spanner yang sesuai akan terlihat di BigQuery dan Anda dapat menggunakannya dalam kueri, misalnya dalam join, union, atau subkueri. Namun, tidak ada data yang dipindahkan dari Spanner ke penyimpanan BigQuery.
Anda tidak perlu membuat koneksi untuk membuat kueri data Spanner jika membuat set data eksternal.
Menggunakan fungsi EXTERNAL_QUERY
Seperti untuk database gabungan lainnya, Anda juga dapat membuat kueri data
Spanner dengan fungsi
EXTERNAL_QUERY
. Hal ini mungkin berguna jika Anda ingin membuat kueri database Spanner
yang menggunakan dialek PostgreSQL atau ingin memiliki lebih banyak kontrol atas
parameter koneksi.
Sebelum memulai
- Pastikan administrator BigQuery telah membuat koneksi Spanner dan membagikannya kepada Anda. Lihat Memilih koneksi yang tepat.
- Untuk mendapatkan izin yang Anda perlukan untuk membuat kueri instance
Spanner, minta administrator untuk memberi Anda peran
BigQuery Connection User (
roles/bigquery.connectionUser
) Identity and Access Management (IAM). Anda juga harus meminta administrator untuk memberi Anda salah satu hal berikut:- Jika Anda adalah pengguna kontrol akses terperinci, Anda memerlukan akses ke
peran database yang memiliki hak istimewa
SELECT
di semua objek skema Spanner dalam kueri Anda. - Jika Anda bukan pengguna kontrol akses terperinci, Anda memerlukan peran IAM
Cloud Spanner
Database Reader (
roles/spanner.databaseReader
).
Untuk mengetahui informasi tentang cara memberikan peran IAM, lihat Mengelola akses ke project, folder, dan organisasi. Untuk mengetahui informasi tentang kontrol akses terperinci, lihat Tentang kontrol akses terperinci.
- Jika Anda adalah pengguna kontrol akses terperinci, Anda memerlukan akses ke
peran database yang memiliki hak istimewa
Memilih koneksi yang tepat
Jika Anda adalah pengguna kontrol akses terperinci Spanner, saat menjalankan
kueri gabungan dengan fungsi EXTERNAL_QUERY
, Anda harus menggunakan
koneksi Spanner yang menentukan peran database. Kemudian, semua
kueri yang Anda jalankan dengan koneksi ini akan menggunakan peran database tersebut.
Jika Anda menggunakan koneksi yang tidak menentukan peran database, Anda harus memiliki peran IAM yang ditunjukkan di bagian Sebelum memulai.
Data kueri
Untuk mengirim kueri gabungan ke Spanner dari kueri GoogleSQL, gunakan fungsi EXTERNAL_QUERY
.
Merumuskan kueri Spanner di GoogleSQL atau PostgreSQL, bergantung pada dialek database yang ditentukan.
Contoh berikut membuat kueri gabungan ke database Spanner
bernama orders
dan menggabungkan hasilnya dengan tabel BigQuery
bernama mydataset.customers
.
SELECT c.customer_id, c.name, rq.first_order_date FROM mydataset.customers AS c LEFT OUTER JOIN EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id GROUP BY c.customer_id, c.name, rq.first_order_date;
Spanner Data Boost
Data Boost adalah fitur serverless yang terkelola sepenuhnya dan menyediakan resource komputasi independen untuk workload Spanner yang didukung. Data Boost memungkinkan Anda menjalankan kueri analisis dan ekspor data dengan dampak yang hampir tidak ada ke workload yang ada di instance Spanner yang disediakan. Data Boost memungkinkan Anda menjalankan kueri gabungan dengan kapasitas komputasi independen yang terpisah dari instance yang disediakan agar tidak berdampak pada workload yang ada di Spanner. Data Boost paling berdampak saat Anda menjalankan kueri ad hoc yang kompleks, atau saat ingin memproses data dalam jumlah besar tanpa berdampak pada workload Spanner yang ada. Menjalankan kueri gabungan dengan Data Boost dapat menyebabkan konsumsi CPU yang jauh lebih rendah, dan dalam beberapa kasus, latensi kueri yang lebih rendah.
Sebelum memulai
Untuk mendapatkan izin yang diperlukan guna mengaktifkan akses ke Data Boost,
minta administrator untuk memberi Anda
peran IAM Cloud Spanner Database Admin (roles/spanner.databaseAdmin
) di database Spanner.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran bawaan ini berisi izin spanner.databases.useDataBoost
, yang diperlukan untuk mengaktifkan akses ke Data Boost.
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Mengaktifkan Data Boost
Saat menggunakan set data eksternal, Data Boost selalu digunakan dan Anda tidak perlu mengaktifkannya secara manual.
Jika ingin menggunakan Data Boost untuk kueri EXTERNAL_QUERY
, Anda harus mengaktifkannya saat membuat koneksi yang digunakan oleh kueri.
Membaca data secara paralel
Spanner dapat membagi kueri tertentu menjadi bagian yang lebih kecil, atau partisi, dan mengambil partisi secara paralel. Untuk mengetahui informasi selengkapnya, lihat Membaca data secara paralel di dokumentasi Spanner.
Namun, opsi ini terbatas untuk kueri yang memenuhi salah satu kondisi berikut:
Operator pertama dalam rencana eksekusi adalah operator union terdistribusi.
Tidak ada operator union terdistribusi dalam rencana eksekusi.
Kueri lainnya menampilkan error. Untuk melihat rencana eksekusi kueri untuk kueri Spanner, lihat Memahami cara Spanner menjalankan kueri.
Saat menjalankan kueri gabungan dengan set data eksternal, opsi "Baca data secara paralel" selalu digunakan.
Untuk mengaktifkan operasi baca paralel saat menggunakan
EXTERNAL_QUERY
,
aktifkan saat Anda
membuat Koneksi.
Mengelola prioritas eksekusi kueri
Saat menjalankan kueri gabungan dengan fungsi EXTERNAL_QUERY
, Anda dapat menetapkan prioritas (high
, medium
, atau low
) untuk setiap kueri dengan menentukan opsi query_execution_priority
:
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id''', '{"query_execution_priority":"high"}');
Prioritas defaultnya adalah medium
.
Kueri dengan prioritas high
akan bersaing dengan traffic transaksi.
Kueri dengan prioritas low
merupakan upaya terbaik, dan mungkin di-preempt oleh
pemuatan latar belakang, misalnya pencadangan terjadwal.
Saat menjalankan kueri gabungan dengan set data eksternal, semua kueri selalu memiliki prioritas medium
.
Melihat skema tabel Spanner
Jika menggunakan set data eksternal, tabel Spanner akan terlihat langsung di BigQuery Studio dan Anda dapat melihat skemanya.
Namun, Anda juga dapat melihat skema tanpa menentukan set data eksternal. Anda juga dapat menggunakan fungsi EXTERNAL_QUERY
untuk membuat kueri tampilan information_schema guna mengakses metadata database. Contoh berikut menampilkan informasi tentang kolom dalam tabel MyTable
:
Database Google SQL
SELECT * FROM EXTERNAL_QUERY( 'my-project.us.example-db', '''SELECT t.column_name, t.spanner_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_catalog = '' AND t.table_schema = '' AND t.table_name = 'MyTable' ORDER BY t.ordinal_position ''');
Database PostgreSQL
SELECT * from EXTERNAL_QUERY( 'my-project.us.postgresql.example-db', '''SELECT t.column_name, t.data_type, t.is_nullable FROM information_schema.columns AS t WHERE t.table_schema = 'public' and t.table_name='MyTable' ORDER BY t.ordinal_position ''');
Untuk mengetahui informasi selengkapnya, lihat referensi skema informasi berikut di dokumentasi Spanner:
Harga
- Di sisi BigQuery, harga kueri gabungan standar berlaku.
- Di sisi Spanner, kueri tunduk pada Harga Spanner
- Harga dapat berubah saat beralih dari tahap Pratinjau ke tahap Ketersediaan Umum
Pemecahan masalah
Bagian ini membantu Anda memecahkan masalah yang mungkin Anda alami saat mengirim kueri gabungan ke Spanner.
- Masalah: Kueri tidak dapat dipartisi root.
- Penyelesaian: Jika Anda mengonfigurasi koneksi untuk membaca data secara paralel, operator pertama dalam rencana eksekusi kueri harus berupa penggabungan terdistribusi, atau rencana eksekusi Anda tidak boleh memiliki penggabungan terdistribusi. Untuk mengatasi error ini, lihat rencana eksekusi kueri dan tulis ulang kueri tersebut. Untuk mengetahui informasi selengkapnya, lihat Memahami cara Spanner menjalankan kueri.
- Masalah: Batas waktu terlampaui.
- Penyelesaian: Pilih opsi untuk membaca data secara paralel dan menulis ulang kueri agar dapat dipartisi root. Untuk mengetahui informasi selengkapnya, lihat Memahami cara Spanner menjalankan kueri.
Langkah selanjutnya
- Pelajari cara membuat set data eksternal Spanner
- Pelajari kueri gabungan.
- Pelajari Pemetaan jenis data Spanner ke BigQuery.