
Before you begin
- Labs create a Google Cloud project and resources for a fixed time
- Labs have a time limit and no pause feature. If you end the lab, you'll have to restart from the beginning.
- On the top left of your screen, click Start lab to begin
Create a new dataset and table to store the data
/ 20
Execute the query to see how many unique products were viewed
/ 15
Execute the query to use the UNNEST() on array field
/ 15
Create a dataset and a table to ingest JSON data
/ 20
Execute the query to COUNT how many racers were there in total
/ 10
Execute the query that will list the total race time for racers whose names begin with R
/ 10
Execute the query to see which runner ran fastest lap time
/ 10
BigQuery adalah database analisis berbiaya rendah dan NoOps yang dikelola sepenuhnya oleh Google. Dengan BigQuery, Anda dapat membuat kueri data berskala terabyte tanpa harus memiliki administrator database atau infrastruktur apa pun untuk mengelolanya. BigQuery menggunakan SQL dan dapat memanfaatkan model bayar sesuai penggunaan. Dengan BigQuery, Anda dapat berfokus menganalisis data untuk menemukan insight yang bermakna.
Di lab ini, Anda akan bekerja secara mendalam dengan data semi-terstruktur (menyerap jenis data JSON, Array) di dalam BigQuery. Mendenormalisasi skema Anda menjadi satu tabel dengan kolom berulang dan bertingkat dapat meningkatkan performa, namun sintaksis SQL untuk bekerja dengan data array bisa jadi rumit. Anda akan berlatih memuat, membuat kueri, memecahkan masalah, dan menghapus tingkatan berbagai set data semi-terstruktur.
Di lab ini, Anda akan mempelajari cara:
Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer yang dimulai saat Anda mengklik Start Lab akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.
Lab interaktif ini dapat Anda gunakan untuk melakukan aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.
Untuk menyelesaikan lab ini, Anda memerlukan:
Klik tombol Start Lab. Jika Anda perlu membayar lab, dialog akan terbuka untuk memilih metode pembayaran. Di sebelah kiri ada panel Lab Details yang berisi hal-hal berikut:
Klik Open Google Cloud console (atau klik kanan dan pilih Open Link in Incognito Window jika Anda menjalankan browser Chrome).
Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Sign in.
Tips: Atur tab di jendela terpisah secara berdampingan.
Jika perlu, salin Username di bawah dan tempel ke dialog Sign in.
Anda juga dapat menemukan Username di panel Lab Details.
Klik Next.
Salin Password di bawah dan tempel ke dialog Welcome.
Anda juga dapat menemukan Password di panel Lab Details.
Klik Next.
Klik halaman berikutnya:
Setelah beberapa saat, Konsol Google Cloud akan terbuka di tab ini.
Kotak pesan Welcome to BigQuery in the Cloud Console akan terbuka. Kotak pesan ini menyediakan link ke panduan memulai dan catatan rilis.
Konsol BigQuery terbuka.
Namai set data baru ini dengan fruit_store
. Gunakan nilai default untuk opsi lainnya (Data Location, Default Expiration).
Klik Create dataset.
Di SQL, biasanya Anda akan memiliki satu nilai untuk tiap baris seperti daftar buah di bawah ini:
Baris |
Buah |
1 |
rasberi |
2 |
beri hitam |
3 |
stroberi |
4 |
ceri |
Bagaimana jika Anda menginginkan daftar item buah untuk tiap orang di toko? Daftarnya bisa tampak seperti berikut:
Baris |
Buah |
Orang |
1 |
rasberi |
santi |
2 |
beri hitam |
santi |
3 |
stroberi |
santi |
4 |
ceri |
santi |
5 |
jeruk |
feri |
6 |
apel |
feri |
Dalam SQL database relasional tradisional, Anda akan melihat pengulangan nama dan langsung berpikir untuk membagi tabel di atas menjadi dua tabel terpisah: Item Buah dan Orang. Proses ini disebut normalisasi (beralih dari satu tabel ke banyak tabel). Normalisasi adalah pendekatan umum untuk database transaksional seperti mySQL.
Untuk data warehousing, analis data sering kali melakukannya dengan arah sebaliknya (denormalisasi) dan menyatukan banyak tabel terpisah ke dalam satu tabel pelaporan besar.
Sekarang, Anda akan mempelajari pendekatan berbeda yang menyimpan data pada tingkat perincian berbeda, semuanya dalam satu tabel menggunakan kolom berulang:
Baris |
Buah (array) |
Orang |
1 |
rasberi |
santi |
beri hitam | ||
stroberi | ||
ceri | ||
2 |
jeruk |
feri |
apel |
Apa yang aneh pada tabel sebelumnya?
Apa insight utamanya? Jenis data array
.
Cara yang lebih mudah untuk menafsirkan array Buah:
Baris |
Buah (array) |
Orang |
1 |
[rasberi, beri hitam, stroberi, ceri] |
santi |
2 |
[jeruk, apel] |
feri |
Kedua tabel ini sama persis. Ada dua pembelajaran utama di sini:
Cobalah sendiri.
Klik Run.
Sekarang coba jalankan yang ini:
Anda akan mendapatkan error seperti berikut:
Error: Array elements of types {INT64, STRING} do not have a common supertype at [3:1]
Array hanya dapat berbagi satu tipe data (semua string, semua angka).
Klik Run.
Setelah melihat hasilnya, klik tab JSON untuk melihat struktur hasil yang disusun bertingkat.
Bagaimana jika Anda memiliki file JSON yang perlu diserap ke BigQuery?
Buat tabel baru fruit_details
dalam set data.
fruit_store
.Sekarang Anda akan melihat opsi Create Table.
cloud-training/data-insights-course/labs/optimizing-for-performance/shopping_cart.json
Namai tabel baru tersebut dengan fruit_details
.
Centang kotak centang Schema (Auto detect).
Klik Create table.
Dalam skema, perhatikan bahwa fruit_array
ditandai sebagai REPEATED yang berarti ia adalah sebuah array.
Rangkuman
Klik Check my progress untuk memverifikasi tujuan.
Belum ada array di tabel Anda? Anda bisa membuatnya.
Sekarang, gunakan fungsi ARRAY_AGG()
untuk menggabungkan nilai string kita ke dalam array.
ARRAY_LENGTH()
untuk menghitung jumlah halaman dan produk yang dilihat:DISTINCT
ke ARRAY_AGG()
:Klik Check my progress untuk memverifikasi tujuan.
Rangkuman
Anda dapat melakukan beberapa hal yang cukup berguna dengan array seperti:
ARRAY_LENGTH(<array>)
ARRAY_AGG(DISTINCT <field>)
ARRAY_AGG(<field> ORDER BY <field>)
ARRAY_AGG(<field> LIMIT 5)
Set Data Publik BigQuery untuk Google Analytics bigquery-public-data.google_analytics_sample
memiliki lebih banyak kolom dan baris daripada set data kursus kita data-to-insights.ecommerce.all_sessions
. Lebih penting lagi, set data ini sudah menyimpan nilai kolom seperti produk, halaman, dan transaksi secara native sebagai ARRAY.
Jalankan kueri
Scroll ke kanan dalam hasil hingga Anda melihat kolom hits.product.v2ProductName
(alias multikolom akan segera dibahas).
Jumlah kolom yang tersedia dalam skema Google Analytics bisa sangat banyak untuk dianalisis.
Anda akan mendapatkan error:
Error:Cannot access field page on a value with type ARRAY<STRUCT<hitNumber INT64, time INT64, hour INT64, ...>> at [3:8]
Sebelum Anda dapat membuat kueri kolom REPEATED (array) secara normal, Anda harus terlebih dahulu memecah array kembali menjadi baris.
Misalnya, array untuk hits.page.pageTitle
saat ini disimpan sebagai satu baris seperti:
dan array tersebut harus menjadi:
Bagaimana cara melakukannya dengan SQL?
Jawaban: Gunakan fungsi UNNEST() pada kolom array Anda:
Kita akan membahas UNNEST() secara lebih mendetail nanti, tetapi untuk saat ini ketahuilah bahwa:
Klik Check my progress untuk memverifikasi tujuan.
Anda mungkin bertanya-tanya mengapa alias kolom hit.page.pageTitle
terlihat seperti tiga kolom dalam satu kolom yang dipisahkan oleh titik. Sama seperti nilai ARRAY yang memberi Anda fleksibilitas untuk mendalami perincian kolom Anda, jenis data lain memungkinkan Anda memperluas skema dengan mengelompokkan kolom terkait bersama-sama. Jenis data SQL tersebut adalah jenis data STRUCT.
Cara termudah untuk memikirkan STRUCT adalah dengan menganggapnya secara konseptual seperti tabel terpisah yang sudah digabungkan sebelumnya ke dalam tabel utama Anda.
STRUCT dapat memiliki:
Kedengarannya persis seperti tabel 'kan?
Untuk membuka set data bigquery-public-data, klik +ADD lalu pilih Star a project by name dan masukkan nama bigquery-public-data
Klik Star.
Project bigquery-public-data
tercantum di bagian Explorer.
Buka bigquery-public-data.
Cari dan buka set data google_analytics_sample.
Klik tabel ga_sessions(366)_.
Mulailah men-scroll skema dan jawab pertanyaan berikut dengan menggunakan fitur cari di browser Anda.
Seperti yang dapat Anda bayangkan, ada banyak sekali data sesi situs yang disimpan untuk situs e-commerce modern.
Keuntungan utama memiliki 32 STRUCT dalam satu tabel adalah Anda dapat menjalankan kueri seperti ini tanpa harus melakukan JOIN apa pun:
.*
memberi tahu BigQuery untuk menampilkan semua kolom untuk STRUCT tersebut (seperti jika totals.*
adalah tabel terpisah yang menjadi dasar penggabungan).Dengan menyimpan tabel pelaporan besar sebagai STRUCT ("tabel" yang telah digabungkan sebelumnya) dan ARRAY (perincian mendalam), Anda akan:
Set data berikutnya adalah waktu putaran pelari di lintasan. Tiap putaran akan disebut "split".
Baris |
runner.name |
runner.split |
1 |
Rudisha |
23,4 |
Apa yang Anda perhatikan terkait alias kolom? Karena ada kolom yang tersusun bertingkat di dalam struct (name dan split adalah subset dari runner), Anda akan mendapatkan notasi titik.
Bagaimana jika pelari memiliki beberapa waktu split untuk sekali lomba (seperti waktu per putaran)?
Tentu saja dengan array!
Baris |
runner.name |
runner.splits |
1 |
Rudisha |
23,4 |
26,3 | ||
26,4 | ||
26,1 |
Ringkasnya:
Buat set data baru bernama racing
.
Klik set data racing
, lalu klik Create table.
cloud-training/data-insights-course/labs/optimizing-for-performance/race_results.json
Namai tabel baru tersebut dengan race_results
.
Klik Create table.
Setelah pekerjaan pemuatan berhasil, pratinjau skema untuk tabel yang baru dibuat:
Kolom manakah yang merupakan STRUCT? Bagaimana Anda mengetahuinya?
Kolom participants adalah STRUCT karena jenisnya RECORD.
Kolom manakah yang merupakan ARRAY?
Kolom participants.splits
adalah array float di dalam struct participants
induk. Kolom ini memiliki mode REPEATED yang menandakan array. Nilai array ini disebut nilai bertingkat karena merupakan beberapa nilai di dalam satu kolom.
Klik Check my progress untuk memverifikasi tujuan.
Berapa banyak baris yang ditampilkan?
Jawaban: 1
Bagaimana jika Anda ingin mencantumkan nama masing-masing pelari dan jenis lombanya?
Error: Cannot access field name on a value with type ARRAY<STRUCT<name STRING, splits ARRAY<FLOAT64>>>> at [2:27]
Sama seperti jika Anda lupa menggunakan GROUP BY saat Anda memakai fungsi agregasi, di sini ada dua tingkat perincian yang berbeda. Satu baris untuk lomba dan tiga baris untuk nama peserta. Jadi bagaimana cara mengubah yang berikut...
Baris |
race |
participants.name |
1 |
800M |
Rudisha |
2 |
??? |
Makhloufi |
3 |
??? |
Murphy |
...menjadi berikut:
Baris |
race |
participants.name |
1 |
800M |
Rudisha |
2 |
800M |
Makhloufi |
3 |
800M |
Murphy |
Dalam SQL relasional tradisional, jika Anda memiliki tabel lomba dan tabel peserta, apa yang akan Anda lakukan untuk mendapatkan informasi dari kedua tabel tersebut? Anda akan menggabungkan keduanya menggunakan fungsi JOIN. Di sini, STRUCT peserta (yang secara konseptual sangat mirip dengan tabel) sudah menjadi bagian dari tabel race Anda, tetapi belum berkorelasi secara benar dengan kolom "race" yang non-STRUCT.
Dapatkah Anda memikirkan perintah SQL yang berisi dua kata yang akan Anda gunakan untuk mengorelasikan lomba 800M dengan masing-masing pelari di tabel pertama?
Jawaban: CROSS JOIN
Bagus.
Table name "participants" missing dataset while no default dataset is set in the request
.
Meskipun STRUCT peserta terlihat seperti sebuah tabel, namun secara teknis masih merupakan sebuah kolom di tabel racing.race_results
.
Wow! Anda berhasil membuat daftar semua pelari untuk tiap lomba!
Baris |
race |
name |
1 |
800M |
Rudisha |
2 |
800M |
Makhloufi |
3 |
800M |
Murphy |
4 |
800M |
Bosse |
5 |
800M |
Rotich |
6 |
800M |
Lewandowski |
7 |
800M |
Kipketer |
8 |
800M |
Berian |
Tindakan ini akan memberi Anda hasil kueri yang sama:
Jika ada lebih dari satu jenis lomba (800M, 100M, 200M), bukankah CROSS JOIN hanya akan menghubungkan tiap nama pelari dengan tiap kemungkinan lomba seperti Cartesian product?
Jawaban: Tidak. Ini adalah cross join terkorelasi yang hanya membuka elemen yang terkait dengan satu baris. Untuk mendapatkan info lebih lanjut, baca bagian bekerja dengan ARRAY dan STRUCT
Rangkuman STRUCT:
STRUCT(``"Rudisha" as name, [23.4, 26.3, 26.4, 26.1] as splits``)`` AS runner
Jawab pertanyaan di bawah ini menggunakan tabel racing.race_results
yang Anda buat sebelumnya.
Tugas: Tulis kueri untuk menghitung jumlah total pelari yang ada di tabel menggunakan fungsi COUNT.
FROM
.Solusi yang dapat dilakukan:
Baris |
racer_count |
1 |
8 |
Jawaban: Ada 8 orang pelari yang mengikuti lomba tersebut.
Klik Check my progress untuk memverifikasi tujuan.
Tulis kueri yang akan mencantumkan total waktu lomba untuk pelari yang namanya dimulai dengan huruf R. Urutkan hasilnya dengan total waktu tercepat terlebih dahulu. Gunakan operator UNNEST() dan mulai dengan kueri yang sudah ditulis sebagian di bawah ini.
Solusi yang dapat dilakukan:
Baris |
name |
total_race_time |
1 |
Rudisha |
102.19999999999999 |
2 |
Rotich |
103.6 |
Klik Check my progress untuk memverifikasi tujuan.
Anda kebetulan melihat bahwa waktu putaran tercepat yang tercatat untuk lomba lari 800 M adalah 23,2 detik, tetapi Anda tidak melihat pelari mana yang berlari pada putaran tersebut. Buat kueri yang menampilkan hasil tersebut.
Solusi yang dapat dilakukan:
Baris |
name |
split_time |
1 |
Kipketer |
23,2 |
Klik Check my progress untuk memverifikasi tujuan.
Anda telah berhasil menyerap set data JSON, membuat ARRAY dan STRUCT, serta menghapus tingkatan data semi-terstruktur untuk mendapatkan insight.
...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.
Manual Terakhir Diperbarui pada 03 Februari 2024
Lab terakhir diuji pada 25 Agustus 2023
Hak cipta 2025 Google LLC. Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.
Konten ini tidak tersedia untuk saat ini
Kami akan memberi tahu Anda melalui email saat konten tersedia
Bagus!
Kami akan menghubungi Anda melalui email saat konten tersedia
One lab at a time
Confirm to end all existing labs and start this one