Mengoptimalkan tugas pemuatan
Strategi dan praktik terbaik yang dijelaskan dalam dokumen ini membantu Anda mengoptimalkan pemuatan batch atau streaming data ke BigQuery untuk menghindari tercapainya batas jumlah tugas pemuatan per tabel, per hari.
Karena batas untuk tugas pemuatan sudah ditetapkan dan tidak dapat ditingkatkan, Anda harus mengoptimalkan tugas pemuatan dengan menyusun tabel melalui metode seperti partisi tabel, atau dengan mengelola pemuatan melalui metode seperti pemuatan batch atau streaming.
Cara kerja kuota operasi tabel
Batas BigQuery untuk modifikasi tabel per tabel per hari per project sudah ditetapkan, terlepas dari apakah modifikasi menambahkan atau memperbarui data, atau memotong tabel. Batas ini mencakup total gabungan dari semua tugas pemuatan, tugas penyalinan, dan tugas kueri yang ditambahkan ke atau menimpa tabel tujuan.
Tugas pemuatan memiliki kecepatan pengisian ulang. Jika Anda melebihi batas operasi tabel atau
tingkat pengisian ulangnya, tugas pemuatan akan gagal dengan error quotaExceeded. Batas tingkat project untuk tugas pemuatan per hari akan diisi ulang dalam periode 24 jam berjalan. Setelah tugas pemuatan selesai, kuota yang tersedia akan berkurang. Kuotanya kemudian
akan diisi ulang secara bertahap selama 24 jam berikutnya. Tugas pemuatan yang gagal tetap dihitung dalam kuota per tabel dan per project. Untuk mengetahui informasi selengkapnya tentang batas tugas pemuatan, lihat Tugas pemuatan.
Untuk tabel berpartisi, batas terpisah untuk modifikasi tabel berpartisi berlaku, menggantikan batas tabel standar.
Agar tetap berada dalam batas operasi tabel harian, sebarkan operasi selama periode 24 jam. Misalnya, jika Anda melakukan 25 update, masing-masing dengan 60 operasi,
Anda dapat menjalankan sekitar 60 operasi setiap 58 menit. Pendekatan ini membantu Anda memenuhi batas harian. Untuk memantau update tabel, lihat Tampilan
INFORMATION_SCHEMA BigQuery.
Operasi tabel yang dikecualikan dari kuota
Memperbarui informasi tabel (metadata) dan menggunakan pernyataan DML tidak diperhitungkan dalam batas modifikasi tabel harian Anda. Pengecualian ini berlaku untuk tabel standar dan tabel berpartisi.
Project Anda dapat menjalankan pernyataan DML dalam jumlah yang tidak terbatas. Meskipun pernyataan DML sebelumnya diperhitungkan dalam modifikasi tabel harian dan tidak di-throttle meskipun pada batasnya, pernyataan tersebut tidak lagi diperhitungkan.
Penyisipan streaming juga mengubah tabel, tetapi kuota khususnya sendiri yang mengaturnya.
Strategi pemuatan untuk menghindari batas operasi tabel
Untuk tetap berada dalam batas operasi tabel harian BigQuery, pertimbangkan praktik terbaik berikut:
- Lakukan penulisan yang lebih sedikit dan lebih besar, bukan banyak penulisan kecil.
- Minimalkan tugas penulisan terpisah ke tabel produksi akhir Anda setiap hari.
Untuk menggunakan praktik terbaik ini, lakukan batch atau streaming data Anda ke BigQuery. Pilihan metode pemuatan Anda bergantung pada apakah Anda perlu memuat data dalam volume besar secara real time, atau jika pemuatan real time tidak menjadi masalah. Bagian berikut menjelaskan pemuatan batch dan streaming data secara mendetail, termasuk alat dan layanan yang dapat Anda gunakan untuk setiap metode.
Pemuatan batch
Agar tetap berada dalam batas pemuatan harian per project untuk BigQuery, kelompokkan data dalam jumlah besar dan muat dengan lebih sedikit tugas ke BigQuery. Bagian berikut menjelaskan beberapa metode yang dapat Anda gunakan untuk memuat data secara batch.
Memuat lebih banyak data untuk setiap tugas
Daripada mengirim data ke BigQuery setiap kali informasi baru tersedia, kumpulkan dan muat data tersebut ke BigQuery menggunakan satu tugas besar.
Misalnya, alih-alih menjalankan tugas pemuatan terpisah untuk setiap beberapa baris data, Anda dapat menunggu hingga mengumpulkan beberapa ribu baris data dalam satu file—misalnya, dalam file CSV atau JSON—lalu menjalankan satu tugas pemuatan untuk menambahkan semua data ke tabel. Tindakan ini dihitung sebagai satu operasi tabel, meskipun tugas berisi lebih banyak data. Anda dapat mengelompokkan file berdasarkan penggunaan karakter pengganti dengan tugas pemuatan. Karakter pengganti memungkinkan Anda memilih batch file dalam direktori untuk memuat beberapa file dalam satu tugas pemuatan.
Contoh berikut menunjukkan cara menggunakan karakter pengganti dengan perintah bq load atau
kueri SQL LOAD DATA.
bq
Contoh berikut menunjukkan perintah bq load
untuk memuat data CSV dari Cloud Storage ke tabel BigQuery bernama
my_target_table. Untuk memilih lebih dari satu nama file sumber, gunakan karakter pengganti
dengan perintah. Flag AUTODETECT otomatis menentukan skema tabel Anda dari data sumber di Cloud Storage, dan dapat mendukung karakter pengganti (*) untuk memuat beberapa file yang sesuai dengan pola penamaan tertentu ke dalam tabel BigQuery.
bq load \ --source_format=CSV \ --autodetect \ --project_id=PROJECT_ID \ DATASET_NAME.TABLE_NAME \ "gs://BUCKET_NAME/OBJECT_PATH_WILDCARD"
Ganti kode berikut:
PROJECT_ID: ID Google Cloud project Anda.DATASET_NAME: nama set data BigQuery tempat Anda ingin memuat data.TABLE_NAME: nama tabel BigQuery tempat Anda ingin memuat data.BUCKET_NAME: nama bucket Cloud Storage yang berisi file sumber.OBJECT_PATH_WILDCARD: jalur ke file CSV Anda di bucket Cloud Storage. Sertakan karakter pengganti (*) untuk mencocokkan beberapa file. Misalnya, stringgs://my-bucket/path/to/data/my_prefix_*.csvmenggunakan karakter pengganti*untuk memuat semua file digs://my-bucket/path/to/data/yang dimulai denganmy_prefix_dan diakhiri dengan.csv.
Untuk informasi selengkapnya, lihat referensi berikut:
SQL
Contoh berikut menunjukkan cara menggunakan kueri SQL
LOAD DATA
untuk memuat data CSV dari bucket Cloud Storage ke tabel BigQuery. Untuk memilih lebih dari satu nama file sumber, gunakan karakter pengganti dengan perintah.
LOAD DATA INTO
DATASET_NAME.TABLE_NAME
FROM FILES (
format = 'SOURCE_FORMAT',
uris = ['gs://BUCKET_NAME/OBJECT_PATH_WILDCARD]
);
Ganti kode berikut:
DATASET_NAME: nama set data BigQuery tempat Anda ingin memuat data.TABLE_NAME: nama tabel BigQuery tempat Anda ingin memuat data.SOURCE_FORMATmenetapkan jenis file sumber Anda, misalnya,CSVatauJSON. Dalam contoh ini, gunakanCSV.BUCKET_NAME: nama bucket Cloud Storage yang berisi file sumber.OBJECT_PATH_WILDCARD: jalur ke file CSV Anda di bucket Cloud Storage. Sertakan karakter pengganti (*) untuk mencocokkan beberapa file. Misalnya, stringgs://my-bucket/path/to/data/my_prefix_*.csvmenggunakan karakter pengganti*untuk memuat semua file digs://my-bucket/path/to/data/yang dimulai denganmy_prefix_dan diakhiri dengan.csv.
Untuk mengetahui informasi selengkapnya, lihat Pernyataan pemuatan di GoogleSQL.
Memuat dalam batch menggunakan BigQuery Storage Write API
Untuk memuat data batch ke BigQuery, salah satu opsi adalah menggunakan Storage Write API langsung dari aplikasi Anda dengan Google API Client Libraries.
Storage Write API mengoptimalkan pemuatan data agar tetap berada dalam batas tabel. Untuk streaming real-time bervolume tinggi, gunakan aliran PENDING, bukan aliran COMMITTED. Saat Anda menggunakan aliran PENDING, API akan menyimpan
kumpulan data untuk sementara hingga Anda melakukan commit aliran.
Untuk contoh lengkap pemuatan data dalam batch menggunakan Storage Write API, lihat Memuat data dalam batch menggunakan Storage Write API.
Pemuatan batch menggunakan Dataflow
Jika ingin melakukan streaming, mentransformasi, dan menulis data ke BigQuery menggunakan pipeline data, Anda dapat menggunakan Dataflow. Pipeline data
yang Anda buat membaca dari sumber yang didukung seperti Pub/Sub atau
Apache Kafka. Anda juga dapat membuat pipeline Dataflow
menggunakan konektor BigQueryIO, yang menggunakan Storage Write API
untuk streaming data berperforma tinggi dan semantik tepat satu kali.
Untuk mengetahui informasi tentang cara menggunakan Dataflow untuk memuat data secara batch ke BigQuery, lihat Menulis dari Dataflow ke BigQuery.
Streaming data
Untuk memuat data dalam volume tinggi dengan update yang sering, sebaiknya lakukan streaming data ke BigQuery. Dengan streaming data, data baru terus ditulis dari aplikasi klien Anda ke BigQuery, sebuah strategi yang menghindari tercapainya batas untuk menjalankan terlalu banyak tugas pemuatan. Bagian berikut menjelaskan beberapa metode untuk menstreaming data ke BigQuery.
Melakukan streaming data menggunakan Storage Write API
Gunakan Storage Write API untuk melakukan streaming data secara real time ke BigQuery dengan latensi minimal. Storage Write API menyediakan protokol streaming yang efisien yang menyediakan fungsi tingkat lanjut seperti semantik pengiriman tepat satu kali, deteksi update skema, dan upsert Change Data Capture (CDC) streaming. Selain itu, Anda dapat menyerap hingga 2 TiB per bulan tanpa biaya.
Untuk mengetahui informasi tentang cara menggunakan Storage Write API, lihat Melakukan streaming data menggunakan Storage Write API.
Streaming data menggunakan Dataflow
Gunakan Dataflow untuk membuat pipeline data yang membaca dari sumber yang didukung, misalnya, Pub/Sub atau Apache Kafka. Pipeline ini kemudian mengubah dan menulis data ke BigQuery sebagai tujuan. Anda dapat membuat pipeline
Dataflow menggunakan konektor BigQueryIO, yang menggunakan
Storage Write API.
Untuk mengetahui informasi tentang cara menggunakan Dataflow untuk melakukan streaming data ke BigQuery, lihat Menulis dari Dataflow ke BigQuery.
Praktik terbaik untuk mengelola tabel Anda untuk pemuatan
Selain memuat data secara batch atau melakukan streaming data ke BigQuery, kelola tabel Anda dengan cara berikut untuk mengoptimalkannya dalam penyerapan data.
Menggunakan tabel berpartisi
Partisi tabel adalah teknik canggih untuk mengelola tabel besar di BigQuery, terutama saat Anda perlu melakukan operasi pemuatan data yang sering. Anda dapat meningkatkan performa dan efektivitas biaya tabel secara signifikan dengan membagi tabel menjadi segmen yang lebih kecil dan lebih mudah dikelola berdasarkan tanggal, stempel waktu, atau bilangan bulat.
Keuntungan utama partisi untuk pemuatan data adalah kuota operasi tabel harian untuk BigQuery berlaku di tingkat partisi, bukan di tingkat tabel. Untuk tabel berpartisi, batas terpisah yang lebih tinggi berlaku untuk modifikasi partisi, yang menggantikan batas tabel standar. Batas untuk tabel berpartisi secara signifikan meningkatkan jumlah tugas pemuatan yang dapat Anda jalankan per hari tanpa mencapai batas kuota.
Strategi umum dan sangat efektif adalah memuat data harian Anda dalam batch. Misalnya, Anda dapat mengumpulkan semua data hari itu untuk 2025-09-18 dalam tabel penyiapan sementara. Kemudian, di akhir hari, Anda menjalankan satu tugas untuk memuat
data ini ke dalam partisi tertentu untuk hari ini di tabel produksi utama Anda.
Karena BigQuery hanya berinteraksi dengan data untuk satu partisi, pendekatan ini menjaga data Anda tetap teratur dan membuat operasi pemuatan Anda lebih cepat dan lebih murah.
Meskipun sangat direkomendasikan untuk tabel besar yang terus bertambah, sebaiknya hindari partisi jika partisi Anda akan selalu lebih kecil dari 10 GB. Untuk mengetahui informasi selengkapnya, lihat Kapan harus menggunakan partisi.
Untuk mempelajari lebih lanjut berbagai metode partisi yang tersedia, seperti partisi unit waktu dan rentang bilangan bulat, lihat Jenis tabel berpartisi.
Manfaatkan backoff eksponensial, pemotongan, dan jitter bawaan
Backoff eksponensial dan
coba lagi bawaan
adalah metode penanganan error yang membantu aplikasi Anda pulih dengan lancar saat
operasi gagal untuk sementara. Kegagalan tersebut dapat mencakup error batas kecepatan
(rateLimitExceeded) atau masalah jaringan singkat (unavailable).
Dalam sistem yang andal, pekerja yang mengambil tugas dari antrean sisi klien Anda juga menggunakan backoff eksponensial dan percobaan ulang. Hal ini dilakukan saat memanggil BigQuery, yang membuat dua tingkat perlindungan.
Misalnya, library google-cloud-bigquery-storage resmi untuk Python
mencakup logika percobaan ulang bawaan dengan backoff eksponensial. Logika ini menangani
error gRPC sementara, misalnya, UNAVAILABLE. Dalam kebanyakan kasus, Anda tidak perlu
menulis sendiri kode percobaan ulang ini. Panggilan client.append_rows() menangani percobaan ulang ini secara otomatis.
Penanganan bawaan ini merupakan manfaat signifikan dari penggunaan pustaka klien resmi. Anda hanya perlu menangani error yang tidak dapat dicoba lagi, misalnya,
INVALID_ARGUMENT, yang berarti ada ketidakcocokan skema.