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 o Apache Spark en Managed Service para Apache Spark.

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 Lakehouse entre nubes para AWS Glue o Databricks Unity Catalog.
  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=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"

    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.

¿Qué sigue?