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 aperti di elaborazione dei dati 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 per eseguire il provisioning delle risorse prima di utilizzarle. Puoi usarlo come un ambiente alternativa a Metastore Hive nei cluster Dataproc. Funzioni di BigLake Metastore allo stesso modo di Hive Metastore attraverso le sue API compatibili con Hive, eseguire immediatamente query su tabelle in formato aperto in BigQuery senza ulteriori passaggi. BigLake Metastore supporta solo 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 alle seguenti limitazioni:

  • BigLake Metastore non supporta Apache Hive tabelle.
  • I ruoli e le autorizzazioni di Identity and Access Management (IAM) possono essere concessi solo a in modo programmatico a gestire i progetti. L'assegnazione di autorizzazioni IAM alle risorse supportati.
  • 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, vedi Denominazione delle tabelle.

Prima di iniziare

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

  1. Chiedi all'amministratore di concederti l'autorizzazione Service Usage Admin (roles/serviceusage.serviceUsageAdmin) ruolo IAM nel tuo progetto. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestisci accesso.
  2. Abilitare la fatturazione per il tuo progetto Google Cloud. Scopri come verifica 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 avere il ruolo BigLake Admin (roles/biglake.admin). Se utilizzi un Connettore BigQuery Spark un account di servizio, Account di servizio Dataproc Serverless, o un Account di servizio VM Dataproc, concedi il ruolo di amministratore BigLake all'account.
  • 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 utenti o account di servizio:

  • Utente: quando chiami direttamente l'API BigLake Rest, oppure quando si esegue una query su un Iceberg BigQuery, senza connessione da BigQuery. In questo caso, 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 Metastore BigLake
  • Connettore BigQuery Spark: quando si utilizza Spark con BigLake Metastore in un ambiente BigQuery stored procedure di Spark. Spark utilizza le credenziali dell'account di servizio Connettore Spark per accedere BigLake Metastore 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 le credenziali dell'account di servizio VM.

In base alle tue autorizzazioni, puoi concedere questi ruoli a te stesso o chiedere affinché te le conceda l'amministratore. Per ulteriori informazioni sulla concessione ruoli, consulta Visualizzazione dei ruoli assegnabili nelle risorse.

Per visualizzare le autorizzazioni esatte necessarie per accedere Risorse BigLake Metastore, espandi le Autorizzazioni richieste sezione:

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 presso BigQuery Livello di connessione alla risorsa Cloud o superiore, per creare nella tabella BigQuery Iceberg utilizzando connessione.

Connetti a BigLake Metastore

Le sezioni seguenti spiegano come connettersi a Metastore BigLake In queste sezioni viene installato e utilizzato Plug-in del catalogo BigLake Apache Iceberg, indicato dal JAR nei seguenti metodi. Il plug-in Catalog si connette BigLake Metastore da motori open source come con Apache Spark.

Connettiti a una VM Dataproc

Per connettersi a BigLake Metastore con un Dataproc VM, segui questi passaggi:

  1. Utilizza SSH per connetterti a Dataproc.
  2. Nella Interfaccia a riga di comando SQL di Spark, usa la seguente dichiarazione 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. Me consigliamo di utilizzare la versione di Spark Versione Spark in Dataproc o Dataproc serverless in esecuzione in un'istanza Compute Engine. 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 plugin 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 del progetto Google Cloud della catalogo BigLake Metastore Collegamenti al catalogo Spark.
  • LOCATION: il valore Località di Google Cloud del catalogo BigLake Metastore che Collegamenti al 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: il valore Cartella Cloud Storage in cui Spark crea . Inizia con gs://.
  • 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: Dataproc in un cluster Kubernetes inviate il job.
  • DATAPROC_PROJECT_ID: l'ID progetto del di un cluster Dataproc. Questo ID può essere diverso da PROJECT_ID.
  • DATAPROC_LOCATION: la posizione del di un cluster Dataproc. Questa posizione può essere diverso da LOCATION.
  • 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

Connettiti alle stored procedure di BigQuery

Puoi usare le stored procedure BigQuery per eseguire Job serverless Dataproc. Il processo è simile all'esecuzione Dataproc serverless i job direttamente in Dataproc.

crea risorse del metastore

Le sezioni seguenti descrivono come creare risorse nel metastore.

Crea 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" del tipo "HIVE" nel catalogo specificato da "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 vincoli; Per ulteriori informazioni, vedi Limitazioni. per assicurarti che la risorsa di database sia compatibile con i motori dati, consigliamo di creare database utilizzando della creazione manuale del 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 BLMS_DB;

Sostituisci quanto segue:

  • BLMS_DB: l'ID del database BigLake Metastore da creare

Terraform

Viene creato un database BigLake denominato "my_database" del tipo "HIVE" nel catalogo specificato da "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 la projects.locations.catalogs.databases.tables.create e specificare 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: BigLake Metastore ID tabella 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 saperne di più, consulta la documentazione del provider Terraform: Tavolo 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 Terraform E2E

Questo esempio GitHub fornisce un esempio E2E eseguibile che crea un "BigLake" Metastore Catalogo, Database e Tabella. 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');

BigLake Metastore è il metastore consigliato per l'esecuzione di query Tavoli BigLake Iceberg. Quando crei una tabella Iceberg in Spark, puoi scegliere di creare un link contemporaneamente alla tabella BigLake Iceberg.

Per creare una tabella Iceberg in Spark e crea automaticamente un BigLake Iceberg usa la seguente tabella 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 le 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, BigQuery le query utilizzano Connessione risorsa Cloud credenziali per accedere a BigLake Metastore. Se non specificato, BigQuery crea una tabella esterna standard anziché una Tabella BigLake.

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 seguenti sezioni descrivono come visualizzare le risorse in Metastore BigLake

Visualizza cataloghi

Per visualizzare tutti i database in un catalogo, utilizza projects.locations.catalogs.list e specificare il nome di un catalogo.

Per visualizzare le informazioni su un catalogo, utilizza 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 vedere le informazioni su un database, utilizza il metodo projects.locations.catalogs.databases.get e specificare 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 specificare 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 a allo stesso tempo, BigLake Metastore utilizza il blocco ottimistico. Per utilizzare il blocco ottimistico, devi prima ottenere la versione corrente (chiamato etag) utilizzando il metodo GetTable. Dopodiché potrai apportare modifiche alla tabella e utilizzare il metodo UpdateTable, passando il testo precedente etag recuperato. Se un altro job aggiorna la tabella dopo aver recuperato l'etag, il metodo UpdateTable ha esito negativo. 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 la projects.locations.catalogs.databases.tables.patch e specificare 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 per BLMS_TABLE. Deve trovarsi nello stesso set di dati di BLMS_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 la projects.locations.catalogs.delete e specificare 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 la projects.locations.catalogs.databases.delete e specificare il nome di un database. Questo metodo non elimina 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 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: usa la seguente affermazione:

DROP TABLE SPARK_CATALOG.BLMS_DB.BLMS_TABLE PURGE;