Memuat data dengan operasi lintas-cloud
Sebagai administrator atau analis BigQuery, Anda dapat memuat data dari bucket Amazon Simple Storage Service (Amazon S3) atau Azure Blob Storage ke tabel BigQuery. Anda dapat menggabungkan data yang ditransfer dengan data yang ada di region Google Cloud atau memanfaatkan fitur BigQuery seperti BigQuery ML.
Anda dapat mentransfer data ke BigQuery dengan cara berikut:
Transfer data dari file di Amazon S3 dan Azure Blob Storage ke tabel BigQuery, menggunakan pernyataan
LOAD DATA
.Filter data dari file di Amazon S3 atau Blob Storage sebelum mentransfer hasil ke tabel BigQuery menggunakan pernyataan
CREATE TABLE AS SELECT
. Untuk menambahkan data ke tabel tujuan, gunakan pernyataanINSERT INTO SELECT
.Manipulasi data diterapkan pada tabel eksternal yang mereferensikan data dari Amazon S3 atau Blob Storage.
Kuota dan batas
Untuk mengetahui informasi tentang kuota dan batas, lihat kuota dan batas tugas kueri.
Harga
Anda akan dikenai biaya untuk byte yang ditransfer di berbagai cloud menggunakan
pernyataan LOAD
. Untuk mengetahui informasi harga, lihat bagian Omni Cross Cloud Data Transfer di harga BigQuery Omni.
Anda akan dikenai biaya untuk byte yang ditransfer di seluruh cloud menggunakan
pernyataan CREATE TABLE AS SELECT
atau
pernyataan INSERT INTO SELECT
dan untuk kapasitas komputasi.
Pernyataan LOAD
dan CREATE TABLE AS SELECT
memerlukan slot di
region BigQuery Omni guna memindai file Amazon S3 dan Blob Storage untuk memuatnya. Untuk informasi selengkapnya, lihat harga BigQuery Omni.
Sebelum memulai
Untuk memberi Google Cloud akses baca ke file di cloud lain, minta administrator Anda untuk membuat koneksi dan membagikannya kepada Anda. Untuk mengetahui informasi tentang cara membuat koneksi, lihat Menghubungkan ke Amazon S3 atau Blob Storage.
Peran yang diperlukan
Untuk mendapatkan izin yang diperlukan guna memuat data menggunakan transfer lintas-cloud,
minta administrator untuk memberi Anda
peran IAM BigQuery Data Editor (roles/bigquery.dataEditor
) pada set data.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.
Peran yang telah ditentukan ini berisi izin yang diperlukan untuk memuat data menggunakan transfer lintas cloud. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
Izin berikut diperlukan untuk memuat data menggunakan transfer lintas-cloud:
-
bigquery.tables.create
-
bigquery.tables.get
-
bigquery.tables.updateData
-
bigquery.tables.update
-
bigquery.jobs.create
-
bigquery.connections.use
Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran yang telah ditetapkan lainnya.
Untuk mengetahui informasi selengkapnya tentang peran IAM di BigQuery, lihat Peran dan izin yang telah ditentukan sebelumnya.
Memuat Data
Anda dapat memuat data ke BigQuery dengan
pernyataan LOAD DATA [INTO|OVERWRITE]
.
Batasan
- Pemuatan data ke tabel tujuan dengan partisi waktu penyerapan tidak didukung.
LOAD DATA
tugas tidak berjalan pada pemesanan. Tugas menggunakan slot sesuai permintaan yang dikelola oleh Google Cloud.- Koneksi dan set data tujuan harus termasuk dalam project yang sama. Pemuatan data di seluruh project tidak didukung.
LOAD DATA
hanya didukung saat Anda mentransfer data dari Amazon Simple Storage Service (Amazon S3) atau Azure Blob Storage ke region BigQuery yang ditempatkan bersama. Untuk mengetahui informasi selengkapnya, lihat Lokasi.- Anda dapat mentransfer data dari region
US
mana pun ke multi-regionUS
. Anda juga dapat mentransfer dari regionEU
mana pun ke multi-regionEU
.
- Anda dapat mentransfer data dari region
Contoh
Contoh 1
Contoh berikut memuat file parquet bernama sample.parquet
dari bucket Amazon S3
ke dalam tabel test_parquet
dengan skema deteksi otomatis:
LOAD DATA INTO mydataset.testparquet FROM FILES ( uris = ['s3://test-bucket/sample.parquet'], format = 'PARQUET' ) WITH CONNECTION `aws-us-east-1.test-connection`
Contoh 2
Contoh berikut memuat file CSV dengan awalan sampled*
dari
Blob Storage ke tabel test_csv
dengan partisi kolom
yang telah ditentukan berdasarkan waktu:
LOAD DATA INTO mydataset.test_csv (Number INT64, Name STRING, Time DATE) PARTITION BY Time FROM FILES ( format = 'CSV', uris = ['azure://test.blob.core.windows.net/container/sampled*'], skip_leading_rows=1 ) WITH CONNECTION `azure-eastus2.test-connection`
Contoh 3
Contoh berikut menimpa tabel test_parquet
yang ada dengan
data dari file bernama sample.parquet
dengan skema deteksi otomatis:
LOAD DATA OVERWRITE mydataset.testparquet FROM FILES ( uris = ['s3://test-bucket/sample.parquet'], format = 'PARQUET' ) WITH CONNECTION `aws-us-east-1.test-connection`
Data filter
Anda dapat memfilter data sebelum mentransfernya ke BigQuery menggunakan
pernyataan CREATE TABLE AS SELECT
dan pernyataan INSERT INTO SELECT
.
Batasan
Jika hasil kueri
SELECT
melebihi 20 GiB dalam byte logis, maka kueri akan gagal. Tabel tidak dibuat dan data tidak ditransfer. Untuk mempelajari cara mengurangi ukuran data yang dipindai, lihat Mengurangi data yang diproses dalam kueri.Tabel sementara tidak didukung.
Mentransfer format data geospasial Well-known binary (WKB) tidak didukung.
Pernyataan
INSERT INTO SELECT
tidak mendukung pentransferan data ke tabel yang dikelompokkan.Dalam pernyataan
INSERT INTO SELECT
, jika tabel tujuan sama dengan tabel sumber dalam kueriSELECT
, maka pernyataanINSERT INTO SELECT
tidak akan mengubah baris apa pun di tabel tujuan. Tabel tujuan tidak diubah karena BigQuery tidak dapat membaca data lintas region.CREATE TABLE AS SELECT
danINSERT INTO SELECT
hanya didukung saat Anda mentransfer data dari Amazon S3 atau Blob Storage ke region BigQuery yang ditempatkan bersama. Untuk mengetahui informasi selengkapnya, lihat Lokasi.- Anda dapat mentransfer data dari region
US
mana pun ke multi-regionUS
. Anda juga dapat mentransfer dari regionEU
mana pun ke multi-regionEU
.
- Anda dapat mentransfer data dari region
Contoh
Contoh 1
Misalkan Anda memiliki tabel BigLake bernama myawsdataset.orders
yang
mereferensikan data dari Amazon S3.
Anda ingin mentransfer data dari tabel tersebut ke
tabel BigQuery myotherdataset.shipments
di multi-region AS.
Pertama, tampilkan informasi tentang tabel myawsdataset.orders
:
bq show myawsdataset.orders;
Outputnya mirip dengan hal berikut ini:
Last modified Schema Type Total URIs Expiration ----------------- -------------------------- ---------- ------------ ----------- 31 Oct 17:40:28 |- l_orderkey: integer EXTERNAL 1 |- l_partkey: integer |- l_suppkey: integer |- l_linenumber: integer |- l_returnflag: string |- l_linestatus: string |- l_commitdate: date
Selanjutnya, tampilkan informasi tentang tabel myotherdataset.shipments
:
bq show myotherdataset.shipments
Outputnya mirip dengan yang berikut ini. Beberapa kolom dihilangkan untuk menyederhanakan output.
Last modified Schema Total Rows Total Bytes Expiration Time Partitioning Clustered Fields Total Logical ----------------- --------------------------- ------------ ------------- ------------ ------------------- ------------------ --------------- 31 Oct 17:34:31 |- l_orderkey: integer 3086653 210767042 210767042 |- l_partkey: integer |- l_suppkey: integer |- l_commitdate: date |- l_shipdate: date |- l_receiptdate: date |- l_shipinstruct: string |- l_shipmode: string
Sekarang, dengan pernyataan CREATE TABLE AS SELECT
, Anda dapat memuat data secara
selektif ke tabel myotherdataset.orders
di multi-region AS:
CREATE OR REPLACE TABLE myotherdataset.orders PARTITION BY DATE_TRUNC(l_commitdate, YEAR) AS SELECT * FROM myawsdataset.orders WHERE EXTRACT(YEAR FROM l_commitdate) = 1992;
Anda kemudian dapat melakukan operasi gabungan dengan tabel yang baru dibuat:
SELECT orders.l_orderkey, orders.l_orderkey, orders.l_suppkey, orders.l_commitdate, orders.l_returnflag, shipments.l_shipmode, shipments.l_shipinstruct FROM myotherdataset.shipments JOIN `myotherdataset.orders` as orders ON orders.l_orderkey = shipments.l_orderkey AND orders.l_partkey = shipments.l_partkey AND orders.l_suppkey = shipments.l_suppkey WHERE orders.l_returnflag = 'R'; -- 'R' means refunded.
Jika data baru tersedia, tambahkan data tahun 1993 ke tabel tujuan
menggunakan pernyataan INSERT INTO SELECT
:
INSERT INTO myotherdataset.orders SELECT * FROM myawsdataset.orders WHERE EXTRACT(YEAR FROM l_commitdate) = 1993;
Contoh 2
Contoh berikut menyisipkan data ke dalam tabel berpartisi berdasarkan waktu penyerapan:
CREATE TABLE mydataset.orders(id String, numeric_id INT) PARTITION BY _PARTITIONDATE;
Setelah membuat tabel berpartisi, Anda dapat memasukkan data ke tabel berpartisi berdasarkan waktu penyerapan:
INSERT INTO mydataset.orders( _PARTITIONTIME, id, numeric_id) SELECT TIMESTAMP("2023-01-01"), id, numeric_id, FROM mydataset.ordersof23 WHERE numeric_id > 4000000;
Praktik terbaik
- Hindari memuat beberapa file yang berukuran kurang dari 5 MB. Sebagai gantinya, buat tabel eksternal untuk file Anda dan ekspor hasil kueri ke Amazon S3 atau Blob Storage untuk membuat file yang lebih besar. Metode ini membantu meningkatkan waktu transfer data Anda. Untuk mengetahui informasi tentang batas hasil kueri maksimum, lihat Ukuran hasil kueri maksimum BigQuery Omni.
- Jika data sumber Anda berada dalam file yang dikompresi gzip, maka saat membuat tabel eksternal, tetapkan
opsi
external_table_options.compression
keGZIP
.
Langkah selanjutnya
- Pelajari tentang BigQuery ML.
- Pelajari tentang BigQuery Omni.
- Pelajari cara menjalankan kueri.
- Pelajari cara menyiapkan Kontrol Layanan VPC untuk BigQuery Omni.
- Pelajari cara menjadwalkan dan mengelola tugas pemuatan berulang dari Amazon S3 ke BigQuery dan Blob Storage ke BigQuery.