Mengekspor data ke AlloyDB (ETL terbalik)

Dokumen ini menjelaskan cara menyiapkan alur kerja ekstrak, transformasi, dan pemuatan terbalik (ETL terbalik) dari BigQuery ke AlloyDB untuk PostgreSQL. Anda dapat melakukannya menggunakan pernyataan EXPORT DATA.

Sebelum memulai

Peran yang diperlukan

Untuk mendapatkan izin yang diperlukan untuk mengekspor data BigQuery ke AlloyDB, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:

  • Mengekspor data dari tabel BigQuery: BigQuery Data Viewer (roles/bigquery.dataViewer)
  • Menjalankan tugas ekstrak: BigQuery User (roles/bigquery.user)
  • Menggunakan koneksi BigQuery: BigQuery Connection User (roles/bigquery.connectionUser)
  • Terhubung ke instance AlloyDB: AlloyDB Client (roles/alloydb.client) - akun layanan koneksi

Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.

Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.

Batasan

  • Ekspor AlloyDB hanya mendukung ekspor batch. Anda tidak dapat menggunakan kueri berkelanjutan untuk mengekspor ke AlloyDB.

  • Data yang diekspor ke AlloyDB hanya ditambahkan sebagai baris baru. Proses ekspor tidak mengubah atau menghapus data yang ada dalam AlloyDB. Jika tabel target tidak memiliki batasan PRIMARY KEY atau UNIQUE yang ditentukan, mengekspor data yang sama beberapa kali akan menghasilkan entri duplikat.

  • Untuk memastikan integritas data, sebaiknya tentukan batasan PRIMARY KEY atau UNIQUE pada tabel AlloyDB Anda. Tugas ekspor tidak melakukan "upsert", yaitu saat data yang ada diupdate jika ada kunci yang cocok dan unik. Jika ada baris masuk yang melanggar batasan PRIMARY KEY atau UNIQUE, seluruh tugas ekspor akan gagal.

  • Sebaiknya jangan jalankan beberapa tugas EXPORT DATA serentak ke tabel AlloyDB yang sama. Tindakan ini dapat menyebabkan perilaku yang tidak terduga, seperti kehilangan data atau kegagalan tugas. Sebaiknya pastikan hanya satu tugas ekspor yang menulis ke tabel tertentu pada satu waktu.

  • Hanya autentikasi nama pengguna dan sandi melalui koneksi BigQuery yang didukung.

  • Jenis data BigQuery ARRAY, BYTES, GEOGRAPHY, INTERVAL, dan STRUCT tidak didukung.

  • Jika pernyataan SELECT BigQuery menghilangkan kolom yang ada di tabel AlloyDB target, kolom tersebut harus mengizinkan nilai NULL atau memiliki nilai default yang ditentukan di AlloyDB. Jika kolom tersebut memiliki batasan NOT NULL dan tidak memiliki nilai default, ekspor akan gagal.

  • Ekspor ke AlloyDB hanya didukung untuk edisi BigQuery Enterprise atau Enterprise Plus. Edisi Standar BigQuery dan komputasi on-demand tidak didukung. Untuk mengetahui informasi selengkapnya, lihat Fitur administrasi.

  • Tugas BigQuery, seperti tugas ekstrak ke AlloyDB, memiliki durasi maksimum 6 jam. Untuk ekspor yang sangat besar, sebaiknya bagi ekspor menjadi beberapa tugas yang lebih kecil.

Pertimbangan lokasi

Mengekspor data ke AlloyDB memiliki persyaratan khusus terkait lokasi set data BigQuery dan instance AlloyDB Anda:

  • Ekspor di region yang sama: Instance AlloyDB target harus berada di region yang sama persis dengan set data BigQuery . Google Cloud Misalnya, set data di us-east1 hanya dapat diekspor ke instance AlloyDB di us-east1.

  • Ekspor multi-region:

    • Set data di multi-region US hanya dapat diekspor ke instance AlloyDB yang berada di region us-central1.
    • Set data di multi-region EU hanya dapat diekspor ke instance AlloyDB yang berada di region europe-west4.

Ekspor lintas region selain kombinasi yang disebutkan sebelumnya tidak didukung.

Mengonfigurasi ekspor dengan alloydb_options

Anda dapat menggunakan opsi alloydb_options untuk menentukan skema, tabel, dan koneksi maksimum AlloyDB tujuan. Konfigurasi dinyatakan sebagai string JSON. Hanya parameter table yang diperlukan; semua parameter lainnya bersifat opsional.

Saat mengonfigurasi ekspor, kolom dalam pernyataan SELECT harus memiliki alias yang cocok dengan nama kolom dalam tabel AlloyDB target.

EXPORT DATA
  WITH CONNECTION `PROJECT_ID.LOCATION.CONNECTION_ID`
  OPTIONS(
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/clusters/CLUSTER_ID/instances/INSTANCE_ID",
    alloydb_options="""{
      "schema": "SCHEMA_NAME",
      "table": "TABLE_NAME",
      "max_parallel_connections": MAX_CONNECTIONS
    }"""
  )
AS SELECT * FROM `mydataset.table1`;

Ganti kode berikut:

  • PROJECT_ID: nama Google Cloud project Anda.
  • LOCATION: lokasi koneksi dan instance target Anda.
  • CONNECTION_ID: nama koneksi BigQuery Anda.
  • CLUSTER_ID: nama cluster AlloyDB Anda.
  • INSTANCE_ID: nama instance AlloyDB target Anda.
  • SCHEMA_NAME (Opsional): nama skema tujuan di AlloyDB. Jika tidak disediakan, skema default yang dikonfigurasi untuk pengguna database akan digunakan.
  • TABLE_NAME: nama tabel tujuan yang ada di AlloyDB, tanpa awalan skema.
  • MAX_CONNECTIONS (Opsional): jumlah maksimum koneksi paralel serentak dari pekerja BigQuery ke instance AlloyDB. Membatasi koneksi dapat mencegah instance target kelebihan beban selama ekspor besar.

Ekspor data

Anda dapat menggunakan pernyataan EXPORT DATA untuk mengekspor data dari tabel BigQuery ke tabel AlloyDB.

Contoh berikut mengekspor kolom yang dipilih dari tabel bernama mydataset.table1 ke tabel AlloyDB bernama my_target_table:

EXPORT DATA
  WITH CONNECTION `myproject.us-central1.my-alloydb-conn`
  OPTIONS (
    format='ALLOYDB',
    uri="https://alloydb.googleapis.com/v1/projects/myproject/locations/us-central1/clusters/my-cluster/instances/my-instance",
    alloydb_options="""{
      "schema": "public",
      "table": "my_target_table"
    }"""
  )
AS SELECT
  col1 AS id,
  col2 AS name,
  col3 AS value
FROM
  `mydataset.table1`;

Harga

Saat mengekspor data ke AlloyDB menggunakan pernyataan EXPORT DATA, Anda akan ditagih menggunakan harga komputasi kapasitas BigQuery.

Setelah data diekspor, Anda dikenai biaya penyimpanan data di AlloyDB. Untuk mengetahui informasi selengkapnya, lihat Harga AlloyDB untuk PostgreSQL.