Memuat data CSV dari Cloud Storage
Saat memuat data CSV dari Cloud Storage, Anda dapat memuat data ke dalam tabel atau partisi baru, atau Anda dapat menambahkan ke atau menimpa tabel atau partisi yang sudah ada. Setelah dimuat ke BigQuery, data Anda akan dikonversi ke dalam format berbasis kolom untuk Capacitor (format penyimpanan BigQuery).
Saat memuat data dari Cloud Storage ke tabel BigQuery, set data yang berisi tabel harus berada di lokasi regional atau multi- regional yang sama dengan bucket Cloud Storage.
Untuk informasi tentang cara memuat data CSV dari file lokal, lihat Memuat data ke BigQuery dari sumber data lokal.
Cobalah sendiri
Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa BigQuery dalam skenario dunia nyata. Pelanggan baru mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
Coba BigQuery gratisBatasan
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.
Saat Anda memuat file CSV ke BigQuery, perhatikan hal berikut:
- File CSV tidak mendukung data bertingkat atau berulang.
- Menghapus karakter tanda urutan byte (BOM). Hal tersebut dapat menyebabkan masalah yang tidak terduga.
- Jika Anda menggunakan kompresi gzip, BigQuery tidak dapat membaca data secara paralel. Memuat data CSV terkompresi ke BigQuery akan lebih lambat dibandingkan pemuatan data yang tidak dikompresi. Lihat Memuat data yang dikompresi dan tidak dikompresi.
- Anda tidak dapat menyertakan file yang dikompresi dan tidak dikompresi dalam tugas pemuatan yang sama.
- Ukuran maksimum file gzip adalah 4 GB.
- Memuat data CSV menggunakan deteksi otomatis skema tidak otomatis mendeteksi header jika semua kolom berjenis string. Dalam hal ini, tambahkan kolom numerik ke input atau deklarasikan skema secara eksplisit.
- Saat Anda memuat data CSV atau JSON, nilai dalam kolom
DATE
harus menggunakan pemisah tanda hubung (-
) dan tanggal harus dalam format berikut:YYYY-MM-DD
(tahun-bulan -hari). - Saat Anda memuat data JSON atau CSV, nilai dalam kolom
TIMESTAMP
harus menggunakan tanda hubung (-
) atau garis miring (/
) untuk bagian tanggal stempel waktu, dan tanggal harus dalam salah satu format berikut:YYYY-MM-DD
(tahun-bulan-hari) atauYYYY/MM/DD
(tahun/bulan/hari). Bagianhh:mm:ss
(jam-menit-detik) dari stempel waktu harus menggunakan pemisah titik dua (:
). - Memuat data CSV menggunakan deteksi otomatis skema tidak mendukung nama kolom fleksibel secara default. Untuk mendaftar dalam pratinjau ini, isi formulir pendaftaran.
- File Anda harus memenuhi batas ukuran file CSV yang dijelaskan dalam batas tugas pemuatan.
Sebelum memulai
Berikan peran Identity and Access Management (IAM) yang memberi pengguna izin yang diperlukan untuk melakukan setiap tugas dalam dokumen ini, dan buat set data untuk menyimpan data Anda.
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 Anda untuk memberi Anda
peran IAM Storage Admin (roles/storage.admin
) di bucket.
Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.
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 lainnya yang telah ditetapkan sebelumnya.
Membuat set data
Membuat set data BigQuery untuk menyimpan data Anda.
Kompresi CSV
Anda dapat menggunakan utilitas gzip
untuk mengompresi file CSV. Perhatikan bahwa gzip
melakukan kompresi file
lengkap, tidak seperti kompresi konten file yang dilakukan oleh
codec kompresi untuk format file lain, seperti Avro. Menggunakan gzip
untuk
mengompresi file CSV mungkin akan memengaruhi performa; untuk informasi selengkapnya
tentang kompromi, lihat
Memuat data yang dikompresi dan tidak dikompresi.
Memuat data CSV ke tabel
Untuk memuat data CSV dari Cloud Storage ke tabel BigQuery yang baru, pilih salah satu opsi berikut:
Konsol
Untuk mengikuti panduan langkah demi langkah tugas ini langsung di Cloud Shell Editor, klik Pandu Saya:
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.
- Untuk File format, pilih CSV.
- 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, masukkan definisi
schema.
Untuk mengaktifkan deteksi otomatis dari suatu skema,
pilih Auto detect.
Anda dapat memasukkan informasi skema secara manual menggunakan salah satu
metode berikut:
- Opsi 1: Klik Edit as text dan tempelkan skema dalam bentuk array JSON. Saat menggunakan array JSON, Anda menghasilkan skema menggunakan proses yang sama seperti membuat file skema JSON.
Anda dapat melihat skema tabel yang ada dalam format JSON dengan memasukkan perintah berikut:
bq show --format=prettyjson dataset.table
- Opsi 2: Klik Type, dan Mode untuk setiap kolom. Add field, lalu masukkan skema tabel. Tentukan Name,
- Opsi 1: Klik Edit as text dan tempelkan skema dalam bentuk array JSON. Saat menggunakan array JSON, Anda menghasilkan skema menggunakan proses yang sama seperti membuat file skema JSON.
Anda dapat melihat skema tabel yang ada dalam format JSON dengan memasukkan perintah berikut:
- 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.
- Untuk Number of errors allowed, terima nilai default
0
atau masukkan jumlah maksimum baris berisi error yang dapat diabaikan. Jika jumlah baris yang berisi error melebihi nilai ini, tugas akan menghasilkan pesaninvalid
dan gagal. Opsi ini hanya berlaku untuk file CSV dan JSON. - Jika Anda ingin mengabaikan nilai dalam baris yang tidak ada dalam skema tabel, pilih Unknown values.
- Sebagai Pembatas kolom , pilih karakter yang memisahkan sel dalam file CSV Anda: Koma dan Tab dan Pipa , atau Khusus singkat ini. Jika memilih Custom, masukkan pemisah dalam kotak Custom field delimiter. Nilai defaultnya adalah Comma
- Untuk Header rows to skip, masukkan jumlah baris header yang akan dilewati
di bagian atas file CSV. Nilai defaultnya adalah
0
. - Untuk Baris baru yang dikutip, centang Izinkan baris baru yang dikutip untuk mengizinkan
bagian data yang dikutip yang berisi karakter baris baru dalam file CSV. Nilai
defaultnya adalah
false
. - Untuk Jagged rows, centang Allow jagged rows untuk menerima baris dalam file CSV
yang tidak memiliki kolom opsional di akhir. Nilai yang hilang
diperlakukan sebagai null. Jika tidak dicentang, kumpulan data dengan kolom di belakangnya yang hilang
diperlakukan sebagai kumpulan data buruk, dan jika ada terlalu banyak kumpulan data buruk, error
yang tidak valid akan ditampilkan dalam hasil tugas. Nilai defaultnya adalah
false
. - Untuk Encryption, klik Customer-managed key untuk menggunakan Cloud Key Management Service key. Jika Anda membiarkan setelan Google-managed key, BigQuery akan mengenkripsi data dalam penyimpanan.
- Klik Buat tabel.
SQL
Gunakan
pernyataan DDL LOAD DATA
.
Contoh berikut memuat file CSV ke tabel baru mytable
:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
LOAD DATA OVERWRITE mydataset.mytable (x INT64,y STRING) FROM FILES ( format = 'CSV', uris = ['gs://bucket/path/file.csv']);
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
bq
Gunakan perintah bq load
, tentukan CSV
menggunakan flag
--source_format
, dan sertakan Cloud Storage URI.
Anda dapat menyertakan URI tunggal, daftar URI yang dipisahkan koma, atau URI
yang berisi karakter pengganti.
Berikan skema secara inline, dalam file definisi skema, atau gunakan
deteksi otomatis skema. Jika Anda tidak menentukan
skema, dan --autodetect
adalah false
, serta tabel tujuan
tersedia, skema tabel tujuan akan digunakan.
(Opsional) Berikan flag --location
dan tetapkan nilainya ke
lokasi Anda.
Flag opsional lainnya meliputi:
--allow_jagged_rows
: Jika ditentukan, terima baris dalam file CSV yang tidak memiliki kolom opsional di akhir. Nilai yang hilang diperlakukan sebagai null. Jika tidak dicentang, kumpulan data dengan kolom di akhir yang hilang akan diperlakukan sebagai data yang buruk, dan jika ada terlalu banyak data buruk, error yang tidak valid akan ditampilkan dalam hasil tugas. Nilai defaultnya adalahfalse
.--allow_quoted_newlines
: Jika ditentukan, mengizinkan bagian data yang dikutip yang berisi karakter baris baru dalam file CSV. Nilai defaultnya adalahfalse
.--field_delimiter
: Karakter yang menunjukkan batas antara kolom dalam data.\t
dantab
diizinkan untuk pembatas tab. Nilai defaultnya adalah,
.--null_marker
: String kustom opsional yang mewakili nilai NULL dalam data CSV.--skip_leading_rows
: Menentukan jumlah baris header yang akan dilewati di bagian atas file CSV. Nilai defaultnya adalah0
.--quote
: Karakter kutipan yang digunakan untuk menyertakan kumpulan data. Nilai defaultnya adalah"
. Untuk menunjukkan tidak ada karakter kutip, gunakan string kosong.--max_bad_records
: Bilangan bulat yang menentukan jumlah maksimum kumpulan data buruk yang diizinkan sebelum seluruh tugas gagal. Nilai defaultnya adalah0
. Maksimal lima error dari jenis apa pun akan ditampilkan, terlepas dari nilai--max_bad_records
.--ignore_unknown_values
: Jika ditentukan, mengizinkan dan mengabaikan nilai tambahan yang tidak dikenali dalam data CSV atau JSON.--autodetect
: Jika ditentukan, mengaktifkan deteksi otomatis skema untuk data CSV dan JSON.--time_partitioning_type
: Mengaktifkan partisi berbasis waktu pada tabel dan menetapkan jenis partisi. Nilai yang mungkin adalahHOUR
,DAY
,MONTH
, danYEAR
. Flag ini bersifat opsional saat Anda membuat tabel yang dipartisi pada kolomDATE
,DATETIME
, atauTIMESTAMP
. Jenis partisi default untuk partisi berbasis waktu adalahDAY
. Anda tidak dapat mengubah spesifikasi partisi pada tabel yang ada.--time_partitioning_expiration
: Bilangan bulat yang menentukan (dalam detik) kapan partisi berbasis waktu harus dihapus. Waktu habis masa berlaku bernilai tanggal UTC partisi ditambah nilai bilangan bulat.--time_partitioning_field
: KolomDATE
atauTIMESTAMP
yang digunakan untuk membuat tabel yang dipartisi. Jika partisi berbasis waktu diaktifkan tanpa nilai ini, tabel berpartisi berdasarkan waktu penyerapan akan dibuat.--require_partition_filter
: Jika diaktifkan, opsi ini mengharuskan pengguna menyertakan klausaWHERE
yang menentukan partisi yang akan dikueri. Mengharuskan penggunaan filter partisi dapat mengurangi biaya dan meningkatkan performa. Untuk mengetahui informasi selengkapnya, lihat Membuat kueri tabel berpartisi.--clustering_fields
: Daftar yang dipisahkan koma yang berisi maksimum empat nama kolom yang digunakan untuk membuat tabel yang dikelompokkan.--destination_kms_key
: Kunci Cloud KMS untuk enkripsi data tabel.Untuk informasi selengkapnya tentang perintah
bq load
, lihat:Untuk informasi selengkapnya tentang tabel berpartisi, lihat:
Untuk mengetahui informasi selengkapnya tentang tabel yang dikelompokkan, lihat:
Untuk mengetahui informasi selengkapnya tentang enkripsi tabel, lihat:
Untuk memuat data CSV ke BigQuery, masukkan perintah berikut:
bq --location=location load \ --source_format=format \ dataset.table \ path_to_source \ schema
Dengan keterangan:
- location adalah lokasi Anda. Flag
--location
bersifat opsional. Misalnya, jika menggunakan BigQuery di region Tokyo, Anda dapat menetapkan nilai flag keasia-northeast1
. Anda dapat menetapkan nilai default untuk lokasi menggunakan file .bigqueryrc. - format sebesar
CSV
. - dataset adalah set data yang sudah ada.
- table adalah nama tabel tempat Anda memuat data.
- path_to_source adalah Cloud Storage URI yang sepenuhnya memenuhi syarat atau daftar URI yang dipisahkan koma. Karakter pengganti juga didukung.
- schema adalah skema yang valid. Skema dapat berupa file JSON lokal,
atau dapat diketik sebagai bagian dari perintah. Anda juga dapat menggunakan
flag
--autodetect
, alih-alih memberikan definisi skema.
Contoh:
Perintah berikut memuat data dari gs://mybucket/mydata.csv
ke
tabel bernama mytable
di mydataset
. Skema ditentukan dalam file skema
lokal bernama myschema.json
.
bq load \
--source_format=CSV \
mydataset.mytable \
gs://mybucket/mydata.csv \
./myschema.json
Perintah berikut memuat data dari gs://mybucket/mydata.csv
ke
tabel bernama mytable
di mydataset
. Skema ditentukan dalam file skema
lokal bernama myschema.json
. File CSV menyertakan dua baris header:
Jika --skip_leading_rows
tidak ditentukan, perilaku default-nya adalah menganggap
file tidak berisi header.
bq load \
--source_format=CSV \
--skip_leading_rows=2
mydataset.mytable \
gs://mybucket/mydata.csv \
./myschema.json
Perintah berikut memuat data dari gs://mybucket/mydata.csv
ke
tabel berpartisi berdasarkan waktu penyerapan bernama mytable
di mydataset
. Skema
ditentukan dalam file skema lokal bernama myschema.json
.
bq load \
--source_format=CSV \
--time_partitioning_type=DAY \
mydataset.mytable \
gs://mybucket/mydata.csv \
./myschema.json
Perintah berikut memuat data dari gs://mybucket/mydata.csv
ke tabel
berpartisi baru bernama mytable
di mydataset
. Tabel dipartisi
pada kolom mytimestamp
. Skema ditetapkan dalam file skema lokal bernama myschema.json
.
bq load \
--source_format=CSV \
--time_partitioning_field mytimestamp \
mydataset.mytable \
gs://mybucket/mydata.csv \
./myschema.json
Perintah berikut memuat data dari gs://mybucket/mydata.csv
ke
tabel bernama mytable
di mydataset
. Skema terdeteksi secara otomatis.
bq load \
--autodetect \
--source_format=CSV \
mydataset.mytable \
gs://mybucket/mydata.csv
Perintah berikut memuat data dari gs://mybucket/mydata.csv
ke
tabel bernama mytable
di mydataset
. Skema ditentukan sebagai bagian dari dalam
format field:data_type,field:data_type
.
bq load \
--source_format=CSV \
mydataset.mytable \
gs://mybucket/mydata.csv \
qtr:STRING,sales:FLOAT,year:STRING
Perintah berikut memuat data dari beberapa file di gs://mybucket/
ke dalam tabel bernama mytable
di mydataset
. URI Cloud Storage menggunakan karakter pengganti. Skema terdeteksi secara otomatis.
bq load \
--autodetect \
--source_format=CSV \
mydataset.mytable \
gs://mybucket/mydata*.csv
Perintah berikut memuat data dari beberapa file di gs://mybucket/
ke dalam tabel bernama mytable
di mydataset
. Perintah ini menyertakan daftar URI Cloud Storage yang dipisahkan koma dengan karakter pengganti. Skema
ditentukan dalam file skema lokal bernama myschema.json
.
bq load \
--source_format=CSV \
mydataset.mytable \
"gs://mybucket/00/*.csv","gs://mybucket/01/*.csv" \
./myschema.json
API
Buat tugas
load
yang mengarah ke data sumber di Cloud Storage.(Opsional) Tentukan lokasi Anda di properti
location
di bagianjobReference
pada resource tugas.Properti
source URIs
harus sepenuhnya memenuhi syarat, dalam formatgs://bucket/object
. Setiap URI dapat berisi satu karakter pengganti '*'.Tentukan format data CSV dengan menetapkan properti
sourceFormat
keCSV
.Untuk memeriksa status tugas, panggil
jobs.get(job_id*)
, dengan job_id yang merupakan ID tugas yang ditampilkan oleh permintaan awal.- Jika statusnya
status.state = DONE
, tugas berhasil diselesaikan. - Jika properti
status.errorResult
ada, permintaan gagal, dan objek tersebut akan menyertakan informasi yang menjelaskan penyebabnya. Jika permintaan gagal, tidak ada tabel yang dibuat dan tidak ada data yang dimuat. - Jika
status.errorResult
tidak ada, tugas berhasil diselesaikan, meskipun mungkin ada beberapa error non-fatal, seperti masalah mengimpor beberapa baris. Error non-fatal tercantum dalam propertistatus.errors
objek tugas yang ditampilkan.
- Jika statusnya
Catatan API:
Tugas pemuatan bersifat atomik dan konsisten. Jika tugas pemuatan gagal, tidak ada data yang tersedia, dan jika tugas pemuatan berhasil, semua datanya tersedia.
Sebagai praktik terbaik, buat ID unik dan teruskan sebagai
jobReference.jobId
saat memanggiljobs.insert
untuk membuat tugas pemuatan. Pendekatan ini lebih tangguh untuk kegagalan jaringan karena klien dapat melakukan polling atau mencoba ulang ID tugas yang diketahui.Memanggil
jobs.insert
pada ID tugas tertentu bersifat idempoten. Anda dapat mencoba lagi sebanyak yang Anda inginkan pada ID tugas yang sama, dan maksimal satu dari operasi tersebut akan berhasil.
C#
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery C# API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
PHP
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery PHP API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Gunakan metode Client.load_table_from_uri() untuk memuat data dari file CSV di Cloud Storage. Sediakan definisi skema eksplisit dengan menetapkan properti LoadJobConfig.schema ke daftar objek SchemaField.
Ruby
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Ruby di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Ruby API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Memuat data CSV ke tabel yang menggunakan partisi waktu berbasis kolom
Untuk memuat data CSV dari Cloud Storage ke tabel BigQuery yang menggunakan partisi waktu berbasis kolom:
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Menambahkan atau menimpakan data CSV ke tabel
Anda dapat memuat data tambahan ke dalam tabel dari file sumber atau dengan menambahkan hasil kueri.
Di Konsol Google Cloud, gunakan opsi Write preference untuk menentukan tindakan yang harus diambil ketika Anda memuat data dari file sumber atau dari hasil kueri.
Anda memiliki opsi berikut saat memuat data tambahan ke dalam tabel:
Opsi konsol | flag alat bq | Properti BigQuery API | Deskripsi |
---|---|---|---|
Tulis jika kosong | Tidak didukung | WRITE_EMPTY |
Menulis data hanya jika tabel kosong. |
Tambahkan ke tabel | --noreplace atau --replace=false ; jika
--[no]replace tidak ditentukan, defaultnya adalah menambahkan |
WRITE_APPEND |
(Default) Menambahkan data ke akhir tabel. |
Timpa tabel | --replace atau --replace=true |
WRITE_TRUNCATE |
Menghapus semua data yang ada di tabel sebelum menulis data baru. Tindakan ini juga akan menghapus skema tabel dan keamanan tingkat baris, serta menghapus kunci Cloud KMS apa pun. |
Jika Anda memuat data ke dalam tabel yang sudah ada, tugas pemuatan dapat menambahkan data atau menimpa tabel.
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.
- Untuk File format, pilih CSV.
- 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, masukkan definisi
schema.
Untuk mengaktifkan deteksi otomatis dari suatu skema,
pilih Auto detect.
Anda dapat memasukkan informasi skema secara manual menggunakan salah satu
metode berikut:
- Opsi 1: Klik Edit as text dan tempelkan skema dalam bentuk array JSON. Saat menggunakan array JSON, Anda menghasilkan skema menggunakan proses yang sama seperti membuat file skema JSON.
Anda dapat melihat skema tabel yang ada dalam format JSON dengan memasukkan perintah berikut:
bq show --format=prettyjson dataset.table
- Opsi 2: Klik Type, dan Mode untuk setiap kolom. Add field, lalu masukkan skema tabel. Tentukan Name,
- Opsi 1: Klik Edit as text dan tempelkan skema dalam bentuk array JSON. Saat menggunakan array JSON, Anda menghasilkan skema menggunakan proses yang sama seperti membuat file skema JSON.
Anda dapat melihat skema tabel yang ada dalam format JSON dengan memasukkan perintah berikut:
- Opsional: Tentukan Partition and cluster settings. Untuk mengetahui informasi selengkapnya, lihat Membuat tabel berpartisi serta Membuat dan menggunakan tabel yang dikelompokkan. Anda tidak dapat mengonversi tabel menjadi tabel berpartisi atau tabel yang dikelompokkan dengan menambahkan atau menimpanya. Konsol Google Cloud tidak mendukung penambahan ke atau penimpaan tabel berpartisi atau tabel yang dikelompokkan dalam tugas pemuatan.
- Klik Advanced options, lalu lakukan tindakan berikut:
- Untuk Write preference, pilih Append to table atau Overwrite table.
- Untuk Number of errors allowed, terima nilai default
0
atau masukkan jumlah maksimum baris berisi error yang dapat diabaikan. Jika jumlah baris yang berisi error melebihi nilai ini, tugas akan menghasilkan pesaninvalid
dan gagal. Opsi ini hanya berlaku untuk file CSV dan JSON. - Jika Anda ingin mengabaikan nilai dalam baris yang tidak ada dalam skema tabel, pilih Unknown values.
- Sebagai Pembatas kolom , pilih karakter yang memisahkan sel dalam file CSV Anda: Koma dan Tab dan Pipa , atau Khusus singkat ini. Jika memilih Custom, masukkan pemisah dalam kotak Custom field delimiter. Nilai defaultnya adalah Comma
- Untuk Header rows to skip, masukkan jumlah baris header yang akan dilewati
di bagian atas file CSV. Nilai defaultnya adalah
0
. - Untuk Baris baru yang dikutip, centang Izinkan baris baru yang dikutip untuk mengizinkan
bagian data yang dikutip yang berisi karakter baris baru dalam file CSV. Nilai
defaultnya adalah
false
. - Untuk Jagged rows, centang Allow jagged rows untuk menerima baris dalam file CSV
yang tidak memiliki kolom opsional di akhir. Nilai yang hilang
diperlakukan sebagai null. Jika tidak dicentang, kumpulan data dengan kolom di belakangnya yang hilang
diperlakukan sebagai kumpulan data buruk, dan jika ada terlalu banyak kumpulan data buruk, error
yang tidak valid akan ditampilkan dalam hasil tugas. Nilai defaultnya adalah
false
. - Untuk Encryption, klik Customer-managed key untuk menggunakan Cloud Key Management Service key. Jika Anda membiarkan setelan Google-managed key, BigQuery akan mengenkripsi data dalam penyimpanan.
- Klik Buat tabel.
SQL
Gunakan pernyataan DDL LOAD DATA
.
Contoh berikut menambahkan file CSV ke tabel mytable
:
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
LOAD DATA INTO mydataset.mytable FROM FILES ( format = 'CSV', uris = ['gs://bucket/path/file.csv']);
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
bq
Gunakan perintah bq load
, tentukan CSV
menggunakan flag
--source_format
, dan sertakan Cloud Storage URI.
Anda dapat menyertakan URI tunggal, daftar URI yang dipisahkan koma, atau URI
yang berisi karakter pengganti.
Berikan skema secara inline, dalam file definisi skema, atau gunakan
deteksi otomatis skema. Jika Anda tidak menentukan
skema, dan --autodetect
adalah false
, serta tabel tujuan
tersedia, skema tabel tujuan akan digunakan.
Tentukan flag --replace
untuk menimpa
tabel. Gunakan flag --noreplace
untuk menambahkan data ke tabel. Jika tidak ada flag yang ditentukan, defaultnya adalah menambahkan data.
Skema tabel dapat diubah saat Anda menambahkan atau menimpanya. Untuk mengetahui informasi selengkapnya tentang perubahan skema yang didukung selama operasi pemuatan, lihat Mengubah skema tabel.
(Opsional) Berikan flag --location
dan tetapkan nilainya ke
lokasi Anda.
Flag opsional lainnya meliputi:
--allow_jagged_rows
: Jika ditentukan, terima baris dalam file CSV yang tidak memiliki kolom opsional di akhir. Nilai yang hilang diperlakukan sebagai null. Jika tidak dicentang, kumpulan data dengan kolom di akhir yang hilang akan diperlakukan sebagai data yang buruk, dan jika ada terlalu banyak data buruk, error yang tidak valid akan ditampilkan dalam hasil tugas. Nilai defaultnya adalahfalse
.--allow_quoted_newlines
: Jika ditentukan, mengizinkan bagian data yang dikutip yang berisi karakter baris baru dalam file CSV. Nilai defaultnya adalahfalse
.--field_delimiter
: Karakter yang menunjukkan batas antara kolom dalam data.\t
dantab
diizinkan untuk pembatas tab. Nilai defaultnya adalah,
.--null_marker
: String kustom opsional yang mewakili nilai NULL dalam data CSV.--skip_leading_rows
: Menentukan jumlah baris header yang akan dilewati di bagian atas file CSV. Nilai defaultnya adalah0
.--quote
: Karakter kutipan yang digunakan untuk menyertakan kumpulan data. Nilai defaultnya adalah"
. Untuk menunjukkan tidak ada karakter kutip, gunakan string kosong.--max_bad_records
: Bilangan bulat yang menentukan jumlah maksimum kumpulan data buruk yang diizinkan sebelum seluruh tugas gagal. Nilai defaultnya adalah0
. Maksimal lima error dari jenis apa pun akan ditampilkan, terlepas dari nilai--max_bad_records
.--ignore_unknown_values
: Jika ditentukan, mengizinkan dan mengabaikan nilai tambahan yang tidak dikenali dalam data CSV atau JSON.--autodetect
: Jika ditentukan, mengaktifkan deteksi otomatis skema untuk data CSV dan JSON.--destination_kms_key
: Kunci Cloud KMS untuk enkripsi data tabel.
bq --location=location load \ --[no]replace \ --source_format=format \ dataset.table \ path_to_source \ schema
dengan keterangan:
- location adalah lokasi Anda.
Flag
--location
bersifat opsional. Anda dapat menetapkan nilai default untuk lokasi menggunakan file.bigqueryrc. - format sebesar
CSV
. - dataset adalah set data yang sudah ada.
- table adalah nama tabel tempat Anda memuat data.
- path_to_source adalah Cloud Storage URI yang sepenuhnya memenuhi syarat atau daftar URI yang dipisahkan koma. Karakter pengganti juga didukung.
- schema adalah skema yang valid. Skema dapat berupa file JSON lokal,
atau dapat diketik sebagai bagian dari perintah. Anda juga dapat menggunakan
flag
--autodetect
, alih-alih memberikan definisi skema.
Contoh:
Perintah berikut memuat data dari gs://mybucket/mydata.csv
dan menimpa tabel bernama mytable
di mydataset
. Skema ditentukan menggunakan deteksi otomatis skema.
bq load \
--autodetect \
--replace \
--source_format=CSV \
mydataset.mytable \
gs://mybucket/mydata.csv
Perintah berikut memuat data dari gs://mybucket/mydata.csv
dan menambahkan data ke tabel bernama mytable
di mydataset
. Skema
ditentukan menggunakan file skema JSON — myschema.json
.
bq load \
--noreplace \
--source_format=CSV \
mydataset.mytable \
gs://mybucket/mydata.csv \
./myschema.json
API
Buat tugas
load
yang mengarah ke data sumber di Cloud Storage.(Opsional) Tentukan lokasi Anda di properti
location
di bagianjobReference
pada resource tugas.Properti
source URIs
harus sepenuhnya memenuhi syarat, dalam formatgs://bucket/object
. Anda dapat menyertakan beberapa URI sebagai daftar yang dipisahkan koma. Perlu diperhatikan bahwa karakter pengganti juga didukung.Tentukan format data dengan menetapkan properti
configuration.load.sourceFormat
keCSV
.Tentukan preferensi tulis dengan menetapkan properti
configuration.load.writeDisposition
keWRITE_TRUNCATE
atauWRITE_APPEND
.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Node.js
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Node.js di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Node.js API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Untuk mengganti baris dalam tabel yang ada, tetapkan nilai writeDisposition
dalam parameter metadata
ke 'WRITE_TRUNCATE'
.
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery PHP API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
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 mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Untuk mengganti baris dalam tabel yang ada, tetapkan properti LoadJobConfig.write_disposition ke konstan SourceFormat, WRITE_TRUNCATE
.
Memuat data CSV yang dipartisi hive
BigQuery mendukung pemuatan data CSV yang dipartisi hive yang disimpan di Cloud Storage dan akan mengisi kolom partisi hive sebagai kolom dalam tabel terkelola BigQuery tujuan. Untuk informasi selengkapnya, baca Memuat Data Berpartisi secara Eksternal dari Cloud Storage.
Detail pemuatan data CSV
Bagian ini menjelaskan cara BigQuery menangani berbagai opsi pemformatan CSV.
Encoding
BigQuery akan menerima data CSV berenkode UTF-8. Jika memiliki file CSV dengan jenis encoding lain yang didukung, Anda harus secara eksplisit menentukan encoding agar BigQuery dapat mengonversi data ke UTF-8 dengan benar.
BigQuery mendukung jenis encoding berikut untuk file CSV:
- UTF-8
- ISO-8859-1
- UTF-16BE (UTF-16 Big Endian)
- UTF-16LE (UTF-16 Little Endian)
- UTF-32BE (UTF-32 Big Endian)
- UTF-32LE (UTF-32 Little Endian)
Jika Anda tidak menentukan encoding, atau jika Anda menentukan encoding UTF-8 saat file
CSV tidak berenkode UTF-8, BigQuery akan mencoba mengonversi data
ke UTF-8. Umumnya, jika file CSV dienkode ISO-8859-1, data Anda akan
berhasil dimuat, tetapi mungkin tidak sama persis dengan yang Anda harapkan. Jika file CSV
berenkode UTF-16BE, UTF-16LE, UTF-32BE, atau UTF-32LE, pemuatan mungkin akan gagal.
Untuk menghindari kegagalan tak terduga, tentukan encoding yang benar menggunakan
flag --encoding
.
Jika BigQuery tidak dapat mengonversi karakter selain karakter 0
ASCII, BigQuery akan mengonversi karakter tersebut menjadi karakter
pengganti Unicode standar: �.
Field delimiter
Pemisah dalam file CSV dapat berupa karakter byte tunggal apa pun. Jika file sumber menggunakan encoding ISO-8859-1, setiap karakter dapat menjadi pemisah. Jika file sumber menggunakan encoding UTF-8, karakter apa pun dalam rentang desimal 1-127 (U+0001-U+007F) dapat digunakan tanpa modifikasi. Anda dapat menyisipkan karakter ISO-8859-1 di luar rentang ini sebagai pemisah, dan BigQuery akan menafsirkannya dengan benar. Namun, jika Anda menggunakan karakter multibyte sebagai pembatas, beberapa byte akan salah ditafsirkan sebagai bagian dari nilai kolom.
Secara umum, praktik terbaiknya adalah menggunakan pembatas standar, seperti tab, pipa, atau koma. Defaultnya adalah koma.
Jenis data
Boolean. BigQuery dapat mengurai salah satu pasangan berikut untuk data Boolean: 1 atau 0, benar atau salah, t atau f, ya atau tidak, atau y atau n (semua tidak peka huruf besar/kecil). Skema deteksi otomatis otomatis mendeteksi salah satu dari tiga hal tersebut, kecuali 0 dan 1.Bytes. Kolom dengan jenis BYTES harus dienkode sebagai Base64.
Date. Kolom dengan jenis DATE harus dalam format YYYY-MM-DD
.
Datetime. Kolom dengan jenis DATETIME harus dalam format YYYY-MM-DD
HH:MM:SS[.SSSSSS]
.
Geography. Kolom dengan jenis GEOGRAPHY harus berisi string dalam salah satu format berikut:
- Well-known text (WKT)
- Well-known binary (WKB)
- GeoJSON
Jika Anda menggunakan WKB, nilainya harus berenkode hex.
Daftar berikut menunjukkan contoh data yang valid:
- WKT:
POINT(1 2)
- GeoJSON:
{ "type": "Point", "coordinates": [1, 2] }
- WKB dengan enkode heksadesimal:
0101000000feffffffffffef3f0000000000000040
Sebelum memuat data GEOGRAPHY, baca juga Memuat data geospasial.
Interval. Kolom dengan jenis INTERVAL
harus dalam format
Y-M D H:M:S[.F]
, dengan:
- Y = Year (Tahun). Rentang yang didukung adalah 0-10.000.
- M = Month (Bulan). Rentang yang didukung adalah 1-12.
- D = Day (Hari). Rentang yang didukung adalah 1-[hari terakhir pada bulan yang ditunjukkan].
- H = Hour (Jam).
- M = Minute (Menit).
- S = Second (Detik).
- [.F] = Pecahan detik hingga enam digit, dengan presisi mikrodetik.
Anda dapat menunjukkan nilai negatif dengan menambahkan tanda hubung (-).
Daftar berikut menunjukkan contoh data yang valid:
10-6 0 0:0:0
0-0 -5 0:0:0
0-0 0 0:0:1.25
Untuk memuat data INTERVAL, Anda harus menggunakan
perintah bq load
dan menggunakan
flag --schema
untuk menentukan skema. Anda tidak dapat mengupload data INTERVAL dengan menggunakan
konsol.
JSON. Tanda kutip di-escape dengan menggunakan urutan dua karakter ""
. Untuk informasi
selengkapnya, lihat contoh
memuat data JSON dari file CSV
Time. Kolom dengan jenis TIME harus dalam format HH:MM:SS[.SSSSSS]
.
Timestamp. BigQuery menerima berbagai format stempel waktu. Stempel waktu harus menyertakan bagian tanggal dan bagian waktu.
Bagian tanggal dapat diformat sebagai
YYYY-MM-DD
atauYYYY/MM/DD
.Bagian stempel waktu harus diformat sebagai
HH:MM[:SS[.SSSSSS]]
(detik dan fraksi detik bersifat opsional).Tanggal dan waktu harus dipisahkan dengan spasi atau 'T'.
Secara opsional, tanggal dan waktu dapat diikuti dengan offset UTC atau penanda zona UTC (
Z
). Untuk mengetahui informasi selengkapnya, lihat Zona waktu.
Misalnya, salah satu dari berikut ini adalah nilai stempel waktu yang valid:
- 2018-08-19 12:11
- 2018-08-19 12:11:35
- 2018-08-19 12:11:35.22
- 2018/08/19 12:11
- 2018-07-05 12:54:00 UTC
- 2018-08-19 07:11:35.220 -05:00
- 2018-08-19T12:11:35.220Z
Jika Anda memberikan skema, BigQuery juga menerima waktu epoch Unix untuk nilai stempel waktu. Namun, deteksi otomatis skema tidak mendeteksi kasus ini, dan memperlakukan nilai sebagai jenis numerik atau string.
Contoh nilai stempel waktu Unix epoch:
- 1534680695
- 1.534680695e11
RANGE (pratinjau). Direpresentasikan dalam file CSV dalam format
[LOWER_BOUND, UPPER_BOUND)
,
dengan LOWER_BOUND
dan UPPER_BOUND
adalah string DATE
, DATETIME
, atau TIMESTAMP
yang valid. NULL
dan UNBOUNDED
mewakili nilai awal atau akhir yang tidak terbatas.
Berikut adalah contoh nilai CSV untuk RANGE<DATE>
:
"[2020-01-01, 2021-01-01)"
"[UNBOUNDED, 2021-01-01)"
"[2020-03-01, NULL)"
"[UNBOUNDED, UNBOUNDED)"
Deteksi otomatis skema
Bagian ini menjelaskan perilaku deteksi otomatis skema saat memuat file CSV.
Delimiter CSV
BigQuery mendeteksi pembatas berikut:
- koma ( , )
- garis vertikal ( | )
- tab ( \t )
Header CSV
BigQuery menyimpulkan header dengan membandingkan baris pertama file dengan baris lain dalam file. Jika baris pertama hanya berisi string, dan baris lainnya berisi jenis data lain, BigQuery mengasumsikan bahwa baris pertama adalah baris header. BigQuery menetapkan nama kolom berdasarkan nama kolom di baris header. Nama mungkin diubah agar memenuhi aturan penamaan untuk kolom di BigQuery. Misalnya, spasi akan diganti dengan garis bawah.
Jika tidak, BigQuery akan menganggap baris pertama sebagai baris data, dan menetapkan nama kolom generik seperti string_field_1
. Perhatikan bahwa setelah tabel dibuat, nama kolom tidak dapat diperbarui dalam skema, meskipun Anda dapat mengubah nama secara manual setelah tabel dibuat. Pilihan lainnya adalah menyediakan skema eksplisit daripada menggunakan deteksi otomatis.
Anda mungkin memiliki file CSV dengan baris header, dengan semua kolom datanya berupa string. Dalam hal ini, BigQuery tidak akan secara otomatis mendeteksi bahwa baris pertama adalah sebuah header. Gunakan opsi --skip_leading_rows
untuk melewati baris header. Jika tidak, header akan diimpor sebagai data. Dalam kasus ini, pertimbangkan juga untuk memberikan skema eksplisit sehingga Anda dapat menetapkan nama kolom.
Baris baru yang dikutip CSV
BigQuery mendeteksi karakter baris baru yang dikutip dalam kolom CSV dan tidak menafsirkan karakter baris baru yang dikutip sebagai batas baris.
Memecahkan masalah error penguraian
Jika terjadi error saat mengurai file CSV, resource
errors
tugas pemuatan
akan diisi dengan detail error.
Umumnya, error ini mengidentifikasi awal baris yang bermasalah dengan offset
byte. Untuk file yang tidak dikompresi, Anda dapat menggunakan gsutil
dengan argumen -r
untuk
mengakses baris yang relevan.
Misalnya, Anda menjalankan perintah bq load
dan menerima error:
bq load --skip_leading_rows=1 \ --source_format=CSV \ mydataset.mytable \ gs://my-bucket/mytable.csv \ 'Number:INTEGER,Name:STRING,TookOffice:STRING,LeftOffice:STRING,Party:STRING'
Error dalam output mirip dengan yang berikut ini:
Waiting on bqjob_r5268069f5f49c9bf_0000018632e903d7_1 ... (0s) Current status: DONE BigQuery error in load operation: Error processing job 'myproject:bqjob_r5268069f5f49c9bf_0000018632e903d7_1': Error while reading data, error message: Error detected while parsing row starting at position: 1405. Error: Data between close quote character (") and field separator. File: gs://my-bucket/mytable.csv Failure details: - gs://my-bucket/mytable.csv: Error while reading data, error message: Error detected while parsing row starting at position: 1405. Error: Data between close quote character (") and field separator. File: gs://my-bucket/mytable.csv - Error while reading data, error message: CSV processing encountered too many errors, giving up. Rows: 22; errors: 1; max bad: 0; error percent: 0
Berdasarkan error sebelumnya, ada error format dalam file.
Untuk melihat konten file, jalankan perintah gsutil cat
:
gsutil cat -r 1405-1505 gs://my-bucket/mytable.csv
Outputnya mirip dengan hal berikut ini:
16,Abraham Lincoln,"March 4, 1861","April 15, "1865,Republican 18,Ulysses S. Grant,"March 4, 1869", ...
Berdasarkan output file, masalahnya adalah tanda kutip yang salah tempat dalam
"April 15, "1865
.
File CSV yang dikompresi
Proses debug error penguraian lebih sulit untuk file CSV yang dikompresi,
karena offset byte yang dilaporkan mengacu pada lokasi dalam file yang tidak dikompresi.
Perintah gsutil cat
berikut mengalirkan
file dari Cloud Storage, mendekompresi file, mengidentifikasi
offset byte yang sesuai, dan mencetak baris dengan error format:
gsutil cat gs://my-bucket/mytable.csv.gz | gunzip - | tail -c +1406 | head -n 1
Outputnya mirip dengan hal berikut ini:
16,Abraham Lincoln,"March 4, 1861","April 15, "1865,Republican
Opsi CSV
Untuk mengubah cara BigQuery mengurai data CSV, tentukan opsi tambahan di Konsol Google Cloud, alat command line bq, atau API.
Untuk informasi selengkapnya tentang format CSV, lihat RFC 4180.
Opsi CSV | Opsi konsol | flag alat bq | Properti BigQuery API | Deskripsi |
---|---|---|---|---|
Field delimiter | Pemisah kolom: Koma, Tab, Pipa, Kustom | -F atau --field_delimiter |
fieldDelimiter
(Java,
Python)
|
(Opsional) Pemisah untuk kolom dalam file CSV. Pemisah dapat berupa karakter byte tunggal ISO-8859-1. BigQuery mengonversi string menjadi encoding ISO-8859-1, dan menggunakan byte pertama dari string yang dienkode untuk membagi data dalam status biner mentahnya. BigQuery juga mendukung urutan escape "\t" untuk menentukan pemisah tab. Nilai defaultnya adalah koma (`,`). |
Baris header | Baris header yang dilewati: | --skip_leading_rows |
skipLeadingRows
(Java,
Python)
|
(Opsional) Bilangan bulat yang menunjukkan jumlah baris header dalam data sumber. |
Jumlah kumpulan data buruk yang diizinkan | Jumlah error yang diizinkan: | --max_bad_records |
maxBadRecords
(Java,
Python)
|
(Opsional) 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. Nilai defaultnya adalah 0, yang mengharuskan semua kumpulan data valid. |
Karakter baris baru | Izinkan baris baru dengan tanda kutip | --allow_quoted_newlines |
allowQuotedNewlines
(Java,
Python)
|
(Opsional) Menunjukkan apakah akan mengizinkan bagian data yang dikutip yang berisi karakter baris baru dalam file CSV. Nilai defaultnya adalah false. |
Nilai null kustom | Tidak ada | --null_marker |
nullMarker
(Java,
Python)
|
(Opsional) Menentukan string yang mewakili nilai null dalam file CSV. Misalnya, jika Anda menentukan "\N", BigQuery akan menafsirkan "\N" sebagai nilai null saat memuat file CSV. Nilai defaultnya adalah string kosong. Jika Anda menetapkan properti ini ke nilai khusus, BigQuery akan menampilkan error jika string kosong ada untuk semua jenis data, kecuali untuk STRING dan BYTE. Untuk kolom STRING dan BYTE, BigQuery menafsirkan string kosong sebagai nilai kosong. |
Kolom opsional di akhir | Izinkan jagged row | --allow_jagged_rows |
allowJaggedRows
(Java,
Python)
|
(Opsional) Terima baris yang tidak memiliki kolom opsional di akhir. Nilai yang hilang diperlakukan sebagai null. Jika salah, kumpulan data yang tidak memiliki kolom di akhir akan dianggap sebagai kumpulan data buruk, dan jika ada terlalu banyak kumpulan data buruk, error tidak valid akan ditampilkan dalam hasil tugas. Nilai defaultnya adalah false. Hanya berlaku untuk CSV, diabaikan untuk format lainnya. |
Nilai yang tidak diketahui | Abaikan nilai yang tidak diketahui | --ignore_unknown_values |
ignoreUnknownValues
(Java,
Python)
|
(Opsional) Menunjukkan apakah BigQuery harus mengizinkan nilai tambahan
yang tidak direpresentasikan dalam skema tabel. Jika true (benar), nilai tambahan akan
diabaikan. Jika false, kumpulan data dengan kolom tambahan akan dianggap sebagai kumpulan data buruk, dan jika ada terlalu banyak kumpulan data yang buruk, error yang tidak valid akan ditampilkan dalam hasil tugas. Nilai defaultnya adalah false. Properti
sourceFormat menentukan apa yang diperlakukan BigQuery
sebagai nilai tambahan:
|
Penawaran harga | Karakter tanda kutip: Tanda kutip ganda, Tanda kutip tunggal, Tidak ada, Kustom | --quote |
quote
(Java,
Python)
|
(Opsional) Nilai yang digunakan untuk mengutip bagian data dalam file CSV.
BigQuery mengonversi string menjadi encoding ISO-8859-1, lalu
menggunakan byte pertama dari string yang dienkode untuk membagi
data dalam status biner mentahnya. Nilai defaultnya adalah tanda kutip ganda ('"'). Jika data Anda
tidak berisi bagian yang dikutip, tetapkan nilai properti menjadi string
kosong. Jika data Anda berisi karakter baris baru yang dikutip, Anda juga harus menetapkan
properti allowQuotedNewlines ke true . Untuk
menyertakan karakter tanda kutip tertentu dalam nilai yang dikutip, awali
dengan karakter tanda kutip tambahan yang cocok. Misalnya, jika ingin
meng-escape karakter default ' " ', gunakan ' "" '. |
Encoding | Tidak ada | -E atau --encoding |
encoding
(Java,
Python) |
(Opsional) Encoding karakter data. Nilai yang didukung adalah
UTF-8, ISO-8859-1, UTF-16BE, UTF-16LE, UTF-32BE, atau UTF-32LE.
Nilai defaultnya adalah UTF-8. BigQuery
mendekode data setelah data biner mentah dibagi menggunakan
nilai properti
quote dan fieldDelimiter . |
Karakter kontrol ASCII | Tidak ada | --preserve_ascii_control_characters |
Tidak ada | (Opsional) Jika Anda ingin mengizinkan ASCII 0 dan karakter
kontrol ASCII lainnya, tetapkan --preserve_ascii_control_characters
ke true untuk tugas pemuatan Anda. |