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
-
Make sure that billing is enabled for your Google Cloud project.
Scopri come verificare se la fatturazione è abilitata per un progetto. -
Enable the BigLake API.
- (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:
-
BigLake Admin (
roles/biglake.admin
) -
Amministratore spazio di archiviazione (
roles/storage.admin
)
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:
- Non sono supportati i bucket multiregionali, i bucket a due regioni e i bucket con posizionamento personalizzato delle regioni.
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 esempiogcloud 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 nomiTABLE_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
- Scopri di più sulla gestione delle risorse Iceberg con BigLake Metastore.
- Scopri di più sulle funzionalità aggiuntive del metastore BigLake.