Membuat tabel eksternal BigLake untuk Delta Lake
BigLake memungkinkan Anda mengakses tabel Delta Lake dengan kontrol akses yang lebih terperinci. Delta Lake adalah format penyimpanan data tabular open source yang dikembangkan oleh Databricks yang mendukung tabel data berskala petabyte.
BigQuery mendukung fitur berikut dengan tabel Delta Lake:
- Delegasi akses: Membuat kueri data terstruktur di penyimpanan data eksternal dengan delegasi akses. Delegasi akses memisahkan akses ke tabel Delta Lake dari akses ke penyimpanan data pokok.
- Kontrol akses terperinci: Menerapkan keamanan terperinci di tingkat tabel, termasuk tingkat baris dan tingkat kolom keamanan. Untuk tabel Delta Lake berdasarkan Cloud Storage, Anda juga dapat menggunakan penyamaran data dinamis.
- Evolusi skema: Perubahan skema di tabel Delta Lake terdeteksi secara otomatis. Perubahan pada skema tercermin dalam tabel BigQuery.
Tabel Delta Lake juga mendukung semua fitur BigLake saat Anda mengonfigurasinya sebagai tabel BigLake.
Sebelum memulai
-
Di Google Cloud konsol, pada halaman pemilih project, pilih atau buat Google Cloud project.
Peran yang diperlukan untuk memilih atau membuat project
- Memilih project: Memilih project tidak memerlukan peran IAM tertentu Anda dapat memilih project mana pun yang telah diberi peran.
-
Membuat project: Untuk membuat project, Anda memerlukan peran Pembuat Project
(
roles/resourcemanager.projectCreator), yang berisi izinresourcemanager.projects.create. Pelajari cara memberikan peran.
-
Pastikan penagihan diaktifkan untuk Google Cloud project Anda.
-
Aktifkan BigQuery Connection dan BigQuery Reservation API.
Peran yang diperlukan untuk mengaktifkan API
Untuk mengaktifkan API, Anda memerlukan peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin), yang berisi izinserviceusage.services.enable. Pelajari cara memberikan peran. -
Di konsol, aktifkan Cloud Shell. Google Cloud
Pastikan Anda memiliki set data BigQuery dataset.
Pastikan versi Google Cloud SDK Anda adalah 366.0.0 atau yang lebih baru:
gcloud versionJika perlu, update Google Cloud SDK.
Buat koneksi resource Cloud berdasarkan sumber data eksternal Anda, dan berikan koneksi tersebut akses ke Cloud Storage. Jika Anda tidak memiliki izin yang sesuai untuk membuat koneksi, minta administrator BigQuery untuk membuat koneksi dan membagikannya kepada Anda.
Peran yang diperlukan
Izin berikut diperlukan untuk membuat tabel Delta Lake:
bigquery.tables.createbigquery.connections.delegate
Peran Identity and Access Management bawaan Admin BigQuery (roles/bigquery.admin) mencakup izin ini.
Jika Anda bukan akun utama dalam peran ini, minta administrator untuk memberi Anda izin ini atau membuatkan tabel Delta Lake.
Selain itu, agar pengguna BigQuery dapat membuat kueri tabel, akun layanan yang terkait dengan koneksi harus memiliki izin dan akses berikut:
- Peran BigQuery Viewer (
roles/bigquery.viewer) - Peran BigQuery Connection User (
roles/bigquery.connectionUser) - Akses ke bucket Cloud Storage yang berisi data tersebut
Untuk mengetahui informasi selengkapnya tentang peran dan izin Identity and Access Management di BigQuery, lihat Peran dan izin bawaan.
Membuat tabel dengan Delta Lake
Untuk membuat tabel Delta Lake, ikuti langkah-langkah berikut.
SQL
Gunakan pernyataan
CREATE EXTERNAL TABLEuntuk membuat tabel Delta Lake:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.DELTALAKE_TABLE_NAME`
WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
OPTIONS (
format ="DELTA_LAKE",
uris=['DELTA_TABLE_GCS_BASE_PATH']);
Ganti nilai berikut:
- PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
- DATASET: set data BigQuery yang akan berisi tabel Delta Lake
- DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda
- REGION: region yang berisi koneksi untuk membuat tabel Delta Lake—misalnya,
us CONNECTION_ID: ID koneksi—misalnya,
myconnectionSaat Anda melihat detail koneksi di Google Cloud konsol, ID koneksi adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi—misalnya
projects/myproject/locations/connection_location/connections/myconnection.DELTA_TABLE_GCS_BASE_PATH: awalan tabel Delta Lake
bq
Di lingkungan command line, gunakan
bq mk perintah
untuk membuat tabel Delta Lake:
bq mk --table --external_table_definition=DEFINITION_FILE PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Ganti nilai berikut:
- DEFINITION_FILE: jalur ke file definisi tabel
- PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
- DATASET: set data BigQuery yang akan berisi tabel Delta Lake
- DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda
REST
Gunakan BigQuery API untuk
membuat tabel Delta Lake dengan memanggil metode API tables.insert:
REQUEST='{
"autodetect": true,
"externalDataConfiguration": {
"sourceFormat": "DELTA_LAKE",
"connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
"sourceUris": [
"DELTA_TABLE_GCS_BASE_PATH"
],
},
"tableReference": {
"tableId": "DELTALAKE_TABLE_NAME"
}
}'
echo $REQUEST | curl -X POST -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables?autodetect_schema=true
Ganti nilai berikut:
- PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
- REGION: region yang berisi koneksi untuk membuat tabel Delta Lake—misalnya,
us CONNECTION_ID: ID koneksi—misalnya,
myconnectionSaat Anda melihat detail koneksi di Google Cloud konsol, ID koneksi adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi—misalnya
projects/myproject/locations/connection_location/connections/myconnection.DELTA_TABLE_GCS_BASE_PATH: awalan tabel Delta Lake
DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda
DATASET: set data BigQuery yang akan berisi tabel Delta Lake
Saat Anda membuat tabel Delta Lake, awalan Delta Lake digunakan sebagai URI untuk tabel. Misalnya, untuk tabel yang memiliki log di
bucket gs://bucket/warehouse/basictable/_delta_log, URI tabelnya adalah
gs://bucket/warehouse/basictable. Saat Anda menjalankan kueri pada tabel
Delta Lake, BigQuery membaca data di bawah awalan
untuk mengidentifikasi versi tabel saat ini, lalu menghitung metadata dan
file untuk tabel.
Meskipun Anda dapat membuat tabel eksternal Delta Lake tanpa koneksi, hal ini tidak direkomendasikan karena alasan berikut:
- Pengguna mungkin mengalami error
ACCESS_DENIEDsaat mencoba mengakses file di Cloud Storage. - Fitur seperti kontrol akses terperinci hanya tersedia di tabel BigLake Delta Lake.
Mengupdate tabel Delta Lake
Untuk mengupdate (memuat ulang) skema tabel Delta Lake, ikuti langkah-langkah berikut.
bq
Di lingkungan command line, gunakan
bq update perintah
untuk mengupdate (memuat ulang) skema tabel Delta Lake:
bq update --autodetect_schema PROJECT_ID:DATASET.DELTALAKE_TABLE_NAME
Ganti nilai berikut:
- PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
- DATASET: set data BigQuery yang akan berisi tabel Delta Lake
- DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda
REST
Gunakan BigQuery API untuk
mengupdate tabel Delta Lake dengan memanggil metode API tables.patch:
REQUEST='{
"externalDataConfiguration": {
"sourceFormat": "DELTA_LAKE",
"sourceUris": [
"DELTA_TABLE_GCS_BASE_PATH"
],
"connectionId": "PROJECT_ID.REGION.CONNECTION_ID",
"autodetect": true
}
}'
echo $REQUEST |curl -X PATCH -d @- -H "Content-Type: application/json" -H "Authorization: Bearer $(gcloud auth print-access-token)" https://bigquery.googleapis.com/bigquery/v2/projects/PROJECT_ID/datasets/DATASET/tables/DELTALAKE_TABLE_NAME?autodetect_schema=true
Ganti nilai berikut:
- DELTA_TABLE_GCS_BASE_PATH: awalan tabel Delta Lake
- PROJECT_ID: ID project tempat Anda ingin membuat tabel Delta Lake
- REGION: region yang berisi koneksi untuk membuat tabel Delta Lake—misalnya,
us CONNECTION_ID: ID koneksi—misalnya,
myconnectionSaat Anda melihat detail koneksi di Google Cloud konsol, ID koneksi adalah nilai di bagian terakhir ID koneksi yang sepenuhnya memenuhi syarat yang ditampilkan di ID Koneksi—misalnya
projects/myproject/locations/connection_location/connections/myconnection.DELTALAKE_TABLE_NAME: nama tabel Delta Lake Anda
DATASET: set data BigQuery yang akan berisi tabel Delta Lake
Membuat kueri tabel Delta Lake
Setelah membuat tabel BigLake Delta Lake, Anda dapat membuat kuerinya menggunakan sintaksis GoogleSQL, sama seperti tabel BigQuery standar. Contoh:
SELECT field1, field2 FROM mydataset.my_cloud_storage_table;
Untuk informasi selengkapnya, baca artikel Membuat kueri data Cloud Storage di tabel BigLake.
Koneksi eksternal yang terkait dengan akun layanan digunakan untuk terhubung ke penyimpanan data. Karena akun layanan mengambil data dari penyimpanan data, pengguna hanya memerlukan akses ke tabel Delta Lake.
Pemetaan data
BigQuery mengonversi jenis data Delta Lake ke jenis data BigQuery seperti yang ditunjukkan dalam tabel berikut:
| Jenis Delta Lake | Jenis BigQuery |
|---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC atau BIG_NUMERIC bergantung pada presisi |
date |
DATE |
time |
TIME |
timestamp (not partition column) |
TIMESTAMP |
timestamp (partition column) |
DATETIME |
string |
STRING |
binary |
BYTES |
array<Type> |
ARRAY<Type> |
struct |
STRUCT |
map<KeyType, ValueType> |
ARRAY<Struct<key KeyType, value ValueType>> |
Batasan
Tabel Delta Lake memiliki batasan tabel BigLake dan juga batasan berikut:
- Mendukung pembaca Delta Lake versi 3 dengan vektor penghapusan jalur relatif dan pemetaan kolom.
- Tidak mendukung checkpoint Delta Lake V2.
- Anda harus mencantumkan versi pembaca di file entri log terakhir. Misalnya, tabel baru harus menyertakan
00000..0.json. - Operasi pengambilan data perubahan (CDC) tidak didukung. Operasi CDC yang ada akan diabaikan.
- Skema terdeteksi secara otomatis. Mengubah skema menggunakan BigQuery tidak didukung.
- Nama kolom tabel harus mematuhi batasan nama kolom BigQuery .
- Tampilan terwujud tidak didukung.
- Read API tidak didukung untuk Delta Lake.
- Jenis data
timestamp_ntztidak didukung untuk tabel BigLake Delta Lake.
Pemecahan masalah
Bagian ini memberikan bantuan terkait tabel BigLake Delta Lake. Untuk bantuan yang lebih umum terkait pemecahan masalah kueri BigQuery, lihat Memecahkan masalah kueri.
Error waktu tunggu kueri dan resource
Periksa direktori log (gs://bucket/warehouse/basictable/_delta_log) tabel Delta Lake
dan cari file JSON dengan nomor versi yang lebih besar dari checkpointsebelumnya. Anda dapat memperoleh nomor versi
dengan mencantumkan direktori atau memeriksa file
_delta_log/_last_checkpoint.
File JSON yang lebih besar dari 10 MiB dapat memperlambat perluasan tabel yang dapat menyebabkan masalah waktu tunggu dan resource. Untuk mengatasi masalah ini, gunakan perintah berikut untuk membuat checkpoint baru sehingga kueri tidak membaca file JSON:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.checkpointInterval' = '1')");
Pengguna kemudian dapat menggunakan perintah yang sama untuk mereset interval checkpoint ke nilai default 10 atau ke nilai yang menghindari file JSON lebih dari 50 MB di antara checkpoint.
Nama kolom tidak valid
Pastikan pemetaan kolom diaktifkan untuk tabel Delta Lake. Pemetaan kolom didukung dengan Pembaca versi 2 atau yang lebih baru. Untuk Pembaca versi 1, tetapkan 'delta.columnMapping.mode' ke 'name' menggunakan perintah berikut:
spark.sql("ALTER TABLE delta.`gs://bucket/mydeltatabledir` SET TBLPROPERTIES ('delta.columnMapping.mode' = 'name', 'delta.minReaderVersion' = '3', 'delta.minWriterVersion' = '7')");
Jika nama kolom yang tidak valid mematuhi batasan nama kolom fleksibel, hubungi Cloud Customer Care atau biglake-help@google.com.
Error akses ditolak
Untuk mendiagnosis masalah dengan tabel BigLake Delta Lake, periksa hal berikut:
Pastikan Anda menggunakan tabel BigLake Delta Lake (dengan koneksi).
Pengguna memiliki izin yang diperlukan seperti yang diuraikan.
Performa
Untuk meningkatkan performa kueri, coba langkah-langkah berikut:
Gunakan utilitas Delta Lake untuk memadatkan file data pokok dan menghapus file yang berlebihan, seperti data dan metadata.
Pastikan
delta.checkpoint.writeStatsAsStructditetapkan ketrue.Pastikan variabel yang sering digunakan dalam klausa predikat berada di kolom partisi.
Set data besar (lebih besar dari 100 TB) mungkin mendapatkan manfaat dari konfigurasi dan fitur tambahan. Jika langkah-langkah sebelumnya tidak menyelesaikan masalah, pertimbangkan untuk menghubungi Customer Care atau biglake-help@google.com, terutama untuk set data yang lebih besar dari 100 TB.