Membuat tabel yang dikelompokkan
Anda dapat mengurangi jumlah data yang diproses oleh kueri menggunakan tabel berklaster di BigQuery.
Dengan tabel berklaster, data tabel diatur berdasarkan nilai kolom yang ditentukan, yang juga disebut kolom pengelompokan. BigQuery mengurutkan data berdasarkan kolom yang dikelompokkan, lalu menyimpan baris yang memiliki nilai serupa dalam blok fisik yang sama atau berdekatan. Saat kueri memfilter pada kolom yang dikelompokkan, BigQuery hanya memindai blok yang relevan secara efisien dan melewati data yang tidak cocok dengan filter.
Untuk informasi selengkapnya, lihat referensi berikut:
- Untuk mempelajari lebih lanjut tabel yang dikelompokkan di BigQuery, lihat Pengantar tabel yang dikelompokkan.
- Untuk mempelajari cara menggunakan dan mengontrol akses ke tabel yang dikelompokkan, lihat Mengelola tabel yang dikelompokkan.
Sebelum memulai
Untuk membuat tabel, Anda memerlukan izin IAM berikut:
bigquery.tables.create
bigquery.tables.updateData
bigquery.jobs.create
Selain itu, Anda mungkin memerlukan izin bigquery.tables.getData
untuk mengakses data yang Anda tulis ke tabel.
Setiap peran IAM bawaan berikut menyertakan izin yang Anda perlukan untuk membuat tabel:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
(termasuk izinbigquery.jobs.create
)roles/bigquery.user
(termasuk izinbigquery.jobs.create
)roles/bigquery.jobUser
(termasuk izinbigquery.jobs.create
)
Selain itu, jika memiliki izin bigquery.datasets.create
, Anda dapat membuat dan memperbarui tabel di set data yang Anda buat.
Untuk informasi selengkapnya tentang peran dan izin IAM dalam BigQuery, baca Peran dan izin bawaan.
Persyaratan penamaan tabel
Saat Anda membuat tabel di BigQuery, nama tabel per set data harus unik. Nama tabel dapat:
- Berisi karakter dengan total hingga 1.024 byte UTF-8.
- Berisi karakter Unicode dalam kategori L (huruf), M (tanda), N (angka), Pc (penghubung, termasuk garis bawah), Pd (tanda pisah), Zs (spasi). Untuk informasi selengkapnya, lihat Kategori Umum.
Berikut adalah contoh nama tabel yang valid: table 01
, ग्राहक
, 00_お客様
, étudiant-01
.
Peringatan:
- Nama tabel peka huruf besar/kecil secara default.
mytable
danMyTable
dapat berada dalam set data yang sama, kecuali jika keduanya merupakan bagian dari set data yang tidak peka huruf besar/kecil. - Beberapa nama tabel dan awalan nama tabel dicadangkan. Jika Anda menerima error yang menyatakan bahwa nama tabel atau awalan telah dicadangkan, pilih nama lain dan coba lagi.
Jika Anda menyertakan beberapa operator titik (
.
) secara berurutan, operator duplikat tersebut akan dihapus secara implisit.Misalnya, contoh ini:
project_name....dataset_name..table_name
Menjadi seperti ini:
project_name.dataset_name.table_name
Persyaratan kolom pengelompokan
Anda dapat menentukan kolom yang digunakan untuk membuat tabel yang dikelompokkan saat membuat tabel di BigQuery. Setelah tabel dibuat, Anda dapat mengubah kolom yang digunakan untuk membuat tabel berklaster. Untuk mengetahui detailnya, lihat Memodifikasi spesifikasi pengelompokan.
Kolom pengelompokan harus berupa kolom tingkat atas yang tidak berulang, dan harus berupa salah satu dari jenis data berikut:
BIGNUMERIC
BOOL
DATE
DATETIME
GEOGRAPHY
INT64
NUMERIC
RANGE
STRING
TIMESTAMP
Anda dapat menentukan hingga empat kolom pengelompokkan. Ketika Anda menentukan beberapa kolom, urutan kolom menentukan bagaimana data diurutkan. Misalnya, jika tabel dikelompokkan menurut kolom a, b, dan c, data akan diurutkan dalam urutan yang sama: pertama menurut kolom a, lalu menurut kolom b, dan kemudian menurut kolom c. Sebagai praktik terbaik, tempatkan kolom yang paling sering difilter atau digabungkan terlebih dahulu.
Urutan kolom pengelompokkan juga memengaruhi performa kueri dan harga. Untuk informasi selengkapnya tentang praktik terbaik kueri untuk tabel yang dikelompokkan, lihat Membuat kueri tabel yang dikelompokkan.
Membuat tabel kosong yang dikelompokkan dengan definisi skema
Untuk membuat tabel kosong yang dikelompokkan dengan definisi skema:
Konsol
Di Google Cloud konsol, buka halaman BigQuery.
- Di panel Explorer, luaskan project Anda, lalu pilih set data.
- Di bagian Dataset info, klik Create table.
- Di panel Create table, tentukan detail berikut:
- Di bagian Source, pilih Empty table dalam daftar Create table from.
- Di bagian Destination, tentukan detail berikut:
- Untuk Dataset, pilih set data tempat Anda ingin membuat tabel.
- Di kolom Table, masukkan nama tabel yang ingin Anda buat.
- Pastikan kolom Table type disetel ke Native table.
- Di bagian Schema, masukkan definisi skema.
Anda dapat memasukkan informasi skema secara manual menggunakan salah satu metode berikut:
- Opsi 1: Klik Edit as text dan tempelkan skema dalam bentuk array JSON. Saat menggunakan array JSON, Anda menghasilkan skema menggunakan proses yang sama seperti membuat file skema JSON.
Anda dapat melihat skema tabel yang ada dalam format JSON dengan memasukkan perintah berikut:
bq show --format=prettyjson dataset.table
- Opsi 2: Klik Type, dan Mode untuk setiap kolom. Add field, lalu masukkan skema tabel. Tentukan Name,
- Opsi 1: Klik Edit as text dan tempelkan skema dalam bentuk array JSON. Saat menggunakan array JSON, Anda menghasilkan skema menggunakan proses yang sama seperti membuat file skema JSON.
Anda dapat melihat skema tabel yang ada dalam format JSON dengan memasukkan perintah berikut:
- Untuk Clustering order, masukkan antara satu dan empat nama kolom yang dipisahkan koma.
- Opsional: Di bagian Advanced options, jika ingin menggunakan kunci enkripsi yang dikelola pelanggan, pilih opsi Use a customer-managed encryption key (CMEK). Secara default, BigQuery mengenkripsi konten pelanggan yang disimpan dalam penyimpanan dengan menggunakan Google-owned and Google-managed encryption key.
- Klik Create table.
SQL
Gunakan perintah Pernyataan CREATE TABLE
DDL dengan opsi CLUSTER BY
. Contoh berikut akan membuat tabel yang dikelompokkan dengan nama myclusteredtable
di mydataset
:
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE TABLE mydataset.myclusteredtable ( customer_id STRING, transaction_amount NUMERIC ) CLUSTER BY customer_id OPTIONS ( description = 'a table clustered by customer_id');
Klik
Run.
Untuk mengetahui informasi selengkapnya tentang cara menjalankan kueri, lihat artikel Menjalankan kueri interaktif.
bq
Gunakan perintah bq mk
dengan flag berikut:
--table
(atau pintasan-t
).--schema
. Anda dapat menyediakan definisi skema tabel secara inline atau menggunakan file skema JSON.--clustering_fields
. Anda dapat menentukan hingga empat kolom pengelompokkan.
Parameter opsional mencakup --expiration
, --description
, --time_partitioning_type
, --time_partitioning_field
, --time_partitioning_expiration
, --destination_kms_key
, dan --label
.
Jika Anda membuat tabel dalam project selain project default Anda, tambahkan project ID ke set data dalam format berikut: project_id:dataset
.
--destination_kms_key
tidak ditunjukkan di sini. Untuk informasi tentang penggunaan --destination_kms_key
, lihat kunci enkripsi yang dikelola pelanggan.
Masukkan perintah berikut untuk membuat tabel kosong yang dikelompokkan dengan definisi skema:
bq mk \ --table \ --expiration INTEGER1 \ --schema SCHEMA \ --clustering_fields CLUSTER_COLUMNS \ --description "DESCRIPTION" \ --label KEY:VALUE,KEY:VALUE \ PROJECT_ID:DATASET.TABLE
Ganti yang berikut ini:
INTEGER1
: masa aktif default, dalam detik, untuk tabel. Nilai minimum adalah 3.600 detik (satu jam). Waktu habis masa berlaku dievaluasi ke waktu UTC saat ini ditambah dengan nilai bilangan bulat. Jika Anda menetapkan waktu habis masa berlaku tabel saat membuat tabel, setelan habis masa berlaku tabel default set data akan diabaikan. Menyetel nilai ini akan menghapus tabel setelah waktu yang ditentukan.SCHEMA
: definisi skema inline dalam formatCOLUMN:DATA_TYPE,COLUMN:DATA_TYPE
atau jalur ke file skema JSON di mesin lokal Anda.CLUSTER_COLUMNS
: daftar yang dipisahkan koma untuk maksimal empat kolom pengelompokkan. Daftar tidak boleh berisi spasi.DESCRIPTION
: deskripsi tabel, dalam tanda kutip.KEY:VALUE
: pasangan nilai kunci yang mewakili label. Anda dapat memasukkan beberapa label menggunakan daftar yang dipisahkan koma.PROJECT_ID
: project ID Anda.DATASET
: set data di project Anda.TABLE
: nama tabel yang Anda buat.
Saat menentukan skema di command line, Anda tidak dapat menyertakan jenis RECORD
(STRUCT
), Anda tidak dapat menyertakan deskripsi kolom, dan Anda tidak dapat menentukan mode kolom. Semua mode ditetapkan secara default ke NULLABLE
. Untuk menyertakan deskripsi, mode, dan jenis RECORD
, berikan file skema JSON sebagai gantinya.
Contoh:
Masukkan perintah berikut untuk membuat tabel yang dikelompokkan bernama myclusteredtable
di mydataset
di project default Anda. Masa berlaku tabel ditetapkan ke 2.592.000 (1 bulan dalam 30 hari), deskripsi ditetapkan ke This is my clustered table
, dan label ditetapkan ke organization:development
. Perintah tersebut menggunakan pintasan -t
, bukan --table
.
Skema ditentukan secara inline sebagai: timestamp:timestamp,customer_id:string,transaction_amount:float
. Kolom pengelompokan yang ditentukan customer_id
digunakan untuk mengelompokkan tabel.
bq mk \
-t \
--expiration 2592000 \
--schema 'timestamp:timestamp,customer_id:string,transaction_amount:float' \
--clustering_fields customer_id \
--description "This is my clustered table" \
--label org:dev \
mydataset.myclusteredtable
Masukkan perintah berikut untuk membuat tabel yang dikelompokkan bernama myclusteredtable
di myotherproject
, bukan project default Anda. Deskripsi ditetapkan ke This is my clustered table
, dan label ditetapkan ke organization:development
. Perintah tersebut menggunakan pintasan -t
, bukan --table
. Perintah ini tidak menentukan masa berlaku tabel. Jika set data memiliki masa berlaku tabel default, masa berlaku tabel tersebut akan diterapkan. Jika set data tidak memiliki akhir masa berlaku tabel default, tabel tersebut tidak akan pernah memiliki tanggal habis masa berlaku.
Skema ini ditentukan dalam file JSON lokal: /tmp/myschema.json
. Kolom customer_id
digunakan untuk mengelompokkan tabel.
bq mk \
-t \
--expiration 2592000 \
--schema /tmp/myschema.json \
--clustering_fields=customer_id \
--description "This is my clustered table" \
--label org:dev \
myotherproject:mydataset.myclusteredtable
Setelah tabel dibuat, Anda dapat memperbarui deskripsi dan label tabel.
Terraform
Gunakan resource google_bigquery_table
.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Contoh berikut membuat tabel bernama mytable
yang dikelompokkan pada kolom ID
dan Created
:
Untuk menerapkan konfigurasi Terraform di project Google Cloud , selesaikan langkah-langkah di bagian berikut.
Menyiapkan Cloud Shell
- Luncurkan Cloud Shell.
-
Tetapkan project default Google Cloud tempat Anda ingin menerapkan konfigurasi Terraform.
Anda hanya perlu menjalankan perintah ini sekali per project, dan dapat dijalankan di direktori mana pun.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Variabel lingkungan akan diganti jika Anda menetapkan nilai eksplisit dalam file konfigurasi Terraform.
Menyiapkan direktori
Setiap file konfigurasi Terraform harus memiliki direktorinya sendiri (juga disebut modul root).
-
Di Cloud Shell, buat direktori dan file baru di dalam direktori tersebut. Nama file harus memiliki
ekstensi
.tf
—misalnyamain.tf
. Dalam tutorial ini, file ini disebut sebagaimain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Jika mengikuti tutorial, Anda dapat menyalin kode contoh di setiap bagian atau langkah.
Salin kode contoh ke dalam
main.tf
yang baru dibuat.Atau, salin kode dari GitHub. Tindakan ini direkomendasikan jika cuplikan Terraform adalah bagian dari solusi menyeluruh.
- Tinjau dan ubah contoh parameter untuk diterapkan pada lingkungan Anda.
- Simpan perubahan Anda.
-
Lakukan inisialisasi Terraform. Anda hanya perlu melakukan ini sekali per direktori.
terraform init
Secara opsional, untuk menggunakan versi penyedia Google terbaru, sertakan opsi
-upgrade
:terraform init -upgrade
Menerapkan perubahan
-
Tinjau konfigurasi dan pastikan resource yang akan dibuat atau
diupdate oleh Terraform sesuai yang Anda inginkan:
terraform plan
Koreksi konfigurasi jika diperlukan.
-
Terapkan konfigurasi Terraform dengan menjalankan perintah berikut dan memasukkan
yes
pada prompt:terraform apply
Tunggu hingga Terraform menampilkan pesan "Apply complete!".
- Buka Google Cloud project Anda untuk melihat hasilnya. Di konsol Google Cloud , buka resource Anda di UI untuk memastikan bahwa Terraform telah membuat atau mengupdatenya.
API
Panggil metode tables.insert
dengan resource tabel yang ditentukan yang menentukan properti clustering.fields
dan properti schema
.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Membuat tabel yang dikelompokkan dari hasil kueri
Ada dua cara untuk membuat tabel yang dikelompokkan dari hasil kueri:
- Tulis hasilnya ke tabel tujuan baru dan tentukan kolom pengelompokkan.
- Dengan menggunakan pernyataan
CREATE TABLE AS SELECT
DDL. Untuk informasi selengkapnya tentang metode ini, lihat Membuat tabel yang dikelompokkan dari hasil kueri di halaman Menggunakan pernyataan bahasa definisi data.
Anda dapat membuat tabel yang dikelompokkan dengan membuat kueri tabel berpartisi atau tabel yang tidak berpartisi. Anda tidak dapat mengubah tabel yang ada menjadi tabel yang dikelompokkan menggunakan hasil kueri.
Saat membuat tabel yang dikelompokkan dari hasil kueri, Anda harus menggunakan SQL standar. Saat ini, legacy SQL tidak didukung untuk membuat kueri tabel yang dikelompokkan atau untuk menulis hasil kueri ke tabel yang dikelompokkan.
SQL
Untuk membuat tabel yang dikelompokkan dari hasil kueri, gunakan pernyataan CREATE TABLE
DDL dengan opsi CLUSTER BY
. Contoh berikut membuat tabel baru yang dikelompokkan menurut customer_id
dengan membuat kueri tabel tidak dikelompokkan yang ada:
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE TABLE mydataset.clustered_table ( customer_id STRING, transaction_amount NUMERIC ) CLUSTER BY customer_id AS ( SELECT * FROM mydataset.unclustered_table );
Klik
Run.
Untuk mengetahui informasi selengkapnya tentang cara menjalankan kueri, lihat artikel Menjalankan kueri interaktif.
bq
Masukkan perintah berikut untuk membuat tabel tujuan baru yang dikelompokkan dari hasil kueri:
bq --location=LOCATION query \ --use_legacy_sql=false 'QUERY'
Ganti yang berikut ini:
LOCATION
: nama lokasi Anda. Flag--location
bersifat opsional. Misalnya, jika menggunakan BigQuery di region Tokyo, Anda dapat menetapkan nilai flag keasia-northeast1
. Anda dapat menetapkan nilai default untuk lokasi menggunakan file .bigqueryrc.QUERY
: kueri dalam sintaksis GoogleSQL. Saat ini, Anda tidak dapat menggunakan legacy SQL untuk membuat kueri tabel yang dikelompokkan atau menulis hasil kueri ke tabel yang dikelompokkan. Kueri dapat berisi pernyataanCREATE TABLE
DDL yang menentukan opsi untuk membuat tabel yang dikelompokkan. Anda dapat menggunakan DDL, bukan menentukan flag command line satu per satu.
Contoh:
Masukkan perintah berikut untuk menulis hasil kueri ke tabel tujuan yang dikelompokkan bernama myclusteredtable
di mydataset
. mydataset
ada dalam project default Anda. Kueri tersebut mengambil data dari tabel yang tidak berpartisi: mytable. Kolom customer_id
tabel digunakan untuk mengelompokkan tabel. Kolom timestamp
tabel digunakan untuk membuat tabel berpartisi.
bq query --use_legacy_sql=false \
'CREATE TABLE
mydataset.myclusteredtable
PARTITION BY
DATE(timestamp)
CLUSTER BY
customer_id
AS (
SELECT
*
FROM
`mydataset.mytable`
);'
API
Untuk menyimpan hasil kueri ke tabel yang dikelompokkan, panggil metode jobs.insert
, konfigurasi tugas query
, dan sertakan pernyataan CREATE TABLE
DDL yang membuat tabel yang dikelompokkan.
Tentukan lokasi Anda di properti location
di bagian jobReference
di resource tugas.
Membuat tabel yang dikelompokkan saat Anda memuat data
Anda dapat membuat tabel yang dikelompokkan dengan menentukan kolom pengelompokan saat memuat data ke tabel baru. Anda tidak perlu membuat tabel kosong sebelum memuat data ke dalamnya. Anda dapat membuat tabel yang dikelompokkan dan memuat data secara bersamaan.
Untuk informasi selengkapnya tentang pemuatan data, lihat Pengantar pemuatan data ke BigQuery.
Untuk menentukan pengelompokan saat menentukan tugas pemuatan:
SQL
Gunakan pernyataan LOAD DATA
.
Contoh berikut memuat data AVRO untuk membuat tabel yang dipartisi berdasarkan kolom transaction_date
dan dikelompokkan menurut kolom customer_id
.
Perintah ini juga mengonfigurasi agar masa berlaku partisi berakhir setelah tiga hari.
Di Google Cloud konsol, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
LOAD DATA INTO mydataset.mytable PARTITION BY transaction_date CLUSTER BY customer_id OPTIONS ( partition_expiration_days = 3) FROM FILES( format = 'AVRO', uris = ['gs://bucket/path/file.avro']);
Klik
Run.
Untuk mengetahui informasi selengkapnya tentang cara menjalankan kueri, lihat artikel Menjalankan kueri interaktif.
API
Untuk menentukan konfigurasi pengelompokan saat membuat tabel melalui tugas pemuatan, Anda dapat mengisi properti Clustering
untuk tabel tersebut.
Go
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Go API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Java
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Java API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Python
Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai BigQuery menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat Dokumentasi referensi BigQuery Python API.
Untuk melakukan autentikasi ke BigQuery, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Langkah berikutnya
- Untuk mengetahui informasi tentang cara menggunakan tabel yang dikelompokkan, lihat Mengelola tabel yang dikelompokkan.
- Untuk informasi tentang cara membuat kueri tabel yang dikelompokkan, lihat Membuat kueri tabel yang dikelompokkan.
- Untuk ringkasan dukungan tabel berpartisi di BigQuery, lihat Pengantar tabel berpartisi.
- Untuk mempelajari cara membuat tabel berpartisi, lihat Membuat tabel berpartisi.
- Untuk melihat ringkasan
INFORMATION_SCHEMA
, lihat Pengantar BigQueryINFORMATION_SCHEMA
.