Memuat data dari ekspor Firestore
BigQuery mendukung pemuatan data dari ekspor Firestore yang dibuat menggunakan layanan impor dan ekspor terkelola Firestore. Layanan impor dan ekspor terkelola mengekspor dokumen Firestore ke bucket Cloud Storage. Selanjutnya, Anda dapat memuat data yang diekspor ke tabel BigQuery.
Batasan
Saat memuat data ke BigQuery dari ekspor Firestore, perhatikan batasan berikut:
- Set data Anda harus berada di lokasi yang sama dengan bucket Cloud Storage yang berisi file ekspor.
- Anda hanya dapat menentukan satu URI Cloud Storage dan tidak dapat menggunakan karakter pengganti URI.
- Agar ekspor Firestore dapat dimuat dengan benar, dokumen dalam data ekspor harus memiliki skema yang konsisten dengan kurang dari 10.000 nama kolom yang unik.
- Anda dapat membuat tabel baru untuk menyimpan data, atau menimpa tabel yang sudah ada. Anda tidak dapat menambahkan data ekspor Firestore ke tabel yang sudah ada.
- Perintah ekspor Anda harus menentukan filter
collection-ids
. Data yang diekspor tanpa menentukan filter ID koleksi tidak dapat dimuat ke BigQuery.
Sebelum memulai
Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini.
Izin yang diperlukan
Untuk memuat data ke BigQuery, Anda memerlukan izin IAM untuk menjalankan tugas pemuatan dan memuat data ke dalam tabel dan partisi BigQuery. Jika memuat data dari Cloud Storage, Anda juga memerlukan izin IAM untuk mengakses bucket yang berisi data Anda.
Izin untuk memuat data ke BigQuery
Untuk memuat data ke dalam tabel atau partisi BigQuery baru, atau menambahkan atau menimpa tabel atau partisi yang sudah ada, Anda memerlukan izin IAM berikut:
bigquery.tables.create
bigquery.tables.updateData
bigquery.tables.update
bigquery.jobs.create
Setiap peran IAM yang telah ditetapkan berikut mencakup izin yang diperlukan untuk memuat data ke dalam tabel atau partisi BigQuery:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(termasuk izinbigquery.jobs.create
)bigquery.user
(termasuk izinbigquery.jobs.create
)bigquery.jobUser
(termasuk izinbigquery.jobs.create
)
Selain itu, jika memiliki izin bigquery.datasets.create
, Anda dapat membuat dan
memperbarui tabel menggunakan tugas pemuatan dalam set data yang Anda buat.
Untuk mengetahui informasi selengkapnya tentang peran dan izin IAM di BigQuery, lihat Peran dan izin yang telah ditetapkan.
Izin untuk memuat data dari Cloud Storage
Untuk mendapatkan izin yang Anda perlukan untuk memuat data dari bucket Cloud Storage,
minta administrator untuk memberi Anda
peran IAM Storage Admin (roles/storage.admin
) di bucket.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.
Peran yang telah ditentukan ini berisi izin yang diperlukan untuk memuat data dari bucket Cloud Storage. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk memuat data dari bucket Cloud Storage:
-
storage.buckets.get
-
storage.objects.get
-
storage.objects.list (required if you are using a URI wildcard)
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.
Memuat data layanan ekspor Firestore
Anda dapat memuat data dari file metadata ekspor Firestore menggunakan Google Cloud Console, alat command line bq, atau API.
Terkadang terminologi Datastore digunakan di Google Cloud Console dan alat command line bq, tetapi prosedur berikut kompatibel dengan file ekspor Firestore. Firestore dan Datastore berbagi format ekspor.
Konsol
Di konsol Google Cloud, buka halaman BigQuery.
- Di panel Explorer, luaskan project Anda, lalu pilih set data.
- Di bagian Dataset info, klik Create table.
- Di panel Create table, tentukan detail berikut:
- Di bagian Source, pilih Google Cloud Storage dalam daftar Create table from.
Kemudian, lakukan hal berikut:
- Pilih file dari bucket Cloud Storage, atau masukkan
Cloud Storage URI.
Anda tidak dapat menyertakan beberapa URI
di Konsol Google Cloud, tetapi karakter pengganti
bisa didukung. Bucket Cloud Storage harus berada di lokasi yang sama
dengan set data yang berisi tabel yang ingin Anda buat, tambahkan, atau
timpa.
URI untuk file ekspor Firestore Anda harus diakhiri denganKIND_COLLECTION_ID.export_metadata
. Misalnya, dalamdefault_namespace_kind_Book.export_metadata
,Book
adalah ID koleksi, dandefault_namespace_kind_Book
adalah nama file yang dihasilkan oleh Firestore. Jika URI tidak diakhiri denganKIND_COLLECTION_ID.export_metadata
, Anda akan menerima pesan error berikut: tidak berisi metadata cadangan yang valid. (kode error: tidak valid). - Untuk File format, pilih Cloud Datastore Backup. Firestore dan Datastore menggunakan format ekspor yang sama.
- Pilih file dari bucket Cloud Storage, atau masukkan
Cloud Storage URI.
Anda tidak dapat menyertakan beberapa URI
di Konsol Google Cloud, tetapi karakter pengganti
bisa didukung. Bucket Cloud Storage harus berada di lokasi yang sama
dengan set data yang berisi tabel yang ingin Anda buat, tambahkan, atau
timpa.
- Di bagian Destination, tentukan detail berikut:
- Untuk Dataset, pilih set data tempat Anda ingin membuat tabel.
- Di kolom Table, masukkan nama tabel yang ingin Anda buat.
- Pastikan kolom Table type disetel ke Native table.
- Di bagian Schema, Anda tidak perlu melakukan tindakan apa pun. Skema diinferensikan untuk ekspor Firestore.
- Opsional: Tentukan Partition and cluster settings. Untuk mengetahui informasi selengkapnya, lihat Membuat tabel berpartisi serta Membuat dan menggunakan tabel yang dikelompokkan.
- Klik Advanced options, lalu lakukan tindakan berikut:
- Untuk Write preference, biarkan Write if empty dipilih. Opsi ini akan membuat tabel baru dan memuat data Anda ke dalamnya.
- Jika Anda ingin mengabaikan nilai dalam baris yang tidak ada dalam skema tabel, pilih Unknown values.
- Untuk Encryption, klik Customer-managed key untuk menggunakan kunci Cloud Key Management Service. Jika Anda membiarkan setelan Google-managed key, BigQuery akan mengenkripsi data dalam penyimpanan.
- Klik Buat tabel.
bq
Gunakan perintah bq load
dengan source_format
yang disetel ke DATASTORE_BACKUP
.
Berikan flag --location
dan tetapkan nilai ke lokasi Anda. Jika Anda mengganti tabel yang sudah ada, tambahkan flag --replace
.
Untuk memuat kolom tertentu saja, gunakan flag --projection_fields.
bq --location=LOCATION load \
--source_format=FORMAT \
DATASET.TABLE \
PATH_TO_SOURCE
Ganti kode berikut:
LOCATION
: lokasi Anda. Flag--location
bersifat opsional.FORMAT
:DATASTORE_BACKUP
. Pencadangan Datastore adalah opsi yang tepat untuk Firestore. Firestore dan Datastore menggunakan format ekspor yang sama.DATASET
: set data yang berisi tabel tempat Anda memuat data.TABLE
: tabel tempat Anda memuat data. Jika tidak ada, tabel akan dibuat.PATH_TO_SOURCE
: Cloud Storage URI.
Misalnya, perintah berikut memuat file ekspor Firestore gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
ke tabel bernama book_data
.
mybucket
dan mydataset
dibuat di lokasi multi-region US
.
bq --location=US load \
--source_format=DATASTORE_BACKUP \
mydataset.book_data \
gs://mybucket/20180228T1256/default_namespace/kind_Book/default_namespace_kind_Book.export_metadata
API
Tetapkan properti berikut untuk memuat data ekspor Firestore menggunakan API.
Buat konfigurasi tugas
load
yang mengarah ke data sumber di Cloud Storage.Tentukan lokasi Anda di properti
location
di bagianjobReference
pada resource tugas.sourceUris
harus sepenuhnya memenuhi syarat, dalam formatgs://BUCKET/OBJECT
di konfigurasi tugas pemuatan. Nama file (objek) harus diakhiri denganKIND_NAME.export_metadata
. Hanya satu URI yang diizinkan untuk ekspor Firestore, dan Anda tidak dapat menggunakan karakter pengganti.Tentukan format data dengan menetapkan properti
sourceFormat
keDATASTORE_BACKUP
dalam konfigurasi tugas pemuatan. Pencadangan Datastore adalah opsi yang tepat untuk Firestore. Firestore dan Datastore menggunakan format ekspor yang sama.Untuk memuat kolom tertentu saja, tetapkan properti
projectionFields
.Jika Anda menimpa tabel yang sudah ada, tentukan disposisi tulis dengan menetapkan properti
writeDisposition
keWRITE_TRUNCATE
.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Opsi Firestore
Untuk mengubah cara BigQuery mengurai data ekspor Firestore, tentukan opsi berikut:
Opsi Konsol Google Cloud | Flag `bq` | Properti BigQuery API | Deskripsi |
---|---|---|---|
Tidak tersedia | --projection_fields |
projectionFields
(Java,
Python) |
(Opsional) Daftar yang dipisahkan koma yang menunjukkan kolom dokumen yang akan dimuat dari ekspor Firestore. Secara default, BigQuery memuat semua kolom. Nama kolom peka huruf besar/kecil dan harus ada dalam ekspor. Anda tidak dapat menentukan jalur kolom dalam kolom peta seperti map.foo .
|
Konversi jenis data
BigQuery mengonversi data dari setiap dokumen di file ekspor Firestore menjadi jenis data BigQuery. Tabel berikut menjelaskan konversi di antara jenis data yang didukung.
Jenis data Firestore | Jenis data BigQuery |
---|---|
Array | RECORD |
Boolean | BOOLEAN |
Referensi | RECORD |
Tanggal dan waktu | TIMESTAMP |
Peta | RECORD |
Angka floating-point | FLOAT |
Titik geografis |
RECORD [{"lat","FLOAT"}, {"long","FLOAT"}] |
Bilangan Bulat | INTEGER |
String | STRING (dipotong menjadi 64 KB) |
Properti kunci Firestore
Setiap dokumen di Firestore memiliki kunci unik yang berisi informasi seperti ID dokumen dan jalur dokumen.
BigQuery membuat jenis data RECORD
(disebut juga
STRUCT
)
untuk kunci, dengan kolom bertingkat untuk setiap bagian informasi, seperti yang dijelaskan dalam
tabel berikut.
Properti kunci | Deskripsi | Jenis data BigQuery |
---|---|---|
__key__.app |
Nama aplikasi Firestore. | STRING |
__key__.id |
ID dokumen, atau null jika __key__.name
ditetapkan. |
INTEGER |
__key__.kind |
ID koleksi dokumen. | STRING |
__key__.name |
Nama dokumen, atau null jika __key__.id
ditetapkan. |
STRING |
__key__.namespace |
Firestore tidak mendukung namespace kustom. Namespace default direpresentasikan oleh string kosong. | STRING |
__key__.path |
Jalur dokumen: urutan dokumen dan pasangan koleksi dari koleksi root. Misalnya: "Country",
"USA", "PostalCode", 10011, "Route", 1234 . |
STRING |