Crear 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 de AWS Glue.

Un conjunto de datos federado es una conexión entre BigQuery y una fuente de datos externa a nivel de conjunto de datos. Las tablas de un conjunto de datos federado se rellenan automáticamente con las tablas de la fuente de datos externa correspondiente. Puede consultar estas tablas directamente en BigQuery, pero no puede modificarlas, añadirles datos ni eliminarlas. Sin embargo, los cambios que hagas en la fuente de datos externa se reflejarán automáticamente en BigQuery.

Antes de empezar

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

  • Para crear o modificar una conexión, sigue las instrucciones que se indican en el artículo sobre cómo conectarse a Amazon S3. Cuando crees esa conexión, incluye la siguiente declaración de política para AWS Glue en tu política de gestión de identidades y accesos de AWS para BigQuery. Incluye esta instrucción además de los otros permisos en el segmento de Amazon S3 donde se almacenan los datos de 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/*"
     ]
    }

    Haz los cambios siguientes:

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

Permisos obligatorios

Para obtener los permisos que necesitas para crear un conjunto de datos federado, pide a tu administrador que te asigne el rol de gestión de identidades y accesos Administrador de BigQuery (roles/bigquery.admin). Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

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

Permisos obligatorios

Para crear un conjunto de datos federado, se necesitan los siguientes permisos:

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

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

Para obtener más información sobre los roles y permisos de gestión de identidades y accesos en BigQuery, consulta la introducción a la gestión de identidades y accesos.

Crear un conjunto de datos federado

Para crear un conjunto de datos federado, sigue estos pasos:

Consola

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

    Ir a la página de BigQuery

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

  3. Abre 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 del conjunto de datos, introduce 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. Una vez creado el conjunto de datos, la ubicación no se puede cambiar.
    • En External Dataset (Conjunto de datos externo), haga lo siguiente:

      • Marca la casilla situada junto a Enlazar a un conjunto de datos externo.
      • En Tipo de conjunto de datos externo, selecciona AWS Glue.
      • En Fuente externa, introduce 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 Connection ID (ID de conexión), selecciona tu conexión de AWS.
    • Deja el resto de los ajustes predeterminados como están.

  5. Haz clic en Crear conjunto de datos.

SQL

Usa la CREATE EXTERNAL SCHEMAinstrucción del lenguaje de definición de datos (DDL).

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE EXTERNAL SCHEMA DATASET_NAME
    WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME
      OPTIONS (
        external_source = 'AWS_GLUE_SOURCE',
        location = 'LOCATION');

    Haz los cambios siguientes:

    • DATASET_NAME: el nombre del nuevo conjunto de datos en BigQuery.
    • PROJECT_ID: tu ID de proyecto.
    • CONNECTION_LOCATION: la ubicación de tu conexión de AWS. Por ejemplo, aws-us-east-1.
    • CONNECTION_NAME: el nombre de tu conexión de AWS.
    • AWS_GLUE_SOURCE: el nombre de recurso de Amazon (ARN) de la base de datos de AWS Glue con un prefijo que identifica la fuente. Por ejemplo, aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database.
    • LOCATION: la ubicación del nuevo conjunto de datos en BigQuery. Por ejemplo, aws-us-east-1. Una vez que hayas creado un conjunto de datos, no podrás cambiar su ubicación.

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

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

Haz los cambios siguientes:

  • LOCATION: la ubicación del nuevo conjunto de datos en BigQuery. Por ejemplo, aws-us-east-1. Una vez que hayas creado un conjunto de datos, no podrás cambiar su ubicación. Puedes definir un valor de ubicación predeterminado mediante el archivo .bigqueryrc.
  • AWS_GLUE_SOURCE: el nombre de 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: ID de tu proyecto de BigQuery.
  • CONNECTION_LOCATION: la ubicación de tu conexión de AWS, por ejemplo, aws-us-east-1.
  • CONNECTION_NAME: el nombre de tu conexión de AWS.
  • DATASET_NAME: el nombre del nuevo conjunto de datos en BigQuery. Para crear un conjunto de datos en un proyecto que no sea el predeterminado, añade el ID del proyecto al nombre del conjunto de datos con 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. Para obtener más información, consulta Configurar la autenticación para bibliotecas de 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 la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud

Preparar Cloud Shell

  1. Abre Cloud Shell.
  2. Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.

    Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

Preparar 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 en ese directorio. El nombre del archivo debe tener la extensión .tf. Por ejemplo, main.tf. En este tutorial, nos referiremos al archivo como main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.

    Copia el código de ejemplo en el archivo main.tf que acabas de crear.

    También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.

  3. Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
  4. Guarda los cambios.
  5. Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
    terraform init

    Si quieres usar la versión más reciente del proveedor de Google, incluye la opción -upgrade:

    terraform init -upgrade

Aplica los cambios

  1. Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
    terraform plan

    Haga las correcciones necesarias en la configuración.

  2. Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo yes en la petición:
    terraform apply

    Espera hasta que Terraform muestre el mensaje "Apply complete!".

  3. Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.

API

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

Mostrar las tablas de un conjunto de datos federado

Para ver las tablas que se pueden consultar en tu conjunto de datos federado, consulta Mostrar conjuntos de datos.

Obtener información de una tabla

Para obtener información sobre las tablas de tu conjunto de datos federado, como los detalles del esquema, consulta Obtener información de las tablas.

Controlar el acceso a las tablas

Para gestionar el acceso a las tablas de tu conjunto de datos federado, consulta el artículo sobre cómo controlar el acceso a los recursos con la gestión de identidades y accesos.

También se admiten la seguridad a nivel de fila, la seguridad a nivel de columna y el enmascaramiento de datos en las tablas de conjuntos de datos federados.

Las operaciones de esquema que puedan invalidar las políticas de seguridad, como eliminar una columna en AWS Glue, pueden provocar que los trabajos fallen hasta que se actualicen las políticas. Además, si elimina una tabla en AWS Glue y la vuelve a crear, sus políticas de seguridad ya no se aplicarán a la tabla recreada.

Consultar datos de AWS Glue

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

Puede consultar tablas de AWS Glue en los siguientes formatos:

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

Detalles de la asignación de tablas

Cada tabla a la que concedas acceso en tu base de datos de AWS Glue aparecerá como una tabla equivalente en tu conjunto de datos de BigQuery.

Formato

El formato de cada tabla de BigQuery se determina mediante 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 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 Iceberg: el campo Table.Parameters["metadata_location"] de la tabla de AWS Glue
  • Tablas sin particiones que no son Iceberg: el campo Table.StorageDescriptor.Location de la tabla de AWS Glue
  • Tablas particionadas que no son de Iceberg: la API GetPartitions de AWS Glue

Otras propiedades

Además, algunas propiedades de las tablas 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 JsonSerDe de Hive Table.StorageDescriptor.Parameters["serialization.encoding"] JsonOptions.encoding

Crear 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 de un conjunto de datos federado. Para obtener más información, consulta el artículo Crear vistas.

Eliminar un conjunto de datos federado

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

Precios

Para obtener información sobre los precios, consulta los precios de BigQuery Omni.

Limitaciones

  • Se aplican todas las limitaciones de BigQuery Omni.
  • No puede añadir, eliminar ni actualizar datos o metadatos en tablas de un conjunto de datos federado de AWS Glue.
  • No puedes crear tablas, vistas ni vistas materializadas en un conjunto de datos federado de AWS Glue.
  • Las INFORMATION_SCHEMA visualizaciones no se admiten.
  • No se admite el almacenamiento en caché de metadatos.
  • Los ajustes a nivel de conjunto de datos relacionados con los valores predeterminados de creación de tablas no afectan a los conjuntos de datos federados porque no se pueden crear tablas manualmente.
  • El tipo de datos UNION de Apache Hive no se admite en las tablas Avro.
  • Se aplican las limitaciones de las tablas externas.

Siguientes pasos