Utilizzare il metastore BigLake con il catalogo REST Iceberg

Il catalogo REST Apache Iceberg gestito in BigLake Metastore crea l'interoperabilità tra tutti i motori di query offrendo un'unica fonte di verità per tutti i tuoi dati Iceberg. Consente ai motori di query, come Apache Spark, di scoprire, leggere i metadati e gestire le tabelle Iceberg in modo coerente.

Le tabelle Iceberg che utilizzi con il catalogo REST Iceberg sono chiamate tabelle BigLake per Apache Iceberg (anteprima). Si tratta di tabelle Iceberg che crei da motori open source e memorizzi in Cloud Storage. Possono essere letti da motori open source o BigQuery. Le scritture sono supportate solo dai motori open source. In questo documento, ci riferiamo a queste tabelle come tabelle BigLake Iceberg.

Prima di iniziare

  1. Make sure that billing is enabled for your Google Cloud project.

    Scopri come verificare se la fatturazione è abilitata per un progetto.
  2. Enable the BigLake API.

    Enable the API

  3. (Facoltativo) Scopri come funziona il metastore BigLake e perché dovresti utilizzarlo.

Ruoli obbligatori

Per ottenere le autorizzazioni necessarie per utilizzare il catalogo Iceberg REST in BigLake Metastore, chiedi all'amministratore di concederti i seguenti ruoli IAM per il progetto oaccount di servizioount:

Per saperne di più sulla concessione dei ruoli, consulta Gestisci l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Limitazioni

Il catalogo Iceberg REST è soggetto alle seguenti limitazioni:

Configura un motore di query con il catalogo Iceberg REST

import google.auth
from google.auth.transport.requests import Request
from google.oauth2 import service_account
import pyspark
from pyspark.context import SparkContext
from pyspark.sql import SparkSession

catalog_name = "CATALOG_NAME"
spark = SparkSession.builder.appName("APP_NAME") \
    .config("spark.sql.defaultCatalog", catalog_name) \
    .config(f"spark.sql.catalog.{catalog_name}", "org.apache.iceberg.spark.SparkCatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.type", "rest") \
    .config(f"spark.sql.catalog.{catalog_name}.uri","https://biglake.googleapis.com/iceberg/v1beta/restcatalog") \
    .config(f"spark.sql.catalog.{catalog_name}.warehouse", "gs://STORAGE_URI") \
    .config(f"spark.sql.catalog.{catalog_name}.token", "TOKEN") \
    .config(f"spark.sql.catalog.{catalog_name}.oauth2-server-uri", "https://oauth2.googleapis.com/token") \
    .config(f"spark.sql.catalog.{catalog_name}.header.x-goog-user-project", "PROJECT_ID") \
    .config("spark.sql.extensions","org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions") \
    .config(f"spark.sql.catalog.{catalog_name}.io-impl","org.apache.iceberg.hadoop.HadoopFileIO") \
    .config(f"spark.sql.catalog.{catalog_name}.rest-metrics-reporting-enabled", "false") \
    .getOrCreate()

Sostituisci quanto segue:

  • CATALOG_NAME: un nome per il catalogo Iceberg REST.
  • APP_NAME: un nome per la sessione Spark.
  • STORAGE_URI: l'URI del bucket Cloud Storage che contiene le tabelle BigLake Iceberg.
  • TOKEN: il token di autenticazione, valido per un'ora, ad esempio gcloud auth application-default print-access-token.
  • PROJECT_ID: il progetto a cui viene addebitato l'utilizzo del catalogo Iceberg REST, che potrebbe essere diverso dal progetto proprietario del bucket Cloud Storage. Per informazioni dettagliate sulla configurazione del progetto quando utilizzi un'API REST, vedi Parametri di sistema.

Crea uno spazio dei nomi

spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;")

spark.sql("USE NAMESPACE_NAME;")

Sostituisci NAMESPACE_NAME con un nome per lo spazio dei nomi.

Creare una tabella

spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;")

spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Sostituisci quanto segue:

  • NAMESPACE_NAME: il nome del tuo spazio dei nomi
  • TABLE_NAME: un nome per la tabella

Elenca tabelle

spark.sql("SHOW TABLES").show()

Inserire dati nella tabella

L'esempio seguente inserisce dati di esempio nella tabella:

spark.sql("INSERT INTO TABLE_NAME VALUES (1, \"first row\"), (2, \"second row\"), (3, \"third row\");")

Eseguire una query su una tabella.

L'esempio seguente seleziona tutti i dati della tabella:

spark.sql("SELECT * FROM TABLE_NAME;").show()

Modificare uno schema della tabella

L'esempio seguente aggiunge una colonna alla tabella:

spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);")
spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()

Eliminazione di una tabella

L'esempio seguente elimina la tabella dallo spazio dei nomi specificato:

spark.sql("DROP TABLE TABLE_NAME;")

Prezzi

Per i dettagli sui prezzi, consulta Prezzi di BigLake.

Passaggi successivi