Crea conjuntos de datos federados de AWS Glue

En este documento, se describe cómo crear un conjunto de datos federado en BigQuery que esté vinculado a una base de datos existente en AWS Glue.

Un conjunto de datos federado es una conexión entre BigQuery y una fuente de datos externa a nivel del conjunto de datos. Las tablas de un conjunto de datos federado se propagan automáticamente a partir de las tablas de la fuente de datos externa correspondiente. Puedes consultar estas tablas directamente en BigQuery, pero no puedes realizar modificaciones, adiciones ni eliminaciones. Sin embargo, cualquier actualización que realices en la fuente de datos externa se reflejará automáticamente en BigQuery.

Antes de comenzar

Asegúrate de tener una conexión para acceder a los datos de AWS Glue.

  • Para crear o modificar una conexión, sigue las instrucciones en Conéctate a Amazon S3. Cuando crees esa conexión, incluye la siguiente declaración de política para AWS Glue en la política de administración de identidades y accesos de AWS para BigQuery. Incluye esta declaración, además de los otros permisos en el bucket de Amazon S3 en el que se almacenan los datos en tus tablas de AWS Glue.

    {
     "Effect": "Allow",
     "Action": [
       "glue:GetDatabase",
       "glue:GetTable",
       "glue:GetTables",
       "glue:GetPartitions"
     ],
     "Resource": [
       "arn:aws:glue:REGION:ACCOUNT_ID:catalog",
       "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME",
       "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*"
     ]
    }
    

    Reemplaza lo siguiente:

    • REGION: la región de AWS, por ejemplo, us-east-1.
    • ACCOUNT_ID:: el ID de 12 dígitos de la cuenta de AWS
    • DATABASE_NAME: el nombre de la base de datos de AWS Glue

Permisos necesarios

Para obtener los permisos que necesitas para crear un conjunto de datos federado, pídele a tu administrador que te otorgue el rol de IAM de administrador de BigQuery (roles/bigquery.admin). Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

Este rol predefinido contiene los permisos necesarios para crear un conjunto de datos federado. Para ver los permisos exactos que son necesarios, expande la sección Permisos requeridos:

Permisos necesarios

Se requieren los siguientes permisos para crear un conjunto de datos federado:

  • bigquery.datasets.create
  • bigquery.connections.use
  • bigquery.connections.delegate

También puedes obtener estos permisos con roles personalizados o con otros roles predefinidos.

Para obtener más información sobre los roles y permisos de IAM en BigQuery, consulta Introducción a IAM.

Crea un conjunto de datos federado

Para crear un conjunto de datos federado, haz lo siguiente:

Console

  1. Abre la página BigQuery en la consola de Google Cloud.

    Ir a la página de BigQuery

  2. En el panel Explorador, selecciona el proyecto en el que deseas crear el conjunto de datos.

  3. Expande la opción Acciones y haz clic en Crear conjunto de datos.

  4. En la página Crear conjunto de datos, haz lo siguiente:

    • En ID de conjunto de datos, ingresa un nombre único para el conjunto de datos.
    • En Tipo de ubicación, elige una ubicación de AWS para el conjunto de datos, como aws-us-east-1. Después de crear un conjunto de datos, la ubicación no se puede cambiar.
    • En External Dataset, haz lo siguiente:

      • Marca la casilla junto a Vínculo a un conjunto de datos externo.
      • En Tipo de conjunto de datos externo, selecciona AWS Glue.
      • Para la fuente externa, ingresa aws-glue:// seguido del nombre de recurso de Amazon (ARN) de la base de datos de AWS Glue, por ejemplo, aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
      • En ID de conexión, selecciona tu conexión de AWS.
    • Deja el resto de la configuración predeterminada como está.

  5. Haz clic en Crear conjunto de datos.

bq

En un entorno de línea de comandos, crea un conjunto de datos con el comando bq mk:

bq --location=LOCATION mk --dataset \
    --external_source aws-glue://AWS_GLUE_SOURCE \
    --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \
    DATASET_NAME

Reemplaza lo siguiente:

  • LOCATION: la ubicación del conjunto de datos nuevo en BigQuery, por ejemplo, aws-us-east-1. Después de crear un conjunto de datos, no puedes cambiar su ubicación. Puedes configurar un valor de ubicación predeterminado con el archivo .bigqueryrc.
  • AWS_GLUE_SOURCE: el nombre del recurso de Amazon (ARN) de la base de datos de AWS Glue, por ejemplo, arn:aws:glue:us-east-1:123456789:database/test_database.
  • PROJECT_ID: el ID del proyecto de BigQuery.
  • CONNECTION_LOCATION: la ubicación de tu conexión de AWS, por ejemplo, aws-us-east-1.
  • CONNECTION_NAME: nombre de tu conexión de AWS.
  • DATASET_NAME: el nombre de tu conjunto de datos nuevo en BigQuery. Para crear un conjunto de datos en un proyecto que no sea el predeterminado, agrega el ID del proyecto al nombre del conjunto de datos en el siguiente formato: PROJECT_ID:DATASET_NAME.

Terraform

Usa el recurso google_bigquery_dataset.

.

Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Si deseas obtener más información, consulta Configura la autenticación para bibliotecas cliente.

En el siguiente ejemplo, se crea un conjunto de datos federado de AWS Glue:

resource "google_bigquery_dataset" "dataset" {
  provider                    = google-beta
  dataset_id                  = "example_dataset"
  friendly_name               = "test"
  description                 = "This is a test description."
  location                    = "aws-us-east-1"

external_dataset_reference {
  external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database"
  connection      = "projects/project/locations/aws-us-east-1/connections/connection"
  }
}

Para aplicar tu configuración de Terraform en un proyecto de Google Cloud, completa los pasos de las siguientes secciones.

Prepara Cloud Shell

  1. Inicia Cloud Shell
  2. Establece el proyecto de Google Cloud predeterminado en el que deseas aplicar tus configuraciones de Terraform.

    Solo necesitas ejecutar este comando una vez por proyecto y puedes ejecutarlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

    Las variables de entorno se anulan si configuras valores explícitos en el archivo de configuración de Terraform.

Prepara el directorio

Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).

  1. En Cloud Shell, crea un directorio y un archivo nuevo dentro de ese directorio. El nombre del archivo debe tener la extensión .tf, por ejemplo, main.tf. En este instructivo, el archivo se denomina main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si sigues un instructivo, puedes copiar el código de muestra en cada sección o paso.

    Copia el código de muestra en el main.tf recién creado.

    De manera opcional, copia el código de GitHub. Esto se recomienda cuando el fragmento de Terraform es parte de una solución de extremo a extremo.

  3. Revisa y modifica los parámetros de muestra que se aplicarán a tu entorno.
  4. Guarda los cambios.
  5. Inicialice Terraform. Solo debes hacerlo una vez por directorio.
    terraform init

    De manera opcional, incluye la opción -upgrade para usar la última versión del proveedor de Google:

    terraform init -upgrade

Aplique los cambios

  1. Revisa la configuración y verifica que los recursos que creará o actualizará Terraform coincidan con tus expectativas:
    terraform plan

    Corrige la configuración según sea necesario.

  2. Para aplicar la configuración de Terraform, ejecuta el siguiente comando y, luego, escribe yes cuando se te solicite:
    terraform apply

    Espera hasta que Terraform muestre el mensaje “Apply complete!”.

  3. Abre tu proyecto de Google Cloud para ver los resultados. En la consola de Google Cloud, navega a tus recursos en la IU para asegurarte de que Terraform los haya creado o actualizado.

API

Llama al método datasets.insert con un recurso de conjunto de datos y un campo externalDatasetReference definidos para tu base de datos de AWS Glue.

Enumera tablas en un conjunto de datos federado

Para enumerar las tablas que están disponibles para las consultas en tu conjunto de datos federado, consulta Enumera los conjuntos de datos.

Obtén información de tablas

Para obtener información sobre las tablas en tu conjunto de datos federado, como los detalles del esquema, consulta Obtén información de la tabla.

Controla el acceso a las tablas

Para administrar el acceso a las tablas en tu conjunto de datos federado, consulta Controla el acceso a los recursos con IAM.

Consulta datos de AWS Glue

Consultar tablas en conjuntos de datos federados es lo mismo que consultar tablas en cualquier otro conjunto de datos de BigQuery.

Puedes consultar las tablas de AWS Glue en los siguientes formatos:

  • CSV (comprimido y sin comprimir)
  • JSON (comprimido y sin comprimir)
  • Parquet
  • ORC
  • Avro
  • Iceberg

Detalles de la asignación de tablas

Cada tabla a la que otorgas acceso en tu base de datos de AWS Glue aparece como una tabla equivalente en tu conjunto de datos de BigQuery.

Formato

El formato de cada tabla de BigQuery se determina con los siguientes campos de la tabla de AWS Glue correspondiente:

  • InputFormat (Table.StorageDescriptor.InputFormat)
  • OutputFormat (Table.StorageDescriptor.OutputFormat)
  • SerializationLib (Table.StorageDescriptor.SerdeInfo.SerializationLibrary)

La única excepción son las tablas de Iceberg, que usan el campo TableType (Table.Parameters["table_type"]).

Por ejemplo, una tabla de AWS Glue con los siguientes campos se asigna a una tabla ORC en BigQuery:

  • InputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
  • OutputFormat = "org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
  • SerializationLib = "org.apache.hadoop.hive.ql.io.orc.OrcSerde"

Ubicación

La ubicación de cada tabla de BigQuery se determina de la siguiente manera:

  • Tablas de Iceberg: el campo Table.Parameters["metadata_location"] en la tabla AWS Glue
  • Tablas no particionadas que no son de Iceberg: el campo Table.StorageDescriptor.Location en la tabla de AWS Glue
  • Tablas particionadas que no son de Iceberg: la API de AWS Glue GetPartitions

Otras propiedades

Además, algunas propiedades de tabla de AWS Glue se asignan automáticamente a opciones específicas de formato en BigQuery:

Formato SerializationLib Valor de la tabla de AWS Glue Opción de BigQuery
CSV LazySimpleSerDe Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] CsvOptions.fieldDelimiter
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV LazySimpleSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] CsvOptions.fieldDelimiter
CSV OpenCsvSerDe Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] CsvOptions.quote
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] CsvOptions.encoding
CSV OpenCsvSerDe Table.StorageDescriptor.Parameters["skip.header.line.count"] CsvOptions.skipLeadingRows
JSON Hive JsonSerDe Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

Crea una vista en un conjunto de datos federado

No puedes crear una vista en un conjunto de datos federado. Sin embargo, puedes crear una vista en un conjunto de datos estándar que se base en una tabla en un conjunto de datos federado. Para obtener más información, consulta Crea vistas.

Borra un conjunto de datos federado

Borrar un conjunto de datos federado es lo mismo que borrar cualquier otro conjunto de datos de BigQuery. Para obtener más información, consulta Borra conjuntos de datos.

Precios

Para obtener más información sobre los precios, consulta Precios de BigQuery Omni.

Limitaciones

  • Se aplican todas las limitaciones de BigQuery Omni.
  • No puedes agregar, borrar ni actualizar datos o metadatos en las tablas en un conjunto de datos federado de AWS Glue.
  • No puedes crear tablas ni vistas nuevas, ni vistas materializadas en un conjunto de datos federado de AWS Glue.
  • Solo puedes crear un conjunto de datos federado de AWS Glue a través de la consola de Google Cloud, Terraform, la herramienta de bq y la API. No se admiten las declaraciones del lenguaje de definición de datos (DDL).
  • Las vistas INFORMATION_SCHEMA no son compatibles.
  • No se admiten la seguridad a nivel de la fila, la seguridad a nivel de la columna, el almacenamiento en caché de metadatos y el enmascaramiento de datos.
  • La configuración a nivel del conjunto de datos relacionada con los valores predeterminados de creación de tablas no afecta a los conjuntos de datos federados porque no puedes crear tablas de forma manual.
  • El tipo de datos de Apache Hive UNION no es compatible con las tablas de Avro.

¿Qué sigue?