Utiliser un lakehouse multicloud

Lakehouse pour Apache Iceberg permet d'interroger des données à distance via une configuration Lakehouse multicloud. Une fois configuré, le système permet d'accéder aux données à l'aide du langage SQL standard dans BigQuery ou d'Apache Spark dans Managed Service pour Apache Spark.

Cette page vous explique comment interroger des données à distance après avoir configuré un Lakehouse multicloud.

Avant de commencer

Avant de pouvoir interroger vos données, vous devez effectuer les opérations suivantes :

  1. Configurez un Lakehouse multicloud pour AWS Glue ou Databricks Unity Catalog.
  2. Assurez-vous que votre catalogue distant contient des données.

Rôles requis

Pour obtenir les autorisations nécessaires pour interroger des données fédérées, demandez à votre administrateur de vous accorder les rôles IAM suivants sur votre projet :

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.

Interroger les données

Une fois la fédération configurée, vous pouvez interroger vos données à distance à l'aide du langage SQL standard dans BigQuery ou Apache Spark dans Managed Service pour Apache Spark.

Lakehouse gère la traduction des métadonnées et l'accès sécurisé aux données, ce qui vous permet de traiter les tables Apache Iceberg distantes comme si elles étaient locales à votre environnement Google Cloud .

Requête depuis BigQuery

Pour interroger des tables Apache Iceberg fédérées, utilisez le SQL BigQuery standard. Le chemin d'accès à la table suit une structure en quatre parties : project.federated_catalog.namespace.table. La mise en cache, la distribution d'identifiants et le routage du trafic CCI sont gérés automatiquement.

SELECT
  user_id,
  action,
  COUNT(*) as total_actions
FROM `PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME`
WHERE event_date >= '2026-04-01'
GROUP BY 1, 2;

Remplacez les éléments suivants :

  • PROJECT_ID : ID de votre projet Google Cloud .
  • FEDERATED_CATALOG_NAME : nom du catalogue fédéré.
  • NAMESPACE_NAME : espace de noms dans le catalogue.
  • TABLE_NAME : nom de la table
  • REGION : région Google Cloud . Par exemple, us-east4.

Vous pouvez également exécuter la requête à l'aide de l'outil de ligne de commande bq :

bq --location="REGION" --project_id="PROJECT_ID" query --use_legacy_sql=false \
  "SELECT * FROM \`PROJECT_ID.FEDERATED_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME\` LIMIT 10"

Requête depuis Managed Service pour Apache Spark

Vous pouvez lire les données Lakehouse multicloud directement à partir des clusters Managed Service pour Apache Spark sans avoir à gérer des identifiants AWS ni des connecteurs S3 distincts. Spark se connecte directement à Lakehouse à l'aide de l'interface de catalogue REST Apache Iceberg standard, au lieu d'utiliser l'API BigQuery Storage Read.

En configurant votre job Managed Service pour Apache Spark avec le point de terminaison REST Lakehouse, Lakehouse fournit automatiquement des identifiants S3 temporaires et limités à Spark via X-Iceberg-Access-Delegation=vended-credentials. Cela permet à Spark de lire les données sous-jacentes de manière sécurisée tout en respectant la configuration de votre catalogue.

Pour configurer votre job Managed Service pour Apache Spark avec le point de terminaison REST Lakehouse :

  1. Configurez le job Spark.

    Dans cette commande, transmettez les propriétés du catalogue REST Apache Iceberg lorsque vous envoyez votre job Spark. Cela mappe votre catalogue Lakehouse fédéré à un nom de catalogue Spark local (par exemple, my_catalog) :

    gcloud dataproc jobs submit pyspark PYSPARK_SCRIPT_PATH \
      --cluster="CLUSTER_NAME" \
      --region="REGION" \
      --properties="spark.sql.catalog.SPARK_CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\
    spark.sql.catalog.SPARK_CATALOG_NAME.type=rest,\
    spark.sql.catalog.SPARK_CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\
    spark.sql.catalog.SPARK_CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\
    spark.sql.catalog.SPARK_CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\
    spark.sql.catalog.SPARK_CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\
    spark.sql.catalog.SPARK_CATALOG_NAME.rest-metrics-reporting-enabled=false,\
    spark.sql.catalog.SPARK_CATALOG_NAME.header.x-goog-user-project=PROJECT_ID"
  2. Interrogez les données dans PySpark.

    Cette commande utilise Spark pour lire directement à partir du catalogue Lakehouse, puis exécute une transformation standard.

    df = spark.table("SPARK_CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME")
    df.filter(df.action == "purchase").show()

    Remplacez les éléments suivants :

    • PYSPARK_SCRIPT_PATH : chemin d'accès à votre job PySpark.
    • CLUSTER_NAME : nom de votre cluster Managed Service pour Apache Spark.
    • REGION : région Google Cloud . Par exemple, us-east4.
    • PROJECT_ID : ID de votre projet Google Cloud .
    • SPARK_CATALOG_NAME : nom que vous souhaitez utiliser pour le catalogue Spark.
    • FEDERATED_CATALOG_NAME : nom du catalogue fédéré.
    • NAMESPACE_NAME : espace de noms dans le catalogue.
    • TABLE_NAME : nom de la table

Étapes suivantes