Lakehouse pour Apache Iceberg permet d'interroger des données à distance via une configuration Lakehouse multicloud. Une fois configuré, le système prend en charge l'accès aux données à l'aide de SQL standard dans BigQuery ou Apache Spark dans Managed Service pour Apache Spark.
Cette page 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 :
- Configurez un Lakehouse multicloud pour AWS Glue ou Databricks Unity Catalog.
- Assurez-vous que votre catalogue à distance 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 :
-
Interroger des données dans BigQuery:
Lecteur de données BigQuery (
roles/bigquery.dataViewer) -
Exécuter des jobs BigQuery:
Utilisateur de job BigQuery (
roles/bigquery.jobUser) -
Découvrir et lire les métadonnées de table dans les catalogues Lakehouse:
Lecteur BigLake (
roles/biglake.viewer)
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 de SQL standard dans BigQuery ou Apache Spark dans Managed Service for 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 à distance comme si elles étaient locales à votre Google Cloud environnement.
Interroger à partir de BigQuery
Pour interroger des tables Apache Iceberg fédérées, utilisez le langage 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 des identifiants et le routage du transit 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 Google Cloud projet.FEDERATED_CATALOG_NAME: nom du catalogue fédéré.NAMESPACE_NAME: espace de noms dans le catalogue.TABLE_NAME: nom de la table.REGION: la Google Cloud région. 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"
Interroger à partir de Managed Service pour Apache Spark
Envoyez une charge de travail par lot PySpark à Managed Service pour Apache Spark avec
la distribution des identifiants activée à l'aide de
X-Iceberg-Access-Delegation=vended-credentials. Spark utilisera les identifiants distribués à courte durée de vie pour se connecter à S3 de manière sécurisée, sans avoir à gérer des identifiants AWS ni des connecteurs S3 distincts.
Activez la connectivité sortante pour Managed Service pour Apache Spark.
Managed Service pour Apache Spark ne peut pas se connecter à AWS S3 avec sa configuration réseau par défaut network configuration. Vous devez provisionner un Cloud Router et Cloud NAT.
gcloud compute routers create lakehouse-router \ --network=NETWORK_NAME \ --region=REGION gcloud compute routers nats create lakehouse-nat \ --router=lakehouse-router \ --auto-allocate-nat-external-ips \ --nat-all-subnet-ip-ranges \ --region=REGION
Remplacez les éléments suivants :
NETWORK_NAME: réseau de la charge de travail par lot Managed Service pour Apache Spark (par exemple,default).REGION: région de la charge de travail par lot Managed Service pour Apache Spark.
Créez un fichier d'application PySpark et exécutez le job PySpark.
from pyspark.sql import SparkSession spark = SparkSession.builder.appName("CATALOG_NAME").getOrCreate() df = spark.table("CATALOG_NAME.NAMESPACE_NAME.TABLE_NAME") df.show(10, truncate=False)
Importez-le dans Cloud Storage à l'adresse PYSPARK_FILE.
gcloud dataproc batches submit pyspark PYSPARK_FILE \ --project=PROJECT_ID \ --region=REGION \ --version=RUNTIME_VERSION \ --properties="\ spark.sql.defaultCatalog=CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME=org.apache.iceberg.spark.SparkCatalog,\ spark.sql.catalog.CATALOG_NAME.type=rest,\ spark.sql.catalog.CATALOG_NAME.uri=https://biglake.googleapis.com/iceberg/v1/restcatalog,\ spark.sql.catalog.CATALOG_NAME.warehouse=bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME,\ spark.sql.catalog.CATALOG_NAME.header.x-goog-user-project=PROJECT_ID,\ spark.sql.catalog.CATALOG_NAME.rest.auth.type=org.apache.iceberg.gcp.auth.GoogleAuthManager,\ spark.sql.catalog.CATALOG_NAME.io-impl=org.apache.iceberg.aws.s3.S3FileIO,\ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ spark.sql.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
Remplacez les éléments suivants :
NAMESPACE_NAME: espace de noms dans le catalogue fédéré.TABLE_NAME: nom de la table dans le catalogue fédéré.CATALOG_NAME: nom du catalogue Spark local (par exemple,my_catalog).PYSPARK_FILE: chemin d'accèsgs://Cloud Storage vers votre fichier d'application PySpark.REGION: région de la charge de travail par lot Managed Service pour Apache Spark.RUNTIME_VERSION: version d'exécution de Managed Service pour Apache Spark, par exemple2.3.PROJECT_ID: projet facturé pour l'utilisation du point de terminaison du catalogue REST Apache Iceberg.FEDERATED_CATALOG_NAME: nom du catalogue fédéré.