Menggunakan library Python open source
Anda dapat menggunakan library Python open source di BigQuery untuk memproses data, membangun model machine learning (ML), dan mengelola resource cloud menggunakan kode yang sudah dikenal. Memilih library yang tepat untuk workload dapat membantu Anda menskalakan secara efisien dari skrip sisi klien yang ringan hingga memproses data berukuran terabyte menggunakan mesin sisi server BigQuery.
| Library | Kasus penggunaan | Ukuran data maksimum | Deskripsi |
|---|---|---|---|
bigquery-dataframes |
Pemrosesan data dan operasi ML berbasis Python dengan pemrosesan sisi server | Dapat diskalakan ke set data multi-terabyte (pushdown sisi server) | API Pandas dan scikit-learn yang diimplementasikan dengan pushdown sisi server. Untuk mengetahui informasi selengkapnya, lihat Pengantar BigQuery DataFrames. |
pandas-gbq |
Pemrosesan data berbasis Python menggunakan salinan data sisi klien | Dibatasi oleh memori klien | Memungkinkan Anda memindahkan data ke dan dari DataFrame Python di sisi klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi dan kode sumber. |
google-cloud-bigquery |
Deployment, administrasi, dan pembuatan kueri berbasis SQL BigQuery | Dibatasi oleh memori klien | Paket Python yang menggabungkan semua BigQuery API. Untuk mengetahui informasi selengkapnya, lihat dokumentasi dan kode sumber. |
Menggunakan BigQuery DataFrames, pandas-gbq, dan google-cloud-bigquery
Library BigQuery DataFrames (bigframes) menyediakan DataFrame dan ML API pythonic dengan pemrosesan kueri sisi server. Library pandas-gbq menyediakan antarmuka untuk menjalankan kueri dan mengupload DataFrame pandas ke BigQuery. Library ini adalah wrapper tipis di sekitar library klien BigQuery, google-cloud-bigquery.
Menginstal library
Untuk menggunakan contoh kode dalam panduan ini, instal paket bigframes, pandas-gbq, dan
google-cloud-bigquery:
pip install --upgrade bigframes pandas-gbq 'google-cloud-bigquery[bqstorage,pandas]'
Menjalankan Kueri
Ketiga library mendukung pembuatan kueri data yang tersimpan di BigQuery. Perbedaan utama antar-library meliputi:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| Sintaksis SQL default | GoogleSQL | GoogleSQL (dapat dikonfigurasi dengan pandas_gbq.context.dialect) |
GoogleSQL |
| Konfigurasi kueri | Dapat dikonfigurasi menggunakan parameter bpd.options.bigquery atau read_gbq |
Dikirim sebagai kamus dalam format permintaan kueri. | Gunakan class QueryJobConfig, yang berisi properti untuk berbagai opsi konfigurasi API. |
Membuat kueri data dengan sintaks GoogleSQL
Contoh berikut menunjukkan cara menjalankan kueri GoogleSQL dengan dan tanpa menentukan project secara eksplisit. Untuk ketiga library, jika project tidak ditentukan, project akan ditentukan dari kredensial default.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Membuat kueri data dengan sintaksis legacy SQL
Contoh berikut menunjukkan cara menjalankan kueri menggunakan sintaksis legacy SQL. Lihat panduan migrasi GoogleSQL untuk mendapatkan panduan tentang cara memperbarui kueri ke GoogleSQL.
bigquery-dataframes
BigQuery DataFrames tidak mendukung sintaksis legacy SQL. Gunakan sintaksis GoogleSQL.
pandas-gbq
google-cloud-bigquery
Menggunakan BigQuery Storage API untuk mendownload hasil dalam jumlah besar
Gunakan BigQuery Storage API untuk mempercepat download hasil besar sebanyak 15 hingga 31 kali.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Menjalankan kueri dengan konfigurasi
Pengiriman konfigurasi dengan permintaan BigQuery API diperlukan untuk melakukan operasi kompleks tertentu, seperti menjalankan kueri berparameter atau menentukan tabel tujuan untuk menyimpan hasil kueri. Di bigquery-dataframes (read_gbq) dan pandas-gbq, konfigurasi harus dikirim sebagai kamus dalam format permintaan kueri.
Di google-cloud-bigquery, class konfigurasi tugas disediakan, seperti QueryJobConfig, yang berisi properti yang diperlukan untuk mengonfigurasi tugas yang kompleks.
Contoh berikut menunjukkan cara menjalankan kueri dengan parameter bernama.
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
Memuat DataFrame pandas ke tabel BigQuery
Ketiga library mendukung upload data dari DataFrame pandas ke tabel baru di BigQuery. Perbedaan utamanya meliputi:
| bigquery-dataframes | pandas-gbq | google-cloud-bigquery | |
|---|---|---|---|
| Dukungan jenis | Mengonversi DataFrame menggunakan read_pandas dan menulisnya ke tabel menggunakan to_gbq. |
Mengonversi DataFrame menjadi format CSV sebelum mengirim ke API, yang tidak mendukung nilai susun bertingkat atau array. | Mengonversi DataFrame ke format Parquet atau CSV sebelum mengirim ke API, yang mendukung nilai bertingkat dan array. Pilih Parquet untuk nilai struct dan array, serta CSV untuk fleksibilitas serialisasi tanggal dan waktu. Parquet adalah pilihan default. Perhatikan bahwa pyarrow, yang merupakan mesin parquet yang digunakan untuk mengirim data DataFrame ke BigQuery API, harus diinstal untuk memuat DataFrame ke tabel. |
| Memuat konfigurasi | Konfigurasikan perilaku dengan parameter to_gbq, seperti if_exists. |
Anda juga dapat menentukan skema tabel. | Gunakan class LoadJobConfig, yang berisi properti untuk berbagai opsi konfigurasi API. |
bigquery-dataframes
pandas-gbq
google-cloud-bigquery
google-cloud-bigquery memerlukan library pyarrow untuk melakukan serialisasi
pandas DataFrame ke file Parquet.
Menginstal paket pyarrow
pip install pyarrow
Fitur yang tidak didukung oleh pandas-gbq dan bigquery-dataframes
Meskipun library pandas-gbq dan bigquery-dataframes menyediakan antarmuka yang berguna untuk membuat kueri data dan menulis data ke tabel, library ini tidak mencakup banyak fitur BigQuery API, termasuk, tetapi tidak terbatas pada:
- Mengelola set data, termasuk membuat set data baru, memperbarui properti set data, dan menghapus set data
- Memuat data ke BigQuery dari format selain pandas DataFrame atau dari pandas DataFrame dengan kolom JSON
- Mengelola tabel, termasuk mencantumkan tabel dalam set data, menyalin data tabel, dan menghapus tabel
- Mengekspor data BigQuery langsung ke Cloud Storage
Memecahkan masalah error kumpulan koneksi
String error: Connection pool is full, discarding connection: bigquery.googleapis.com.
Connection pool size: 10
Jika menggunakan objek klien BigQuery default di Python, Anda dibatasi hingga maksimum 10 thread karena ukuran kumpulan default untuk HTTPAdapter Python adalah 10. Untuk menggunakan lebih dari 10 koneksi, buat objek requests.adapters.HTTPAdapter kustom. Contoh:
client = bigquery.Client() adapter = requests.adapters.HTTPAdapter(pool_connections=128, pool_maxsize=128,max_retries=3) client._http.mount("https://",adapter) client._http._auth_request.session.mount("https://",adapter) query_job = client.query(QUERY)