Utiliser BigLake Metastore avec le catalogue Iceberg REST
Le catalogue REST Apache Iceberg géré dans le métastore BigLake assure l'interopérabilité entre tous vos moteurs de requête en offrant une source unique de vérité pour toutes vos données Iceberg. Il permet aux moteurs de requête, tels qu'Apache Spark, de découvrir, de lire les métadonnées et de gérer les tables Iceberg de manière cohérente.
Les tables Iceberg que vous utilisez avec le catalogue Iceberg REST sont appelées tables BigLake pour Apache Iceberg (preview). Il s'agit de tables Iceberg que vous créez à partir de moteurs Open Source et que vous stockez dans Cloud Storage. Ils peuvent être lus par des moteurs Open Source ou BigQuery. Les écritures ne sont acceptées que depuis les moteurs Open Source. Dans ce document, nous appelons ces tables "tables BigLake Iceberg".
Avant de commencer
-
Make sure that billing is enabled for your Google Cloud project.
Découvrez comment vérifier si la facturation est activée sur un projet. -
Enable the BigLake API.
- Facultatif : Découvrez le fonctionnement de BigLake Metastore et pourquoi vous devriez l'utiliser.
Rôles requis
Pour obtenir les autorisations nécessaires pour utiliser le catalogue REST Iceberg dans le metastore BigLake, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet ou votre compte de service :
-
Administrateur BigLake (
roles/biglake.admin
) -
Administrateur de l'espace de stockage (
roles/storage.admin
)
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises via des rôles personnalisés ou d'autres rôles prédéfinis.
Limites
Le catalogue REST Iceberg est soumis aux limites suivantes :
- Les buckets multirégionaux, les buckets birégionaux et les buckets avec un emplacement de région personnalisé ne sont pas acceptés.
Configurer un moteur de requête avec le catalogue REST Iceberg
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()
Remplacez les éléments suivants :
CATALOG_NAME
: nom de votre catalogue Iceberg REST.APP_NAME
: nom de votre session Spark.STORAGE_URI
: URI du bucket Cloud Storage contenant vos tables BigLake Iceberg.TOKEN
: votre jeton d'authentification, qui est valide pendant une heure (par exemple,gcloud auth application-default print-access-token
).PROJECT_ID
: projet facturé pour l'utilisation du catalogue REST Iceberg, qui peut être différent du projet propriétaire du bucket Cloud Storage. Pour en savoir plus sur la configuration du projet lorsque vous utilisez une API REST, consultez Paramètres système.
Créer un espace de noms
spark.sql("CREATE NAMESPACE IF NOT EXISTS NAMESPACE_NAME;") spark.sql("USE NAMESPACE_NAME;")
Remplacez NAMESPACE_NAME
par le nom de votre espace de noms.
Créer une table
spark.sql("CREATE TABLE TABLE_NAME (id int, data string) USING ICEBERG;") spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
Remplacez les éléments suivants :
NAMESPACE_NAME
: nom de votre espace de nomsTABLE_NAME
: nom de votre table
Répertorier des tables
spark.sql("SHOW TABLES").show()
Insérer des données dans la table
L'exemple suivant insère des exemples de données dans la table :
spark.sql("INSERT INTO TABLE_NAME VALUES (1, \"first row\"), (2, \"second row\"), (3, \"third row\");")
Exécuter des requêtes sur une table
L'exemple suivant sélectionne toutes les données de la table :
spark.sql("SELECT * FROM TABLE_NAME;").show()
Modifier le schéma d'une table
L'exemple suivant ajoute une colonne à la table :
spark.sql("ALTER TABLE TABLE_NAME ADD COLUMNS ( desc string);") spark.sql("DESCRIBE NAMESPACE_NAME.TABLE_NAME").show()
Supprimer une table
L'exemple suivant supprime la table de l'espace de noms indiqué :
spark.sql("DROP TABLE TABLE_NAME;")
Tarifs
Pour en savoir plus sur les tarifs, consultez la page Tarifs de BigLake.
Étapes suivantes
- Découvrez comment gérer les ressources Iceberg avec BigLake Metastore.
- Découvrez les fonctionnalités supplémentaires de BigLake Metastore.