Après avoir configuré l'accès aux données multicloud, vous pouvez interroger des données à distance provenant de plusieurs sources. Cette fonctionnalité de lakehouse sans frontières vous permet d'accéder aux données à l'aide du SQL standard dans BigQuery, de la version Open Source d'Apache Spark ou de Managed Service pour Apache Spark. En plus des requêtes analytiques, vous pouvez utiliser vos données fédérées pour obtenir des insights et une gouvernance basés sur l'IA :
- Conversational Analytics : Créez des agents spécialisés basés sur vos sources de données exactes, y compris des tables fédérées, pour analyser les données dans les clouds à partir d'une seule conversation.
- Catalogue Dataplex : utilisez les fonctionnalités de Knowledge Catalog pour le profilage et les insights sur les données avec des sources de données fédérées.
Pour obtenir des insights plus approfondis, vous pouvez créer des agents spécialisés basés sur vos sources de données, qu'il s'agisse de projets, d'ensembles de données et de tables, ou de vues, de graphiques et de fonctions définies par l'utilisateur. Vos données étant rarement stockées à un seul endroit, l'analyse conversationnelle va au-delà des tables BigQuery Standard pour atteindre les tables Apache Iceberg gérées par Lakehouse et les sources Lakehouse telles que Databricks Unity, AWS Glue, SAP et Salesforce. Cela vous permet de décloisonner les données et de les analyser dans différents clouds à partir d'une seule conversation.
Cette page vous explique comment interroger des données à distance après avoir configuré l'accès aux données multicloud.
Avant de commencer
Avant de pouvoir interroger vos données, vous devez effectuer les opérations suivantes :
- Assurez-vous que votre catalogue distant contient des données.
- Configurez une connexion multicloud pour AWS Glue, Databricks Unity Catalog, Snowflake Horizon Catalog, Workday Data Lake ou SAP Business Data Cloud.
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 interroger des données dans BigQuery : Lecteur de données BigQuery (
roles/bigquery.dataViewer) -
Pour exécuter des jobs BigQuery : Utilisateur de job BigQuery (
roles/bigquery.jobUser) -
Découvrez et lisez les métadonnées des tables 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 du langage SQL standard dans BigQuery ou Apache Spark dans Managed Service pour Apache Spark.
Le 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 tableREGION: 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
Envoyez une charge de travail par lot PySpark à Managed Service pour Apache Spark avec l'émission d'identifiants activée à l'aide de X-Iceberg-Access-Delegation=vended-credentials. Spark utilisera les identifiants vendus à courte durée et à portée limitée 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. Vous devez provisionner un routeur 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 pour 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=IO_IMPL,\ spark.sql.catalog.CATALOG_NAME.header.X-Iceberg-Access-Delegation=vended-credentials,\ 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 à 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 exemple,2.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é.IO_IMPL: implémentation FileIO correspondant à votre stockage sous-jacent.
Paramètres de configuration Spark
Le tableau suivant répertorie les paramètres courants requis pour toutes les connexions :
Paramètre Description spark.sql.defaultCatalogNom du catalogue par défaut (par exemple, CATALOG_NAME).spark.sql.catalog.CATALOG_NAMEClasse d'implémentation du catalogue. Variable définie sur org.apache.iceberg.spark.SparkCatalog.spark.sql.catalog.CATALOG_NAME.typeType de backend du catalogue. Définissez la valeur sur restpour le catalogue REST Iceberg.spark.sql.catalog.CATALOG_NAME.uriURI du point de terminaison du catalogue REST. Variable définie sur https://biglake.googleapis.com/iceberg/v1/restcatalog.spark.sql.catalog.CATALOG_NAME.warehouseChemin d'accès à l'emplacement de l'entrepôt pour le catalogue fédéré. Variable définie sur bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME.spark.sql.catalog.CATALOG_NAME.header.x-goog-user-projectID du projet Google Cloud utilisé pour la facturation et l'attribution des quotas. Variable définie sur PROJECT_ID.spark.sql.extensionsExtensions de session Spark pour la syntaxe et les fonctionnalités Iceberg SQL. Variable définie sur org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions.Le tableau suivant liste les paramètres d'authentification :
Paramètre Description spark.sql.catalog.CATALOG_NAME.rest.auth.typeClasse du gestionnaire d'authentification personnalisée. Définissez la valeur sur org.apache.iceberg.gcp.auth.GoogleAuthManagerpour l'authentification du flux OAuth.spark.sql.catalog.CATALOG_NAME.oauth2-server-uriURI du point de terminaison du serveur de jetons OAuth2. Définissez la valeur sur https://oauth2.googleapis.com/tokenpour l'authentification par jeton d'accès personnel (PAT).spark.sql.catalog.CATALOG_NAME.tokenJeton de support ou jeton d'accès personnel (PAT). Généralement défini sur $(gcloud auth application-default print-access-token)pour l'authentification par jeton d'accès personnel.Le tableau suivant liste les paramètres uniques en fonction de votre fournisseur de stockage (
IO_IMPL) :Stockage spark.sql.catalog.CATALOG_NAME.io-implRemarques Amazon S3 org.apache.iceberg.aws.s3.S3FileIONécessite la distribution d'identifiants ( X-Iceberg-Access-Delegation=vended-credentials) si elle est activée.
Paramètre supplémentaire :spark.sql.catalog.CATALOG_NAME.s3.region(pour obtenir la liste des régions, consultez Points de terminaison et quotas Amazon S3).Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIOParamètre supplémentaire : spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token.Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIOAucun paramètre de stockage supplémentaire n'est requis. Pour Snowflake, vous pouvez rencontrer des problèmes lors de l'interrogation des colonnes
STRING, car elles sont automatiquement optimisées pour le stockage. Pour résoudre ce problème, vous avez deux possibilités :- Option 1 : Désactiver la vectorisation dans Spark : ajoutez les propriétés de configuration Spark suivantes à l'indicateur
--properties: spark.sql.iceberg.vectorization.enabled=falsespark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=falseOption 2 : Modifier la règle de sérialisation dans Snowflake : définissez la règle de sérialisation du stockage sur
COMPATIBLEpour la table dans Snowflake.
Surveiller l'utilisation du cache et les économies de coûts de sortie
La mise en cache Lakehouse est activée automatiquement pour toutes les requêtes multicloud. Lorsqu'une requête s'exécute, Lakehouse met automatiquement en cache les blocs de données en local dans l'espace de stockage Google Cloud . Les requêtes suivantes ciblant les mêmes blocs de données sont lues directement à partir du cache local au lieu de récupérer à nouveau les données à partir du cloud distant.
Pour vérifier les succès de cache et mesurer les économies réalisées sur les coûts de sortie, inspectez les détails du job dans la console BigQuery ou récupérez les statistiques du job de requête (JobStatistics2) à l'aide de l'API BigQuery ou de la CLI bq :
bq show --format=prettyjson --j JOB_ID
Dans le résultat JSON sous statistics.query.objectStorageStats (ou object_storage_stats dans l'API proto), les statistiques du job renvoient une liste avec une entrée pour chaque fournisseur de services cloud consulté lors de l'exécution. Chaque entrée contient les champs suivants :
cloudProvider(cloud_provider) : fournisseur de services cloud distant hébergeant le stockage d'objets (par exemple,AWSouAZURE).cacheBytesRead(cache_bytes_read) : nombre total d'octets lus à partir du cache Google Cloud local, ce qui évite une lecture du stockage d'objets à distance.objectStorageBytesRead(object_storage_bytes_read) : nombre total d'octets lus directement à partir du stockage d'objets du fournisseur de cloud distant.
Pour en savoir plus sur les concepts de mise en cache et les considérations relatives à la résidence des données, consultez Mise en cache intelligente.