Gestisci i metadati open source con Metastore BigLake
BigLake Metastore è un servizio di metadati fisici unificato per i dati di analisi dei dati su Google Cloud. BigLake Metastore offre un'unica fonte attendibile per i metadati che consente di gestire e accedere ai dati da più fonti. BigLake Metastore è accessibile da BigQuery e vari motori di elaborazione dei dati aperti su Dataproc, il che lo rende uno strumento utile per analisti di dati e data engineer.
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 le tabelle Apache Iceberg.
BigLake Metastore offre API, librerie client e dati integrazione del motore di ricerca (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 a in modo programmatico a gestire i progetti. La concessione di autorizzazioni IAM alle risorse non è supportata.
- Cloud Monitoring non è supportato.
- I cataloghi e i database di BigLake Metastore hanno quanto segue
limitazioni di denominazione:
- I nomi possono contenere fino a 1024 caratteri.
- I nomi possono contenere solo lettere UTF-8 (maiuscole, minuscolo), numeri e trattini bassi.
- I nomi devono essere univoci per ogni combinazione di progetto e regione.
- Le tabelle BigLake Metastore seguono le stesse convenzioni di denominazione come 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 Gestisci 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 l'accesso di sola lettura alle risorse BigLake Metastore,
è necessario il ruolo Visualizzatore BigLake (
roles/biglake.viewer
). Ad esempio, quando eseguire una query su una tabella BigLake Metastore BigQuery, l'utente o la connessione BigQuery l'account di servizio deve avere il ruolo Visualizzatore BigLake. - Per creare tabelle BigQuery con connessioni, è necessario
Ruolo Utente connessione BigQuery
(
roles/bigquery.connectionUser
). Per ulteriori informazioni sulla condivisione connessioni, consulta Condividere 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 alle risorse cloud di BigQuery: quando si esegue una 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 Dataproc Serverless. Spark utilizza il servizio credenziale dell'account.
- Account di servizio VM Dataproc: quando si utilizza 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 asset di sola lettura di accesso. Esecuzione di query su un Iceberg BigQuery è di sola lettura.biglake.{catalogs|databases|tables}.*
a livello di progetto, per tutte le autorizzazioni di lettura e scrittura. In genere, Apache Spark richiede 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. In queste sezioni viene installato e utilizzato Plug-in del catalogo BigLake Apache Iceberg, indicato dal JAR nei seguenti metodi. 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, segui questi passaggi:
- Utilizza SSH per connetterti a Dataproc.
Nella Interfaccia a riga di comando SQL di Spark, usa la seguente istruzione per installare e configurare Catalogo personalizzato Apache Iceberg con cui lavorare Metastore BigLake:
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. 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 di il plug-in del catalogo personalizzato Iceberg. 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
: BigLake Metastore ID catalogo a cui si collega il catalogo Spark. La non è necessario che esista e può essere creato 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 il parametro da cui eseguire la copia.HMS_TABLE
: (facoltativo) la tabella HMS da cui eseguire la copia.HMS_URI
: (facoltativo) l'endpoint HMS Thrift.
Connettiti a un cluster Dataproc
In alternativa, puoi inviare un job Dataproc a un cluster. Nell'esempio che segue viene installato Iceberg Custom Catalog (Catalogo personalizzato di Iceberg).
Per connetterti a un cluster Dataproc, invia un lavoro 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 di un cluster Dataproc. Questo ID può essere diverso daPROJECT_ID
.DATAPROC_LOCATION
: la posizione del di un 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 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 usare le stored procedure BigQuery per eseguire Job serverless Dataproc. Il processo è simile all'esecuzione Dataproc serverless i job direttamente in Dataproc.
Creare 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 la
projects.locations.catalogs.create
e specificare 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" }
crea 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 le seguenti opzioni:
API
Utilizza la
projects.locations.catalogs.databases.create
e specificare 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, 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 del Metastore BigLake da creare
Terraform
Viene creata una tabella BigLake Metastore con il nome "my_table" e digita "HIVE" nel database specificato da "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 la sezione Comandi Terraform di base.
Copia una tabella Iceberg da Hive Metastore a BigLake Metastore
Creazione di una tabella Iceberg e copia di un metastore Hive a BigLake Metastore, usa quanto segue 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 l'esecuzione di query Tabelle esterne di 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 Tabella BigLake Iceberg da creare. Segui la sintassi del percorso della tabella BigQuery. Utilizza lo stesso progetto del catalogo BigLake Metastore 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 standard anziché una Tabella BigLake.
Collegare manualmente le tabelle
Per creare manualmente tabelle BigLake Iceberg
link con URI della tabella BigLake Metastore 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'] )
Visualizza 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 specificare 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 specificare 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 vedere 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 seguenti sezioni descrivono come modificare le risorse nel metastore.
Aggiorna 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 ottenere la versione corrente
(chiamato 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 la
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
.
Elimina risorse metastore
Le seguenti sezioni descrivono come eliminare risorse in Metastore BigLake
Elimina 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
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 la
projects.locations.catalogs.databases.tables.delete
e specificare il nome di una tabella. Questo metodo non elimina
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;