
Tutorial Koneksi BigQuery dengan Python dan Pandas - Part 2
Pada tutorial sebelumnya, kita sudah melihat bagaimana cara untuk mengaktifkan BigQuery API dan juga membuat Service Account Key, kedua hal ini adalah langkah yang penting karena Service Account Key memungkinkan kita untuk dapat menghubungkan program kita dengan BigQuery.
Bagi teman-teman yang belum melihat Part 1, penulis sarankan untuk melihat part sebelumnya terlebih dahulu karena akan menjadi dependency untuk artikel kali ini.
Sama seperti sebelumnya, untuk melakukan tutorial kali ini, berikut adalah pre-requisite yang dibutuhkan
-
Memiliki akun Google Cloud Platform dan dapat mengakses BigQuery
-
Memiliki dasar pemahaman dalam pemrograman Python terutama penggunaan library Pandas
Content
-
Mengaktifkan service BigQuery API melalui console
-
Membuat service account key
-
Install library yang diperlukan
-
Membaca data dari BigQuery menjadi Pandas Dataframe
-
Memuat data dari Dataframe ke BigQuery
Di part sebelumnya kita sudah melakukan step 1 dan 2, pada tutorial kali ini kita akan melanjutkan untuk menginstall library yang dibutuhkan dan melakukan pemograman untuk membaca data dari BigQuery dan juga memuat data kembali ke BigQuery
Install Library Yang Diperlukan
Terdapat beberapa library yang kita butuhkan untuk terkoneksi dengan BigQuery. Disini penulis asumsikan bahwa teman-teman sudah menginstall Python dan mengikuti langkah yang disebutkan pada part 1. Buka command prompt atau terminal sesuai dengan sistem operasi yang digunakan. Untuk windows bisa dengan menekan ctrl+r dan ketik cmd lalu OK.
Library yang diperlukan untuk tutorial kali ini adalah:
- pandas
- google-cloud-bigquery
- google-auth
Kita dapat cek apakah library di atas sudah di instal atau belum dengan membuka command prompt lalu ketik python → enter → lalu ikuti sintaks dibawah
Jika tidak ada error, maka teman-teman sudah menginstall library tersebut dan bisa lanjut ke section selanjutnya. Jika tidak, maka ikuti langkah dibawah ini:
-
Buka command prompt atau terminal sesuai dengan system operasi yang teman gunakan. Untuk windows bisa dengan mengetik win+r lalu ketik cmd
-
Untuk menginstall pandas, kita bisa menjalankan “pip install pandas” pada command prompt dan tunggu sampai proses selesai
-
Untuk menginstall google-cloud-bigquery, kita bisa menjalankan “pip install google-cloud-bigquery” pada command prompt dan tunggu sampai proses selesai
-
Untuk menginstall google-auth, kita bisa menjalankan “pip install google-auth” pada command prompt dan tunggu sampai proses selesai
- Untuk memastikan apakah library sudah terinstall, teman-teman dapat melakukan hal yang sama dengan sebelumnya.
Membaca Data dari BigQuery Menjadi Pandas Dataframe
Sebelum melanjutkan, pastikan teman-teman sudah memindahkan service account key (.json) yang sudah di download sebelumnya pada part 1 ke directory dimana teman-teman akan membuat script python
Sebelum memulai kita harus meng-import library yang dibutuhkan
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas as pd
Lalu melakukan koneksi dengan BigQuery sebagai berikut
credentialsPath = r'your-credential.json'
credentials = service_account.Credentials.from_service_account_file(credentialsPath)
client = bigquery.Client(credentials=credentials)
Pastikan untuk mengubah “your-credential” dengan file yang sudah kita download sebelumnya. Lalu untuk melakukan query dari BigQuery untuk diubah menjadi pandas dataframe kita bisa menggunakan sintak berikut
query = """
SELECT * FROM `projectid.dataset.dim_products` limit 1000
"""
query_config = (
query
)
query_job = client.query(query_config) # API request
result = query_job.result()
rows = [dict(row) for row in result]
# Convert the list of dictionaries to a Pandas DataFrame
df = pd.DataFrame(rows)
Pastikan untuk menyesuaikan query nya dengan query yang ingin teman-teman lakukan. Jika berhasil maka kita akan memiliki hasil nya pada variable df
Berikut adalah contoh hasil dari code di atas
Disini penulis menggunakan Jupyter Notebook yang memungkinkan kita untuk dapat mengeksekusi program python secara interaktif. Jika teman-teman ingin menggunakan Jupyter Notebook maka kalian bisa cari tutorial nya di google:D
Kode lengkap nya dapat dilihat dibawah ini
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas as pd
credentialsPath = r'your-credential.json'
credentials = service_account.Credentials.from_service_account_file(credentialsPath)
client = bigquery.Client(credentials=credentials)
query = """
SELECT * FROM `projectid.dataset.dim_products` limit 1000
"""
query_config = (
query
)
query_job = client.query(query_config) # API request
result = query_job.result()
rows = [dict(row) for row in result]
# Convert the list of dictionaries to a Pandas DataFrame
df = pd.DataFrame(rows)
Perlu diperhatikan bahwa kita bisa melakukan transformasi baik melalui query yang di tulis maupun memanfaatkan pandas. Jika teman-teman merasa lebih mahir menggunakan pandas maka kita bisa melakukan transformasi melalui pandas dan cukup menulis query untuk mendapatkan seluruh data dari table. Walaupun penulis lebih menyarankan untuk filtering tetap dilakukan pada query daripada melalui pandas untuk mengeliminasi data sejak awal
Memuat Data dari Dataframe ke BigQuery
Langkah selanjutnya mungkin setelah membaca dari BigQuery lalu dilakukan transformasi, mungkin teman-teman ingin menulis data nya kembali ke BigQuery kan? Atau mungkin teman-teman melakukan proses ETL melalui python dan pandas dengan sumber dari CSV ataupun dari Database, maka kita bisa memuat Dataframe yang sudah kita buat kembali ke BigQuery.
Untuk melakukannya, lakukan hal yang sama yaitu mengimport library yang diperlukan dan menginisiasi koneksi dengan BigQuery
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas as pd
credentialsPath = r'your-credential.json'
credentials = service_account.Credentials.from_service_account_file(credentialsPath)
client = bigquery.Client(credentials=credentials)
Untuk memuat data dari Dataframe ke BigQuery, kita bisa menggunakan kode berikut
job_config = bigquery.LoadJobConfig(
write_disposition="WRITE_TRUNCATE",
autodetect = True
)
table_id = "projectid.dataset.table"
job = client.load_table_from_dataframe(
df, table_id, job_config=job_config
) # Make an API request.
job.result() # Wait for the job to complete.
table = client.get_table(table_id) # Make an API request.
print(
"Loaded {} rows and {} columns to {}".format(
table.num_rows, len(table.schema), table_id
)
)
Ada hal yang perlu teman-teman perhatikan disini
write_disposition="WRITE_TRUNCATE"
Artinya adalah data yang akan dimuat ke BigQuery akan dibuat tabel baru jika tabel nya belum ada sebelumnya, jika tabel sudah ada maka data sebelumnya akan dihapus terlebih dahulu (Truncate). Untuk opsi lainnya bisa kalian lihat disini
Untuk referensi lebih lanjut bisa kalian lihat di https://cloud.google.com/bigquery/docs/reference/rest/v2/Job
Selanjutnya pastikan untuk mengganti table_id sesuai dengan nama table yang kalian inginkan
table_id = "projectid.dataset.table"
Pastikan untuk mengisi table_id dengan lengkap termasuk project id dan dataset nya
Lalu memastikan untuk mengganti df ini dengan dataframe yang kalian gunakan
job = client.load_table_from_dataframe(
df, table_id, job_config=job_config
)
Jika sudah benar semua maka menghasilkan sebagai berikut
Sehingga kode lengkapnya akan terlihat seperti ini
from google.cloud import bigquery
from google.oauth2 import service_account
import pandas as pd
credentialsPath = r'your-credential.json'
credentials = service_account.Credentials.from_service_account_file(credentialsPath)
client = bigquery.Client(credentials=credentials)
job_config = bigquery.LoadJobConfig(
write_disposition="WRITE_TRUNCATE",
autodetect = True
)
table_id = "projectid.dataset.table"
job = client.load_table_from_dataframe(
df, table_id, job_config=job_config
) # Make an API request.
job.result() # Wait for the job to complete.
table = client.get_table(table_id) # Make an API request.
print(
"Loaded {} rows and {} columns to {}".format(
table.num_rows, len(table.schema), table_id
)
)
Dan begitu lah cara simpel untuk berinteraksi dengan BigQuery, teman-teman tentunya dapat menyesuaikan kode nya sesuai dengan apa yang ingin kita buat, misalnya membaca data dari CSV lalu melakukan transformasi dengan pandas lalu kita load data nya ke BigQuery. Kita juga bisa membaca data dari BigQuery, transformasi, lalu load kembali data nya ke BigQuery.
Sekian tutorial yang bisa penulis sampaikan. Jika ingin berdiskusi, saran, maupun kritik bisa teman-teman sampaikan melalui hi@busto.dev
Arigatou Gozaimasu!!!