Ekspor data ke Pub/Sub (ETL terbalik)
Ekspor data ke Pub/Sub memerlukan penggunaan BigQuery kueri berkelanjutan. Untuk mendaftar dalam 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 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
:
- Pengguna BigQuery (
roles/bigquery.user
) - BigQuery Job User (
roles/bigquery.jobUser
) - Admin BigQuery (
roles/bigquery.admin
)
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:
- BigQuery Data Viewer (
roles/bigquery.dataViewer
) - Editor Data BigQuery (
roles/bigquery.dataEditor
) - Pemilik Data BigQuery (
roles/bigquery.dataOwner
) - Admin BigQuery (
roles/bigquery.admin
)
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
Aktifkan API BigQuery and Pub/Sub.
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, pilih Kotak centang Gunakan mode kueri berkelanjutan.
Di kotak Service account, pilih akun layanan yang telah dibuat.
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 Topics konsol Google Cloud.QUERY
: pernyataan SQL untuk memilih data untuk diekspor. Pernyataan SQL hanya boleh berisi operasi yang didukung.
Klik Run.
bq
-
Di konsol Google Cloud, 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.
Pada command line, jalankan kueri berkelanjutan menggunakan Perintah
bq query
dengan flag berikut:- Tetapkan tanda
--continuous
ketrue
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.
- Tetapkan tanda
API
Jalankan kueri berkelanjutan dengan memanggil metode Metode
jobs.insert
. Tetapkan kolom berikut di kolom ReferensiJobConfigurationQuery
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 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.
- Tetapkan kolom
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 KolomBYTES
. 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 mengecualikanNULL
nilai dari hasil kueri dengan menyertakanWHERE 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.