Ekspor data ke Pub/Sub (Reverse ETL)

Dokumen ini menjelaskan cara menyiapkan reverse extract-transform-load (RETL) dari BigQuery ke Pub/Sub. Anda dapat melakukannya dengan menggunakan Pernyataan EXPORT DATA dalam kueri berkelanjutan untuk mengekspor data dari BigQuery ke Topik Pub/Sub.

Anda dapat menggunakan alur kerja RETL ke Pub/Sub untuk menggabungkan Kemampuan analisis BigQuery dengan yang menyediakan layanan pesan global asinkron dan skalabel. Alur kerja ini memungkinkan Anda menyajikan data ke aplikasi dan layanan downstream dengan cara berbasis peristiwa.

Prasyarat

Anda harus membuat akun layanan. J akun layanan diperlukan untuk menjalankan kueri berkelanjutan yang mengekspor hasil ke Topik Pub/Sub.

Anda harus membuat Topik Pub/Sub untuk menerima hasil kueri berkelanjutan sebagai pesan, dan Langganan Pub/Sub yang bisa digunakan aplikasi target untuk menerima pesan tersebut.

Peran yang diperlukan

Bagian ini memberikan informasi tentang peran dan izin yang diperlukan oleh akun pengguna yang membuat kueri berkelanjutan, dan akun layanan yang menjalankan kueri berkelanjutan.

Izin akun pengguna

Untuk membuat tugas di BigQuery, akun pengguna harus memiliki Izin IAM bigquery.jobs.create. Tiap-tiap hal berikut Peran IAM memberikan izin bigquery.jobs.create:

Untuk mengirimkan tugas yang dijalankan menggunakan akun layanan, akun pengguna harus memiliki Pengguna Akun Layanan (roles/iam.serviceAccountUser) peran. Jika Anda menggunakan akun pengguna yang sama untuk membuat akun layanan, maka akun pengguna harus memiliki Admin Akun Layanan (roles/iam.serviceAccountAdmin) peran. Untuk informasi tentang cara membatasi akses pengguna ke satu akun layanan, bukan ke semua akun layanan dalam sebuah project, lihat Berikan satu peran.

Jika akun pengguna harus mengaktifkan API yang diperlukan untuk kueri berkelanjutan, akun pengguna harus memiliki Admin Penggunaan Layanan (roles/serviceusage.serviceUsageAdmin) peran.

Izin akun layanan

Untuk mengekspor data dari tabel BigQuery, akun layanan harus memiliki izin IAM bigquery.tables.export. Setiap peran IAM berikut memberikan bigquery.tables.export izin akses:

Agar akun layanan dapat mengakses Pub/Sub, Anda harus memberikan izin akun layanan dari kedua peran IAM berikut:

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

Sebelum memulai

Enable the BigQuery and Pub/Sub APIs.

Enable the APIs

Ekspor ke Pub/Sub

Gunakan Pernyataan EXPORT DATA untuk mengekspor data ke topik Pub/Sub:

Konsol

  1. Di konsol Google Cloud, buka halaman BigQuery.

    Buka BigQuery

  2. Di editor kueri, klik Lainnya > Setelan kueri.

  3. Di bagian Kueri Berkelanjutan, pilih Kotak centang Gunakan mode kueri berkelanjutan.

  4. Di kotak Service account, pilih akun layanan yang ingin Anda dibuat.

  5. Klik Simpan.

  6. Di editor kueri, masukkan pernyataan berikut:

    EXPORT DATA
    OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID'
    ) AS
    (
    QUERY
    );
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • TOPIC_ID: ID topik Pub/Sub. Anda bisa mendapatkan ID topik dari Halaman Topics konsol Google Cloud.
    • QUERY: pernyataan SQL untuk memilih data untuk diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.
  7. Klik Run.

bq

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  2. Pada command line, jalankan kueri berkelanjutan menggunakan Perintah bq query dengan flag berikut:

    • Tetapkan tanda --continuous ke true untuk membuat kueri berkelanjutan.
    • Gunakan tanda --connection_property untuk menentukan akun layanan yang akan digunakan.
    bq query --project_id=PROJECT_ID --use_legacy_sql=false \
    --continuous=true --connection_property=service_account=SERVICE_ACCOUNT_EMAIL \
    'EXPORT DATA OPTIONS (format = "CLOUD_PUBSUB", uri = "https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID") AS (QUERY);'
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • SERVICE_ACCOUNT_EMAIL: layanan email akun Anda. Anda bisa mendapatkan email akun layanan di Halaman Akun layanan konsol Google Cloud.
    • QUERY: pernyataan SQL untuk memilih data untuk diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.

API

  1. Jalankan kueri berkelanjutan dengan memanggil metode Metode jobs.insert. Tetapkan kolom berikut di kolom Referensi JobConfigurationQuery dari resource Job yang Anda teruskan:

    • Tetapkan kolom continuous ke true untuk membuat kueri berkelanjutan.
    • Gunakan kolom connection_property untuk menentukan akun layanan yang akan digunakan.
    curl --request POST \
      'https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/jobs'
      --header 'Authorization: Bearer $(gcloud auth print-access-token) \
      --header 'Accept: application/json' \
      --header 'Content-Type: application/json' \
      --data '("configuration":("query":"EXPORT DATA OPTIONS (format = 'CLOUD_PUBSUB', uri = 'https://pubsub.googleapis.com/projects/PROJECT_ID/topics/TOPIC_ID') AS (QUERY);","useLegacySql":false,"continuous":true,"connectionProperties":["key": "service_account","value":"SERVICE_ACCOUNT_EMAIL"]))' \
      --compressed
    

    Ganti kode berikut:

    • PROJECT_ID: project ID Anda.
    • QUERY: pernyataan SQL untuk memilih data untuk diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.
    • SERVICE_ACCOUNT_EMAIL: layanan email akun Anda. Anda bisa mendapatkan email akun layanan di Halaman Akun layanan konsol Google Cloud.

Mengekspor beberapa kolom ke Pub/Sub

Jika Anda ingin menyertakan beberapa kolom dalam {i>output<i}, Anda dapat membuat struct kolom agar berisi nilai kolom, lalu mengonversi nilai struct ke string JSON dengan menggunakan Fungsi TO_JSON_STRING. Contoh berikut mengekspor data dari empat kolom, yang diformat sebagai JSON {i>string<i}:

EXPORT DATA
  OPTIONS (
    format = 'CLOUD_PUBSUB',
    uri = 'https://pubsub.googleapis.com/projects/myproject/topics/taxi-real-time-rides')
AS (
  SELECT
    TO_JSON_STRING(
      STRUCT(
        ride_id,
        timestamp,
        latitude,
        longitude)) AS message
  FROM `myproject.real_time_taxi_streaming.taxi_rides`
  WHERE ride_status = 'enroute'
);

Ekspor pengoptimalan

Jika performa tugas kueri berkelanjutan Anda dibatasi oleh resource komputasi yang tersedia, coba tingkatkan ukuran BigQuery Penetapan reservasi slot CONTINUOUS.

Batasan

  • Data yang diekspor harus terdiri dari satu STRING atau Kolom BYTES. Nama kolom dapat berupa apa pun yang Anda pilih.
  • Anda harus menggunakan kueri berkelanjutan ke dan mengekspor ke Pub/Sub.
  • Anda tidak dapat meneruskan skema ke topik Pub/Sub di kueri berkelanjutan.
  • Anda tidak dapat mengekspor data ke topik Pub/Sub yang menggunakan skema.
  • Anda tidak dapat mengekspor data yang berisi nilai NULL. Anda dapat mengecualikan NULL nilai dari hasil kueri dengan menyertakan WHERE message IS NOT NULL filter di kueri berkelanjutan.
  • Data yang diekspor tidak boleh melebihi kuota Pub/Sub.

Harga

Saat mengekspor data dalam kueri berkelanjutan, Anda akan ditagih menggunakan Harga komputasi kapasitas BigQuery. Untuk menjalankan kueri berkelanjutan, Anda harus memiliki reservasi yang menggunakan Edisi Enterprise atau Enterprise Plus, dan tugas reservasi yang menggunakan jenis tugas CONTINUOUS.

Setelah data diekspor, Anda akan dikenai biaya atas penggunaan Pub/Sub. Untuk informasi selengkapnya, lihat Harga Pub/Sub.