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

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:

  1. 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 fungsi EXTERNAL_QUERY.

  2. Gabung ke tabel hasil kueri eksternal dengan tabel pelanggan di BigQuery oleh customer_id.

  3. 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.

  1. Buka halaman Logs Explorer.

    Buka Logs Explorer

  2. Di tab Query, masukkan kueri berikut:

    resource.type="alloydb.googleapis.com/Instance"
    textPayload=~"Federated query from BigQuery"
    
  3. 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