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.

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.

Memilih koneksi yang tepat

Jika Anda adalah pengguna kontrol akses terperinci Spanner, saat menjalankan kueri gabungan, 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.

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 Anda perlukan untuk 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.

Peran bawaan ini memiliki 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

Untuk mengaktifkan Data Boost pada kueri gabungan ke Spanner, Anda harus membuat koneksi ke Spanner terlebih dahulu. Setelah mengaktifkan Data Boost dalam koneksi, buat kueri data untuk mengirim kueri gabungan ke Spanner.

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;

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.

Untuk mengaktifkan operasi baca paralel di kueri gabungan, konfigurasikan setelan ini saat Anda membuat resource koneksi. Opsi ini membagi kueri SQL menjadi beberapa partisi yang lebih kecil dan mengambil setiap partisi secara paralel. Namun, opsi ini terbatas untuk kueri yang memenuhi salah satu kondisi berikut:

Kueri lainnya menampilkan error. Untuk melihat rencana eksekusi kueri untuk kueri Spanner, lihat Memahami cara Spanner menjalankan kueri.

Mengelola prioritas eksekusi kueri

Anda dapat menetapkan prioritas (high, medium, atau low) untuk setiap kueri, dengan menentukan opsi query_execution_priority, seperti yang ditunjukkan di bawah ini:

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.

Melihat skema tabel Spanner

Anda dapat menggunakan fungsi EXTERNAL_QUERY untuk membuat kueri tabel virtual information_schema agar dapat mengakses metadata database, seperti mencantumkan semua tabel dalam database atau menampilkan skema tabel. 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:

Pemecahan masalah

Bagian ini membantu Anda memecahkan masalah yang mungkin Anda alami saat mengirim kueri gabungan ke Spanner.

Masalah: Kueri tidak dapat dipartisi root.
Resolusi: Jika Anda mengonfigurasi koneksi untuk membaca data secara paralel, operator pertama dalam rencana eksekusi kueri harus berupa union terdistribusi, atau rencana eksekusi Anda tidak boleh memiliki union 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