Kueri gabungan AlloyDB

Sebagai analis data, Anda dapat membuat kueri data dalam AlloyDB untuk PostgreSQL dari BigQuery menggunakan kueri gabungan.

Federasi AlloyDB BigQuery memungkinkan BigQuery kueri 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, sementara menyimpan tabel penjualan di AlloyDB, dan ingin menggabungkan dua tabel di terhadap satu kueri. Contoh berikut membuat kueri gabungan 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. Gabungkan 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 membuat daftar semua tabel dalam {i>database <i}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 memberikan anotasi pada kueri dengan komentar yang mirip dengan yang berikut ini:

/* 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 Run query.

    Jika ada data yang tersedia untuk kueri gabungan BigQuery, daftar data yang mirip dengan berikut akan muncul di Hasil kueri.

    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 temui saat mengirim Kueri gabungan ke AlloyDB dan memberikan kemungkinan pemecahan masalah resolusi.

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.

Resolusi: Pastikan Anda menggunakan kredensial yang valid dan mengikuti semua prasyarat sambil membuat koneksi ke AlloyDB. Periksa apakah akun layanan yang otomatis dibuat saat koneksi ke AlloyDB dibuat memiliki peran AlloyDB Client (roles/alloydb.client). Untuk informasi selengkapnya, lihat Berikan akses ke akun layanan.

Langkah selanjutnya