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
Survei
Bagaimana Anda akan menggunakan tutorial ini?
Bagaimana penilaian Anda terhadap pengalaman dengan Python?
Bagaimana penilaian Anda terhadap pengalaman menggunakan layanan Google Cloud?
2. Penyiapan dan persyaratan
Penyiapan lingkungan mandiri
- 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.
- 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.
- 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
- Dari Cloud Console, klik Aktifkan Cloud Shell .
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:
Perlu waktu beberapa saat untuk penyediaan dan terhubung ke Cloud Shell.
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.
- 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`
- 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:
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:
Klik tombol Pratinjau untuk melihat tampilan data:
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:
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
- Google BigQuery: https://cloud.google.com/bigquery/docs/
- Python di Google Cloud: https://cloud.google.com/python/
- Library Klien Cloud untuk Python: https://googleapis.github.io/google-cloud-python/
Lisensi
Karya ini dilisensikan berdasarkan Lisensi Umum Creative Commons Attribution 2.0.