Cargar datos de Amazon S3 en BigQuery
Puedes cargar datos de Amazon S3 en BigQuery mediante el conector BigQuery Data Transfer Service para Amazon S3. Con BigQuery Data Transfer Service, puedes programar tareas de transferencia periódicas que añadan tus datos más recientes de Amazon S3 a BigQuery.
Antes de empezar
Antes de crear una transferencia de datos de Amazon S3, debes hacer lo siguiente:
- Comprueba que has completado todas las acciones necesarias para habilitar BigQuery Data Transfer Service.
- Crea un conjunto de datos de BigQuery para almacenar tus datos.
- Crea la tabla de destino para la transferencia de datos y especifica la definición del esquema. La tabla de destino debe cumplir las reglas de nomenclatura de tablas. Los nombres de las tablas de destino también admiten parámetros.
- Obtenga su URI de Amazon S3, su ID de clave de acceso y su clave de acceso secreta. Para obtener información sobre cómo gestionar tus claves de acceso, consulta la documentación de AWS.
- Si quieres configurar notificaciones de ejecuciones de transferencias para Pub/Sub, debes tener permisos de
pubsub.topics.setIamPolicy
. No se necesitan permisos de Pub/Sub si solo configura notificaciones por correo electrónico. Para obtener más información, consulta el artículo sobre las notificaciones de ejecución de BigQuery Data Transfer Service.
Limitaciones
Las transferencias de datos de Amazon S3 están sujetas a las siguientes limitaciones:
- La parte del URI de Amazon S3 correspondiente al segmento no se puede parametrizar.
- Las transferencias de datos desde Amazon S3 con el parámetro Write disposition definido en
WRITE_TRUNCATE
transferirán todos los archivos coincidentes a Google Cloud durante cada ejecución. Esto puede generar costes adicionales de transferencia de datos salientes de Amazon S3. Para obtener más información sobre los archivos que se transfieren durante una ejecución, consulta Impacto de la coincidencia de prefijos frente a la coincidencia de comodines. - No se admiten las transferencias de datos desde regiones de AWS GovCloud (
us-gov
). - No se admiten transferencias de datos a ubicaciones de BigQuery Omni.
En función del formato de los datos de origen de Amazon S3, puede haber limitaciones adicionales. Para obtener más información, consulta estos artículos:
El intervalo mínimo entre transferencias de datos periódicas es de 1 hora. El intervalo predeterminado de una transferencia de datos periódica es de 24 horas.
Permisos obligatorios
Antes de crear una transferencia de datos de Amazon S3, haz lo siguiente:
Asegúrate de que la persona que crea la transferencia de datos tenga los siguientes permisos obligatorios en BigQuery:
- Permisos de
bigquery.transfers.update
para crear la transferencia de datos - Permisos
bigquery.datasets.get
ybigquery.datasets.update
en el conjunto de datos de destino
El rol predefinido de gestión de identidades y accesos
bigquery.admin
incluye los permisosbigquery.transfers.update
,bigquery.datasets.update
ybigquery.datasets.get
. Para obtener más información sobre los roles de gestión de identidades y accesos en BigQuery Data Transfer Service, consulta Control de acceso.- Permisos de
Consulta la documentación de Amazon S3 para asegurarte de que has configurado los permisos necesarios para habilitar la transferencia de datos. Como mínimo, los datos de origen de Amazon S3 deben tener aplicada la política gestionada por AWS
AmazonS3ReadOnlyAccess
.
Configurar una transferencia de datos de Amazon S3
Para crear una transferencia de datos de Amazon S3, sigue estos pasos:
Consola
Ve a la página Transferencias de datos de la Google Cloud consola.
Haz clic en
Crear transferencia.En la página Crear transferencia, haz lo siguiente:
En la sección Tipo de fuente, en Fuente, elija Amazon S3.
En la sección Nombre de la configuración de transferencia, en Nombre visible, indica un nombre para la transferencia; por ejemplo,
My Transfer
. El nombre de la transferencia puede ser cualquier valor que te permita identificar la transferencia si necesitas modificarla más adelante.En la sección Opciones de programación:
Selecciona una Frecuencia de repetición. Si selecciona Horas, Días, Semanas o Meses, también debe especificar una frecuencia. También puedes seleccionar Personalizar para crear una frecuencia de repetición más específica. Si seleccionas Bajo demanda, la transferencia de datos solo se realizará cuando la inicies manualmente.
Si procede, selecciona Empezar ahora o Empezar a una hora determinada y proporciona una fecha de inicio y un tiempo de ejecución.
En la sección Configuración de destino, en Conjunto de datos de destino, elija el conjunto de datos que haya creado para almacenar sus datos.
En la sección Detalles de la fuente de datos:
- En Tabla de destino, introduzca el nombre de la tabla que ha creado para almacenar los datos en BigQuery. Los nombres de las tablas de destino admiten parámetros.
- En URI de Amazon S3, introduce el URI con el formato
s3://mybucket/myfolder/...
. Los URIs también admiten parámetros. - En ID de clave de acceso, introduzca su ID de clave de acceso.
- En Clave de acceso secreta, introduce tu clave de acceso secreta.
- En Formato de archivo, elige el formato de tus datos (JSON delimitado por líneas nuevas, CSV, Avro, Parquet u ORC).
- En Disposición de escritura, elige una de las siguientes opciones:
WRITE_APPEND
para añadir datos nuevos de forma incremental a la tabla de destino.WRITE_APPEND
es el valor predeterminado de la preferencia de escritura.WRITE_TRUNCATE
para sobrescribir los datos de la tabla de destino durante cada ejecución de la transferencia de datos.
Para obtener más información sobre cómo ingiere datos BigQuery Data Transfer Service mediante
WRITE_APPEND
oWRITE_TRUNCATE
, consulta el artículo Ingestión de datos para transferencias de Amazon S3. Para obtener más información sobre el campowriteDisposition
, consultaJobConfigurationLoad
.En la sección Opciones de transferencia (todos los formatos):
- En Número de errores permitidos, introduce un valor entero para el número máximo de registros incorrectos que se pueden ignorar.
- (Opcional) En Tipos de destino decimales, introduzca una lista separada por comas de los posibles tipos de datos SQL a los que se podrían convertir los valores decimales de origen. El tipo de datos de SQL que se selecciona para la conversión depende de las siguientes condiciones:
- El tipo de datos seleccionado para la conversión será el primero de la siguiente lista que admita la precisión y la escala de los datos de origen, en este orden: NUMERIC, BIGNUMERIC y STRING.
- Si ninguno de los tipos de datos de la lista admite la precisión y la escala, se selecciona el tipo de datos que admita el intervalo más amplio de la lista especificada. Si un valor supera el intervalo admitido al leer los datos de origen, se producirá un error.
- El tipo de datos STRING admite todos los valores de precisión y escala.
- Si este campo se deja vacío, el tipo de datos será "NUMERIC,STRING" de forma predeterminada para ORC y "NUMERIC" para los demás formatos de archivo.
- Este campo no puede contener tipos de datos duplicados.
- El orden de los tipos de datos que incluyas en este campo no importa.
Si has elegido CSV o JSON como formato de archivo, en la sección JSON,CSV, marca la opción Ignorar valores desconocidos para aceptar las filas que contengan valores que no coincidan con el esquema. Los valores desconocidos se ignoran. En el caso de los archivos CSV, esta opción ignora los valores adicionales al final de una línea.
Si has elegido el formato CSV, en la sección CSV, introduce las opciones de CSV adicionales que quieras para cargar los datos.
En el menú Cuenta de servicio, selecciona una cuenta de servicio de las asociadas a tu proyectoGoogle Cloud . Puedes asociar una cuenta de servicio a tu transferencia de datos en lugar de usar tus credenciales de usuario. Para obtener más información sobre el uso de cuentas de servicio con transferencias de datos, consulta el artículo Usar cuentas de servicio.
- Si has iniciado sesión con una identidad federada, se necesita una cuenta de servicio para crear una transferencia de datos. Si has iniciado sesión con una cuenta de Google, no es obligatorio tener una cuenta de servicio para la transferencia de datos.
- La cuenta de servicio debe tener los permisos necesarios.
(Opcional) En la sección Opciones de notificación:
- Haz clic en el interruptor para habilitar las notificaciones por correo electrónico. Si habilitas esta opción, el administrador de las transferencias recibirá una notificación por correo cuando falle una ejecución de transferencia de datos.
- En Seleccionar un tema de Pub/Sub, elige el nombre del tema o haz clic en Crear un tema para crear uno. Esta opción configura las notificaciones de Pub/Sub sobre la transferencia de datos.
Haz clic en Guardar.
bq
Introduce el comando bq mk
y proporciona la marca de creación de transferencia —
--transfer_config
.
bq mk \ --transfer_config \ --project_id=project_id \ --data_source=data_source \ --display_name=name \ --target_dataset=dataset \ --service_account_name=service_account \ --params='parameters'
Donde:
- project_id: opcional. El ID de tu proyecto Google Cloud .
Si no se proporciona
--project_id
para especificar un proyecto concreto, se usará el proyecto predeterminado. - data_source: obligatorio. La fuente de datos:
amazon_s3
. - display_name: obligatorio. Nombre visible de la configuración de la transferencia de datos. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si necesitas modificarla más adelante.
- dataset: obligatorio. El conjunto de datos de destino de la configuración de la transferencia de datos.
- service_account: nombre de la cuenta de servicio que se usa para autenticar la transferencia de datos. La cuenta de servicio debe ser propiedad del mismo
project_id
que se usó para crear la transferencia de datos y debe tener todos los permisos necesarios. parameters: obligatorio. Los parámetros de la configuración de transferencia creada en formato JSON. Por ejemplo:
--params='{"param":"param_value"}'
. Estos son los parámetros de una transferencia de Amazon S3:- destination_table_name_template: obligatorio. El nombre de la tabla de destino.
data_path: obligatorio. El URI de Amazon S3, con el siguiente formato:
s3://mybucket/myfolder/...
Los URIs también admiten parámetros.
access_key_id: obligatorio. Tu ID de clave de acceso.
secret_access_key: obligatorio. Tu clave de acceso secreta.
file_format: opcional. Indica el tipo de archivos que quieres transferir:
CSV
,JSON
,AVRO
,PARQUET
oORC
. El valor predeterminado esCSV
.write_disposition: opcional.
WRITE_APPEND
solo transferirá los archivos que se hayan modificado desde la última ejecución correcta.WRITE_TRUNCATE
transferirá todos los archivos coincidentes, incluidos los que se hayan transferido en una ejecución anterior. El valor predeterminado esWRITE_APPEND
.max_bad_records: opcional. Número de registros incorrectos permitidos. El valor predeterminado es
0
.decimal_target_types: opcional. Lista separada por comas de los posibles tipos de datos SQL a los que se podrían convertir los valores decimales de origen. Si no se proporciona este campo, el tipo de datos predeterminado es "NUMERIC,STRING" para ORC y "NUMERIC" para los demás formatos de archivo.
ignore_unknown_values: es opcional y se ignora si file_format no es
JSON
niCSV
. Indica si se deben ignorar los valores desconocidos de los datos.field_delimiter: opcional y solo se aplica cuando
file_format
esCSV
. El carácter que separa los campos. El valor predeterminado es una coma.skip_leading_rows: opcional y solo se aplica cuando file_format es
CSV
. Indica el número de filas de encabezado que no quieres importar. El valor predeterminado es0
.allow_quoted_newlines: opcional y solo se aplica cuando file_format es
CSV
. Indica si se permiten saltos de línea en campos entre comillas.allow_jagged_rows: opcional y solo se aplica cuando file_format es
CSV
. Indica si se deben aceptar las filas que no tengan columnas opcionales finales. Los valores que falten se rellenarán con valores nulos.
Por ejemplo, el siguiente comando crea una transferencia de datos de Amazon S3 llamada My Transfer
con un valor data_path
de s3://mybucket/myfile/*.csv
, un conjunto de datos de destino mydataset
y file_format
CSV
. En este ejemplo se incluyen valores no predeterminados para los parámetros opcionales asociados al CSV
file_format.
La transferencia de datos se crea en el proyecto predeterminado:
bq mk --transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--params='{"data_path":"s3://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"file_format":"CSV",
"write_disposition":"WRITE_APPEND",
"max_bad_records":"1",
"ignore_unknown_values":"true",
"field_delimiter":"|",
"skip_leading_rows":"1",
"allow_quoted_newlines":"true",
"allow_jagged_rows":"false"}' \
--data_source=amazon_s3
Después de ejecutar el comando, recibirás un mensaje como el siguiente:
[URL omitted] Please copy and paste the above URL into your web browser and
follow the instructions to retrieve an authentication code.
Sigue las instrucciones y pega el código de autenticación en la línea de comandos.
API
Usa el método projects.locations.transferConfigs.create
y proporciona una instancia del recurso TransferConfig
.
Java
Antes de probar este ejemplo, sigue las Javainstrucciones de configuración de la guía de inicio rápido de BigQuery con bibliotecas de cliente. Para obtener más información, consulta la documentación de referencia de la API Java de BigQuery.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta el artículo Configurar la autenticación para bibliotecas de cliente.
Impacto de la coincidencia de prefijos frente a la coincidencia con comodines
La API de Amazon S3 admite la coincidencia de prefijos, pero no la de comodines. Todos los archivos de Amazon S3 que coincidan con un prefijo se transferirán a Google Cloud. Sin embargo, solo se cargarán en BigQuery los que coincidan con el URI de Amazon S3 de la configuración de la transferencia. Esto podría provocar costes excesivos de transferencia de datos salientes de Amazon S3 en el caso de los archivos que se transfieren, pero no se cargan en BigQuery.
Por ejemplo, considere esta ruta de datos:
s3://bucket/folder/*/subfolder/*.csv
Junto con estos archivos en la ubicación de origen:
s3://bucket/folder/any/subfolder/file1.csv
s3://bucket/folder/file2.csv
De este modo, todos los archivos de Amazon S3 con el prefijo s3://bucket/folder/
se transferirán a Google Cloud. En este ejemplo, se transferirán tanto file1.csv
como file2.csv
.
Sin embargo, solo se cargarán en BigQuery los archivos que coincidan con s3://bucket/folder/*/subfolder/*.csv
. En este ejemplo, solo se cargará file1.csv
en BigQuery.
Solucionar problemas de configuración de transferencias
Si tienes problemas para configurar la transferencia de datos, consulta Problemas con la transferencia de Amazon S3.
Siguientes pasos
- Para obtener una introducción a las transferencias de datos de Amazon S3, consulta el artículo Descripción general de las transferencias de Amazon S3.
- Para obtener una descripción general de BigQuery Data Transfer Service, consulta el artículo Introducción a BigQuery Data Transfer Service.
- Para obtener información sobre cómo usar las transferencias de datos, como obtener información sobre una configuración de transferencia, enumerar configuraciones de transferencia y ver el historial de ejecuciones de una transferencia, consulta el artículo Trabajar con transferencias.
- Consulta cómo cargar datos con operaciones entre nubes.