Google BigQuery telah merevolusi cara organisasi menangani analisis data skala besar. Arsitektur tanpa server, skalabilitas, dan antarmuka SQL yang familiar menjadikannya alat yang ampuh untuk memperoleh wawasan dari dataset masif. Meskipun berinteraksi dengan BigQuery melalui Google Cloud Console atau alat baris perintah bq
adalah hal yang umum, kekuatan sebenarnya dari otomatisasi, integrasi, dan pengembangan aplikasi kustom dibuka melalui serangkaian Application Programming Interfaces (API) yang komprehensif.
Panduan ini memberikan eksplorasi langkah demi langkah tentang cara menggunakan BigQuery API, memungkinkan Anda untuk berinteraksi secara terprogram dengan gudang data Anda, membangun alur data, mengintegrasikan BigQuery ke dalam aplikasi Anda, dan mengelola sumber daya secara efektif. Kami akan membahas berbagai jenis API yang tersedia, cara menyiapkan lingkungan Anda, contoh praktis menggunakan pustaka klien Python, dan memperkenalkan API khusus untuk kasus penggunaan tingkat lanjut.
Ingin platform terintegrasi, All-in-One untuk Tim Pengembang Anda untuk bekerja bersama dengan produktivitas maksimum?
Apidog memberikan semua demans Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!

Memahami BigQuery API
Sebelum masuk ke kode, penting untuk memahami konsep inti dan berbagai cara Anda dapat berinteraksi dengan BigQuery secara terprogram.
Konsep Inti BigQuery:
- Project: Kontainer tingkat atas di Google Cloud, yang menyimpan semua sumber daya Anda, termasuk dataset, tabel, dan pekerjaan BigQuery. Penagihan dan izin biasanya dikelola di tingkat project.
- Dataset: Kontainer untuk tabel dan tampilan dalam project tertentu. Dataset membantu mengatur data Anda dan mengontrol akses. Anggap saja seperti skema atau database dalam sistem tradisional.
- Table: Menyimpan data terstruktur Anda dalam baris dan kolom dengan skema yang ditentukan. BigQuery mendukung berbagai tipe data dan bidang bertingkat/berulang.
- Job: Mewakili tindakan asinkron yang dilakukan di BigQuery, seperti menjalankan kueri, memuat data, mengekspor data, atau menyalin tabel. API memungkinkan Anda untuk memulai, memantau, dan mengelola pekerjaan ini.
Jenis BigQuery API:
BigQuery menawarkan beberapa cara untuk berinteraksi dengan layanannya secara terprogram:
REST API: Ini adalah API dasar yang dibangun di atas HTTP dan JSON. Ini menyediakan akses langsung ke sumber daya dan operasi BigQuery. Anda dapat berinteraksi dengannya menggunakan permintaan HTTP standar (GET, POST, PUT, DELETE) yang menargetkan endpoint tertentu (misalnya, https://bigquery.googleapis.com/bigquery/v2/projects/{projectId}/datasets
). Meskipun kuat dan menawarkan kontrol yang terperinci, menggunakan REST API secara langsung mengharuskan penanganan autentikasi, pemformatan permintaan, penguraian respons, dan penanganan kesalahan secara manual. Autentikasi biasanya melibatkan token akses OAuth 2.0.
Pustaka Klien: Google menyediakan pustaka klien tingkat tinggi untuk berbagai bahasa pemrograman populer (termasuk Python, Java, Go, Node.js, C#, PHP, Ruby). Pustaka ini membungkus REST API yang mendasarinya, menawarkan pengalaman yang lebih idiomatis dan ramah pengembang. Mereka menyederhanakan tugas-tugas umum, menangani autentikasi (sering kali secara otomatis melalui Application Default Credentials), mengelola percobaan ulang, dan mengurangi jumlah kode boilerplate yang perlu Anda tulis. Ini adalah pendekatan yang direkomendasikan untuk sebagian besar pengembangan aplikasi.
API Khusus: Untuk tugas-tugas khusus atau berkinerja tinggi tertentu, BigQuery menawarkan API khusus:
- BigQuery Storage Read API: Dirancang untuk pembacaan data throughput tinggi langsung dari penyimpanan terkelola BigQuery. Ini secara signifikan lebih cepat daripada ekspor hasil kueri standar, terutama untuk dataset besar, dan terintegrasi dengan baik dengan kerangka kerja pemrosesan data seperti Apache Spark, Apache Beam, dan Pandas. Ini memungkinkan pembacaan paralel melalui beberapa aliran.
- BigQuery Connection API: Memungkinkan Anda untuk membuat dan mengelola koneksi ke sumber data eksternal, seperti Cloud SQL, Spanner, atau Cloud Storage. Ini memungkinkan Anda untuk mengkueri data dalam sistem eksternal ini langsung dari BigQuery menggunakan fungsi
EXTERNAL_QUERY
, tanpa perlu memuat data ke dalam BigQuery terlebih dahulu. - Analytics Hub API: Memfasilitasi berbagi data yang aman dan terukur di berbagai organisasi atau unit bisnis. Ini memungkinkan Anda untuk membuat "Daftar" – referensi yang dapat dibagikan ke dataset – di dalam "Pertukaran Data". Konsumen dapat berlangganan daftar ini untuk mengakses data yang dibagikan dalam project mereka sendiri.
- BigLake API: Digunakan untuk mengelola tabel BigLake. BigLake memungkinkan Anda untuk membuat tabel di BigQuery yang beroperasi di atas data yang disimpan dalam format terbuka (seperti Parquet, ORC, Avro) di data lake (terutama Google Cloud Storage). Ini menyediakan antarmuka terpadu untuk mengkueri penyimpanan BigQuery terkelola dan penyimpanan data lake dengan keamanan dan tata kelola yang konsisten.
Menyiapkan Lingkungan Anda
Sebelum Anda dapat mulai membuat panggilan API, Anda perlu mengonfigurasi lingkungan lokal atau server Anda.
Prasyarat:
- Akun Google Cloud: Anda memerlukan akun Google Cloud yang aktif.
- Project Google Cloud: Buat project baru atau pilih yang sudah ada di Google Cloud Console. Catat ID Project Anda.
- Aktifkan BigQuery API: Pastikan BigQuery API diaktifkan untuk project Anda. Anda dapat melakukan ini melalui Cloud Console (API & Layanan > Pustaka > Cari "BigQuery API" > Aktifkan). Anda mungkin juga perlu mengaktifkan API lain seperti BigQuery Storage Read API atau BigQuery Connection API tergantung pada kasus penggunaan Anda.
- Penagihan: Pastikan penagihan diaktifkan untuk project Anda. Operasi BigQuery menimbulkan biaya berdasarkan penyimpanan data, analisis yang diproses, dan penyisipan streaming.
Autentikasi:
Aplikasi Anda perlu melakukan autentikasi ke Google Cloud untuk membuktikan identitas dan otorisasi untuk mengakses sumber daya BigQuery. Metode yang direkomendasikan untuk sebagian besar skenario adalah Application Default Credentials (ADC).
- Application Default Credentials (ADC): Strategi ini memungkinkan aplikasi Anda untuk menemukan kredensial secara otomatis berdasarkan lingkungan tempat ia berjalan, tanpa perlu menyematkan kunci langsung dalam kode.
- Pengembangan Lokal: Instal Google Cloud CLI (
gcloud
). Jalankan perintahgcloud auth application-default login
. Ini akan membuka jendela browser bagi Anda untuk masuk dengan akun Google Anda, memberikan akses SDK ke kredensial Anda. Pustaka klien akan secara otomatis mendeteksi kredensial ini. - Compute Engine, Cloud Functions, App Engine, dll.: ADC secara otomatis menggunakan akun layanan yang terkait dengan sumber daya tempat kode Anda berjalan.
- Akun Layanan: Untuk aplikasi yang berjalan di luar Google Cloud atau memerlukan izin khusus, Anda dapat menggunakan akun layanan.
- Buat akun layanan di Cloud Console (IAM & Admin > Akun Layanan).
- Berikan peran BigQuery yang diperlukan (misalnya,
BigQuery Data Editor
,BigQuery Job User
,BigQuery User
) ke akun layanan. - Unduh file kunci akun layanan (format JSON).
- Atur variabel lingkungan
GOOGLE_APPLICATION_CREDENTIALS
ke jalur absolut file kunci JSON yang diunduh. Pustaka klien akan secara otomatis menggunakan file kunci ini untuk autentikasi jika variabel lingkungan diatur.
Menginstal Pustaka Klien (Contoh Python):
Kami akan fokus pada Python untuk contoh kami. Anda dapat menginstal pustaka yang diperlukan menggunakan pip
:
pip install google-cloud-bigquery
# Opsional: Instal pustaka Storage API untuk pembacaan yang lebih cepat
pip install google-cloud-bigquery-storage
# Opsional: Instal integrasi pandas dan db-dtypes untuk penanganan tipe yang lebih baik
pip install pandas db-dtypes pyarrow
Pastikan Anda telah menginstal Python (versi 3.7+ direkomendasikan untuk fitur pustaka terbaru).
Menggunakan Pustaka Klien BigQuery (Contoh Python)
Sekarang, mari kita jelajahi operasi BigQuery umum menggunakan pustaka Python google-cloud-bigquery
.
1. Mengimpor dan Menginisialisasi Klien:
Pertama, impor pustaka. Kemudian, buat instance klien. Jika ADC dikonfigurasi dengan benar, klien akan melakukan autentikasi secara otomatis.
from google.cloud import bigquery
import pandas as pd
# Buat objek klien BigQuery.
# Jika GOOGLE_APPLICATION_CREDENTIALS diatur, ia menggunakan akun layanan.
# Jika gcloud auth application-default login dijalankan, ia menggunakan kredensial tersebut.
# Jika berjalan di infrastruktur GCP, ia menggunakan akun layanan instance.
client = bigquery.Client()
# Anda dapat secara eksplisit menentukan ID project jika diperlukan,
# jika tidak, sering kali menyimpulkan dari lingkungan/kredensial ADC.
# client = bigquery.Client(project='your-project-id')
print("Klien berhasil dibuat.")
2. Menjalankan Kueri:
Operasi yang paling umum adalah menjalankan kueri SQL.
- Kueri Sinkron Sederhana: Untuk kueri yang diharapkan selesai dengan cepat.
query_and_wait()
mengirim kueri dan menunggu hasilnya.
# Tentukan kueri SQL Anda
query = """
SELECT name, SUM(number) as total_people
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE state = 'TX'
GROUP BY name, state
ORDER BY total_people DESC
LIMIT 10
"""
# Buat permintaan API dan tunggu hingga pekerjaan selesai.
query_job = client.query(query) # Permintaan API
print(f"Pekerjaan dimulai: {query_job.job_id}")
# Tunggu hingga pekerjaan selesai dan dapatkan hasilnya.
rows = query_job.result() # Menunggu pekerjaan selesai.
print("\n10 nama teratas di TX (1910-2013):")
for row in rows:
# Nilai baris dapat diakses berdasarkan nama bidang atau indeks.
print(f"Nama: {row.name}, Jumlah: {row['total_people']}") # Akses berdasarkan atribut atau kunci
# Konversi hasil ke Pandas DataFrame
df = rows.to_dataframe()
print("\nHasil sebagai Pandas DataFrame:")
print(df.head())
- Kueri Asinkron: Untuk kueri yang berjalan lama, mulai pekerjaan dan periksa statusnya nanti.
query = """
SELECT corpus, COUNT(word) as distinct_words
FROM `bigquery-public-data.samples.shakespeare`
GROUP BY corpus
ORDER BY distinct_words DESC;
"""
job_config = bigquery.QueryJobConfig(
# Gunakan sintaks SQL standar untuk kueri.
use_legacy_sql=False
)
# Mulai kueri, dengan meneruskan konfigurasi tambahan.
query_job = client.query(query, job_config=job_config) # Tidak menunggu
print(f"Pekerjaan asinkron dimulai: {query_job.job_id}")
# --- Nanti dalam aplikasi Anda ---
# Periksa status pekerjaan (opsional)
# from google.cloud.exceptions import NotFound
# try:
# job = client.get_job(query_job.job_id, location=query_job.location)
# print(f"Status pekerjaan {job.job_id}: {job.state}")
# if job.state == "DONE":
# if job.error_result:
# print(f"Pekerjaan gagal: {job.errors}")
# else:
# results = job.result() # Dapatkan hasil
# print("Hasil diambil.")
# # Proses hasil...
# except NotFound:
# print(f"Pekerjaan {query_job.job_id} tidak ditemukan.")
# Atau cukup tunggu hingga selesai saat dibutuhkan
results = query_job.result() # Ini akan memblokir hingga pekerjaan selesai
print("Pekerjaan asinkron selesai.")
for row in results:
print(f"Corpus: {row.corpus}, Kata yang Berbeda: {row.distinct_words}")
- Kueri Parameter: Penting untuk keamanan (mencegah injeksi SQL) saat menggabungkan input pengguna ke dalam kueri.
from google.cloud.bigquery import ScalarQueryParameter, ArrayQueryParameter, StructQueryParameter, QueryJobConfig
# Contoh: Temukan nama yang dimulai dengan awalan tertentu di negara bagian tertentu
state_param = "NY"
prefix_param = "Ma"
min_count_param = 1000
query = """
SELECT name, SUM(number) as total_people
FROM `bigquery-public-data.usa_names.usa_1910_2013`
WHERE state = @state_abbr AND name LIKE @name_prefix
GROUP BY name
HAVING total_people >= @min_count
ORDER BY total_people DESC;
"""
job_config = QueryJobConfig(
query_parameters=[
ScalarQueryParameter("state_abbr", "STRING", state_param),
# Gunakan 'val%' untuk operator LIKE
ScalarQueryParameter("name_prefix", "STRING", f"{prefix_param}%"),
ScalarQueryParameter("min_count", "INT64", min_count_param),
]
)
query_job = client.query(query, job_config=job_config)
print(f"Pekerjaan kueri parameter dimulai: {query_job.job_id}")
rows = query_job.result()
print(f"\nNama yang dimulai dengan '{prefix_param}' di {state_param} dengan >= {min_count_param} orang:")
for row in rows:
print(f"Nama: {row.name}, Jumlah: {row.total_people}")
3. Mengelola Dataset:
Anda dapat membuat, membuat daftar, mendapatkan detail, dan menghapus dataset.
# Tentukan ID dataset dan lokasi
project_id = client.project
dataset_id = f"{project_id}.my_new_dataset"
dataset_location = "US" # misalnya, "US", "EU", "asia-northeast1"
# Buat objek Dataset lengkap untuk dikirim ke API.
dataset = bigquery.Dataset(dataset_id)
dataset.location = dataset_location
dataset.description = "Dataset dibuat melalui pustaka klien Python"
try:
# Buat permintaan API untuk membuat dataset.
dataset = client.create_dataset(dataset, timeout=30) # Buat permintaan API.
print(f"Dataset {client.project}.{dataset.dataset_id} dibuat")
# Daftar dataset dalam project
print("\nDataset dalam project:")
datasets = list(client.list_datasets()) # Permintaan API
if datasets:
for ds in datasets:
print(f"\t{ds.dataset_id}")
else:
print(f"\tProject {client.project} tidak berisi dataset apa pun.")
# Dapatkan info dataset
retrieved_dataset = client.get_dataset(dataset_id) # Permintaan API
print(f"\nInfo dataset yang diambil untuk {dataset_id}:")
print(f"\tDeskripsi: {retrieved_dataset.description}")
print(f"\tLokasi: {retrieved_dataset.location}")
except Exception as e:
print(f"Kesalahan selama operasi dataset: {e}")
finally:
# Bersihkan: Hapus dataset
try:
client.delete_dataset(
dataset_id, delete_contents=True, not_found_ok=True
) # Permintaan API
print(f"\nBerhasil menghapus dataset '{dataset_id}'.")
except Exception as e:
print(f"Kesalahan menghapus dataset {dataset_id}: {e}")
4. Mengelola Tabel:
Operasi serupa ada untuk tabel: membuat tabel (mendefinisikan skema), memuat data, mendapatkan metadata, dan menghapus tabel.
# Menggunakan ID dataset yang dibuat sebelumnya (pastikan itu ada atau hapus langkah penghapusan di atas)
dataset_id_for_table = "my_new_dataset" # Gunakan ID dataset yang valid
table_id = f"{client.project}.{dataset_id_for_table}.my_new_table"
# Tentukan skema
schema = [
bigquery.SchemaField("full_name", "STRING", mode="REQUIRED"),
bigquery.SchemaField("age", "INTEGER", mode="REQUIRED"),
bigquery.SchemaField("email", "STRING", mode="NULLABLE"),
]
# Buat tabel
table = bigquery.Table(table_id, schema=schema)
try:
# Pastikan dataset ada terlebih dahulu
client.create_dataset(dataset_id_for_table, exists_ok=True)
table = client.create_table(table) # Permintaan API
print(
f"Tabel {table.project}.{table.dataset_id}.{table.table_id} dibuat"
)
# --- Memuat Data (Contoh: dari Pandas DataFrame) ---
data = {'full_name': ['Alice Smith', 'Bob Johnson'],
'age': [30, 45],
'email': ['alice@example.com', None]}
dataframe = pd.DataFrame(data)
job_config = bigquery.LoadJobConfig(
# Menentukan skema direkomendasikan, memastikan tipe yang tepat
schema=schema,
# Opsional: timpa data tabel
write_disposition="WRITE_TRUNCATE",
# Atau tambahkan: write_disposition="WRITE_APPEND",
)
load_job = client.load_table_from_dataframe(
dataframe, table_id, job_config=job_config
) # Permintaan API
print(f"Memulai pekerjaan {load_job.job_id} untuk memuat data dari DataFrame")
load_job.result() # Menunggu pekerjaan selesai.
print("Pekerjaan pemuatan DataFrame selesai.")
destination_table = client.get_table(table_id) # Permintaan API
print(f"{destination_table.num_rows} baris dimuat ke dalam tabel {table_id}")
# --- Memuat Data (Contoh: dari Google Cloud Storage URI) ---
# Asumsikan file CSV gs://your-bucket/data.csv ada dengan data yang kompatibel
# uri = "gs://your-bucket/data.csv"
# job_config_gcs = bigquery.LoadJobConfig(
# schema=schema,
# skip_leading_rows=1, # Lewati baris header
# source_format=bigquery.SourceFormat.CSV,
# write_disposition="WRITE_APPEND", # Tambahkan ke data yang ada
# )
# load_job_gcs = client.load_table_from_uri(
# uri, table_id, job_config=job_config_gcs
# )
# print(f"Memulai pekerjaan {load_job_gcs.job_id} untuk memuat data dari GCS")
# load_job_gcs.result()
# print("Pekerjaan pemuatan GCS selesai.")
# destination_table = client.get_table(table_id)
# print(f"Total baris setelah pemuatan GCS: {destination_table.num_rows}")
except Exception as e:
print(f"Kesalahan selama operasi tabel: {e}")
finally:
# Bersihkan: Hapus tabel
try:
client.delete_table(table_id, not_found_ok=True) # Permintaan API
print(f"Berhasil menghapus tabel '{table_id}'.")
# Opsional, hapus dataset lagi jika hanya untuk contoh ini
# client.delete_dataset(dataset_id_for_table, delete_contents=True, not_found_ok=True)
# print(f"Berhasil menghapus dataset '{dataset_id_for_table}'.")
except Exception as e:
print(f"Kesalahan menghapus tabel {table_id}: {e}")
5. Bekerja dengan Pekerjaan:
Semua operasi asinkron (kueri, muat, ekspor, salin) membuat sumber daya Pekerjaan. Anda dapat membuat daftar dan mengelola pekerjaan ini.
# Daftar pekerjaan terbaru
print("\nPekerjaan BigQuery Terbaru:")
for job in client.list_jobs(max_results=10): # Permintaan API
print(f"ID Pekerjaan: {job.job_id}, Tipe: {job.job_type}, Status: {job.state}, Dibuat: {job.created}")
# Dapatkan pekerjaan tertentu (ganti dengan ID pekerjaan yang valid dari eksekusi sebelumnya)
# try:
# job_id_to_get = "..." # Ganti dengan ID pekerjaan yang sebenarnya
# location = "US" # Ganti dengan lokasi pekerjaan jika bukan default
# retrieved_job = client.get_job(job_id_to_get, location=location) # Permintaan API
# print(f"\nDetail untuk pekerjaan {retrieved_job.job_id}:")
# print(f"\tStatus: {retrieved_job.state}")
# if retrieved_job.error_result:
# print(f"\tKesalahan: {retrieved_job.errors}")
# except NotFound:
# print(f"Pekerjaan {job_id_to_get} tidak ditemukan.")
# except Exception as e:
# print(f"Kesalahan mengambil pekerjaan: {e}")
Memanfaatkan API Khusus (Konsep dan Kasus Penggunaan)
Meskipun pustaka klien inti mencakup banyak kasus penggunaan, API khusus menawarkan peningkatan kinerja atau fungsionalitas untuk tugas-tugas tertentu.
1. BigQuery Storage Read API (Python):
- Tujuan: Pengambilan data yang sangat cepat dari tabel BigQuery, melewati mesin eksekusi kueri standar. Ideal untuk mengekspor dataset besar atau memasukkan data ke dalam alur pelatihan ML atau kerangka kerja pemrosesan data.
- Cara kerjanya: Anda membuat
ReadSession
yang menentukan tabel, kolom, dan filter baris. API mengembalikan satu atau lebihStreams
. Anda membaca data (biasanya dalam format Apache Arrow atau Avro) dari aliran ini, sering kali secara paralel. - Pustaka Klien:
google-cloud-bigquery-storage
- Penggunaan Python Konseptual (dengan integrasi Pandas):
# Membutuhkan: pip install google-cloud-bigquery-storage pyarrow pandas db-dtypes
from google.cloud import bigquery_storage_v1
from google.cloud.bigquery_storage_v1 import types, GetDataStreamRequest
# --- Menggunakan Pandas read_gbq (Integrasi paling sederhana) ---
# Ini secara otomatis menggunakan Storage API jika diinstal dan bermanfaat
# table_id_read = "bigquery-public-data.usa_names.usa_1910_2013"
# cols_to_read = ["name", "number", "state"]
# row_filter = "state = 'CA' AND number > 5000"
#
# try:
# df_storage = pd.read_gbq(
# table_id_read,
# project_id=client.project,
# columns=cols_to_read,
# row_filter=row_filter,
# use_bqstorage_api=True, # Secara eksplisit meminta Storage API
# progress_bar_type='tqdm' # Bilah kemajuan opsional
# )
# print("\nBaca data menggunakan Storage API melalui pandas.read_gbq:")
# print(df_storage.head())
# print(f"Baca {len(df_storage)} baris.")
# except Exception as e:
# print(f"Kesalahan membaca dengan Storage API melalui read_gbq: {e}")
# --- Penggunaan Storage API Manual (Kontrol Lebih Banyak) ---
# bqstorageclient = bigquery_storage_v1.BigQueryReadClient()
# table = f"projects/{project_id}/datasets/{dataset_id}/tables/{table_name}" # Ganti dengan detail tabel Anda
# requested_session = types.ReadSession(
# table=table,
# data_format=types.DataFormat.ARROW,
# read_options=types.ReadSession.TableReadOptions(
# selected_fields=["col1", "col2"], # Tentukan kolom
# row_restriction="col1 > 100" # Tentukan filter
# ),
# )
# parent = f"projects/{project_id}"
# read_session = bqstorageclient.create_read_session(
# parent=parent,
# read_session=requested_session,
# max_stream_count=1, # Minta jumlah aliran paralel
# )
# stream = read_session.streams[0]
# reader = bqstorageclient.read_rows(stream.name)
# frames = [message.arrow_record_batch for message in reader.messages()]
# if frames:
# arrow_table = pa.Table.from_batches(frames)
# df_manual = arrow_table.to_pandas()
# print("\nBaca data secara manual menggunakan Storage API:")
# print(df_manual.head())
# else:
# print("Tidak ada data yang dibaca menggunakan Storage API manual.")
2. BigQuery Connection API:
- Tujuan: Mengkueri sumber data eksternal (Cloud SQL, Spanner, Cloud Storage) langsung dari BigQuery tanpa pergerakan data.
- Cara kerjanya:
- Gunakan API (atau alat Cloud Console/
bq
) untuk membuat sumber dayaConnection
, yang menentukan tipe dan detail sumber eksternal. - Berikan izin yang sesuai pada sumber daya eksternal ke akun layanan koneksi (misalnya, peran Pengguna Cloud SQL).
- Gunakan fungsi
EXTERNAL_QUERY("connection_id", "external_sql_query")
dalam SQL BigQuery Anda.
- Pustaka Klien:
google-cloud-bigquery-connection
menyediakan metode seperticreate_connection
,get_connection
,list_connections
,delete_connection
.
3. Analytics Hub API:
- Tujuan: Berbagi dataset yang dikurasi secara aman di seluruh organisasi atau tim.
- Konsep Utama:
- Pertukaran Data: Kontainer untuk berbagi data. Dapat bersifat publik atau pribadi.
- Daftar: Referensi ke dataset BigQuery tertentu (atau berpotensi tampilan/tabel di masa mendatang) yang dibagikan dalam pertukaran. Penerbit membuat daftar; pelanggan mengaksesnya.
- API: Tersedia melalui REST dan pustaka klien (misalnya,
google-cloud-analyticshub
) untuk mengelola pertukaran, daftar, dan langganan secara terprogram.
4. BigLake API:
- Tujuan: Mengelola tabel BigLake, yang memungkinkan pengkuerian data di Cloud Storage menggunakan antarmuka dan tata kelola BigQuery.
- Cara kerjanya: Tentukan tabel di BigQuery yang mereferensikan file data (Parquet, ORC, dll.) di bucket GCS. BigLake API (terutama REST saat ini) digunakan untuk membuat, memperbarui, dan mengelola metadata untuk tabel ini. Pengkuerian terjadi melalui SQL BigQuery standar.
Menggunakan REST API Secara Langsung
Meskipun pustaka klien umumnya lebih disukai, Anda mungkin menggunakan REST API secara langsung jika:
- Anda menggunakan bahasa tanpa pustaka klien Google resmi.
- Anda memerlukan akses ke fitur-fitur mutakhir yang belum diekspos di pustaka.
- Anda memerlukan kontrol absolut atas siklus permintaan/respons HTTP.
Membuat Permintaan:
Anda biasanya akan menggunakan klien HTTP (seperti curl
atau pustaka requests
Python). Anda perlu:
- Dapatkan Token Akses OAuth 2.0 (misalnya, menggunakan
gcloud auth print-access-token
). - Buat URL endpoint API yang benar.
- Buat badan permintaan JSON sesuai dengan spesifikasi metode API.
- Sertakan token akses di header
Authorization: Bearer <token>
. - Tangani respons HTTP (kode status, penguraian JSON, pesan kesalahan).
Contoh: Menjalankan Kueri melalui REST (jobs.query
)
# 1. Dapatkan Token Akses
TOKEN=$(gcloud auth print-access-token)
# 2. Tentukan ID Project dan Badan Permintaan
PROJECT_ID="your-project-id" # Ganti dengan ID project Anda
REQUEST_BODY=$(cat <<EOF
{
"query": "SELECT name, SUM(number) as total_people FROM \`bigquery-public-data.usa_names.usa_1910_2013\` WHERE state = 'CA' GROUP BY name ORDER BY total_people DESC LIMIT 5;",
"useLegacySql": false
}
EOF
)
# 3. Buat Panggilan API menggunakan curl
curl -X POST \
"https://bigquery.googleapis.com/bigquery/v2/projects/${PROJECT_ID}/jobs" \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json; charset=utf-8" \
-d "${REQUEST_BODY}"
# Respons akan berisi informasi pekerjaan, termasuk ID pekerjaan.
# Anda kemudian perlu membuat panggilan berikutnya ke jobs.getQueryResults
# menggunakan ID pekerjaan untuk mengambil baris data aktual setelah pekerjaan selesai.
Contoh ini hanya memulai pekerjaan kueri. Mengambil hasil memerlukan polling status pekerjaan dan kemudian memanggil endpoint jobs.getQueryResults
. Ini menyoroti langkah-langkah tambahan yang terlibat dibandingkan dengan pustaka klien.
Praktik Terbaik dan Tips
- Pilih Pustaka Klien: Gunakan pustaka klien Google Cloud kapan pun memungkinkan untuk kesederhanaan, ketahanan, dan pemeliharaan yang lebih mudah.
- Gunakan ADC: Mengandalkan Application Default Credentials untuk autentikasi menyederhanakan penerapan di berbagai lingkungan. Hindari menyematkan kredensial dalam kode.
- Kueri Parameter: Selalu gunakan kueri parameter saat menggabungkan input eksternal untuk mencegah kerentanan injeksi SQL.
- Optimalkan Kueri: Tulis SQL yang efisien. Hindari
SELECT *
, gunakan klausaWHERE
secara efektif, pahami partisi dan pengelompokan untuk kinerja pada tabel besar. Gunakan fitur penjelasan rencana kueri. - Penanganan Kesalahan: Terapkan penanganan kesalahan yang kuat, terutama untuk masalah jaringan atau kesalahan khusus API (misalnya, kuota terlampaui, tidak ditemukan). Pustaka klien sering kali menyertakan mekanisme percobaan ulang bawaan untuk kesalahan sementara.
- Manajemen Sumber Daya: Hapus secara eksplisit dataset atau tabel yang dibuat selama pengujian atau pemrosesan sementara untuk menghindari biaya penyimpanan yang tidak perlu.
- Pantau Biaya dan Kuota: Perhatikan harga BigQuery (byte yang diproses untuk kueri, biaya penyimpanan). Pantau penggunaan Anda dan waspadai kuota API (misalnya, batas kueri bersamaan, batas laju permintaan API). Gunakan fitur seperti byte maksimum yang ditagih (
maximum_bytes_billed
diJobConfig
) untuk mengontrol biaya kueri. - Gunakan API Khusus: Manfaatkan Storage Read API untuk ekspor/pembacaan data besar dan Connection API untuk mengkueri sumber eksternal secara efisien.
Kesimpulan
BigQuery API menyediakan cara yang ampuh dan fleksibel untuk berinteraksi dengan gudang data Anda secara terprogram. Apakah Anda perlu mengotomatiskan pemuatan data, menjalankan kueri analitis kompleks sebagai bagian dari aplikasi, mengintegrasikan wawasan BigQuery ke dalam dasbor, atau mengelola sumber daya secara dinamis, API menawarkan alat yang diperlukan.
Dengan memahami berbagai jenis API, menyiapkan lingkungan Anda dengan benar, dan memanfaatkan kenyamanan pustaka klien (terutama di Python), Anda dapat membuka potensi penuh BigQuery di luar konsol interaktif. Mulailah dengan API inti untuk tugas-tugas umum, jelajahi API khusus seperti Storage Read API untuk operasi yang penting bagi kinerja, dan ingat bahwa REST API selalu tersedia untuk kontrol tertinggi. Saat Anda membangun aplikasi di BigQuery, API ini akan menjadi komponen penting dari arsitektur data Anda.