Usa un Lakehouse entre nubes

Lakehouse para Apache Iceberg admite la consulta de datos remotos a través de una configuración de Lakehouse en varias nubes. 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 diferentes nubes desde una sola conversación.
  • Dataplex Catalog: Usa las funciones de Knowledge Catalog para generar perfiles de datos y 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. Dado que tus datos rara vez se encuentran en un solo lugar, el análisis conversacional va más allá de las tablas estándar de BigQuery y llega a las tablas de Apache Iceberg administradas por Lakehouse y a las fuentes de Lakehouse en varias nubes, como Databricks Unity, AWS Glue, SAP y Salesforce. Esto te permite derribar los silos de datos y analizarlos en todas las nubes desde una sola conversación.

En esta página, se muestra cómo consultar datos remotos después de configurar un Lakehouse entre nubes.

Antes de comenzar

Antes de consultar tus datos, debes completar los siguientes pasos:

  1. Configura un Lakehouse entre nubes 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 entorno de Google Cloud .

Consulta desde BigQuery

Para consultar tablas federadas de Apache Iceberg, usa SQL estándar de BigQuery. La ruta 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 proyecto de Google Cloud .
  • 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 distribución de credenciales habilitada con X-Iceberg-Access-Delegation=vended-credentials. Spark usará las credenciales vendidas con alcance y de corta duración para conectarse a S3 de forma segura, todo sin necesidad de administrar conectores de S3 o credenciales de AWS independientes.

  1. Habilita la conectividad saliente para Managed Service para Apache Spark.

    Managed Service para Apache Spark no se puede conectar a AWS S3 con su configuración de red predeterminada. 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 de 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 de 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 al que se le factura el uso del extremo del catálogo de 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 que se requieren para todas las conexiones:

    Parámetro Descripción
    spark.sql.defaultCatalog Es el nombre predeterminado del catálogo.
    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.extensions org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

    En la siguiente tabla, se enumeran los parámetros únicos según tu proveedor de almacenamiento (<var>IO_IMPL</var>):

    Almacenamiento spark.sql.catalog.CATALOG_NAME.io-impl Notas
    Amazon S3 org.apache.iceberg.aws.s3.S3FileIO Requiere X-Iceberg-Access-Delegation=vended-credentials si está habilitado.
    Google Cloud Storage org.apache.iceberg.gcp.gcs.GCSFileIO
    Azure Blob Storage org.apache.iceberg.azure.adlsv2.ADLSFileIO

    En el caso de Snowflake, es posible que tengas 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?