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 Managed Service for Apache Spark, il che lo rende uno strumento utile per data analyst e data engineer.
Per la gestione dei metadati aziendali, consulta Knowledge 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 Managed Service for Apache Spark. BigLake Metastore (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 (come Apache Spark) per gestire cataloghi, database e tabelle.
Limitazioni
BigLake Metastore (classico) è soggetto alle seguenti limitazioni:
- Il metastore BigLake (classico) non supporta le tabelle Apache Hive.
- I ruoli e le autorizzazioni 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 BigLake Metastore (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 saperne di più 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 (versione classica), devi disporre del ruolo Amministratore BigLake (
roles/biglake.admin). Se utilizzi un account di servizio BigQuery Spark Connector, un service account Managed Service for Apache Spark o un service account VM Managed Service for Apache Spark, concedi il ruolo Amministratore BigLake 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 account di serviziount 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 (legacy) può essere utenti o service account:
- Utente:quando chiami direttamente l'API BigLake o quando esegui query su una tabella Apache Iceberg gestita nella tabella BigQuery senza una connessione da BigQuery. In questo caso, BigQuery utilizza le credenziali dell'utente.
- Connessione alle risorse Cloud BigQuery: quando esegui query su una tabella Iceberg gestita 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.
- Account di servizio Managed Service for Apache Spark: quando utilizzi Spark con BigLake in Managed Service for Apache Spark. Spark utilizza le credenziali dell'account di servizio.
- Account di servizio VM Managed Service for Apache Spark: quando utilizzi Managed Service for Apache Spark (non Managed Service for Apache Spark). 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 saperne di più 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.geta livello di progetto, per tutti gli accessi di sola lettura. Esecuzione di query su una tabella Iceberg gestita la tabella è 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.delegatea livello di connessione alle risorse cloud BigQuery o superiore, per creare una tabella Iceberg gestita utilizzando una connessione.
Connettiti a BigLake Metastore (classico)
Le sezioni seguenti spiegano come connettersi al metastore BigLake (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 a BigLake Metastore (classico) da motori open source come Apache Spark.
Connettiti a una VM Managed Service for Apache Spark
Per connetterti al metastore BigLake (classico) con una VM Managed Service for Apache Spark, fai quanto segue:
- Utilizza SSH per connetterti a Managed Service for Apache Spark.
Nella CLI Spark SQL, utilizza la seguente istruzione per installare e configurare il catalogo personalizzato Apache Iceberg in modo che funzioni 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 nella tua istanza di Managed Service for Apache Spark o Managed Service for Apache Spark. 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.1BIGLAKE_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' Google Cloud ID progetto del catalogo BigLake Metastore (classico) a cui è collegato il catalogo Spark.LOCATION: la posizione Google Cloud del catalogo BigLake Metastore (classico) a cui si collega 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 copiare.HMS_TABLE: (facoltativo) la tabella HMS da cui copiare.HMS_URI: (facoltativo) l'endpoint HMS Thrift.
Connettiti a un cluster Managed Service for Apache Spark
In alternativa, puoi inviare un job Managed Service for Apache Spark a un cluster. Il seguente esempio installa il catalogo personalizzato Iceberg appropriato.
Per connetterti a un cluster Managed Service for Apache Spark, 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=MANAGED_SERVICE_FOR_APACHE_SPARK_CLUSTER \ --project=MANAGED_SERVICE_FOR_APACHE_SPARK_PROJECT_ID \ --region=MANAGED_SERVICE_FOR_APACHE_SPARK_LOCATION \ --jars=BIGLAKE_ICEBERG_CATALOG_JAR \ --properties="${CONFS}" \ --file=QUERY_FILE_PATH
Sostituisci quanto segue:
MANAGED_SERVICE_FOR_APACHE_SPARK_CLUSTER: il cluster Managed Service for Apache Spark a cui inviare il job.MANAGED_SERVICE_FOR_APACHE_SPARK_PROJECT_ID: l'ID progetto del cluster Managed Service for Apache Spark. Questo ID può essere diverso daPROJECT_ID.MANAGED_SERVICE_FOR_APACHE_SPARK_LOCATION: la posizione del cluster Managed Service for Apache Spark. Questa posizione può essere diversa daLOCATION.QUERY_FILE_PATH: il percorso del file contenente le query da eseguire.
Connettersi a Managed Service for Apache Spark
Allo stesso modo, puoi inviare un workload batch a Managed Service for Apache Spark. 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 i job Managed Service for Apache Spark. La procedura è simile all'esecuzione di job Managed Service for Apache Spark direttamente in Managed Service for Apache Spark.
Crea risorse Metastore
Le sezioni seguenti descrivono come creare risorse nel metastore.
Creare cataloghi
I nomi dei cataloghi hanno dei vincoli; per saperne di più, consulta 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 saperne di più, consulta la sezione 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 BigLake Metastore (classico) 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 maggiori informazioni, 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 da Hive Metastore a BigLake Metastore (classico)
Per creare una tabella Iceberg e copiare una tabella Hive Metastore nel metastore BigLake (versione classica), utilizza la seguente istruzione SQL Spark:
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 (classiche)
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 SQL di Spark:
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).(Facoltativo)
BQ_RESOURCE_CONNECTION: il formato èproject.location.connection-id. Se specificato, le query BigQuery utilizzano le credenziali della connessione alle risorse Cloud per accedere al metastore BigLake (classico). Se non viene 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 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 risorse metastore
Le sezioni seguenti descrivono come visualizzare le risorse nel metastore BigLake (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 le 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 le risorse del metastore
Le sezioni seguenti descrivono come eliminare le risorse in BigLake Metastore (classico).
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 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;