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ígitosDATABASE_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
Abre la página de BigQuery en la Google Cloud consola.
En el panel Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.
Abre la opción
Acciones y haz clic en Crear conjunto de datos.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.
Haz clic en Crear conjunto de datos.
SQL
Usa la CREATE EXTERNAL SCHEMA
instrucción del lenguaje de definición de datos (DDL).
En la Google Cloud consola, ve a la página BigQuery.
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.
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
- Abre Cloud Shell.
-
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).
-
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 comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
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.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
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
-
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.
-
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!".
- 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.