Kueri gabungan AlloyDB
Sebagai analis data, Anda dapat membuat kueri data di AlloyDB untuk PostgreSQL dari BigQuery menggunakan kueri gabungan.
Gabungan BigQuery AlloyDB memungkinkan BigQuery mengkueri data yang ada di AlloyDB secara real time tanpa menyalin atau memindahkan data.
Sebelum memulai
- Pastikan administrator BigQuery Anda telah membuat koneksi AlloyDB dan membagikannya kepada Anda.
-
Untuk mendapatkan izin yang Anda perlukan guna membuat kueri instance AlloyDB, minta administrator untuk memberi Anda peran IAM BigQuery Connection User (
roles/bigquery.connectionUser
) di project Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran yang telah ditetapkan lainnya.
Data kueri
Untuk mengirim kueri gabungan ke AlloyDB dari kueri GoogleSQL, gunakan fungsi EXTERNAL_QUERY
.
Misalkan Anda menyimpan tabel pelanggan di BigQuery, sambil menyimpan tabel penjualan di AlloyDB, dan ingin menggabungkan kedua tabel tersebut dalam satu kueri. Contoh berikut membuat kueri federasi ke tabel AlloyDB bernama orders
dan menggabungkan hasilnya dengan tabel BigQuery bernama mydataset.customers
.
Contoh kueri ini mencakup 3 bagian:
Jalankan kueri eksternal
SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id
di database AlloyDB untuk mendapatkan tanggal pesanan pertama setiap pelanggan melalui fungsiEXTERNAL_QUERY
.Gabung ke tabel hasil kueri eksternal dengan tabel pelanggan di BigQuery oleh
customer_id
.Pilih informasi pelanggan dan tanggal pesanan pertama di kumpulan hasil akhir.
SELECT c.customer_id, c.name, rq.first_order_date
FROM mydataset.customers AS c
LEFT OUTER JOIN EXTERNAL_QUERY(
'us.connection_id',
'''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;
Melihat skema tabel AlloyDB
Anda dapat menggunakan fungsi EXTERNAL_QUERY
untuk membuat kueri tabel information_schema
guna mengakses metadata database. Misalnya, Anda dapat menampilkan daftar semua tabel dalam database atau melihat skema tabel. Untuk informasi selengkapnya, lihat Tabel information_schema PostgreSQL.
-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("region.connection_id",
"select * from information_schema.columns where table_name='x';");
Melacak kueri gabungan BigQuery
Saat Anda menjalankan kueri federasi terhadap AlloyDB, BigQuery akan menganotasi kueri tersebut dengan komentar seperti berikut:
/* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID. */
Jika Anda memantau log untuk penggunaan kueri, anotasi berikut dapat membantu Anda mengidentifikasi kueri yang berasal dari BigQuery.
Buka halaman Logs Explorer.
Di tab Query, masukkan kueri berikut:
resource.type="alloydb.googleapis.com/Instance" textPayload=~"Federated query from BigQuery"
Klik Jalankan kueri.
Jika ada record yang tersedia untuk kueri gabungan BigQuery, daftar record yang serupa dengan berikut akan muncul dalam Query results.
YYYY-MM-DD hh:mm:ss.millis UTC [3210064]: [4-1] db=DATABASE, user=USER_ACCOUNT STATEMENT: SELECT 1 FROM (SELECT FROM company_name_table) t; /* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID */ YYYY-MM-DD hh:mm:ss.millis UTC [3210532]: [2-1] db=DATABASE, user=USER_ACCOUNT STATEMENT: SELECT "company_id", "company type_id" FROM (SELECT FROM company_name_table) t; /* Federated query from BigQuery. Project ID: PROJECT_ID, BigQuery Job ID: JOB_ID */
Untuk mengetahui informasi selengkapnya tentang Cloud Logging, lihat Cloud Logging.
Pemecahan masalah
Bagian ini menjelaskan potensi error yang mungkin Anda alami saat mengirim kueri gabungan ke AlloyDB dan memberikan kemungkinan penyelesaian pemecahan masalah.
Masalah: Gagal terhubung ke server database dengan error ini:
Invalid table-valued function EXTERNAL_QUERY Connect to PostgreSQL server failed: server closed the connection unexpectedly. This probably means the server terminated abnormally before or while processing the request.
Penyelesaian: Pastikan Anda menggunakan kredensial yang valid dan mengikuti semua prasyarat
saat membuat koneksi ke AlloyDB.
Periksa apakah akun layanan yang dibuat secara otomatis saat koneksi ke AlloyDB dibuat memiliki peran AlloyDB Client (roles/alloydb.client
).
Untuk mengetahui informasi selengkapnya, lihat
Memberikan akses ke akun layanan.
Langkah selanjutnya
- Pelajari kueri gabungan.
- Pelajari pemetaan jenis data PostgreSQL ke BigQuery.
- Pelajari jenis data yang tidak didukung.