Lakehouse para Apache Iceberg admite la consulta de datos remotos a través de una configuración de Lakehouse sin bordes. Una vez configurado, el sistema admite el acceso a los datos con SQL estándar en BigQuery, la versión de código abierto de Apache Spark o Managed Service para Apache Spark. Además de las consultas analíticas, puedes usar tus datos federados para obtener estadísticas y gobernanza basadas en IA:
- Conversational Analytics: Crea agentes especializados basados en tus fuentes de datos exactas, incluidas las tablas entre nubes, para analizar datos en las nubes desde una sola conversación.
- **Dataplex Catalog**: Usa las funciones de Knowledge Catalog para la generación de perfiles de datos y las estadísticas con fuentes de datos federadas.
Para obtener estadísticas más detalladas, puedes crear agentes especializados basados en tus fuentes de datos, desde proyectos, conjuntos de datos y tablas hasta vistas, gráficos y funciones definidas por el usuario. Debido a que tus datos rara vez se encuentran en un solo lugar, Conversational Analytics va más allá de las tablas estándar de BigQuery a las tablas de Apache Iceberg administradas por Lakehouse y las fuentes de Lakehouse sin bordes, como Databricks Unity, AWS Glue, SAP y Salesforce. Esto te permite desglosar los silos de datos y analizar datos en las nubes desde una sola conversación.
En esta página, se muestra cómo consultar datos remotos después de configurar un Lakehouse sin bordes.
Antes de comenzar
Antes de poder consultar tus datos, debes completar lo siguiente:
- Configura Lakehouse sin bordes para AWS Glue, Databricks Unity Catalog, o Snowflake.
- Asegúrate de tener datos en tu catálogo remoto.
Roles obligatorios
Para obtener los permisos que necesitas para consultar datos federados, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:
-
Consultar datos en BigQuery:
Visualizador de datos de BigQuery (
roles/bigquery.dataViewer) -
Ejecutar trabajos de BigQuery:
Usuario de trabajo de BigQuery (
roles/bigquery.jobUser) -
Descubrir y leer metadatos de tablas en catálogos de Lakehouse:
Visualizador de BigLake (
roles/biglake.viewer)
Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.
También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.
Consulta los datos
Después de configurar la federación, puedes consultar tus datos remotos con SQL estándar en BigQuery o Apache Spark en Managed Service para Apache Spark.
Lakehouse controla la traducción de metadatos y el acceso seguro a los datos, lo que te permite tratar las tablas remotas de Apache Iceberg como si fueran locales para tu Google Cloud entorno.
Consulta desde BigQuery
Para consultar tablas federadas de Apache Iceberg, usa SQL estándar de BigQuery. La ruta de acceso de la tabla sigue una estructura de 4 partes: project.federated_catalog.namespace.table. El almacenamiento en caché, la venta de credenciales y el enrutamiento de tránsito de CCI se controlan automáticamente.
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;
Reemplaza lo siguiente:
PROJECT_ID: Es el ID del Google Cloud proyecto de.FEDERATED_CATALOG_NAME: Es el nombre del catálogo federado.NAMESPACE_NAME: Es el espacio de nombres dentro del catálogo.TABLE_NAME: Es el nombre de la tabla.REGION: la Google Cloud región. Por ejemplo,us-east4.
También puedes ejecutar la consulta con la herramienta de línea de comandos 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"
Consulta desde Managed Service para Apache Spark
Envía una carga de trabajo por lotes de PySpark a Managed Service para Apache Spark con
la venta de credenciales habilitada con
X-Iceberg-Access-Delegation=vended-credentials. Spark usará las credenciales vendidas de alcance de corta duración para conectarse a S3 de forma segura, todo sin necesidad de administrar credenciales de AWS separadas ni conectores de S3.
Habilita la conectividad saliente para Managed Service para Apache Spark.
Managed Service para Apache Spark no puede conectarse a AWS S3 con su configuración de red predeterminada network configuration. Debes aprovisionar un Cloud Router y 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
Reemplaza lo siguiente:
NETWORK_NAME: Es la red para la carga de trabajo por lotes de Managed Service para Apache Spark (por ejemplo,default).REGION: Es la región para la carga de trabajo por lotes de Managed Service para Apache Spark.
Crea un archivo de aplicación de PySpark y ejecuta el trabajo de 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)
Sube este archivo a Cloud Storage en
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.catalog.CATALOG_NAME.rest-metrics-reporting-enabled=false,\ spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions"
Reemplaza lo siguiente:
NAMESPACE_NAME: Es el espacio de nombres en el catálogo federado.TABLE_NAME: Es el nombre de la tabla en el catálogo federado.CATALOG_NAME: Es un nombre para el catálogo local de Spark (por ejemplo,my_catalog).PYSPARK_FILE: Es la ruta de acceso de Cloud Storagegs://a tu archivo de aplicación de PySpark.REGION: Es la región para la carga de trabajo por lotes de Managed Service para Apache Spark.RUNTIME_VERSION: Es la versión del entorno de ejecución de Managed Service para Apache Spark, por ejemplo,2.3.PROJECT_ID: Es el proyecto que se factura por usar el extremo del catálogo REST de Apache Iceberg.FEDERATED_CATALOG_NAME: Es el nombre del catálogo federado.IO_IMPL: Es la implementación de FileIO que coincide con tu almacenamiento subyacente.
Parámetros de configuración de Spark
En la siguiente tabla, se enumeran los parámetros comunes necesarios para todas las conexiones:
Parámetro Descripción spark.sql.defaultCatalogEs el nombre del catálogo predeterminado (por ejemplo, CATALOG_NAME).spark.sql.catalog.CATALOG_NAMEEs la clase de implementación del catálogo. Se define en org.apache.iceberg.spark.SparkCatalog.spark.sql.catalog.CATALOG_NAME.typeEs el tipo de backend del catálogo. Se define en restpara el catálogo REST de Iceberg.spark.sql.catalog.CATALOG_NAME.uriEs el URI del extremo del catálogo REST. Se define en https://biglake.googleapis.com/iceberg/v1/restcatalog.spark.sql.catalog.CATALOG_NAME.warehouseEs la ruta de acceso de la ubicación del almacén para el catálogo federado. Se define en bl://projects/PROJECT_ID/catalogs/FEDERATED_CATALOG_NAME.spark.sql.catalog.CATALOG_NAME.header.x-goog-user-projectEs el ID del proyecto de Google Cloud que se usa para la facturación y la atribución de cuotas. Se define en PROJECT_ID.spark.sql.extensionsSon las extensiones de la sesión de Spark para la sintaxis y las funciones de Iceberg SQL. Se define en org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions.En la siguiente tabla, se enumeran los parámetros de autenticación:
Parámetro Descripción spark.sql.catalog.CATALOG_NAME.rest.auth.typeEs la clase de administrador de autenticación personalizada. Se define en org.apache.iceberg.gcp.auth.GoogleAuthManagerpara la autenticación de flujo de OAuth.spark.sql.catalog.CATALOG_NAME.oauth2-server-uriEs el URI del extremo del servidor de tokens de OAuth2. Se define en https://oauth2.googleapis.com/tokenpara la autenticación con token de acceso personal (PAT).spark.sql.catalog.CATALOG_NAME.tokenEs el token de portador o el token de acceso personal (PAT). Por lo general, se define en $(gcloud auth application-default print-access-token)para la autenticación con PAT.En la siguiente tabla, se enumeran los parámetros únicos según tu proveedor de almacenamiento (
IO_IMPL):Almacenamiento spark.sql.catalog.CATALOG_NAME.io-implNotas Amazon S3 org.apache.iceberg.aws.s3.S3FileIORequiere la venta de credenciales ( X-Iceberg-Access-Delegation=vended-credentials) si está habilitada.
Parámetro adicional:spark.sql.catalog.CATALOG_NAME.s3.region(para obtener una lista de regiones, consulta Extremos y cuotas de Amazon S3).Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIOParámetro adicional: spark.sql.catalog.CATALOG_NAME.gcs.oauth2.refresh-credentials-endpoint=https://oauth2.googleapis.com/token.Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIONo se requieren parámetros de almacenamiento adicionales. En Snowflake, es posible que encuentres problemas cuando consultes columnas
STRING, ya que se optimizan automáticamente para el almacenamiento. Puedes resolver este problema de dos maneras:- Opción 1: Inhabilita la vectorización en Spark: Agrega las siguientes propiedades de configuración de Spark a la marca
--properties: spark.sql.iceberg.vectorization.enabled=falsespark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=falseOpción 2: Cambia la política de serialización en Snowflake: Cambia la política de serialización de almacenamiento a
COMPATIBLEpara la tabla en Snowflake.