Menggunakan BigQuery dengan Python

1. Ringkasan

BigQuery adalah data warehouse analisis berbiaya rendah yang terkelola sepenuhnya dan berskala petabyte dari Google. BigQuery adalah NoOps—tidak ada infrastruktur yang perlu dikelola dan Anda tidak memerlukan administrator database—sehingga Anda dapat berfokus pada analisis data untuk menemukan insight yang bermakna, menggunakan SQL yang sudah dikenal, dan memanfaatkan model bayar sesuai penggunaan kami.

Dalam codelab ini, Anda akan menggunakan Library Klien Google Cloud untuk Python guna membuat kueri set data publik BigQuery dengan Python.

Yang akan Anda pelajari

  • Cara menggunakan Cloud Shell
  • Cara mengaktifkan BigQuery API
  • Cara mengautentikasi permintaan API
  • Cara menginstal library klien Python
  • Cara membuat kueri karya Shakespeare
  • Cara membuat kueri set data GitHub
  • Cara menyesuaikan statistik penayangan dan penayangan dalam cache

Yang Anda butuhkan

  • Project Google Cloud
  • Browser, seperti Chrome atau Firefox
  • Kemampuan menggunakan Python

Survei

Bagaimana Anda akan menggunakan tutorial ini?

Hanya membacanya Membacanya dan menyelesaikan latihan

Bagaimana penilaian Anda terhadap pengalaman dengan Python?

Pemula Menengah Mahir

Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?

Pemula Menengah Mahir

2. Penyiapan dan persyaratan

Penyiapan lingkungan mandiri

  1. Login ke Google Cloud Console dan buat project baru atau gunakan kembali project yang sudah ada. Jika belum memiliki akun Gmail atau Google Workspace, Anda harus membuatnya.

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • Nama project adalah nama tampilan untuk peserta project ini. String ini adalah string karakter yang tidak digunakan oleh Google API, dan Anda dapat memperbaruinya kapan saja.
  • Project ID harus unik di semua project Google Cloud dan tidak dapat diubah (tidak dapat diubah setelah ditetapkan). Cloud Console otomatis menghasilkan string unik; biasanya Anda tidak peduli dengan kata-katanya. Pada sebagian besar codelab, Anda harus mereferensikan Project ID (dan biasanya diidentifikasi sebagai PROJECT_ID). Jadi, jika Anda tidak menyukainya, buat ID acak lain, atau, Anda dapat mencoba sendiri dan melihat apakah tersedia. Kemudian file akan "dibekukan" setelah project dibuat.
  • Ada nilai ketiga, Nomor Project yang digunakan oleh beberapa API. Pelajari lebih lanjut ketiga nilai ini di dokumentasi.
  1. Selanjutnya, Anda harus mengaktifkan penagihan di Cloud Console untuk menggunakan API/resource Cloud. Menjalankan operasi dalam codelab ini seharusnya tidak memerlukan banyak biaya, bahkan mungkin tidak sama sekali. Untuk menonaktifkan resource agar tidak menimbulkan penagihan di luar tutorial ini, ikuti petunjuk "pembersihan" yang ada di akhir codelab. Pengguna baru Google Cloud memenuhi syarat untuk mengikuti program Uji Coba Gratis senilai $300 USD.

Mulai Cloud Shell

Meskipun Google Cloud dapat dioperasikan dari jarak jauh menggunakan laptop Anda, dalam codelab ini, Anda akan menggunakan Google Cloud Shell, lingkungan command line yang berjalan di Cloud.

Mengaktifkan Cloud Shell

  1. Dari Cloud Console, klik Aktifkan Cloud Shell 853e55310c205094.png.

55efc1aaa7a4d3ad.png

Jika belum pernah memulai Cloud Shell, Anda akan melihat layar perantara (di paruh bawah) yang menjelaskan apa itu Cloud Shell. Jika demikian, klik Continue (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:

9c92662c6a846a5c.png

Perlu waktu beberapa saat untuk menyediakan dan terhubung ke Cloud Shell.

9f0e51b578fecce5.png

Virtual machine ini dimuat dengan semua alat pengembangan yang Anda perlukan. Layanan ini menawarkan direktori beranda tetap sebesar 5 GB dan beroperasi di Google Cloud, sehingga sangat meningkatkan performa dan autentikasi jaringan. Sebagian besar pekerjaan Anda dalam codelab ini dapat dilakukan hanya dengan browser atau Chromebook.

Setelah terhubung ke Cloud Shell, Anda akan melihat bahwa Anda sudah diautentikasi dan project sudah ditetapkan ke project ID Anda.

  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa Anda telah diautentikasi:
gcloud auth list

Output perintah

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
  1. Jalankan perintah berikut di Cloud Shell untuk mengonfirmasi bahwa perintah gcloud mengetahui project Anda:
gcloud config list project

Output perintah

[core]
project = <PROJECT_ID>

Jika tidak, Anda dapat menyetelnya dengan perintah ini:

gcloud config set project <PROJECT_ID>

Output perintah

Updated property [core/project].

3. Mengaktifkan API

BigQuery API harus diaktifkan secara default di semua project Google Cloud. Anda dapat memeriksa apakah hal ini benar dengan perintah berikut di Cloud Shell: Anda harus terdaftar di BigQuery:

gcloud services list

Anda akan melihat BigQuery tercantum:

NAME                              TITLE
bigquery.googleapis.com           BigQuery API

...

Jika BigQuery API tidak diaktifkan, Anda dapat menggunakan perintah berikut di Cloud Shell untuk mengaktifkannya:

gcloud services enable bigquery.googleapis.com

4. Melakukan Autentikasi permintaan API

Untuk membuat permintaan ke BigQuery API, Anda harus menggunakan Akun Layanan. Akun Layanan merupakan milik project Anda dan digunakan oleh library klien Python Google Cloud untuk membuat permintaan BigQuery API. Seperti akun pengguna lainnya, akun layanan diwakili oleh alamat email. Di bagian ini, Anda akan menggunakan Cloud SDK untuk membuat akun layanan, lalu membuat kredensial yang diperlukan untuk melakukan autentikasi sebagai akun layanan.

Pertama, tetapkan variabel lingkungan PROJECT_ID:

export PROJECT_ID=$(gcloud config get-value core/project)

Selanjutnya, buat akun layanan baru untuk mengakses BigQuery API menggunakan:

gcloud iam service-accounts create my-bigquery-sa \
  --display-name "my bigquery service account"

Selanjutnya, buat kredensial yang akan digunakan kode Python Anda untuk login sebagai akun layanan baru. Buat kredensial ini dan simpan sebagai file JSON ~/key.json menggunakan perintah berikut:

gcloud iam service-accounts keys create ~/key.json \
  --iam-account my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com

Terakhir, tetapkan variabel lingkungan GOOGLE_APPLICATION_CREDENTIALS, yang digunakan oleh library klien BigQuery Python, yang dibahas pada langkah berikutnya, untuk menemukan kredensial Anda. Variabel lingkungan harus ditetapkan ke jalur lengkap file JSON kredensial yang Anda buat menggunakan:

export GOOGLE_APPLICATION_CREDENTIALS=~/key.json

Anda dapat membaca lebih lanjut tentang mengautentikasi BigQuery API.

5. Menyiapkan kontrol akses

BigQuery menggunakan Identity and Access Management (IAM) untuk mengelola akses ke resource. BigQuery memiliki sejumlah peran standar (pengguna, pemilikData, pelihatData, dll.) yang dapat Anda tetapkan ke akun layanan yang Anda buat pada langkah sebelumnya. Anda dapat membaca lebih lanjut Kontrol Akses di dokumentasi BigQuery.

Sebelum dapat mengkueri set data publik, Anda harus memastikan akun layanan memiliki setidaknya peran roles/bigquery.user. Di Cloud Shell, jalankan perintah berikut untuk menetapkan peran pengguna ke akun layanan:

gcloud projects add-iam-policy-binding ${PROJECT_ID} \
  --member "serviceAccount:my-bigquery-sa@${PROJECT_ID}.iam.gserviceaccount.com" \
  --role "roles/bigquery.user"

Anda dapat menjalankan perintah berikut untuk memverifikasi bahwa akun layanan memiliki peran pengguna:

gcloud projects get-iam-policy $PROJECT_ID

Anda akan melihat berikut ini:

bindings:
- members:
  - serviceAccount:my-bigquery-sa@<PROJECT_ID>.iam.gserviceaccount.com
  role: roles/bigquery.user
...

6. Menginstal library klien

Instal library klien BigQuery Python:

pip3 install --user --upgrade google-cloud-bigquery

Sekarang Anda siap membuat kode dengan BigQuery API.

7. Membuat kueri karya Shakespeare

Set data publik adalah set data apa pun yang disimpan di BigQuery dan tersedia untuk umum. Ada banyak set data publik lainnya yang tersedia untuk Anda buat kuerinya. Meskipun beberapa set data dihosting oleh Google, sebagian besar dihosting oleh pihak ketiga. Untuk mengetahui info selengkapnya, lihat halaman Set Data Publik.

Selain set data publik, BigQuery menyediakan sejumlah tabel contoh yang dapat Anda kueri. Tabel ini terdapat dalam set data bigquery-public-data:samples. Tabel shakespeare dalam set data samples berisi indeks kata dari karya Shakespeare. Ini memberikan jumlah kemunculan setiap kata di setiap korpus.

Pada langkah ini, Anda akan membuat kueri tabel shakespeare.

Pertama, di Cloud Shell, buat aplikasi Python sederhana yang akan Anda gunakan untuk menjalankan sampel Translation API.

mkdir bigquery-demo
cd bigquery-demo
touch app.py

Buka editor kode dari sisi kanan atas Cloud Shell:

b648141af44811a3.png

Buka file app.py di dalam folder bigquery-demo dan ganti kode dengan kode berikut.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT corpus AS title, COUNT(word) AS unique_words
    FROM `bigquery-public-data.samples.shakespeare`
    GROUP BY title
    ORDER BY unique_words
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    title = row['title']
    unique_words = row['unique_words']
    print(f'{title:<20} | {unique_words}')

Luangkan waktu satu atau dua menit untuk mempelajari kode dan melihat cara kueri tabel dilakukan.

Kembali di Cloud Shell, jalankan aplikasi:

python3 app.py

Anda akan melihat daftar kata dan kemunculannya:

hamlet               | 5318
kinghenryv           | 5104
cymbeline            | 4875
troilusandcressida   | 4795
kinglear             | 4784
kingrichardiii       | 4713
2kinghenryvi         | 4683
coriolanus           | 4653
2kinghenryiv         | 4605
antonyandcleopatra   | 4582

8. Mengkueri set data GitHub

Untuk lebih memahami BigQuery, Anda akan membuat kueri terhadap set data publik GitHub. Anda akan menemukan pesan commit yang paling umum di GitHub. Anda juga akan menggunakan Konsol web BigQuery untuk melihat pratinjau dan menjalankan kueri ad-hoc.

Untuk melihat tampilan data tersebut, buka set data GitHub di UI web BigQuery:

Buka tabel github_repos

Klik tombol Pratinjau untuk melihat tampilan data:

d3f0dc7400fbe678.png

Buka file app.py di dalam folder bigquery_demo dan ganti kode dengan kode berikut.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
results = client.query(query)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

Luangkan waktu satu atau dua menit untuk mempelajari kode dan melihat cara kueri tabel untuk pesan commit yang paling umum.

Kembali di Cloud Shell, jalankan aplikasi:

python3 app.py

Anda akan melihat daftar pesan commit dan kemunculannya:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862

9. Caching dan statistik

BigQuery menyimpan hasil kueri dalam cache. Akibatnya, kueri berikutnya akan memerlukan waktu yang lebih singkat. Caching dapat dinonaktifkan dengan opsi kueri. BigQuery juga melacak statistik tentang kueri seperti waktu pembuatan, waktu berakhir, total byte yang diproses.

Pada langkah ini, Anda akan menonaktifkan caching dan juga menampilkan statistik tentang kueri.

Buka file app.py di dalam folder bigquery_demo dan ganti kode dengan kode berikut.

from google.cloud import bigquery

client = bigquery.Client()

query = """
    SELECT subject AS subject, COUNT(*) AS num_duplicates
    FROM bigquery-public-data.github_repos.commits
    GROUP BY subject
    ORDER BY num_duplicates
    DESC LIMIT 10
"""
job_config = bigquery.job.QueryJobConfig(use_query_cache=False)
results = client.query(query, job_config=job_config)

for row in results:
    subject = row['subject']
    num_duplicates = row['num_duplicates']
    print(f'{subject:<20} | {num_duplicates:>9,}')

print('-'*60)
print(f'Created: {results.created}')
print(f'Ended:   {results.ended}')
print(f'Bytes:   {results.total_bytes_processed:,}')

Beberapa hal yang perlu diperhatikan tentang kode ini. Pertama, caching dinonaktifkan dengan memperkenalkan QueryJobConfig dan menyetel use_query_cache ke false. Kedua, Anda mengakses statistik tentang kueri dari objek tugas.

Kembali di Cloud Shell, jalankan aplikasi:

python3 app.py

Seperti sebelumnya, Anda akan melihat daftar pesan commit dan kemunculannya. Selain itu, Anda juga akan melihat beberapa statistik tentang kueri di bagian akhir:

Update README.md     | 1,685,515
Initial commit       | 1,577,543
update               |   211,017
                     |   155,280
Create README.md     |   153,711
Add files via upload |   152,354
initial commit       |   145,224
first commit         |   110,314
Update index.html    |    91,893
Update README        |    88,862
------------------------------------------------------------
Created: 2020-04-03 13:30:08.801000+00:00
Ended:   2020-04-03 13:30:15.334000+00:00
Bytes:   2,868,251,894

10. Memuat data ke BigQuery

Jika ingin membuat kueri data Anda sendiri, Anda harus memuat data Anda ke BigQuery. BigQuery mendukung pemuatan data dari berbagai sumber, termasuk Cloud Storage, layanan Google lainnya, dan sumber lain yang dapat dibaca. Anda bahkan dapat melakukan streaming data menggunakan penyisipan streaming. Untuk mengetahui info selengkapnya, lihat halaman Memuat data ke BigQuery.

Pada langkah ini, Anda akan memuat file JSON yang disimpan di Cloud Storage ke dalam tabel BigQuery. File JSON terletak di gs://cloud-samples-data/bigquery/us-states/us-states.json

Jika Anda ingin tahu isi file JSON, Anda dapat menggunakan alat command line gsutil untuk mendownloadnya di Cloud Shell:

gsutil cp gs://cloud-samples-data/bigquery/us-states/us-states.json .

Anda dapat melihat bahwa file tersebut berisi daftar negara bagian AS dan setiap negara bagian adalah dokumen JSON pada baris terpisah:

head us-states.json
{"name": "Alabama", "post_abbr": "AL"}
{"name": "Alaska", "post_abbr":  "AK"}
...

Untuk memuat file JSON ini ke BigQuery, buka file app.py di dalam folder bigquery_demo, lalu ganti kode dengan kode berikut.

from google.cloud import bigquery

client = bigquery.Client()

gcs_uri = 'gs://cloud-samples-data/bigquery/us-states/us-states.json'

dataset = client.create_dataset('us_states_dataset')
table = dataset.table('us_states_table')

job_config = bigquery.job.LoadJobConfig()
job_config.schema = [
    bigquery.SchemaField('name', 'STRING'),
    bigquery.SchemaField('post_abbr', 'STRING'),
]
job_config.source_format = bigquery.SourceFormat.NEWLINE_DELIMITED_JSON

load_job = client.load_table_from_uri(gcs_uri, table, job_config=job_config)

print('JSON file loaded to BigQuery')

Luangkan waktu sebentar untuk mempelajari cara kode memuat file JSON dan membuat tabel dengan skema dalam set data.

Kembali di Cloud Shell, jalankan aplikasi:

python3 app.py

Set data dan tabel dibuat di BigQuery.

Untuk memverifikasi bahwa set data telah dibuat, buka konsol BigQuery. Anda akan melihat set data dan tabel baru. Beralih ke tab pratinjau tabel untuk melihat data Anda:

8c7d2621820a5ac4.png

11. Selamat!

Anda telah mempelajari cara menggunakan BigQuery dengan Python.

Pembersihan

Agar tidak menimbulkan tagihan ke akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini:

  • Di Cloud Console, buka halaman Mengelola resource.
  • Dalam daftar project, pilih project Anda lalu klik Delete.
  • Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Pelajari lebih lanjut

Lisensi

Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.