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:

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, atau us-west2.

  • Kueri yang berjalan di multi-region Uni Eropa BigQuery dapat membuat kueri setiap wilayah di negara anggota Uni Eropa, seperti europe-north1 atau europe-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 adalah US.
  • 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 untuk INT64 dan FLOAT64).

Fungsi yang didukung oleh Cloud SQL untuk PostgreSQL

  • Operator logika: AND, OR, NOT.
  • Operator perbandingan: =, >, >=, <, <=, <>, IN, BETWEEN, IS NULL.
  • Operator aritmetika: +, -, *, / (hanya untuk jenis INT64, FLOAT64, dan DATE, kecuali untuk pengurangan DATE).

Spanner - Dialek PostgreSQL

  • Operator logika: AND, OR, NOT.
  • Operator perbandingan: =, >, >=, <, <=, <>, IN, BETWEEN, IS NULL.
  • Operator aritmetika: +, -, *, / (hanya untuk INT64, 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 untuk INT64, FLOAT64, NUMERIC).

Langkah selanjutnya