Mengelola metadata open source dengan BigLake Metastore
BigLake Metastore adalah layanan metadata fisik terpadu untuk produk analisis data di Google Cloud. BigLake Metastore menyediakan satu sumber kebenaran untuk metadata dan memungkinkan Anda mengelola serta mengakses data dari berbagai sumber. BigLake Metastore dapat diakses dari BigQuery dan berbagai mesin pemrosesan data terbuka di Dataproc, sehingga menjadikannya alat yang berguna bagi analis dan engineer data.
Untuk pengelolaan metadata bisnis, lihat Dataplex.
Cara kerja BigLake Metastore
BigLake Metastore adalah layanan tanpa server yang tidak mengharuskan Anda menyediakan resource sebelum menggunakannya. Anda dapat menggunakannya sebagai alternatif tanpa server untuk Hive Metastore di cluster Dataproc. BigLake Metastore berfungsi dengan cara yang sama seperti Hive Metastore melalui API-nya yang kompatibel dengan Hive, dan Anda dapat langsung mengkueri tabel format terbuka di BigQuery tanpa langkah lebih lanjut. BigLake Metastore hanya mendukung tabel Apache Iceberg.
BigLake Metastore menyediakan API, library klien, dan integrasi mesin data (seperti Apache Spark) untuk mengelola katalog, database, dan tabel.
Batasan
BigLake Metastore tunduk pada batasan berikut:
- BigLake Metastore tidak mendukung tabel Apache Hive.
- Peran dan izin Identity and Access Management (IAM) hanya dapat diberikan ke project. Memberikan izin IAM ke resource tidak didukung.
- Cloud Monitoring tidak didukung.
- Katalog dan database BigLake Metastore memiliki batasan penamaan berikut:
- Panjang nama maksimal 1.024 karakter.
- Nama hanya boleh berisi huruf UTF-8 (huruf besar, huruf kecil), angka, dan garis bawah.
- Nama harus unik untuk setiap kombinasi project dan region.
- Tabel BigLake Metastore mengikuti konvensi penamaan yang sama dengan tabel BigQuery. Untuk informasi selengkapnya, lihat Penamaan tabel.
Sebelum memulai
Anda harus mengaktifkan penagihan dan BigLake API sebelum menggunakan BigLake Metastore.
- Minta administrator untuk memberi Anda peran IAM Service Usage Admin (
roles/serviceusage.serviceUsageAdmin
) di project Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses. - Mengaktifkan penagihan untuk project Google Cloud Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.
Mengaktifkan BigLake API.
Peran yang diperlukan
- Untuk memiliki kontrol penuh atas resource BigLake Metastore, Anda memerlukan peran Admin BigLake (
roles/biglake.admin
). Jika Anda menggunakan akun layanan konektor BigQuery Spark, akun layanan Dataproc Serverless, atau Akun layanan VM Dataproc, berikan peran BigLake Admin ke akun tersebut. - Untuk mendapatkan akses hanya baca ke resource BigLake Metastore, Anda memerlukan peran BigLake Viewer (
roles/biglake.viewer
). Misalnya, saat membuat kueri tabel BigLake Metastore di BigQuery, pengguna atau akun layanan koneksi BigQuery harus memiliki peran BigLake Viewer. - Untuk membuat tabel BigQuery dengan koneksi, Anda memerlukan peran BigQuery Connection User (
roles/bigquery.connectionUser
). Untuk mengetahui informasi selengkapnya tentang berbagi koneksi, lihat Berbagi koneksi dengan pengguna.
Bergantung pada kasus penggunaan, identitas yang memanggil BigLake Metastore dapat berupa pengguna atau akun layanan:
- Pengguna: saat langsung memanggil BigLake Rest API, atau saat membuat kueri tabel BigQuery Iceberg tanpa koneksi dari BigQuery. Dalam situasi ini, BigQuery menggunakan kredensial pengguna.
- BigQuery Cloud Resource Connection: saat membuat kueri tabel BigQuery Iceberg dengan koneksi dari BigQuery. BigQuery menggunakan kredensial akun layanan koneksi untuk mengakses BigLake Metastore.
- BigQuery Spark Connector: saat menggunakan Spark dengan BigLake Metastore dalam prosedur yang disimpan Spark di BigQuery. Spark menggunakan kredensial akun layanan dari Spark Connector untuk mengakses BigLake Metastore dan membuat tabel BigQuery.
- Akun layanan Dataproc Serverless: saat menggunakan Spark dengan BigLake di Dataproc Serverless. Spark menggunakan kredensial akun layanan.
- Akun layanan VM Dataproc: saat menggunakan Dataproc (bukan Dataproc Serverless). Apache Spark menggunakan kredensial akun layanan VM.
Bergantung pada izin yang Anda miliki, Anda dapat memberikan peran ini pada diri sendiri atau meminta administrator untuk memberikannya. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Melihat peran yang dapat diberikan pada resource.
Untuk melihat izin persis yang diperlukan untuk mengakses resource BigLake Metastore, luaskan bagian Izin yang diperlukan:
Izin yang diperlukan
biglake.tables.get
di level project, untuk semua akses hanya baca. Kueri terhadap tabel BigQuery Iceberg bersifat hanya baca.biglake.{catalogs|databases|tables}.*
di level project, untuk semua izin baca dan tulis. Biasanya, Apache Spark memerlukan kemampuan untuk membaca dan menulis data, termasuk kemampuan untuk membuat, mengelola, dan melihat katalog, database, serta tabel.bigquery.connections.delegate
di level BigQuery Cloud Resource Connection atau yang lebih tinggi, untuk membuat tabel BigQuery Iceberg menggunakan koneksi.
Terhubung ke BigLake Metastore
Bagian berikut menjelaskan cara menghubungkan ke BigLake Metastore. Bagian ini menginstal dan menggunakan plugin katalog BigLake Apache Iceberg, yang ditunjukkan oleh file JAR dalam metode berikut. Plugin katalog terhubung ke BigLake Metastore dari mesin open source seperti Apache Spark.
Menghubungkan dengan VM Dataproc
Untuk terhubung ke BigLake Metastore dengan VM Dataproc, lakukan hal berikut:
- Gunakan SSH untuk terhubung ke Dataproc.
Di Spark SQL CLI, gunakan pernyataan berikut untuk menginstal dan mengonfigurasi katalog kustom Apache Iceberg agar berfungsi dengan BigLake Metastore:
spark-sql \ --packages ICEBERG_SPARK_PACKAGE \ --jars BIGLAKE_ICEBERG_CATALOG_JAR \ --conf spark.sql.catalog.SPARK_CATALOG=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.SPARK_CATALOG.catalog-impl=org.apache.iceberg.gcp.biglake.BigLakeCatalog \ --conf spark.sql.catalog.SPARK_CATALOG.gcp_project=PROJECT_ID \ --conf spark.sql.catalog.SPARK_CATALOG.gcp_location=LOCATION \ --conf spark.sql.catalog.SPARK_CATALOG.blms_catalog=BLMS_CATALOG \ --conf spark.sql.catalog.SPARK_CATALOG.warehouse=GCS_DATA_WAREHOUSE_FOLDER \ --conf spark.sql.catalog.SPARK_HMS_CATALOG=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.SPARK_HMS_CATALOG.type=hive \ --conf spark.sql.catalog.SPARK_HMS_CATALOG.uri=thrift://HMS_URI:9083
Ganti kode berikut:
ICEBERG_SPARK_PACKAGE
: versi Apache Iceberg dengan Spark yang akan digunakan. Sebaiknya gunakan versi Spark yang cocok dengan versi Spark di instance Dataproc atau tanpa server Dataproc Anda singkat ini. Untuk melihat daftar versi Apache Iceberg yang tersedia, lihat Download Apache Iceberg. Misalnya, tanda untuk Apache Spark 3.3 adalah:
--packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.2.1
BIGLAKE_ICEBERG_CATALOG_JAR
: URI Cloud Storage dari plugin katalog kustom Iceberg yang akan diinstal. Bergantung pada lingkungan Anda, pilih salah satu opsi berikut:Iceberg 1.2.0
: gs://spark-lib/biglake/biglake-catalog-iceberg1.2.0-0.1.1-with-dependencies.jarIceberg 0.14.0
: gs://spark-lib/biglake/biglake-catalog-iceberg0.14.0-0.1.1-with-dependencies.jar
SPARK_CATALOG
: ID katalog untuk Spark. Link ini ditautkan ke katalog BigLake Metastore.PROJECT_ID
: project ID Google Cloud dari katalog BigLake Metastore yang ditautkan oleh katalog Spark. \LOCATION
: lokasi Google Cloud dari katalog BigLake Metastore yang ditautkan dengan katalog Spark.BLMS_CATALOG
: ID katalog BigLake Metastore yang ditautkan ke katalog Spark. Katalog tidak harus ada, dan dapat dibuat di Spark.GCS_DATA_WAREHOUSE_FOLDER
: folder Cloud Storage tempat Spark membuat semua file. Diawali dengangs://
.HMS_DB
: (opsional) database HMS yang berisi tabel yang akan disalin.HMS_TABLE
: (opsional) tabel HMS yang akan disalin.HMS_URI
: (opsional) endpoint HMS Thrift.
Menghubungkan dengan cluster Dataproc
Atau, Anda dapat mengirimkan tugas Dataproc ke cluster. Contoh berikut menginstal Iceberg Custom Catalog yang sesuai.
Untuk terhubung dengan cluster Dataproc, kirimkan tugas dengan spesifikasi berikut:
CONFS="spark.sql.catalog.SPARK_CATALOG=org.apache.iceberg.spark.SparkCatalog," CONFS+="spark.sql.catalog.SPARK_CATALOG.catalog-impl=org.apache.iceberg.gcp.biglake.BigLakeCatalog," CONFS+="spark.sql.catalog.SPARK_CATALOG.gcp_project=PROJECT_ID," CONFS+="spark.sql.catalog.SPARK_CATALOG.gcp_location=LOCATION," CONFS+="spark.sql.catalog.SPARK_CATALOG.blms_catalog=BLMS_CATALOG," CONFS+="spark.sql.catalog.SPARK_CATALOG.warehouse=GCS_DATA_WAREHOUSE_FOLDER," CONFS+="spark.jars.packages=ICEBERG_SPARK_PACKAGE" gcloud dataproc jobs submit spark-sql --cluster=DATAPROC_CLUSTER \ --project=DATAPROC_PROJECT_ID \ --region=DATAPROC_LOCATION \ --jars=BIGLAKE_ICEBERG_CATALOG_JAR \ --properties="${CONFS}" \ --file=QUERY_FILE_PATH
Ganti kode berikut:
DATAPROC_CLUSTER
: cluster Dataproc yang menjadi tujuan mengirimkan tugas.DATAPROC_PROJECT_ID
: project ID cluster Dataproc. ID ini bisa berbeda denganPROJECT_ID
.DATAPROC_LOCATION
: lokasi cluster Dataproc. Lokasi ini mungkin berbeda denganLOCATION
.QUERY_FILE_PATH
: jalur ke file yang berisi kueri yang akan dijalankan.
Menghubungkan dengan Dataproc Serverless
Demikian pula, Anda dapat mengirimkan beban kerja batch ke Dataproc Serverless. Untuk melakukannya, ikuti petunjuk workload batch dengan flag tambahan berikut:
--properties="${CONFS}"
--jars=BIGLAKE_ICEBERG_CATALOG_JAR
Menghubungkan dengan prosedur tersimpan BigQuery
Anda dapat menggunakan prosedur tersimpan di BigQuery untuk menjalankan tugas Dataproc Serverless. Proses ini mirip dengan menjalankan tugas Dataproc Serverless langsung di Dataproc.
Membuat resource metastore
Bagian berikut menjelaskan cara membuat resource di metastore.
Membuat katalog
Nama katalog memiliki batasan; untuk mengetahui informasi selengkapnya, lihat Batasan. Untuk membuat katalog, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.create
dan tentukan nama katalog.
Spark SQL
CREATE NAMESPACE SPARK_CATALOG;
Terraform
Tindakan ini akan membuat database BigLake bernama 'my_database' dengan jenis 'HIVE' dalam katalog yang ditentukan oleh variabel 'google_biglake_catalog.default.id'. Untuk informasi selengkapnya, lihat dokumentasi BigLake Terraform.
resource "google_biglake_catalog" "default" { name = "my_catalog" location = "US" }
Membuat database
Nama database memiliki batasan; untuk mengetahui informasi selengkapnya, lihat Batasan. Untuk memastikan resource database Anda kompatibel dengan mesin data, sebaiknya buat database menggunakan mesin data, bukan membuat isi resource secara manual. Untuk membuat database, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.databases.create
dan tentukan nama database.
Spark SQL
CREATE NAMESPACE SPARK_CATALOG.BLMS_DB;
Ganti kode berikut:
BLMS_DB
: ID database BigLake Metastore yang akan dibuat
Terraform
Tindakan ini akan membuat database BigLake bernama 'my_database' dengan jenis 'HIVE' dalam katalog yang ditentukan oleh variabel 'google_biglake_catalog.default.id'. Untuk informasi selengkapnya, lihat dokumentasi BigLake Terraform.
resource "google_biglake_database" "default" { name = "my_database" catalog = google_biglake_catalog.default.id type = "HIVE" hive_options { location_uri = "gs://${google_storage_bucket.default.name}/${google_storage_bucket_object.metadata_directory.name}" parameters = { "owner" = "Alex" } } }
Membuat tabel
Nama tabel memiliki batasan. Untuk informasi selengkapnya, lihat Penamaan tabel. Untuk membuat tabel, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.databases.tables.create
dan tentukan nama tabel.
Spark SQL
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg;
Ganti kode berikut:
BLMS_TABLE
: ID tabel BigLake Metastore untuk membuat
Terraform
Tindakan ini akan membuat tabel BigLake Metastore dengan nama "my_table" dan jenis "HIVE" di database yang ditentukan oleh variabel "google_biglake_database.default.id". Lihat Dokumentasi Penyedia Terraform untuk mengetahui informasi selengkapnya: Tabel BigLake.
resource "google_biglake_table" "default" { name = "my-table" database = google_biglake_database.default.id type = "HIVE" hive_options { table_type = "MANAGED_TABLE" storage_descriptor { location_uri = "gs://${google_storage_bucket.default.name}/${google_storage_bucket_object.data_directory.name}" input_format = "org.apache.hadoop.mapred.SequenceFileInputFormat" output_format = "org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat" } parameters = { "spark.sql.create.version" = "3.1.3" "spark.sql.sources.schema.numParts" = "1" "transient_lastDdlTime" = "1680894197" "spark.sql.partitionProvider" = "catalog" "owner" = "Alex" "spark.sql.sources.schema.part.0" = jsonencode({ "type" : "struct", "fields" : [ { "name" : "id", "type" : "integer", "nullable" : true, "metadata" : {} }, { "name" : "name", "type" : "string", "nullable" : true, "metadata" : {} }, { "name" : "age", "type" : "integer", "nullable" : true, "metadata" : {} } ] }) "spark.sql.sources.provider" = "iceberg" "provider" = "iceberg" } } }
Contoh Terraform E2E
Contoh GitHub ini menyediakan contoh E2E yang dapat dijalankan yang membuat Katalog, Database, dan Tabel Metastore "BigLake". Untuk informasi selengkapnya tentang cara menggunakan contoh ini, lihat Perintah Dasar Terraform.
Menyalin tabel Iceberg dari Hive Metastore ke BigLake Metastore
Untuk membuat tabel Iceberg dan menyalin tabel Hive Metastore ke BigLake Metastore, gunakan pernyataan Spark SQL berikut:
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg TBLPROPERTIES(hms_table='HMS_DB.HMS_TABLE');
Menautkan tabel BigLake ke tabel BigLake Metastore
BigLake Metastore adalah metastore yang direkomendasikan untuk membuat kueri tabel eksternal BigLake untuk Iceberg. Saat membuat tabel Iceberg di Spark, Anda dapat secara opsional membuat tabel BigLake Iceberg yang ditautkan secara bersamaan.
Menautkan tabel secara otomatis
Untuk membuat tabel Iceberg di Spark dan secara otomatis membuat tabel BigLake Iceberg secara bersamaan, gunakan pernyataan Spark SQL berikut:
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg TBLPROPERTIES(bq_table='BQ_TABLE_PATH', bq_connection='BQ_RESOURCE_CONNECTION');
Ganti kode berikut:
BQ_TABLE_PATH
: jalur tabel Iceberg BigLake yang akan dibuat. Ikuti sintaksis jalur tabel BigQuery. Project ini akan menggunakan project yang sama dengan katalog BigLake Metastore jika project tersebut tidak ditentukan.BQ_RESOURCE_CONNECTION
(opsional): formatnya adalahproject.location.connection-id
. Jika ditentukan, kueri BigQuery akan menggunakan kredensial koneksi Cloud Resource untuk mengakses BigLake Metastore. Jika tidak ditentukan, BigQuery akan membuat tabel eksternal reguler, bukan tabel BigLake.
Menautkan tabel secara manual
Untuk membuat link tabel BigLake Iceberg secara manual dengan URI tabel BigLake Metastore yang ditentukan (blms://…
), gunakan pernyataan BigQuery SQL berikut:
CREATE EXTERNAL TABLE 'BQ_TABLE_PATH' WITH CONNECTION `BQ_RESOURCE_CONNECTION` OPTIONS ( format = 'ICEBERG', uris = ['blms://projects/PROJECT_ID/locations/LOCATION/catalogs/BLMS_CATALOG/databases/BLMS_DB/tables/BLMS_TABLE'] )
Melihat resource metastore
Bagian berikut menjelaskan cara melihat resource di BigLake Metastore.
Melihat katalog
Untuk melihat semua database dalam katalog, gunakan metode projects.locations.catalogs.list
dan tentukan nama katalog.
Untuk melihat informasi tentang katalog, gunakan metode projects.locations.catalogs.get
dan tentukan nama katalog.
Melihat database
Untuk melihat database, lakukan langkah berikut:
API
Untuk melihat semua tabel dalam database, gunakan metode projects.locations.catalogs.databases.list
dan tentukan nama database.
Untuk melihat informasi tentang database, gunakan metode projects.locations.catalogs.databases.get
dan tentukan nama database.
Spark SQL
Untuk melihat semua database dalam katalog, gunakan pernyataan berikut:
SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;
Untuk melihat informasi tentang database yang ditentukan, gunakan pernyataan berikut:
DESCRIBE { DATABASE | NAMESPACE } [EXTENDED] SPARK_CATALOG.BLMS_DB;
Melihat tabel
Untuk menampilkan semua tabel dalam database atau tabel yang ditentukan, lakukan hal berikut:
API
Untuk melihat semua tabel dalam database, gunakan metode projects.locations.catalogs.databases.tables.list
dan tentukan nama database.
Untuk melihat informasi tentang tabel, gunakan metode projects.locations.catalogs.databases.tables.get
dan tentukan nama tabel.
Spark SQL
Untuk melihat semua tabel dalam database, gunakan pernyataan berikut:
SHOW TABLES IN SPARK_CATALOG.BLMS_DB;
Untuk melihat informasi tentang tabel yang ditentukan, gunakan pernyataan berikut:
DESCRIBE TABLE [EXTENDED] SPARK_CATALOG.BLMS_DB.BLMS_TABLE;
Mengubah resource metastore
Bagian berikut menjelaskan cara memodifikasi resource di metastore.
Memperbarui tabel
Untuk menghindari konflik saat beberapa tugas mencoba memperbarui tabel yang sama secara bersamaan, BigLake Metastore menggunakan penguncian optimis. Untuk menggunakan penguncian optimis, Anda harus mendapatkan versi tabel saat ini (yang disebut etag) terlebih dahulu dengan menggunakan metode GetTable
. Kemudian, Anda dapat membuat perubahan pada tabel dan menggunakan metode UpdateTable
, dengan meneruskan etag yang diambil sebelumnya. Jika tugas lain memperbarui tabel setelah Anda mengambil etag, metode UpdateTable
akan gagal. Tindakan ini memastikan bahwa hanya satu tugas yang dapat memperbarui tabel dalam satu waktu, sehingga mencegah konflik.
Untuk memperbarui tabel, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.databases.tables.patch
dan tentukan nama tabel.
Spark SQL
Untuk opsi pembaruan tabel di SQL, lihat ALTER TABLE
.
Mengganti nama tabel
Untuk mengganti nama tabel, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.databases.tables.rename
dan tentukan nama tabel serta nilai newName
.
Spark SQL
ALTER TABLE BLMS_TABLE RENAME TO NEW_BLMS_TABLE;
Ganti kode berikut:
NEW_BLMS_TABLE
: nama baru untukBLMS_TABLE
. Harus berada dalam set data yang sama denganBLMS_TABLE
.
Menghapus resource metastore
Bagian berikut menjelaskan cara menghapus resource di BigLake Metastore.
Menghapus katalog
Untuk menghapus katalog, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.delete
dan tentukan nama katalog. Metode ini tidak menghapus file terkait di Google Cloud.
Spark SQL
DROP NAMESPACE SPARK_CATALOG;
Menghapus database
Untuk menghapus database, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.databases.delete
dan tentukan nama database. Metode ini tidak menghapus file terkait di Google Cloud.
Spark SQL
DROP NAMESPACE SPARK_CATALOG.BLMS_DB;
Menghapus tabel
Untuk menghapus tabel, pilih salah satu opsi berikut:
API
Gunakan metode projects.locations.catalogs.databases.tables.delete
dan tentukan nama tabel. Metode ini tidak menghapus file terkait di Google Cloud.
Spark SQL
Untuk hanya membuang tabel, gunakan pernyataan berikut:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE;
Untuk membuang tabel dan menghapus file terkait di Google Cloud, gunakan pernyataan berikut:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE PURGE;