Usa Lakehouse sin fronteras

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:

  1. Configura Lakehouse sin bordes para AWS Glue, Databricks Unity Catalog, o Snowflake.
  2. 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:

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.

  1. 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.
  2. 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 Storage gs:// 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.defaultCatalog Es el nombre del catálogo predeterminado (por ejemplo, CATALOG_NAME).
    spark.sql.catalog.CATALOG_NAME Es la clase de implementación del catálogo. Se define en org.apache.iceberg.spark.SparkCatalog.
    spark.sql.catalog.CATALOG_NAME.type Es el tipo de backend del catálogo. Se define en rest para el catálogo REST de Iceberg.
    spark.sql.catalog.CATALOG_NAME.uri Es el URI del extremo del catálogo REST. Se define en https://biglake.googleapis.com/iceberg/v1/restcatalog.
    spark.sql.catalog.CATALOG_NAME.warehouse Es 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-project Es 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.extensions Son 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.type Es la clase de administrador de autenticación personalizada. Se define en org.apache.iceberg.gcp.auth.GoogleAuthManager para la autenticación de flujo de OAuth.
    spark.sql.catalog.CATALOG_NAME.oauth2-server-uri Es el URI del extremo del servidor de tokens de OAuth2. Se define en https://oauth2.googleapis.com/token para la autenticación con token de acceso personal (PAT).
    spark.sql.catalog.CATALOG_NAME.token Es 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-impl Notas
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO Requiere 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.GCSFileIO Pará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.ADLSFileIO No 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=false
    • spark.sql.catalog.CATALOG_NAME.table-override.read.parquet.vectorization.enabled=false

    • Opción 2: Cambia la política de serialización en Snowflake: Cambia la política de serialización de almacenamiento a COMPATIBLE para la tabla en Snowflake.

¿Qué sigue?