Gestisci i metadati open source con BigLake Metastore

BigLake Metastore è un servizio unificato di metadati fisici per i prodotti di analisi dei dati su Google Cloud. BigLake Metastore fornisce un'unica fonte attendibile per i metadati e ti consente di gestire e accedere ai dati di più fonti. BigLake Metastore è accessibile da BigQuery e da vari motori di elaborazione dati aperti su Dataproc, il che lo rende uno strumento utile per data analyst e data engineer.

Per la gestione dei metadati aziendali, consulta Dataplex.

Come funziona BigLake Metastore

BigLake Metastore è un servizio serverless che non richiede il provisioning delle risorse prima dell'uso. Puoi utilizzarlo come alternativa serverless a Hive Metastore nei cluster Dataproc. BigLake Metastore funziona come Hive Metastore mediante le API compatibili con Hive e ti permette di 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 integrazione di Data Engine (ad esempio Apache Spark) per gestire cataloghi, database e tabelle.

Limitazioni

BigLake Metastore è soggetto alle seguenti limitazioni:

  • 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. Non è possibile concedere autorizzazioni IAM alle risorse.
  • Cloud Monitoring non è supportato.
  • I cataloghi e i database BigLake Metastore presentano le seguenti limitazioni di denominazione:
    • I nomi possono contenere fino a 1024 caratteri.
    • I nomi possono contenere solo lettere UTF-8 (maiuscole e minuscole), 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 delle tabelle BigQuery. Per ulteriori informazioni, consulta la sezione Denominazione delle tabelle.

Prima di iniziare

Devi abilitare la fatturazione e l'API BigLake prima di utilizzare BigLake Metastore.

  1. Chiedi all'amministratore di concederti il ruolo IAM Amministratore utilizzo dei servizi (roles/serviceusage.serviceUsageAdmin) per il tuo progetto. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso.
  2. Abilitare la fatturazione per il tuo progetto Google Cloud. Scopri come verificare se la fatturazione è abilitata su un progetto.
  3. Abilita l'API BigLake.

    Abilitare l'API

Ruoli obbligatori

  • Per avere il controllo completo sulle risorse BigLake Metastore, devi disporre del ruolo Amministratore BigLake (roles/biglake.admin). Se utilizzi un account di servizio connettore BigQuery Spark, un account di servizio Serverless Dataproc o un account di servizio VM Dataproc, concedi il ruolo Amministratore BigLake all'account.
  • Per disporre dell'accesso di sola lettura alle risorse BigLake Metastore, devi disporre del 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 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 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 utenti o account di servizio:

  • Utente: quando si chiama direttamente l'API BigLake Rest o quando si esegue una 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 esegui una query su una tabella BigQuery Iceberg con una connessione da BigQuery. BigQuery utilizza le credenziali dell'account di servizio di connessione per accedere a BigLake Metastore.
  • Connettore Spark BigQuery: quando utilizzi Spark con BigLake Metastore in una stored procedure Spark di BigQuery. Spark utilizza le credenziali dell'account di servizio del connettore Spark per accedere a BigLake Metastore e creare tabelle BigQuery.
  • Account di servizio serverless Dataproc: quando si utilizza Spark con BigLake in Dataproc Serverless. Spark utilizza la credenziale dell'account di servizio.
  • Account di servizio VM Dataproc: quando si utilizza Dataproc (non Dataproc Serverless). Apache Spark utilizza le credenziali dell'account di servizio VM.

A seconda delle tue autorizzazioni, puoi concedere questi ruoli a te stesso 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 del metastore BigLake, espandi la sezione Autorizzazioni richieste:

Autorizzazioni obbligatorie

  • biglake.tables.get a livello di progetto per tutti gli accessi di sola lettura. L'esecuzione di query su una tabella BigQuery Iceberg è di sola lettura.
  • biglake.{catalogs|databases|tables}.* a livello di progetto, per tutte le autorizzazioni di lettura e scrittura. In genere, Apache Spark richiede la capacità di leggere e scrivere dati, inclusa la capacità di creare, gestire e visualizzare cataloghi, database e tabelle.
  • bigquery.connections.delegate a livello di connessione alle risorse cloud di BigQuery o superiore, per creare una tabella BigQuery Iceberg utilizzando una connessione.

Collegati a BigLake Metastore

Nelle sezioni seguenti viene spiegato come connettersi a BigLake Metastore. Queste sezioni installano e utilizzano il plug-in del catalogo Apache Iceberg di BigLake, indicato dai file JAR nei seguenti metodi. Il plug-in del catalogo si connette a BigLake Metastore da motori open source come Apache Spark.

Connettiti a una VM Dataproc

Per connetterti a BigLake Metastore con una VM Dataproc, segui questi passaggi:

  1. Utilizza SSH per connetterti a Dataproc.
  2. Nell'interfaccia a riga di comando SQL Spark, utilizza la seguente istruzione per installare e configurare il catalogo personalizzato di 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 Spark corrispondente alla versione Spark nella tua istanza Dataproc o Dataproc serverless. Per visualizzare un elenco delle versioni di Apache Iceberg disponibili, consulta la pagina relativa ai 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.jar
    • Iceberg 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 è collegato il catalogo Spark.
  • LOCATION: la località Google Cloud del catalogo BigLake Metastore a cui è collegato il catalogo Spark.
  • BLMS_CATALOG: l'ID catalogo BigLake Metastore a cui è collegato il catalogo Spark. Il catalogo non deve necessariamente esistere e può essere creato in Spark.
  • GCS_DATA_WAREHOUSE_FOLDER: la cartella di Cloud Storage in cui Spark crea tutti i file. a partire da gs://.
  • HMS_DB: (facoltativo) il database HMS contenente la tabella da cui eseguire la copia.
  • (Facoltativo) HMS_TABLE: la tabella HMS da cui eseguire la copia.
  • (Facoltativo) HMS_URI: l'endpoint di HMS Thrift.

Connettiti a un cluster Dataproc

In alternativa, puoi inviare un job di Dataproc a un cluster. L'esempio seguente 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 da PROJECT_ID.
  • DATAPROC_LOCATION: la località del cluster Dataproc. Questa località può essere diversa da LOCATION.
  • QUERY_FILE_PATH: il percorso del file contenente le query da eseguire.

Connettiti con 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

Connettiti alle stored procedure BigQuery

Puoi usare stored procedure BigQuery per eseguire job Dataproc Serverless. Il processo è simile all'esecuzione di job Dataproc Serverless direttamente in Dataproc.

Creazione risorse metastore

Le seguenti sezioni descrivono come creare risorse nel metastore.

Crea cataloghi

I nomi catalogo hanno vincoli. Per saperne di più, consulta la sezione sulle 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 su BigLake.

resource "google_biglake_catalog" "default" {
name     = "my_catalog"
location = "US"
}

Crea database

I nomi dei database hanno vincoli. Per saperne di più, consulta le limitazioni. Per garantire che la risorsa di database sia compatibile con i motori di dati, ti consigliamo di creare i database utilizzando 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 BLMS_DB;

Sostituisci quanto segue:

  • BLMS_DB: l'ID 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 su 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 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 per 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: 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 di E2E Terraform

Questo esempio di GitHub fornisce un esempio E2E eseguibile che crea un catalogo metastore, database e tabella "BigLake". Per saperne di più su come utilizzare questo esempio, consulta Comandi di base di Terraform.

Copia una tabella Iceberg da Hive Metastore a BigLake Metastore

Per creare una tabella Iceberg e copiare una tabella Hive Metastore in BigLake Metastore, 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');

BigLake Metastore è il metastore consigliato per l'esecuzione di query sulle tabelle BigLake Iceberg. Quando crei una tabella Iceberg in Spark, facoltativamente puoi creare contemporaneamente una tabella BigLake Iceberg collegata.

Per creare una tabella Iceberg in Spark e allo stesso tempo creare automaticamente una tabella BigLake Iceberg, 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 BigLake Iceberg da creare. Segui la sintassi del percorso della tabella BigQuery. Se il progetto non è specificato, utilizza lo stesso progetto del catalogo BigLake Metastore.
  • BQ_RESOURCE_CONNECTION (facoltativo): il formato è project.location.connection-id. Se specificato, le query BigQuery utilizzano le credenziali di connessione Cloud Resource per accedere a BigLake Metastore. Se non specificato, BigQuery crea una normale tabella esterna anziché una tabella BigLake.

Per creare manualmente collegamenti alle tabelle BigLake Iceberg con gli URI della tabella BigLake Metastore 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 seguenti sezioni descrivono come visualizzare le risorse in BigLake Metastore.

Visualizza cataloghi

Per visualizzare tutti i database in 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 in 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;

Modifica risorse 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 recuperare la versione corrente della tabella (denominata etag) utilizzando il metodo GetTable. Quindi puoi apportare modifiche alla tabella e utilizzare il metodo UpdateTable, trasmettendo 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 la tabella possa essere aggiornata da un solo job 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 della tabella 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 per BLMS_TABLE. Deve trovarsi nello stesso set di dati di BLMS_TABLE.

Elimina risorse metastore

Le seguenti sezioni descrivono come eliminare le risorse in BigLake Metastore.

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;

Elimina 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;