• Get in Touch
  • hi@busto.dev
Data Engineering

Tutorial Koneksi BigQuery dengan Python dan Pandas - Part 2

Rishad Harisdias Bustomi, 2024-07-03 17:46

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

  1. Memiliki akun Google Cloud Platform dan dapat mengakses BigQuery

  2. Memiliki dasar pemahaman dalam pemrograman Python terutama penggunaan library Pandas

 

Content

  1. Mengaktifkan service BigQuery API melalui console

  2. Membuat service account key

  3. Install library yang diperlukan

  4. Membaca data dari BigQuery menjadi Pandas Dataframe

  5. 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:

  1. Buka command prompt atau terminal sesuai dengan system operasi yang teman gunakan. Untuk windows bisa dengan mengetik win+r lalu ketik cmd

  2. Untuk menginstall pandas, kita bisa menjalankan “pip install pandas” pada command prompt dan tunggu sampai proses selesai

  3. Untuk menginstall google-cloud-bigquery, kita bisa menjalankan “pip install google-cloud-bigquery” pada command prompt dan tunggu sampai proses selesai

  4. Untuk menginstall google-auth, kita bisa menjalankan “pip install google-auth” pada command prompt dan tunggu sampai proses selesai

  5. 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!!! 

Leave your comment