Mengekspor data ke Pub/Sub (ETL terbalik)
Mengekspor data ke Pub/Sub memerlukan penggunaan kueri berkelanjutan BigQuery. Untuk mendaftar ke pratinjau kueri berkelanjutan, isi formulir permintaan. Untuk memberikan masukan atau meminta dukungan terkait fitur ini, hubungi bq-continuous-queries-feedback@google.com.
Dokumen ini menjelaskan cara menyiapkan ekstrak-transformasi-muat (RETL) terbalik 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 layanan pesan global asinkron dan skalabel Pub/Sub. Alur kerja ini memungkinkan Anda menayangkan data ke aplikasi dan layanan downstream dengan cara berbasis peristiwa.
Prasyarat
Anda harus membuat akun layanan. 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 dapat 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
. Setiap peran IAM berikut memberikan izin bigquery.jobs.create
:
- Pengguna BigQuery (
roles/bigquery.user
) - BigQuery Job User (
roles/bigquery.jobUser
) - BigQuery Admin (
roles/bigquery.admin
)
Untuk mengirimkan tugas yang berjalan menggunakan akun layanan, akun pengguna harus memiliki peran Service Account User (roles/iam.serviceAccountUser
). Jika Anda menggunakan akun pengguna yang sama untuk membuat akun layanan, akun pengguna tersebut harus memiliki peran Service Account Admin (roles/iam.serviceAccountAdmin
). Untuk informasi tentang cara membatasi akses pengguna ke satu akun layanan,
bukan ke semua akun layanan dalam project, lihat
Memberikan satu peran.
Jika akun pengguna harus mengaktifkan API yang diperlukan untuk kasus penggunaan kueri berkelanjutan, akun pengguna harus memiliki peran Service Usage Admin (roles/serviceusage.serviceUsageAdmin
).
Izin akun layanan
Untuk mengekspor data dari tabel BigQuery, akun layanan harus memiliki izin IAM bigquery.tables.export
. Setiap peran IAM berikut memberikan izin bigquery.tables.export
:
- BigQuery Data Viewer (
roles/bigquery.dataViewer
) - BigQuery Data Editor (
roles/bigquery.dataEditor
) - BigQuery Data Owner (
roles/bigquery.dataOwner
) - BigQuery Admin (
roles/bigquery.admin
)
Agar akun layanan dapat mengakses Pub/Sub, Anda harus memberikan kedua peran IAM berikut kepada akun layanan:
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus.
Sebelum memulai
Enable the BigQuery and Pub/Sub APIs.
Ekspor ke Pub/Sub
Gunakan pernyataan EXPORT DATA
untuk mengekspor data ke topik Pub/Sub:
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, klik Lainnya > Setelan kueri.
Di bagian Kueri Berkelanjutan, centang kotak Gunakan mode kueri berkelanjutan.
Di kotak Service account, pilih akun layanan yang Anda buat.
Klik Simpan.
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 Topik Konsol Google Cloud.QUERY
: pernyataan SQL untuk memilih data yang akan diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.
Klik Run.
bq
-
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Di command line, jalankan kueri berkelanjutan menggunakan perintah
bq query
dengan flag berikut:- Tetapkan flag
--continuous
ketrue
untuk membuat kueri berkelanjutan. - Gunakan flag
--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
: email akun layanan. Anda bisa mendapatkan email akun layanan di halaman Service accounts di konsol Google Cloud.QUERY
: pernyataan SQL untuk memilih data yang akan diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.
- Tetapkan flag
API
Jalankan kueri berkelanjutan dengan memanggil metode
jobs.insert
. Tetapkan kolom berikut di resourceJobConfigurationQuery
dari resourceJob
yang Anda teruskan:- Tetapkan kolom
continuous
ketrue
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 yang akan diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.SERVICE_ACCOUNT_EMAIL
: email akun layanan. Anda bisa mendapatkan email akun layanan di halaman Service accounts di konsol Google Cloud.
- Tetapkan kolom
Mengekspor beberapa kolom ke Pub/Sub
Jika ingin menyertakan beberapa kolom dalam output, Anda dapat membuat kolom struct
untuk memuat nilai kolom, lalu mengonversi nilai struct
menjadi string JSON menggunakan
fungsi TO_JSON_STRING
.
Contoh berikut mengekspor data dari empat kolom, yang diformat sebagai string JSON:
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' );
Pengoptimalan ekspor
Jika performa tugas kueri berkelanjutan Anda tampaknya dibatasi oleh
resource komputasi yang tersedia,
coba tingkatkan ukuran penetapan reservasi slot CONTINUOUS
BigQuery Anda.
Batasan
- Data yang diekspor harus terdiri dari satu kolom
STRING
atauBYTES
. Nama kolom dapat berupa apa pun yang Anda pilih. - Anda harus menggunakan kueri berkelanjutan untuk mengekspor ke Pub/Sub.
- Anda tidak dapat meneruskan skema ke topik Pub/Sub dalam 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 nilaiNULL
dari hasil kueri dengan menyertakan filterWHERE message IS NOT NULL
dalam 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 penetapan reservasi
yang menggunakan jenis tugas CONTINUOUS
.
Setelah data diekspor, Anda akan dikenai biaya penggunaan Pub/Sub. Untuk mengetahui informasi selengkapnya, lihat Harga Pub/Sub.