Transfer Cloud Storage
Dengan konektor BigQuery Data Transfer Service untuk Cloud Storage, Anda dapat menjadwalkan pemuatan data berulang dari Cloud Storage ke BigQuery.
Sebelum memulai
Sebelum Anda membuat transfer data Cloud Storage, lakukan langkah berikut:
- Pastikan Anda telah menyelesaikan semua tindakan yang diperlukan dalam Mengaktifkan BigQuery Data Transfer Service.
- Ambil Cloud Storage URI.
- Buat set data BigQuery untuk menyimpan data Anda.
- Buat tabel tujuan untuk transfer data Anda dan tentukan definisi skema.
- Jika Anda berencana menentukan kunci enkripsi yang dikelola pelanggan (CMEK), pastikan bahwa akun layanan memiliki izin untuk mengenkripsi dan mendekripsi, dan Anda memiliki ID resource kunci Cloud KMS yang diperlukan untuk menggunakan CMEK. Untuk mengetahui informasi tentang cara kerja CMEK dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan transfer.
Batasan
Transfer data berulang dari Cloud Storage ke BigQuery memiliki batasan berikut:
- Semua file yang cocok dengan pola yang ditentukan oleh parameter pengganti atau parameter runtime untuk transfer data Anda harus memiliki skema yang sama dengan yang ditetapkan untuk tabel tujuan. Jika tidak, transfer akan gagal. Perubahan skema tabel antar-operasi juga menyebabkan transfer gagal.
- Karena objek Cloud Storage dapat diberi versi, penting untuk diketahui bahwa objek Cloud Storage yang diarsipkan tidak mendukung transfer data BigQuery. Objek harus aktif agar dapat ditransfer.
- Tidak seperti pemuatan data individual dari Cloud Storage ke BigQuery, untuk transfer data yang sedang berlangsung, Anda harus membuat tabel tujuan sebelum menyiapkan transfer. Untuk file CSV dan JSON, Anda juga harus menentukan skema tabel terlebih dahulu. BigQuery tidak dapat membuat tabel sebagai bagian dari proses transfer data berulang.
- Transfer data dari Cloud Storage menetapkan parameter Write preferences ke
APPEND
secara default. Dalam mode ini, file yang tidak dimodifikasi hanya dapat dimuat ke BigQuery satu kali. Jika propertilast modification time
file diperbarui, file tersebut akan dimuat ulang. BigQuery Data Transfer Service tidak menjamin semua file akan ditransfer atau ditransfer hanya satu kali jika file Cloud Storage diubah selama transfer data. Anda harus tunduk kepada batasan berikut saat memuat data ke BigQuery dari bucket Cloud Storage:
Jika lokasi set data Anda ditetapkan ke nilai selain multi-region
US
, bucket Cloud Storage harus berada di region yang sama atau berada dalam multi-region yang sama dengan set data tersebut.BigQuery tidak menjamin konsistensi data untuk sumber data eksternal. Perubahan pada data yang mendasari saat kueri berjalan dapat menyebabkan perilaku yang tidak terduga.
BigQuery tidak mendukung pembuatan versi objek Cloud Storage. Jika Anda menyertakan nomor pembuatan dalam Cloud Storage URI, tugas pemuatan akan gagal.
Bergantung pada format data sumber Cloud Storage Anda, mungkin akan ada batasan tambahan. Untuk informasi selengkapnya, lihat:
Bucket Cloud Storage Anda harus berada di lokasi yang kompatibel dengan region atau multi-region dari set data tujuan di BigQuery. Lokasi ini dinamakan kolokasi. Baca Lokasi data transfer Cloud Storage untuk mengetahui detailnya.
Interval minimum
- File sumber akan segera diambil untuk transfer data, tanpa usia file minimum.
- Waktu interval minimum antar-transfer data berulang adalah 15 menit. Interval default untuk transfer data berulang adalah setiap 24 jam.
Izin yang diperlukan
Ketika memuat data ke BigQuery, Anda memerlukan izin untuk memuat data ke dalam tabel dan partisi BigQuery baru atau yang sudah ada. Jika memuat data dari Cloud Storage, Anda juga memerlukan akses ke bucket yang berisi data Anda. Pastikan Anda memiliki izin yang diperlukan berikut:
BigQuery: Pastikan orang atau akun layanan yang membuat transfer data memiliki izin berikut di BigQuery:
- Izin
bigquery.transfers.update
untuk membuat transfer data - Izin
bigquery.datasets.get
danbigquery.datasets.update
pada set data target
Peran IAM
bigquery.admin
yang telah ditetapkan mencakup izinbigquery.transfers.update
,bigquery.datasets.update
, danbigquery.datasets.get
. Untuk mengetahui informasi lebih lanjut tentang peran IAM dalam BigQuery Data Transfer Service, lihat Kontrol akses.- Izin
Cloud Storage: Izin
storage.objects.get
diperlukan di bucket individual atau yang lebih tinggi. Jika menggunakan karakter pengganti URI, Anda juga harus memiliki izinstorage.objects.list
. Jika ingin menghapus file sumber setelah setiap transfer berhasil, Anda juga memerlukan izinstorage.objects.delete
. Peran IAMstorage.objectAdmin
yang telah ditetapkan mencakup semua izin ini.
Menyiapkan transfer Cloud Storage
Untuk membuat transfer data Cloud Storage di BigQuery Data Transfer Service:
Konsol
Buka halaman Data transfers di konsol Google Cloud.
Klik
Create transfer.Di bagian Source type, untuk Source, pilih Google Cloud Storage.
Di bagian Transfer config name, untuk Display name, masukkan nama untuk transfer data, seperti
My Transfer
. Nama transfer dapat berupa nilai apa pun yang memungkinkan Anda mengidentifikasi transfer jika perlu mengubahnya nanti.Di bagian Schedule options:
Pilih Repeat frequency. Jika memilih Jam, Hari, Minggu, atau Bulan, Anda juga harus menentukan frekuensinya. Anda juga dapat memilih Custom untuk menentukan frekuensi pengulangan kustom. Jika Anda memilih On-demand, transfer data ini akan berjalan saat Anda memicu transfer secara manual.
Jika berlaku, pilih Start now atau Start at set time dan masukkan tanggal mulai dan waktu proses.
Di bagian Destination settings, untuk Destination dataset, pilih set data yang Anda buat untuk menyimpan data.
Di bagian Data source details:
- Untuk Destination table, masukkan nama tabel tujuan. Tabel tujuan harus mengikuti aturan penamaan tabel. Nama tabel tujuan juga mendukung parameter.
- Untuk Cloud Storage URI, masukkan Cloud Storage URI. Wildcard dan parameter didukung.
- Untuk Write preference, pilih:
- APPEND untuk menambahkan data baru ke tabel tujuan yang sudah ada secara bertahap. APPEND adalah nilai default untuk Write preference.
- MIRROR untuk menimpa data di tabel tujuan selama setiap transfer data berjalan.
Untuk mengetahui informasi selengkapnya tentang cara BigQuery Data Transfer Service menyerap data menggunakan APPEND atau MIRROR, lihat Penyerapan data untuk transfer Cloud Storage. Untuk mengetahui informasi selengkapnya tentang kolom
writeDisposition
, lihatJobConfigurationLoad
.- Untuk Delete source files after transfer, centang kotak jika Anda ingin menghapus file sumber setelah setiap transfer data berhasil. Menghapus tugas adalah upaya terbaik. Tugas penghapusan tidak akan dicoba lagi jika upaya pertama untuk menghapus file sumber gagal.
Di bagian Transfer Options:
- Di bagian All Formats:
- Untuk Number of errors allowed, masukkan jumlah maksimum data buruk yang dapat diabaikan
BigQuery saat menjalankan tugas. Jika jumlah kumpulan data buruk melebihi nilai ini,
error 'tidak valid' akan ditampilkan di hasil tugas,
dan tugas akan gagal. Nilai defaultnya adalah
0
. - (Opsional) Untuk Decimal target types, masukkan
daftar yang dipisahkan koma yang berisi kemungkinan jenis data SQL yang dapat dikonversi dari
nilai desimal sumber. Jenis data SQL
yang dipilih untuk konversi bergantung pada kondisi
berikut:
- Jenis data yang dipilih untuk konversi akan menjadi jenis data pertama dalam daftar berikut yang mendukung presisi dan skala data sumber, dalam urutan ini: NUMERIC,BIGNUMERIC, dan STRING.
- Jika tidak satu pun jenis data yang tercantum akan mendukung presisi dan skala, jenis data yang mendukung rentang terluas dalam daftar yang ditentukan yang akan dipilih. Error akan ditampilkan jika nilai melebihi rentang yang didukung saat membaca data sumber.
- Jenis data STRING mendukung semua nilai presisi dan skala.
- Jika kolom ini dibiarkan kosong, jenis data akan ditetapkan secara default ke "NUMERIC,STRING" untuk ORC, dan "NUMERIC" untuk format file lainnya.
- Kolom ini tidak boleh berisi jenis data duplikat.
- Urutan jenis data yang Anda cantumkan dalam kolom ini akan diabaikan.
- Untuk Number of errors allowed, masukkan jumlah maksimum data buruk yang dapat diabaikan
BigQuery saat menjalankan tugas. Jika jumlah kumpulan data buruk melebihi nilai ini,
error 'tidak valid' akan ditampilkan di hasil tugas,
dan tugas akan gagal. Nilai defaultnya adalah
- Di bagian JSON, CSV:
- Untuk Ignore unknown values, centang kotak jika Anda ingin transfer data menghapus data yang tidak sesuai dengan skema tabel tujuan.
- Di bagian AVRO:
- Untuk Use avro logical types, centang kotak jika Anda ingin
transfer data mengonversi jenis logika Avro ke jenis
data BigQuery yang sesuai. Perilaku default-nya adalah mengabaikan atribut
logicalType
untuk sebagian besar jenis dan menggunakan jenis Avro yang mendasarinya.
- Untuk Use avro logical types, centang kotak jika Anda ingin
transfer data mengonversi jenis logika Avro ke jenis
data BigQuery yang sesuai. Perilaku default-nya adalah mengabaikan atribut
Di bagian CSV:
- Untuk Field delimiter, masukkan karakter yang memisahkan kolom. Nilai defaultnya adalah koma.
- Untuk Tanda kutip, masukkan karakter yang digunakan untuk
mengutip bagian data di file CSV. Nilai defaultnya adalah
tanda kutip ganda (
"
). - Untuk Header rows to skip, masukkan jumlah baris header
dalam file sumber jika Anda tidak ingin mengimpornya. Nilai
defaultnya adalah
0
. - Untuk Allow quoted newlines, centang kotak jika Anda ingin mengizinkan baris baru dalam kolom yang dikutip.
- Untuk Allow jagged rows, centang kotak jika Anda ingin
mengizinkan transfer data baris dengan kolom
NULLABLE
yang tidak ada.
- Di bagian All Formats:
Di menu Service Account, pilih service account dari akun layanan yang terkait dengan project Google Cloud Anda. Anda dapat mengaitkan akun layanan dengan transfer data, bukan menggunakan kredensial pengguna. Untuk mengetahui informasi selengkapnya tentang cara menggunakan akun layanan dengan transfer data, lihat Menggunakan akun layanan.
- Jika Anda login dengan identitas gabungan, akun layanan diperlukan untuk membuat transfer data. Jika Anda login dengan Akun Google, akun layanan untuk transfer data bersifat opsional.
- Akun layanan harus memiliki izin yang diperlukan untuk BigQuery dan Cloud Storage.
Opsional: Di bagian Notification options:
- Klik tombol untuk mengaktifkan notifikasi email. Saat Anda mengaktifkan opsi ini, pemilik konfigurasi transfer data akan menerima notifikasi email saat proses transfer gagal.
- Untuk Select a Pub/Sub topic, pilih nama topik atau klik Create a topic. Opsi ini mengonfigurasi notifikasi operasi Pub/Sub untuk transfer Anda.
Opsional: Di bagian Advanced options:
- Jika Anda menggunakan CMEK, pilih Kunci yang dikelola pelanggan. Daftar CMEK yang tersedia akan muncul dan dapat Anda pilih.
Untuk mengetahui informasi tentang cara kerja CMEK dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan transfer.
Klik Simpan.
bq
Masukkan perintah bq mk
dan berikan flag pembuatan transfer — --transfer_config
. Flag berikut juga diperlukan:
--data_source
--display_name
--target_dataset
--params
Flag opsional:
--destination_kms_key
: Menentukan ID resource kunci untuk kunci Cloud KMS jika Anda menggunakan kunci enkripsi yang dikelola pelanggan (CMEK) untuk transfer data ini. Untuk mengetahui informasi tentang cara kerja CMEK dengan BigQuery Data Transfer Service, lihat Menentukan kunci enkripsi dengan transfer.--service_account_name
: Menentukan akun layanan yang akan digunakan untuk autentikasi transfer Cloud Storage, bukan akun pengguna Anda.
bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=DATA_SOURCE \ --display_name=NAME \ --target_dataset=DATASET \ --destination_kms_key="DESTINATION_KEY" \ --params='PARAMETERS' \ --service_account_name=SERVICE_ACCOUNT_NAME
Dengan keterangan:
- PROJECT_ID adalah project ID Anda. Jika
--project_id
tidak diberikan untuk menentukan project tertentu, project default akan digunakan. - DATA_SOURCE adalah sumber data, misalnya,
google_cloud_storage
. - NAME adalah nama tampilan untuk konfigurasi transfer data. Nama transfer dapat berupa nilai apa pun yang memungkinkan Anda mengidentifikasi transfer jika perlu mengubahnya nanti.
- DATASET adalah set data target untuk konfigurasi transfer.
- DESTINATION_KEY: ID resource kunci Cloud KMS—
misalnya,
projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name
. - PARAMETERS berisi parameter untuk konfigurasi transfer yang dibuat
dalam format JSON. Contoh:
--params='{"param":"param_value"}'
.destination_table_name_template
: nama tabel BigQuery tujuan.data_path_template
: URI Cloud Storage yang berisi file Anda yang akan ditransfer, dan dapat menyertakan satu karakter pengganti.write_disposition
: menentukan apakah file yang cocok ditambahkan ke tabel tujuan atau dicerminkan sepenuhnya. Nilai yang didukung adalahAPPEND
atauMIRROR
. Untuk mengetahui informasi tentang cara BigQuery Data Transfer Service menambahkan atau mencerminkan data dalam transfer Cloud Storage, lihat Penyerapan data untuk transfer Cloud Storage.file_format
: format file yang ingin Anda transfer. Formatnya dapat berupaCSV
,JSON
,AVRO
,PARQUET
, atauORC
. Nilai defaultnya adalahCSV
.max_bad_records
: untuk nilaifile_format
apa pun, jumlah maksimum data buruk yang dapat diabaikan. Nilai defaultnya adalah0
.decimal_target_types
: untuk nilaifile_format
apa pun, daftar yang dipisahkan koma dari kemungkinan jenis data SQL yang dapat dikonversi menjadi nilai desimal sumber. Jika kolom ini tidak disediakan, jenis data akan ditetapkan secara default ke"NUMERIC,STRING"
untukORC
, dan"NUMERIC"
untuk format file lainnya.ignore_unknown_values
: untuk nilaifile_format
apa pun, tetapkan keTRUE
untuk menerima baris yang berisi nilai yang tidak cocok dengan skema. Untuk mengetahui informasi selengkapnya, lihat detail kolomignoreUnknownvalues
di tabel referensiJobConfigurationLoad
.use_avro_logical_types
: untuk nilaiAVRO
file_format
, tetapkan keTRUE
untuk menafsirkan jenis logis ke dalam jenis yang sesuai (misalnya,TIMESTAMP
), bukan hanya menggunakan jenis mentah (misalnya,INTEGER
).parquet_enum_as_string
: untuk nilaiPARQUET
file_format
, tetapkan keTRUE
untuk menyimpulkan jenis logisPARQUET
ENUM
sebagaiSTRING
, bukanBYTES
default.parquet_enable_list_inference
: untuk nilaiPARQUET
file_format
, tetapkan keTRUE
untuk menggunakan inferensi skema khusus untuk jenis logikaPARQUET
LIST
.reference_file_schema_uri
: jalur URI ke file referensi dengan skema pembaca.field_delimiter
: untuk nilaiCSV
file_format
, karakter yang memisahkan kolom. Nilai defaultnya adalah koma.quote
: untuk nilaiCSV
file_format
, karakter yang digunakan untuk mengutip bagian data dalam file CSV. Nilai defaultnya adalah tanda kutip ganda ("
).skip_leading_rows
: untuk nilaiCSV
file_format
, tunjukkan jumlah baris header utama yang tidak ingin Anda impor. Nilai defaultnya adalah .allow_quoted_newlines
: untuk nilaiCSV
file_format
, tetapkan keTRUE
untuk mengizinkan baris baru dalam kolom yang diapit tanda petik.allow_jagged_rows
: untuk nilaiCSV
file_format
, tetapkan keTRUE
untuk menerima baris yang tidak memiliki kolom opsional di belakangnya. Nilai yang tidak ada akan diisi denganNULL
.preserve_ascii_control_characters
: untuk nilaiCSV
file_format
, tetapkan keTRUE
untuk mempertahankan karakter kontrol ASCII yang disematkan.encoding
: menentukan jenis encodingCSV
. Nilai yang didukung adalahUTF8
,ISO_8859_1
,UTF16BE
,UTF16LE
,UTF32BE
, danUTF32LE
.delete_source_files
: ditetapkan keTRUE
untuk menghapus file sumber setelah setiap transfer berhasil. Tugas penghapusan tidak akan dijalankan ulang jika upaya pertama untuk menghapus file sumber gagal. Nilai defaultnya adalahFALSE
.
- SERVICE_ACCOUNT_NAME adalah nama akun layanan yang digunakan untuk
mengautentikasi transfer Anda. Akun layanan harus dimiliki oleh
project_id
yang sama yang digunakan untuk membuat transfer dan harus memiliki semua izin yang diperlukan.
Misalnya, perintah berikut akan membuat transfer data Cloud Storage
bernama My Transfer
menggunakan nilai data_path_template
sebesar
gs://mybucket/myfile/*.csv
, set data target mydataset
, dan file_format
CSV
. Contoh ini mencakup nilai non-default untuk parameter opsional
yang terkait dengan file_format CSV
.
Transfer data dibuat di project default:
bq mk --transfer_config \
--target_dataset=mydataset \
--project_id=myProject \
--display_name='My Transfer' \
--destination_kms_key=projects/myproject/locations/mylocation/keyRings/myRing/cryptoKeys/myKey \
--params='{"data_path_template":"gs://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"file_format":"CSV",
"max_bad_records":"1",
"ignore_unknown_values":"true",
"field_delimiter":"|",
"quote":";",
"skip_leading_rows":"1",
"allow_quoted_newlines":"true",
"allow_jagged_rows":"false",
"delete_source_files":"true"}' \
--data_source=google_cloud_storage \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/ 5dd12f26-0000-262f-bc38-089e0820fe38
Setelah menjalankan perintah, Anda akan menerima pesan seperti berikut:
[URL omitted] Please copy and paste the above URL into your web browser and
follow the instructions to retrieve an authentication code.
Ikuti petunjuknya, lalu tempel kode autentikasi di command line.
API
Gunakan metode projects.locations.transferConfigs.create
dan berikan instance resource TransferConfig
.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Menentukan kunci enkripsi dengan transfer
Anda dapat menentukan kunci enkripsi yang dikelola pelanggan (CMEK) guna mengenkripsi data untuk proses transfer. Anda dapat menggunakan CMEK untuk mendukung transfer dari Cloud Storage.Saat Anda menentukan CMEK dengan transfer, BigQuery Data Transfer Service akan menerapkan CMEK ke cache perantara data yang diserap dalam disk, sehingga seluruh alur kerja transfer data mematuhi CMEK.
Anda tidak dapat memperbarui transfer yang sudah ada untuk menambahkan CMEK jika transfer tersebut awalnya tidak dibuat dengan CMEK. Misalnya, Anda tidak dapat mengubah tabel tujuan yang awalnya dienkripsi secara default menjadi kini dienkripsi dengan CMEK. Sebaliknya, Anda juga tidak dapat mengubah tabel tujuan yang dienkripsi CMEK agar memiliki jenis enkripsi yang berbeda.
Anda dapat memperbarui CMEK untuk transfer jika konfigurasi transfer awalnya dibuat dengan enkripsi CMEK. Saat Anda memperbarui CMEK untuk konfigurasi transfer, BigQuery Data Transfer Service akan menyebarkan CMEK ke tabel tujuan pada proses transfer berikutnya. Di sini, BigQuery Data Transfer Service akan mengganti CMEK yang sudah usang dengan CMEK baru selama proses transfer. Untuk informasi selengkapnya, lihat Memperbarui transfer.
Anda juga dapat menggunakan kunci default project. Saat Anda menentukan kunci default project dengan transfer, BigQuery Data Transfer Service akan menggunakan kunci default project sebagai kunci default untuk setiap konfigurasi transfer baru.
Memicu transfer secara manual
Selain transfer data terjadwal otomatis dari Cloud Storage, Anda dapat memicu transfer secara manual untuk memuat file data tambahan.
Jika konfigurasi transfer diparameterisasi runtime, Anda harus menentukan rentang tanggal saat transfer tambahan akan dimulai.
Untuk memicu transfer data:
Konsol
Buka halaman BigQuery di konsol Google Cloud.
Klik
Data transfers.Pilih transfer data Anda dari daftar.
Klik Run transfer now atau Schedule backfill (untuk konfigurasi transfer berparameter runtime).
Jika Anda mengeklik Run transfer now, pilih Run one time transfer atau Run for specific date jika berlaku. Jika Anda memilih Run for specific date, pilih tanggal dan waktu tertentu:
Jika Anda mengeklik Schedule backfill, pilih Run one time transfer atau Run for a date range jika berlaku. Jika Anda memilih Run for a date range, pilih tanggal dan waktu mulai dan akhir:
Klik Oke.
bq
Masukkan perintah bq mk
dan berikan flag --transfer_run
. Anda dapat menggunakan flag --run_time
atau flag --start_time
dan --end_time
.
bq mk \ --transfer_run \ --start_time='START_TIME' \ --end_time='END_TIME' \ RESOURCE_NAME
bq mk \ --transfer_run \ --run_time='RUN_TIME' \ RESOURCE_NAME
Dengan keterangan:
START_TIME dan END_TIME adalah stempel waktu yang diakhiri dengan
Z
atau berisi offset zona waktu yang valid. Contoh:2017-08-19T12:11:35.00Z
2017-05-25T00:00:00+00:00
RUN_TIME adalah stempel waktu yang menentukan waktu untuk menjadwalkan proses transfer data. Jika ingin menjalankan transfer satu kali untuk waktu saat ini, Anda dapat menggunakan flag
--run_time
.RESOURCE_NAME adalah nama resource transfer (juga disebut sebagai konfigurasi transfer), misalnya,
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7
. Jika Anda tidak mengetahui nama resource transfer, jalankan perintahbq ls --transfer_config --transfer_location=LOCATION
untuk menemukan nama resource.
API
Gunakan metode projects.locations.transferConfigs.startManualRuns
dan berikan resource konfigurasi transfer menggunakan parameter
parent
.
Langkah berikutnya
- Pelajari parameter runtime di transfer Cloud Storage.
- Pelajari BigQuery Data Transfer Service lebih lanjut.