Mengekspor data sebagai kolom Protobuf
Dokumen ini menjelaskan cara mengekspor data BigQuery sebagai kolom Buffering Protokol (Protobuf) menggunakan fungsi yang ditentukan pengguna (UDF) BigQuery.
Kapan kolom Protobuf digunakan
BigQuery menawarkan sejumlah fungsi bawaan untuk memformat data yang dipilih. Salah satu opsinya adalah menggabungkan beberapa nilai kolom menjadi satu nilai Protobuf, yang memiliki manfaat berikut:
- Keamanan jenis objek.
- Kompresi, waktu transfer data, dan biaya yang lebih baik dibandingkan dengan JSON.
- Fleksibilitas, karena sebagian besar bahasa pemrograman memiliki library untuk menangani Protobuf.
- Lebih sedikit overhead saat membaca dari beberapa kolom dan membangun satu objek.
Meskipun jenis kolom lainnya juga dapat memberikan keamanan jenis, penggunaan kolom Protobuf akan menyediakan objek fully-typed, yang dapat mengurangi jumlah pekerjaan yang perlu dilakukan pada lapisan aplikasi atau di bagian lain dari pipeline.
Namun, ada batasan untuk mengekspor data BigQuery sebagai kolom Protobuf:
- Kolom protobuf tidak diindeks atau difilter dengan baik. Mencari berdasarkan isi kolom Protobuf bisa menjadi kurang efektif.
- Mengurutkan data dalam format Protobuf bisa jadi sulit.
Jika batasan ini berlaku untuk alur kerja ekspor Anda, Anda dapat mempertimbangkan metode lain untuk mengekspor data BigQuery:
- Gunakan kueri terjadwal dengan
pernyataan
EXPORT DATA
untuk mengurutkan data BigQuery yang diekspor menurut tanggal atau waktu, dan untuk menjadwalkan ekspor secara berulang. BigQuery mendukung ekspor data ke dalam format Avro, CSV, JSON, dan Parquet. - Gunakan Dataflow untuk mengekspor data BigQuery dalam format file Avro atau CSV.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk mengekspor data BigQuery sebagai kolom Protobuf, minta administrator Anda untuk memberi Anda peran IAM berikut di project Anda:
-
Membuat fungsi yang ditentukan pengguna:
BigQuery Data Editor (
roles/bigquery.dataEditor
) -
Mengekspor data dari tabel BigQuery:
BigQuery Data Viewer (
roles/bigquery.dataViewer
) -
Membaca dan mengupload file ke Cloud Storage:
Storage Object Creator (
roles/storage.objectCreator
)
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Membuat UDF
Prosedur berikut menunjukkan cara membuat fungsi yang ditentukan pengguna yang
mengonversi jenis data STRUCT
BigQuery menjadi kolom Protobuf:
Pada command line, clone repositori
bigquery-utils.git
:git clone https://github.com/GoogleCloudPlatform/bigquery-utils.git
Buka folder ekspor Protobuf
cd bigquery-utils/tools/protobuf_export
Tambahkan file proto Anda ke folder
./protos
.Instal paket yang diperlukan dari repositori GitHub:
npm install
Paketkan paket menggunakan webpack:
npx webpack --config webpack.config.js --stats-error-details
Temukan file
pbwrapper.js
di folderdist/
Anda, lalu salin file tersebut ke bucket Cloud Storage.Buat UDF yang membangun kolom Protobuf dari kolom BigQuery yang ada:
CREATE FUNCTION DATASET_ID.toMyProtoMessage(input STRUCT<field_1 TYPE1, field_2 TYPE2>) RETURNS BYTES LANGUAGE js OPTIONS ( library=["gs://BUCKET_NAME/pbwrapper.js"] ) AS r""" let message = pbwrapper.setup("PROTO_PACKAGE.PROTO_MESSAGE") return pbwrapper.parse(message, input) """;
Ganti kode berikut:
DATASET_ID
: ID set data tempat Anda menyimpan fungsiBUCKET_NAME
: nama bucket Cloud Storage AndaPROTO_PACKAGE
: nama paket untuk file proto AndaPROTO_MESSAGE
: jenis pesan untuk file proto Anda
Untuk mengetahui informasi selengkapnya tentang penggunaan paket dalam bahasa proto, lihat Paket.
Memformat kolom sebagai nilai Protobuf
Setelah Anda membuat UDF, jalankan fungsi:
SELECT DATASET_ID.toMyProtoMessage(STRUCT(COLUMN_TYPE1, COLUMN_TYPE2)) AS protoResult FROM `DATASET_NAME` LIMIT 100;
Ganti kode berikut:
DATASET_ID
: ID set data tempat Anda menyimpan fungsiDATASET_NAME
: nama set data Anda—misalnya,dataset_name.table_name
COLUMN_TYPE1
: nama kolom. Kolom dapat berisi jenis nilai skalar yang didukung atau jenis non-skalar, termasukARRAY
danSTRUCT
COLUMN_TYPE2
: nama kolom. Kolom dapat berisi jenis nilai skalar yang didukung atau jenis non-skalar, termasukARRAY
danSTRUCT
Menggunakan nilai Protobuf
Dengan data BigQuery yang diekspor dalam format Protobuf, Anda kini dapat menggunakan data Anda sebagai objek atau struct yang memiliki jenis lengkap.
Contoh kode berikut memberikan beberapa contoh cara untuk memproses atau menggunakan data yang diekspor: