Gestire i metadati open source con BigLake Metastore (classico)
BigLake Metastore (classico) è un servizio di metadati fisici unificato per i prodotti di analisi dei dati su Google Cloud. BigLake Metastore (classico) fornisce un'unica fonte di riferimento per i metadati e consente di gestire e accedere ai dati da più origini. Il metastore BigLake (classico) è accessibile da BigQuery e da vari motori di elaborazione dei dati aperti su Dataproc, il che lo rende uno strumento utile per analisti e ingegneri dei dati.
Per la gestione dei metadati aziendali, consulta Dataplex Universal Catalog.
Come funziona BigLake Metastore (classico)
Il metastore BigLake (classico) è un servizio serverless che non richiede il provisioning delle risorse prima dell'utilizzo. Puoi utilizzarlo come alternativa serverless a Hive Metastore nei cluster Dataproc. Il metastore BigLake (classico) funziona allo stesso modo di Hive Metastore tramite le sue API compatibili con Hive e puoi eseguire immediatamente query sulle tabelle in formato aperto in BigQuery senza ulteriori passaggi. Il metastore BigLake (classico) supporta solo le tabelle Apache Iceberg.
BigLake Metastore (classico) fornisce API, librerie client e integrazione del motore di dati (ad esempio Apache Spark) per gestire cataloghi, database e tabelle.
Limitazioni
Il metastore BigLake (classico) è soggetto alle seguenti limitazioni:
- Il metastore BigLake (classico) 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 (classico) presentano le seguenti limitazioni
di denominazione:
- 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 del metastore BigLake (classico) seguono le stesse convenzioni di denominazione delle tabelle BigQuery. Per ulteriori informazioni, vedi Denominazione delle tabelle.
Prima di iniziare
Devi abilitare la fatturazione e l'API BigLake prima di utilizzare BigLake Metastore (classico).
- 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 verificare se la fatturazione è abilitata per un progetto.
Abilita l'API BigLake.
Ruoli obbligatori
- Per avere il controllo completo delle risorse del metastore BigLake (classico), devi disporre del ruolo BigLake Admin (
roles/biglake.admin
). Se utilizzi un account di servizio BigQuery Spark Connector, un service account Dataproc Serverless o un service account VM Dataproc, concedi il ruolo BigLake Admin all'account. - Per avere accesso in sola lettura alle risorse BigLake Metastore (classico), devi disporre del ruolo Visualizzatore BigLake (
roles/biglake.viewer
). Ad esempio, quando esegui una query su una tabella BigLake Metastore (classico) in BigQuery, l'utente o il account di servizio di connessione BigQuery deve disporre del ruolo Visualizzatore BigLake. - Per creare tabelle BigQuery con connessioni, devi disporre del ruolo
Utente connessione BigQuery
(
roles/bigquery.connectionUser
). Per saperne di più sulla condivisione delle connessioni, consulta Condividere le connessioni con gli utenti.
A seconda del caso d'uso, l'identità che chiama BigLake Metastore (classico) può essere utenti o service account:
- Utente:quando chiami direttamente l'API BigLake o quando esegui query su una tabella BigLake per Apache Iceberg in una tabella BigQuery senza una connessione da BigQuery. In questo caso, BigQuery utilizza le credenziali dell'utente.
- Connessione alle risorse Cloud BigQuery: quando esegui una query su una tabella BigLake Iceberg in BigQuery con una connessione da BigQuery. BigQuery utilizza le credenziali dell'account di servizio di connessione per accedere al metastore BigLake (classico).
- Connettore BigQuery Spark: quando utilizzi Spark con BigLake Metastore (classico) in una procedura archiviata Spark. Spark utilizza le credenziali del account di servizio del connettore Spark per accedere al metastore BigLake (classico) e creare tabelle BigQuery.
- Service account Dataproc Serverless: quando utilizzi Spark con BigLake in Dataproc Serverless. Spark utilizza le credenziali dell'account di servizio.
- Service account VM Dataproc: quando utilizzi Dataproc (non Dataproc Serverless). Apache Spark utilizza le credenziali del account di servizio 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 vedere quali sono esattamente le autorizzazioni richieste per accedere alle risorse del metastore BigLake (classico), espandi la sezione Autorizzazioni obbligatorie:
Autorizzazioni obbligatorie
biglake.tables.get
a livello di progetto, per tutti gli accessi di sola lettura. L'esecuzione di query su una tabella BigLake Iceberg in BigQuery è di sola lettura.biglake.{catalogs|databases|tables}.*
a livello di progetto, per tutte le autorizzazioni di lettura e scrittura. In genere, Apache Spark deve essere in grado di leggere e scrivere dati, inclusa la possibilità di creare, gestire e visualizzare cataloghi, database e tabelle.bigquery.connections.delegate
a livello di connessione alla risorsa cloud BigQuery o superiore, per creare una tabella BigLake Iceberg nella tabella BigQuery utilizzando una connessione.
Connettiti a BigLake Metastore (classico)
Le sezioni seguenti spiegano come connettersi a BigLake Metastore (classico). Queste sezioni installano e utilizzano il plug-in del catalogo BigLake Apache Iceberg, indicato dai file JAR nei metodi seguenti. Il plug-in del catalogo si connette al metastore BigLake (classico) da motori open source come Apache Spark.
Connettiti a una VM Dataproc
Per connetterti a BigLake Metastore (classico) con una VM Dataproc, segui questi passaggi:
- Utilizza SSH per connetterti a Dataproc.
Nella CLI Spark SQL, utilizza la seguente istruzione per installare e configurare il catalogo personalizzato Apache Iceberg per l'utilizzo con BigLake Metastore (classico):
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 che corrisponde 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 del tuo ambiente, seleziona una delle seguenti opzioni:Iceberg 1.9.1
: gs://spark-lib/biglake/biglake-catalog-iceberg1.9.1-0.1.3-with-dependencies.jarIceberg 1.5.1
: gs://spark-lib/biglake/biglake-catalog-iceberg1.5.1-0.1.2-with-dependencies.jarIceberg 1.5.0
: gs://spark-lib/biglake/biglake-catalog-iceberg1.5.0-0.1.1-with-dependencies.jarIceberg 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 (classico).PROJECT_ID
: l'ID progetto Google Cloud del catalogo BigLake Metastore (classico) a cui è collegato il catalogo Spark.LOCATION
: la posizione Google Cloud del catalogo BigLake Metastore (classico) a cui è collegato il catalogo Spark.BLMS_CATALOG
: l'ID catalogo di BigLake Metastore (classico) a cui è collegato il catalogo Spark. Il catalogo non deve 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 copiare.HMS_TABLE
: (facoltativo) la tabella HMS da cui copiare.HMS_URI
: (facoltativo) l'endpoint Thrift di HMS.
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 posizione può essere diversa daLOCATION
.QUERY_FILE_PATH
: il percorso del file contenente le query da eseguire.
Connettiti a Dataproc Serverless
Allo stesso modo, puoi inviare un carico di lavoro batch a Dataproc Serverless. Per farlo, segui le istruzioni per il workload batch con i seguenti flag aggiuntivi:
--properties="${CONFS}"
--jars=BIGLAKE_ICEBERG_CATALOG_JAR
Connettersi alle stored procedure BigQuery
Puoi utilizzare le stored procedure BigQuery per eseguire job Dataproc Serverless. La procedura è simile all'esecuzione di job Dataproc Serverless direttamente in Dataproc.
Crea risorse metastore
Le sezioni seguenti descrivono come creare risorse nel metastore.
Creare cataloghi
I nomi dei cataloghi hanno dei vincoli; per ulteriori informazioni, vedi 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 saperne di più, consulta la documentazione di Terraform BigLake.
resource "google_biglake_catalog" "default" { name = "my_catalog" location = "US" }
Crea database
I nomi dei database hanno dei vincoli; per ulteriori informazioni, vedi Limitazioni. Per assicurarti che la risorsa di database sia compatibile con i motori di dati, ti consigliamo di creare 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 (classico) 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 saperne di più, 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" } } }
Crea tabelle
I nomi delle tabelle hanno vincoli. Per ulteriori informazioni, vedi Denominazione 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 BigLake Metastore (classico) da creare
Terraform
Viene registrata una tabella metastore BigLake (classica) con il nome "my_table" e il tipo "Hive" nel database specificato dalla variabile "google_biglake_database.default.id". Tieni presente che la tabella deve esistere prima della registrazione nel catalogo, che può essere eseguita inizializzando la tabella da un motore come Apache Spark. Per saperne di più, consulta la documentazione del provider Terraform: Tabella 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" } } }
Esempio Terraform end-to-end
Questo esempio di GitHub fornisce un esempio E2E eseguibile che crea un metastore BigLake (classico) Catalogo, Database e Tabella. Per ulteriori informazioni su come utilizzare questo esempio, consulta Comandi Terraform di base.
Copia una tabella Iceberg dal metastore Hive al metastore BigLake (classico)
Per creare una tabella Iceberg e copiare una tabella Hive Metastore nel metastore BigLake (classico), 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 (classico)
Quando crei una tabella Iceberg in Spark, puoi facoltativamente creare contemporaneamente una tabella esterna Iceberg collegata.
Collegare automaticamente le tabelle
Per creare una tabella Iceberg in Spark e creare automaticamente una tabella esterna Iceberg contemporaneamente, utilizza la seguente istruzione 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 esterna Iceberg da creare. Segui la sintassi del percorso della tabella BigQuery. Se il progetto non è specificato, utilizza lo stesso progetto del catalogo BigLake Metastore (classico).BQ_RESOURCE_CONNECTION
(facoltativo): il formato èproject.location.connection-id
. Se specificato, le query BigQuery utilizzano le credenziali della connessione alle risorse cloud per accedere a BigLake Metastore (classico). Se non specificato, BigQuery crea una tabella esterna normale anziché una tabella BigLake.
Collegare manualmente le tabelle
Per creare manualmente link a tabelle esterne Iceberg con URI di tabelle BigLake metastore (classico) specificati (blms://…
), utilizza la seguente istruzione SQL 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'] )
Visualizzare le risorse del metastore
Le sezioni seguenti descrivono come visualizzare le risorse in BigLake Metastore (classico).
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 informazioni su un catalogo, utilizza il metodo
projects.locations.catalogs.get
e specifica il nome di un catalogo.
Visualizza 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 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 informazioni su un database definito, utilizza la seguente istruzione:
DESCRIBE { DATABASE | NAMESPACE } [EXTENDED] SPARK_CATALOG.BLMS_DB;
Visualizza tabelle
Per visualizzare tutte le tabelle in un database o visualizzare 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 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 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 tabelle
Per evitare conflitti quando più job tentano di aggiornare la stessa tabella contemporaneamente, BigLake Metastore (classico) utilizza il blocco ottimistico. Per utilizzare
il blocco ottimistico, devi prima ottenere la versione attuale 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 il recupero dell'etag,
il metodo UpdateTable
non riesce. Questa misura garantisce
che un solo 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 perBLMS_TABLE
. Deve trovarsi nello stesso set di dati diBLMS_TABLE
.
Elimina risorse metastore
Le sezioni seguenti descrivono come eliminare le risorse in BigLake Metastore (classico).
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 istruzione:
DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE PURGE;