Gestisci i metadati open source con BigLake Metastore
BigLake Metastore è un servizio di metadati fisici unificato per i prodotti di analisi dei dati su Google Cloud. BigLake Metastore fornisce un'unica fonte di verità per i metadati e ti consente di gestire e accedere ai dati da più origini. BigLake Metastore è accessibile da BigQuery e da vari motori di elaborazione dei dati aperti su Dataproc, il che lo rende uno strumento utile per analisti e tecnici dei dati.
Per la gestione dei metadati aziendali, consulta Dataplex.
Come funziona BigLake Metastore
BigLake Metastore è un servizio serverless che non richiede di eseguire il provisioning delle risorse prima di utilizzarlo. Puoi utilizzarlo come alternativa serverless a Hive Metastore nei cluster Dataproc. BigLake Metastore funziona come Hive Metastore tramite le sue API compatibili con Hive e puoi eseguire immediatamente query sulle tabelle in formato aperto in BigQuery senza ulteriori passaggi. BigLake Metastore supporta solo tabelle Apache Iceberg.
BigLake Metastore fornisce API, librerie client e integrazione del motore di dati (ad esempio Apache Spark) per gestire cataloghi, database e tabelle.
Limitazioni
BigLake Metastore è soggetto ai seguenti limiti:
- BigLake Metastore non supporta le tabelle Apache Hive.
- I ruoli e le autorizzazioni di Identity and Access Management (IAM) possono essere concessi solo ai progetti. La concessione di autorizzazioni IAM alle risorse non è supportata.
- Cloud Monitoring non è supportato.
- I cataloghi e i database BigLake Metastore presentano le seguenti limitazioni per i nomi:
- I nomi possono contenere fino a 1024 caratteri.
- I nomi possono contenere solo lettere UTF-8 (maiuscole, minuscole), numeri e trattini bassi.
- I nomi devono essere univoci per ogni combinazione di progetto e regione.
- Le tabelle Metastore di BigLake rispettano le stesse convenzioni di denominazione delle tabelle BigQuery. Per ulteriori informazioni, consulta la sezione Nomi delle tabelle.
Prima di iniziare
Devi abilitare la fatturazione e l'API BigLake prima di utilizzare BigLake Metastore.
- Chiedi all'amministratore di concederti il ruolo IAM Amministratore Service Usage
(
roles/serviceusage.serviceUsageAdmin
) nel tuo progetto. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso. - Abilita la fatturazione per il tuo progetto Google Cloud. Scopri come controllare se la fatturazione è attivata in un progetto.
Abilita l'API BigLake.
Ruoli obbligatori
- Per avere il controllo completo sulle risorse di BigLake Metastore,
devi disporre del ruolo Amministratore BigLake (
roles/biglake.admin
). Se utilizzi un account di servizio BigQuery Spark Connector, un account di servizio Dataproc Serverless o un account di servizio VM Dataproc, devi concedere all'account il ruolo Amministratore BigLake. - Per avere accesso in sola lettura alle risorse di BigLake Metastore, è necessario il ruolo Visualizzatore BigLake (
roles/biglake.viewer
). Ad esempio, quando esegui una query su una tabella BigLake Metastore in BigQuery, l'utente o l'account di servizio della connessione BigQuery deve avere il ruolo Visualizzatore BigLake. - Per creare tabelle BigQuery con connessioni, devi disporre del ruolo Utente connessione BigQuery (
roles/bigquery.connectionUser
). Per ulteriori informazioni sulla condivisione delle connessioni, consulta Condividere le connessioni con gli utenti.
A seconda del caso d'uso, l'identità che chiama BigLake Metastore può essere costituita da utenti o service account:
- Utente: quando chiami direttamente l'API REST BigLake o quando esegui query su una tabella BigQuery Iceberg senza una connessione da BigQuery. In questa circostanza, BigQuery utilizza le credenziali dell'utente.
- Connessione alla risorsa cloud BigQuery: quando esegui query su una tabella BigQuery Iceberg con una connessione da BigQuery. BigQuery utilizza la credenziale dell'account di servizio di connessione per accedere a BigLake Metastore.
- Connettore BigQuery Spark: quando utilizzi Spark con BigLake Metastore in una procedura memorizzata Spark di BigQuery. Spark utilizza la credenziale dell'account di servizio del connettore Spark per accedere al metastore BigLake e creare tabelle BigQuery.
- Account di servizio Dataproc Serverless: quando utilizzi Spark con BigLake in Dataproc Serverless. Spark utilizza la credenziale dell'account di servizio.
- Account di servizio VM Dataproc: se utilizzi Dataproc (non Dataproc Serverless). Apache Spark utilizza la credenziale dell'account di servizio della VM.
A seconda delle tue autorizzazioni, puoi concederti questi ruoli o chiedere all'amministratore di concederteli. Per ulteriori informazioni sulla concessione dei ruoli, consulta Visualizzazione dei ruoli assegnabili sulle risorse.
Per visualizzare le autorizzazioni esatte necessarie per accedere alle risorse BigLake Metastore, espandi la sezione Autorizzazioni richieste:
Autorizzazioni obbligatorie
biglake.tables.get
a livello di progetto per tutti gli accessi di sola lettura. Le query su una tabella BigQuery Iceberg sono di sola lettura.biglake.{catalogs|databases|tables}.*
a livello di progetto per tutte le autorizzazioni di lettura e scrittura. In genere, Apache Spark ha bisogno della possibilità di leggere e scrivere dati, inclusa la possibilità di creare, gestire e visualizzare cataloghi, database e tabelle.bigquery.connections.delegate
a livello di connessione a una risorsa cloud BigQuery o superiore per creare una tabella BigQuery Iceberg utilizzando una connessione.
Connettiti al metastore BigLake
Le sezioni seguenti spiegano come connettersi a BigLake Metastore. Queste sezioni installano e utilizzano il plug-in del catalogo Apache Iceberg di BigLake, indicato dai file JAR nei metodi seguenti. Il plug-in del catalogo si connette al metastore BigLake da motori open source come Apache Spark.
Connettiti a una VM Dataproc
Per connetterti a BigLake Metastore con una VM Dataproc:
- Utilizza SSH per connetterti a Dataproc.
In Spark SQL CLI, utilizza la seguente istruzione per installare e configurare il catalogo personalizzato Apache Iceberg in modo che funzioni con 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
Sostituisci quanto segue:
ICEBERG_SPARK_PACKAGE
: la versione di Apache Iceberg con Spark da utilizzare. Ti consigliamo di utilizzare la versione di Spark corrispondente a quella dell'istanza Dataproc o Dataproc Serverless. Per visualizzare un elenco delle versioni di Apache Iceberg disponibili, consulta Download di Apache Iceberg. Ad esempio, il flag per Apache Spark 3.3 è:
--packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.13:1.2.1
BIGLAKE_ICEBERG_CATALOG_JAR
: l'URI Cloud Storage del plug-in del catalogo personalizzato Iceberg da installare. A seconda dell'ambiente, seleziona una delle seguenti opzioni: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
: l'identificatore del catalogo per Spark. È collegato a un catalogo BigLake Metastore.PROJECT_ID
: l'ID progetto Google Cloud del catalogo BigLake Metastore a cui si collega il catalogo Spark.LOCATION
: la posizione Google Cloud del catalogo BigLake Metastore a cui si collega il catalogo Spark.BLMS_CATALOG
: l'ID catalogo Metastore BigLake a cui si collega il catalogo Spark. Il catalogo non deve necessariamente esistere e può essere creato in Spark.GCS_DATA_WAREHOUSE_FOLDER
: la cartella Cloud Storage in cui Spark crea tutti i file. Inizia congs://
.HMS_DB
: (facoltativo) il database HMS contenente la tabella da cui eseguire la copia.HMS_TABLE
: (facoltativo) la tabella HMS da cui copiare.HMS_URI
: (facoltativo) l'endpoint HMS Thrift.
Connettiti a un cluster Dataproc
In alternativa, puoi inviare un job Dataproc a un cluster. Il seguente esempio installa il catalogo personalizzato Iceberg appropriato.
Per connetterti a un cluster Dataproc, invia un job con le seguenti specifiche:
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
Sostituisci quanto segue:
DATAPROC_CLUSTER
: il cluster Dataproc a cui inviare il job.DATAPROC_PROJECT_ID
: l'ID progetto del cluster Dataproc. Questo ID può essere diverso daPROJECT_ID
.DATAPROC_LOCATION
: la posizione del cluster Dataproc. Questa località può essere diversa daLOCATION
.QUERY_FILE_PATH
: il percorso del file contenente le query da eseguire.
Connettiti a Dataproc Serverless
Analogamente, puoi inviare un carico di lavoro batch a Dataproc Serverless. Per farlo, segui le istruzioni per i carichi di lavoro batch con i seguenti flag aggiuntivi:
--properties="${CONFS}"
--jars=BIGLAKE_ICEBERG_CATALOG_JAR
Eseguire il collegamento con le stored procedure BigQuery
Puoi utilizzare le stored procedure BigQuery per eseguire job Dataproc Serverless. Il processo è simile all'esecuzione di job Dataproc Serverless direttamente in Dataproc.
Creare risorse Metastore
Le sezioni seguenti descrivono come creare risorse nel metastore.
Creare cataloghi
I nomi dei cataloghi hanno delle limitazioni. Per ulteriori informazioni, consulta la sezione Limitazioni. Per creare un catalogo, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.create
e specifica il nome di un catalogo.
Spark SQL
CREATE NAMESPACE SPARK_CATALOG;
Terraform
Viene creato un database BigLake denominato "my_database" di tipo 'HIVE' nel catalogo specificato dalla variabile 'google_biglake_catalog.default.id'. Per ulteriori informazioni, consulta la documentazione di Terraform BigLake.
resource "google_biglake_catalog" "default" { name = "my_catalog" location = "US" }
Creare database
I nomi dei database hanno delle limitazioni. Per ulteriori informazioni, consulta la sezione Limitazioni. Per assicurarti che la risorsa del database sia compatibile con i motori di dati, ti consigliamo di creare i database utilizzando i motori di dati anziché creare manualmente il corpo della risorsa. Per creare un database, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.databases.create
e specifica il nome di un database.
Spark SQL
CREATE NAMESPACE SPARK_CATALOG.BLMS_DB;
Sostituisci quanto segue:
BLMS_DB
: l'ID del database BigLake Metastore da creare
Terraform
Viene creato un database BigLake denominato "my_database" di tipo 'HIVE' nel catalogo specificato dalla variabile 'google_biglake_catalog.default.id'. Per ulteriori informazioni, consulta la documentazione di Terraform BigLake.
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" } } }
Creare tabelle
I nomi delle tabelle hanno vincoli. Per ulteriori informazioni, consulta la sezione Nomi delle tabelle. Per creare una tabella, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.databases.tables.create
e specifica il nome di una tabella.
Spark SQL
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg;
Sostituisci quanto segue:
BLMS_TABLE
: l'ID tabella del Metastore BigLake da creare
Terraform
Viene creata una tabella BigLake Metastore con il nome "my_table" e il tipo "HIVE" nel database specificato dalla variabile "google_biglake_database.default.id". Per ulteriori informazioni, consulta la documentazione del provider Terraform: BigLake Table.
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" } } }
Esempio di Terraform E2E
Questo esempio GitHub fornisce un esempio E2E eseguibile che crea un catalogo, un database e una tabella del metastore "BigLake". Per ulteriori informazioni su come utilizzare questo esempio, consulta Comandi Terraform di base.
Copiare una tabella Iceberg dal metastore Hive al metastore BigLake
Per creare una tabella Iceberg e copiare una tabella del metastore Hive nel metastore BigLake, utilizza la seguente istruzione Spark SQL:
CREATE TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE (id bigint, data string) USING iceberg TBLPROPERTIES(hms_table='HMS_DB.HMS_TABLE');
Collega le tabelle BigLake alle tabelle BigLake Metastore
BigLake Metastore è il metastore consigliato per eseguire query sulle tabelle esterne BigLake per Iceberg. Quando crei una tabella Iceberg in Spark, puoi anche creare contemporaneamente una tabella BigLake Iceberg collegata.
Collegare automaticamente le tabelle
Per creare una tabella Iceberg in Spark e contemporaneamente una tabella BigLake Iceberg, utilizza la seguente dichiarazione Spark SQL:
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');
Sostituisci quanto segue:
BQ_TABLE_PATH
: il percorso della tabella BigLake Iceberg da creare. Segui la sintassi del percorso della tabella BigQuery. Utilizza lo stesso progetto del catalogo Metastore BigLake se il progetto non è specificato.BQ_RESOURCE_CONNECTION
(facoltativo): il formato èproject.location.connection-id
. Se specificato, le query BigQuery utilizzano le credenziali della connessione a una risorsa cloud per accedere al metastore BigLake. Se non specificato, BigQuery crea una tabella esterna normale anziché una tabella BigLake.
Collegare manualmente le tabelle
Per creare manualmente i collegamenti delle tabelle BigLake Iceberg con gli URI delle tabelle del metastore BigLake specificati (blms://…
), utilizza il seguente istruzione SQL di BigQuery:
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'] )
Visualizza le risorse del metastore
Le sezioni seguenti descrivono come visualizzare le risorse in BigLake Metastore.
Visualizzare i cataloghi
Per visualizzare tutti i database di un catalogo, utilizza il metodo
projects.locations.catalogs.list
e specifica il nome di un catalogo.
Per visualizzare le informazioni su un catalogo, utilizza il metodo
projects.locations.catalogs.get
e specifica il nome di un catalogo.
Visualizza i database
Per visualizzare un database:
API
Per visualizzare tutte le tabelle di un database, utilizza il metodo
projects.locations.catalogs.databases.list
e specifica il nome di un database.
Per visualizzare le informazioni su un database, utilizza il metodo
projects.locations.catalogs.databases.get
e specifica il nome di un database.
Spark SQL
Per visualizzare tutti i database in un catalogo, utilizza la seguente istruzione:
SHOW { DATABASES | NAMESPACES } IN SPARK_CATALOG;
Per visualizzare le informazioni su un database definito, utilizza la seguente istruzione:
DESCRIBE { DATABASE | NAMESPACE } [EXTENDED] SPARK_CATALOG.BLMS_DB;
Visualizza tabelle
Per visualizzare tutte le tabelle di un database o una tabella definita:
API
Per visualizzare tutte le tabelle di un database, utilizza il metodo
projects.locations.catalogs.databases.tables.list
e specifica il nome di un database.
Per visualizzare le informazioni su una tabella, utilizza il metodo
projects.locations.catalogs.databases.tables.get
e specifica il nome di una tabella.
Spark SQL
Per visualizzare tutte le tabelle di un database, utilizza la seguente istruzione:
SHOW TABLES IN SPARK_CATALOG.BLMS_DB;
Per visualizzare le informazioni su una tabella definita, utilizza la seguente istruzione:
DESCRIBE TABLE [EXTENDED] SPARK_CATALOG.BLMS_DB.BLMS_TABLE;
Modificare le risorse del metastore
Le sezioni seguenti descrivono come modificare le risorse nel metastore.
Aggiorna le tabelle
Per evitare conflitti quando più job tentano di aggiornare la stessa tabella contemporaneamente, BigLake Metastore utilizza il blocco ottimistico. Per utilizzare il blocco ottimistico, devi prima recuperare la versione corrente della tabella (chiamata etag) utilizzando il metodo GetTable
. Poi puoi apportare modifiche alla tabella e utilizzare il metodo UpdateTable
, passando l'etag recuperato in precedenza. Se un altro job aggiorna la tabella dopo aver recuperato l'etag, il metodo UpdateTable
non va a buon fine. Questa misura garantisce che solo un job possa aggiornare la tabella alla volta, evitando conflitti.
Per aggiornare una tabella, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.databases.tables.patch
e specifica il nome di una tabella.
Spark SQL
Per le opzioni di aggiornamento delle tabelle in SQL, consulta
ALTER TABLE
.
Rinominare le tabelle
Per rinominare una tabella, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.databases.tables.rename
e specifica il nome di una tabella e un valore newName
.
Spark SQL
ALTER TABLE BLMS_TABLE RENAME TO NEW_BLMS_TABLE;
Sostituisci quanto segue:
NEW_BLMS_TABLE
: il nuovo nome diBLMS_TABLE
. Deve trovarsi nello stesso set di dati diBLMS_TABLE
.
Eliminare le risorse del metastore
Le sezioni seguenti descrivono come eliminare le risorse in BigLake Metastore.
Eliminare i cataloghi
Per eliminare un catalogo, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.delete
e specifica il nome di un catalogo. Questo metodo non elimina i file associati su Google Cloud.
Spark SQL
DROP NAMESPACE SPARK_CATALOG;
Eliminare i database
Per eliminare un database, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.databases.delete
e specifica il nome di un database. Questo metodo non elimina i file associati su Google Cloud.
Spark SQL
DROP NAMESPACE SPARK_CATALOG.BLMS_DB;
Eliminare le tabelle
Per eliminare una tabella, seleziona una delle seguenti opzioni:
API
Utilizza il metodo
projects.locations.catalogs.databases.tables.delete
e specifica il nome di una tabella. Questo metodo non elimina i file associati su Google Cloud.
Spark SQL
Per eliminare solo la tabella, utilizza la seguente istruzione:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE;
Per eliminare la tabella ed eliminare i file associati su Google Cloud, utilizza la seguente dichiarazione:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE PURGE;