Membuat tabel eksternal Bigtable
Halaman ini menjelaskan cara membuat tabel eksternal permanen BigQuery yang dapat digunakan untuk membuat kueri data yang disimpan di Bigtable. Pembuatan kueri data di Bigtable tersedia di semua lokasi Bigtable.
Sebelum memulai
Sebelum membuat tabel eksternal, kumpulkan beberapa informasi dan pastikan Anda memiliki izin untuk membuat tabel tersebut.
Peran yang diperlukan
Untuk membuat tabel eksternal yang akan digunakan untuk membuat kueri data Bigtable, Anda harus menjadi akun utama dalam peran Bigtable Admin (roles/bigtable.admin
) untuk instance yang berisi tabel sumber.
Anda juga memerlukan izin BigQuery Identity and Access Management (IAM) bigquery.tables.create
.
Setiap peran Identity and Access Management yang telah ditetapkan berikut mencakup izin ini:
- BigQuery Data Editor (
roles/bigquery.dataEditor
) - BigQuery Data Owner (
roles/bigquery.dataOwner
) - BigQuery Admin (
roles/bigquery.admin
)
Jika Anda bukan akun utama dI salah satu peran ini, minta administrator untuk memberi Anda akses atau membuat tabel eksternal.
Untuk mengetahui informasi lebih lanjut tentang peran dan izin Identity and Access Management di BigQuery, lihat Peran dan izin yang telah ditetapkan sebelumnya. Untuk melihat informasi tentang izin Bigtable, lihat Kontrol akses dengan Identity and Access Management.
Membuat atau mengidentifikasi set data
Sebelum membuat tabel eksternal, Anda harus membuat set data untuk memuat tabel eksternal. Anda juga dapat menggunakan set data yang sudah ada.
Opsional: Menetapkan atau membuat cluster
Jika Anda berencana untuk sering membuat kueri terhadap data yang sama yang menyalurkan aplikasi produksi, sebaiknya tetapkan sebuah cluster di instance Bigtable Anda yang akan digunakan hanya untuk analisis BigQuery. Tindakan ini mengisolasi traffic dari cluster tersebut atau cluster yang Anda gunakan untuk pembacaan dan penulisan aplikasi. Untuk mempelajari lebih lanjut replikasi dan pembuatan instance yang memiliki lebih dari satu cluster, lihat Tentang replikasi.
Mengidentifikasi atau membuat profil aplikasi
Sebelum membuat tabel eksternal, tentukan profil aplikasi Bigtable yang harus digunakan BigQuery untuk membaca data. Sebaiknya gunakan profil aplikasi yang Anda tetapkan untuk digunakan hanya dengan BigQuery.
Jika Anda memiliki cluster di instance Bigtable yang dikhususkan untuk akses BigQuery, konfigurasikan profil aplikasi untuk menggunakan perutean cluster tunggal ke cluster tersebut.
Untuk mempelajari cara kerja profil aplikasi Bigtable, lihat Tentang profil aplikasi. Untuk mengetahui cara membuat profil aplikasi baru, lihat Membuat dan mengonfigurasi profil aplikasi.
Mengambil URI Bigtable
Untuk membuat tabel eksternal bagi sumber data Bigtable, Anda harus menyediakan URI Bigtable. Untuk mengambil URI Bigtable, lakukan hal berikut:
Buka halaman Bigtable di konsol.
Ambil detail berikut tentang sumber data Bigtable Anda:
- Project ID Anda
- ID instance Bigtable Anda
- ID profil aplikasi Bigtable yang akan Anda gunakan
- Nama tabel Bigtable Anda
Buat URI Bigtable menggunakan format berikut, dengan:
- project_id adalah project yang berisi instance Bigtable Anda
- instance_id adalah ID instance Bigtable
- (Opsional) app_profile adalah ID profil aplikasi yang ingin Anda gunakan
- table_name adalah nama tabel yang Anda minta
https://googleapis.com/bigtable/projects/project_id/instances/instance_id[/appProfiles/app_profile]/tables/table_name
Membuat tabel eksternal permanen
Saat membuat tabel eksternal permanen di BigQuery yang terhubung ke sumber data Bigtable, ada dua opsi untuk menentukan format tabel eksternal:
- Jika menggunakan API atau alat command line bq, Anda harus membuat file definisi tabel yang menentukan skema dan metadata untuk tabel eksternal.
- Jika menggunakan SQL, Anda menggunakan opsi
uri
dari pernyataanCREATE EXTERNAL TABLE
untuk menentukan tabel Bigtable yang akan diambil data, dan opsibigtable_options
untuk menentukan skema tabel.
Data tabel eksternal tidak disimpan di tabel BigQuery. Karena tabel ini bersifat permanen, Anda dapat menggunakan kontrol akses tingkat set data untuk membagikan tabel tersebut kepada orang lain yang juga memiliki akses ke sumber data Bigtable yang mendasarinya.
Untuk membuat tabel permanen, pilih salah satu metode berikut.
SQL
Anda dapat membuat tabel eksternal permanen dengan menjalankan
pernyataan DDL CREATE EXTERNAL TABLE
.
Anda harus menentukan skema tabel secara eksplisit sebagai bagian dari opsi
pernyataan.
Di Konsol Google Cloud, buka halaman BigQuery.
Di editor kueri, masukkan pernyataan berikut:
CREATE EXTERNAL TABLE DATASET.NEW_TABLE OPTIONS ( format = 'CLOUD_BIGTABLE', uris = ['URI'], bigtable_options = BIGTABLE_OPTIONS );
Ganti kode berikut:
DATASET
: set data untuk membuat tabel eksternal Bigtable.NEW_TABLE
: nama untuk tabel eksternal Bigtable.URI
: URI untuk tabel Bigtable yang ingin Anda gunakan sebagai sumber data. URI ini harus mengikuti format yang dijelaskan dalam Mengambil URI Bigtable.BIGTABLE_OPTIONS
: skema untuk tabel Bigtable dalam format JSON. Untuk daftar opsi definisi tabel Bigtable, lihatBigtableOptions
dalam referensi REST API.
Klik
Run.
Untuk informasi selengkapnya tentang cara menjalankan kueri, lihat Menjalankan kueri interaktif.
Pernyataan untuk membuat tabel Bigtable eksternal mungkin terlihat mirip dengan berikut ini:
CREATE EXTERNAL TABLE mydataset.BigtableTable
OPTIONS (
format = 'CLOUD_BIGTABLE',
uris = ['https://googleapis.com/bigtable/projects/myproject/instances/myBigtableInstance/tables/table1'],
bigtable_options =
"""
{
columnFamilies: [
{
"familyId": "familyId1",
"type": "INTEGER",
"encoding": "BINARY"
}
],
readRowkeyAsString: true
}
"""
);
bq
Anda dapat membuat tabel di alat command line bq menggunakan
perintah bq mk
. Saat
menggunakan alat command line bq untuk membuat tabel yang terhubung ke sumber data eksternal,
Anda mengidentifikasi skema tabel menggunakan
file definisi tabel.
Gunakan perintah
bq mk
untuk membuat tabel permanen.bq mk \ --external_table_definition=DEFINITION_FILE \ DATASET.TABLE
Ganti kode berikut:
DEFINITION_FILE
: jalur ke file definisi tabel di mesin lokal Anda.DATASET
: nama set data yang berisi tabel.TABLE
: nama tabel yang Anda buat.
API
Gunakan tables.insert
API, dan buat sebuah ExternalDataConfiguration
di resource Table
yang Anda teruskan.
Untuk properti sourceUris
dalam resource Table
,
tentukan hanya satu Bigtable URI. Harus berupa URL HTTPS yang valid.
Untuk properti sourceFormat
, tentukan "BIGTABLE"
.
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 informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.
Membuat kueri tabel eksternal
Untuk mengetahui informasi selengkapnya, lihat Membuat kueri data Bigtable.
Skema yang dihasilkan
Secara default, BigQuery mengekspos nilai dalam grup kolom sebagai array kolom, dan di dalamnya berupa array nilai yang ditulis pada stempel waktu yang berbeda. Skema ini mempertahankan tata letak alami data di Bigtable, tetapi kueri SQL bisa menjadi tantangan tersendiri. Anda dapat mempromosikan kolom ke subkolom dalam grup kolom induk dan hanya membaca nilai terbaru dari setiap sel. Ini mewakili kedua array dalam skema default sebagai nilai skalar.
Contoh
Anda menyimpan profil pengguna untuk jejaring sosial fiktif. Satu model data untuk
ini mungkin adalah grup kolom profile
dengan masing-masing
kolom untuk gender
, age
, dan email
:
rowkey | profile:gender| profile:age| profile:email
-------| --------------| -----------| -------------
alice | female | 30 | alice@gmail.com
Dengan menggunakan skema default, kueri GoogleSQL untuk menghitung jumlah pengguna pria di atas 30 tahun adalah:
SELECT COUNT(1) FROM `dataset.table` OMIT RECORD IF NOT SOME(profile.column.name = "gender" AND profile.column.cell.value = "male") OR NOT SOME(profile.column.name = "age" AND INTEGER(profile.column.cell.value) > 30)
Kueri data tidak akan terlalu sulit jika gender
dan age
diekspos sebagai subkolom. Untuk menampilkannya sebagai subkolom, cantumkan gender
dan age
sebagai kolom bernama
dalam grup kolom profile
saat menentukan tabel. Anda juga dapat menginstruksikan BigQuery untuk mengekspos nilai terbaru dari kelompok kolom ini karena biasanya, hanya nilai terbaru (dan mungkin satu-satunya nilai) yang menarik.
Setelah mengekspos kolom sebagai subkolom, kueri GoogleSQL untuk menghitung jumlah pengguna laki-laki berusia di atas 30 tahun adalah:
SELECT COUNT(1) FROM `dataset.table` WHERE profile.gender.cell.value="male" AND profile.age.cell.value > 30
Perhatikan cara gender
dan age
dirujuk langsung sebagai kolom. Konfigurasi JSON untuk penyiapan ini adalah:
"bigtableOptions": { "readRowkeyAsString": "true", "columnFamilies": [ { "familyId": "profile", "onlyReadLatest": "true", "columns": [ { "qualifierString": "gender", "type": "STRING" }, { "qualifierString": "age", "type": "INTEGER" } ] } ] }
Encoding nilai
Bigtable menyimpan data sebagai byte mentah, terlepas dari encoding data. Namun, nilai byte hanya dapat digunakan dalam analisis kueri SQL. Bigtable menyediakan dua jenis dasar decoding skalar: teks dan HBase-biner.
Format teks mengasumsikan bahwa semua nilai disimpan sebagai string teks alfanumerik.
Misalnya, bilangan bulat 768 akan disimpan sebagai string "768". Encoding
biner mengasumsikan bahwa class
Bytes.toBytes
HBase digunakan untuk mengenkode data dan menerapkan metode
decoding yang sesuai.
Region dan zona yang didukung
Pembuatan kueri data di Bigtable tersedia di semua zona Bigtable yang didukung. Anda dapat menemukan daftar zona di sini. Untuk instance multi-cluster, BigQuery merutekan traffic berdasarkan setelan profil aplikasi Bigtable.
Batasan
Untuk informasi tentang batasan yang berlaku untuk tabel eksternal, lihat Batasan tabel eksternal.
Cakupan untuk instance Compute Engine
Saat membuat instance Compute Engine, Anda dapat menentukan daftar cakupan untuk instance tersebut. Cakupan mengontrol akses instance ke produk Google Cloud, termasuk Bigtable. Aplikasi yang berjalan di VM menggunakan akun layanan untuk memanggil Google Cloud API.
Jika Anda menyiapkan instance Compute Engine untuk dijalankan sebagai akun layanan, dan akun layanan tersebut mengakses tabel eksternal yang ditautkan ke sumber data Bigtable, Anda harus menambahkan cakupan akses data hanya baca Bigtable (https://www.googleapis.com/auth/bigtable.data.readonly
) ke instance. Untuk informasi selengkapnya, lihat Membuat instance Compute Engine untuk Bigtable.
Untuk mengetahui informasi cara menerapkan cakupan ke instance Compute Engine, lihat Mengubah akun layanan dan cakupan akses untuk instance. Untuk mengetahui informasi selengkapnya tentang akun layanan Compute Engine, lihat Akun layanan.