Menggunakan BigQuery dengan Python

1. Ringkasan

BigQuery adalah data warehouse analisis berharga terjangkau yang terkelola sepenuhnya dan berskala petabyte dari Google. BigQuery dalam kondisi NoOps. Tidak ada infrastruktur yang harus dikelola dan Anda tidak memerlukan administrator database. Dengan begitu, Anda dapat berfokus pada analisis data untuk menemukan insight yang bermakna, menggunakan SQL yang sudah dikenal, dan memanfaatkan model bayar sesuai penggunaan.

Dalam codelab ini, Anda akan menggunakan Library Klien Google Cloud untuk Python guna mengkueri 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 tampilan dan penyimpanan cache

Yang Anda butuhkan

  • Project Google Cloud
  • Browser, seperti Chrome atau Firefox
  • Pemahaman dalam 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.pngS.

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 Lanjutkan (dan Anda tidak akan pernah melihatnya lagi). Berikut tampilan layar sekali-tampil tersebut:

9c92662c6a846a5c.pngS

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

9f0e51b578fecce5.pngS

Mesin virtual ini dimuat dengan semua alat pengembangan yang Anda butuhkan. 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: BigQuery akan tercantum:

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 Google Cloud Python 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 ~/key.json file 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 Python BigQuery, yang dibahas di 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 cara mengautentikasi BigQuery API.

5. Menyiapkan kontrol akses

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

Sebelum dapat membuat kueri set data publik, Anda perlu memastikan akun layanan setidaknya memiliki 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 BigQuery:

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

Sekarang Anda siap membuat kode dengan BigQuery API.

7. Mengkueri karya Shakespeare

{i>Dataset<i} publik adalah {i>dataset<i} yang disimpan di BigQuery dan tersedia untuk umum. Ada banyak {i>dataset<i} publik lainnya yang tersedia untuk Anda kueri. Meskipun beberapa set data dihosting oleh Google, sebagian besarnya dihosting oleh pihak ketiga. Untuk info selengkapnya, lihat halaman Set Data Publik.

Selain set data publik, BigQuery menyediakan beberapa contoh tabel yang dapat Anda kueri. Tabel ini dimuat dalam set data bigquery-public-data:samples. Tabel shakespeare dalam set data samples berisi indeks kata karya Shakespeare. Ini menunjukkan berapa kali setiap kata muncul di setiap korpus.

Pada langkah ini, Anda akan mengkueri tabel shakespeare.

Pertama, di Cloud Shell, buat aplikasi Python sederhana yang akan Anda gunakan untuk menjalankan contoh 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 lihat bagaimana tabel dikueri.

Kembali ke 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

Agar dapat lebih memahami BigQuery, sekarang Anda akan mengeluarkan 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, 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 lihat bagaimana tabel dikueri untuk pesan commit yang paling umum.

Kembali ke 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. Cache dan statistik

BigQuery menyimpan hasil kueri ke dalam cache. Akibatnya, kueri berikutnya membutuhkan waktu lebih sedikit. Anda dapat menonaktifkan penyimpanan cache dengan opsi kueri. BigQuery juga melacak statistik tentang kueri seperti waktu pembuatan, waktu berakhir, total byte yang diproses.

Pada langkah ini, Anda akan menonaktifkan penyimpanan dalam cache 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. Pertama, penyimpanan dalam cache dinonaktifkan dengan menerapkan QueryJobConfig dan menyetel use_query_cache ke salah (false). Kedua, Anda mengakses statistik tentang kueri dari objek tugas.

Kembali ke 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 sendiri, Anda perlu memuat data ke BigQuery. BigQuery mendukung pemuatan data dari banyak sumber termasuk Cloud Storage, layanan Google lainnya, dan sumber lain yang dapat dibaca. Anda bahkan dapat melakukan streaming data menggunakan streaming insert. 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 ingin tahu tentang konten 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 ini berisi daftar negara bagian Amerika Serikat 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 dan 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 dua menit untuk mempelajari bagaimana kode memuat file JSON dan membuat tabel dengan skema di bawah set data.

Kembali ke 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. Beralihlah ke tab pratinjau di tabel untuk melihat data Anda:

8c7d2621820a5ac4.pngS

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.