Transferencias de Cloud Storage
El Servicio de transferencia de datos de BigQuery para el conector de Cloud Storage permite programar cargas de datos recurrentes de Cloud Storage a BigQuery.
Antes de comenzar
Antes de crear una transferencia de datos de Cloud Storage, haz lo siguiente:
- Verifica si completaste todas las acciones requeridas en la página sobre cómo habilitar el Servicio de transferencia de datos de BigQuery.
- Recupera tu URI de Cloud Storage.
- Crea un conjunto de datos de BigQuery para almacenar tus datos.
- Crea la tabla de destino para tu transferencia de datos y especifica la definición de esquema.
- Si planeas especificar una clave de encriptación administrada por el cliente (CMEK), asegúrate de que tu cuenta de servicio tenga permisos para encriptar y desencriptar y de tener el Cloud KMS. Es el ID de recurso de la clave necesario para usar CMEK. Para obtener información de cómo funcionan las CMEK con el Servicio de transferencia de datos de BigQuery, consulta Especifica una clave de encriptación con transferencias.
Limitaciones
Las transferencias de datos recurrentes de Cloud Storage a BigQuery están sujetas a las siguientes limitaciones:
- Todos los archivos que coincidan con los patrones que define un comodín o los parámetros del entorno de ejecución de tu transferencia de datos deben compartir el mismo esquema que definiste para la tabla de destino, de lo contrario, la transferencia fallará. Los cambios en el esquema de tabla entre ejecuciones también hacen que la transferencia falle.
- Debido a que se pueden crear versiones de los objetos de Cloud Storage, es importante que tengas en cuenta que las transferencias de datos de BigQuery no admiten objetos archivados de Cloud Storage. Los objetos deben estar activos para que se puedan transferir.
- A diferencia de las cargas individuales de datos de Cloud Storage a BigQuery, para las transferencias de datos en curso, debes crear la tabla de destino antes de configurar la transferencia. Para los archivos CSV y JSON, también debes definir el esquema de la tabla con anticipación. BigQuery no puede crear la tabla como parte del proceso de transferencia de datos recurrentes.
- En las transferencias de datos desde Cloud Storage, se establece el parámetro Preferencia de escritura en
APPEND
de forma predeterminada. En este modo, un archivo sin modificar solo se puede cargar en BigQuery una vez. Si se actualiza la propiedadlast modification time
del archivo, se volverá a cargar el archivo. El Servicio de transferencia de datos de BigQuery no garantiza que todos los archivos se transfieran o transfieran solo una vez si se modifican los archivos de Cloud Storage durante una transferencia de datos. Estás sujeto a las siguientes limitaciones cuando cargas datos en BigQuery desde un bucket de Cloud Storage:
Si la ubicación de tu conjunto de datos está configurada en un valor diferente a la multirregión
US
, el bucket de Cloud Storage debe estar en la misma región o multirregión que el conjunto de datos.BigQuery no garantiza la coherencia de los datos provenientes de fuentes de datos externas. Los cambios en los datos subyacentes mientras se ejecuta una consulta pueden dar como resultado un comportamiento inesperado.
BigQuery no es compatible con el control de versiones de objetos de Cloud Storage. Si incluyes un número de generación en el URI de Cloud Storage, el trabajo de carga fallará.
Según el formato de tus datos de origen de Cloud Storage, puede haber limitaciones adicionales. Para obtener más información, consulta:
Tu bucket de Cloud Storage debe estar en una ubicación que sea compatible con la región o multirregión del conjunto de datos de destino en BigQuery. Esto se conoce como colocación. Consulta las ubicaciones de datos de transferencia de Cloud Storage para obtener más información.
Intervalos mínimos
- Los archivos fuente se seleccionan para su transferencia de datos de forma inmediata, sin antigüedad mínima del archivo.
- El tiempo de intervalo mínimo entre transferencias de datos recurrentes es de 15 minutos. El intervalo predeterminado para una transferencia de datos recurrente es cada 24 horas.
Permisos necesarios
Cuando cargas datos en BigQuery, necesitas permisos para cargar datos en tablas y particiones de BigQuery nuevas o existentes. Si cargas datos de Cloud Storage, también necesitarás acceso al bucket que contiene tus datos. Asegúrate de que tienes los siguientes permisos necesarios:
BigQuery: Asegúrate de que la persona o la cuenta de servicio que crea la transferencia de datos tenga los siguientes permisos en BigQuery:
- Los permisos
bigquery.transfers.update
para crear la transferencia de datos - Los permisos
bigquery.datasets.get
ybigquery.datasets.update
en el conjunto de datos de destino
La función predefinida de IAM
bigquery.admin
incluye los permisosbigquery.transfers.update
,bigquery.datasets.update
ybigquery.datasets.get
. Para obtener más información de los roles de IAM en el Servicio de transferencia de datos de BigQuery, consulta Control de acceso.- Los permisos
Cloud Storage: Se requieren permisos
storage.objects.get
en el bucket individual o superior. Si usas un comodín de URI, también debes tener permisosstorage.objects.list
. Si deseas borrar los archivos de origen después de cada transferencia exitosa, también necesitas permisosstorage.objects.delete
. La función de IAM predefinida destorage.objectAdmin
incluye todos estos permisos.
Configura una transferencia de Cloud Storage
Para crear una transferencia de datos de Cloud Storage en el Servicio de transferencia de datos de BigQuery, sigue estos pasos:
Console
Ve a la página Transferencia de datos en la consola de Google Cloud.
Haz clic en
Crear transferencia.En la sección Tipo de fuente (Source type), para Fuente (Source), elige Google Cloud Storage.
En la sección Nombre de la configuración de transferencia (Transfer config name), en Nombre visible, ingresa el nombre de la transferencia de datos, como
My Transfer
. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si es necesario hacerle modificaciones más tarde.En la sección Opciones de programación, haz lo siguiente:
Selecciona una Frecuencia de repetición. Si seleccionas Horas, Días, Semanas o Meses, también debes especificar una frecuencia. También puedes seleccionar Personalizado para especificar una frecuencia de repetición personalizada. Si seleccionas Según demanda, esta transferencia de datos se ejecuta cuando activas la transferencia de forma manual.
Si corresponde, selecciona Comenzar ahora o Comenzar a una hora determinada y proporciona una fecha de inicio y una hora de ejecución.
En la sección Configuración de destino (Destination settings), en Conjunto de datos de destino (Destination dataset), selecciona el conjunto de datos que creaste para almacenar tus datos.
En la sección Detalles de fuente de datos (Data source details):
- En Tabla de destino, ingresa el nombre de tu tabla de destino. La tabla de destino debe seguir las reglas de nombres de las tablas. Los nombres de las tablas de destino también admiten parámetros.
- En el URI de Cloud Storage (Cloud Storage URI), ingresa los URI de Cloud Storage. Se admiten comodines y parámetros.
- En Preferencia de escritura, elige una de las siguientes opciones:
- APPEND para agregar incrementalmente datos nuevos a tu tabla de destino existente. APPEND es el valor predeterminado para Preferencia de escritura.
- MIRROR para reemplazar los datos en la tabla de destino durante cada ejecución de transferencia de datos.
Si deseas obtener más información de cómo el Servicio de transferencia de datos de BigQuery transfiere datos con APPEND o MIRROR, consulta Transferencia de datos para transferencias de Cloud Storage. Para obtener más información del campo
writeDisposition
, consultaJobConfigurationLoad
.- En Borrar archivos de origen después de la transferencia (Delete source files after transfer), marca la casilla si quieres borrar los archivos de origen después de cada transferencia de datos exitosa. Los trabajos de borrado son el mejor esfuerzo. Los trabajos de borrado no se vuelven a intentar si el primer esfuerzo para borrar los archivos de origen falló.
En la sección Opciones de transferencia (Transfer Options), sigue estos pasos:
- En Todos los formatos (All Formats), haz lo siguiente:
- En Cantidad de errores permitidos (Number of errors allowed), ingresa la cantidad máxima de registros erróneos que BigQuery puede ignorar cuando ejecute el trabajo. Si la cantidad de registros erróneos supera este valor, el trabajo falla y se muestra un error de validez en el resultado. El valor predeterminado es
0
. - En Tipos de destino decimales, ingresa una lista separada por comas de tipos de datos de SQL posibles en los que se puedan convertir los valores decimales de origen (opcional). El tipo de datos SQL que se selecciona para la conversión depende de las siguientes condiciones:
- El tipo de datos seleccionado para la conversión será el primer tipo de datos de la siguiente lista que admite la precisión y el escalamiento de los datos de origen, en este orden: NUMERIC, BIGNUMERIC y STRING.
- Si ninguno de los tipos de datos enumerados admitirá la precisión y el escalamiento, se selecciona el tipo de datos que admite el rango más amplio en la lista especificada. Se mostrará un error si un valor excede el rango admitido cuando se leen los datos de origen.
- El tipo de datos STRING admite todos los valores de precisión y escalamiento.
- Si este campo se deja vacío, el tipo de datos predeterminado será “NUMERIC,STRING” para ORC y “NUMERIC” para los otros formatos de archivo.
- Este campo no puede contener tipos de datos duplicados.
- Se ignora el orden de los tipos de datos que enumeras en este campo.
- En Cantidad de errores permitidos (Number of errors allowed), ingresa la cantidad máxima de registros erróneos que BigQuery puede ignorar cuando ejecute el trabajo. Si la cantidad de registros erróneos supera este valor, el trabajo falla y se muestra un error de validez en el resultado. El valor predeterminado es
- En JSON, CSV, haz lo siguiente:
- En Ignorar valores desconocidos (Ignore unknown values), marca la casilla si quieres que la transferencia de datos descarte los datos que no coincidan con el esquema de la tabla de destino.
- En AVRO, haz lo siguiente:
- En Use avro logical types, marca la casilla si quieres que la transferencia de datos convierta los tipos lógicos de Avro en sus tipos de datos de BigQuery correspondientes. El comportamiento predeterminado es ignorar el atributo
logicalType
en la mayoría de los tipos y usar el tipo de Avro subyacente en su lugar.
- En Use avro logical types, marca la casilla si quieres que la transferencia de datos convierta los tipos lógicos de Avro en sus tipos de datos de BigQuery correspondientes. El comportamiento predeterminado es ignorar el atributo
En CSV, haz lo siguiente:
- En Delimitador de campo (Field delimiter), ingresa el carácter que separa los campos. El valor predeterminado es una coma.
- En Carácter de comilla, ingresa el carácter que se usa para entrecomillar secciones de datos en un archivo CSV. El valor predeterminado es una comilla doble (
"
). - En Filas de encabezado para omitir (Header rows to skip), ingresa la cantidad de filas de encabezado de los archivos de origen si no quieres importarlas. El valor predeterminado es
0
. - En Permitir saltos de línea con comillas (Allow quoted newlines), marca la casilla si quieres permitir saltos de línea en campos entrecomillados.
- En Permitir filas irregulares (Allow jagged rows), marca la casilla de verificación si quieres permitir que se transfieran datos de filas con columnas
NULLABLE
faltantes.
- En Todos los formatos (All Formats), haz lo siguiente:
En el menú Cuenta de servicio, selecciona una cuenta de servicio de las cuentas de servicio asociadas a tu proyecto de Google Cloud. Puedes asociar una cuenta de servicio con 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 Usa cuentas de servicio.
- Si accediste con una identidad federada, se requiere una cuenta de servicio para crear una transferencia de datos. Si accediste con una Cuenta de Google, la cuenta de servicio para dicha transferencia de datos es opcional.
- La cuenta de servicio debe tener los permisos necesarios para BigQuery y Cloud Storage.
Opcional: En la sección Opciones de notificación:
- Haz clic en el botón de activación para habilitar las notificaciones por correo electrónico. Cuando habilitas esta opción, el propietario de la configuración de la transferencia de datos recibe una notificación por correo electrónico cuando falla una ejecución de transferencia.
- En Seleccionar un tema de Cloud Pub/Sub (Select a Cloud Pub/Sub topic), elige el nombre de tu tema o haz clic en Crear un tema (Create a topic). Con esta opción, se configuran las notificaciones de ejecución de Pub/Sub para tu transferencia.
Opcional: En la sección Opciones avanzadas:
- Si usas CMEKs, selecciona Clave administrada por el cliente. Aparecerá una lista de las CMEKs disponibles para que elijas.
Para obtener información acerca de cómo funcionan las CMEKs con el Servicio de transferencia de datos de BigQuery, consulta Especifica la clave de encriptación con transferencias.
Haz clic en Guardar.
bq
Ingresa el comando bq mk
y suministra la marca de creación de transferencias --transfer_config
. También se requieren las siguientes marcas:
--data_source
--display_name
--target_dataset
--params
Marcas opcionales:
--destination_kms_key
: Especifica el ID de recurso de la clave para la clave de Cloud KMS si usas una clave de encriptación administrada por el cliente (CMEK) para esta transferencia de datos. Para obtener información acerca de cómo funcionan las CMEKs con el Servicio de transferencia de datos de BigQuery, consulta Especifica la clave de encriptación con transferencias.--service_account_name
: Especifica una cuenta de servicio que se usará para la autenticación de la transferencia de Cloud Storage en lugar de tu cuenta de usuario.
bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=DATA_SOURCE \ --display_name=NAME \ --target_dataset=DATASET \ --destination_kms_key="DESTINATION_KEY" \ --params='PARAMETERS' \ --service_account_name=SERVICE_ACCOUNT_NAME
Donde:
- PROJECT_ID es el ID del proyecto. Si no proporcionas
--project_id
para especificar un proyecto en particular, se usa el proyecto predeterminado. - DATA_SOURCE es la fuente de datos, por ejemplo,
google_cloud_storage
. - NAME es el nombre visible de la configuración de transferencia de datos. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si es necesario hacerle modificaciones más tarde.
- DATASET es el conjunto de datos de destino para la configuración de la transferencia.
- DESTINATION_KEY: El ID de recurso de la clave de Cloud KMS, por ejemplo,
projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name
. - PARAMETERS contiene los parámetros para la configuración de la transferencia creada en formato JSON. Por ejemplo:
--params='{"param":"param_value"}'
destination_table_name_template
: Es el nombre de la tabla de BigQuery de destino.data_path_template
es el URI de Cloud Storage que contiene los archivos que se van a transferir, que puede incluir un comodín.write_disposition
: Determina si los archivos coincidentes se agregan a la tabla de destino o se duplican por completo. Los valores admitidos sonAPPEND
oMIRROR
. Si quieres obtener información sobre cómo el Servicio de transferencia de datos de BigQuery agrega o duplica los datos en las transferencias de Cloud Storage, consulta Transferencia de datos para las transferencias de Cloud Storage.file_format
: El formato de los archivos que quieras transferir. El formato puede serCSV
,JSON
,AVRO
,PARQUET
oORC
. El valor predeterminado esCSV
.max_bad_records
: Para cualquier valorfile_format
, es la cantidad máxima de registros erróneos que se pueden ignorar. El valor predeterminado es0
.decimal_target_types
: Para cualquier valorfile_format
, es una lista separada por comas de tipos de datos de SQL posibles en los que se pueden convertir los valores decimales de origen. Si no se proporciona este campo, el tipo de datos predeterminado es"NUMERIC,STRING"
paraORC
y"NUMERIC"
para los otros formatos de archivo.ignore_unknown_values
: Para cualquier valorfile_format
, se configura comoTRUE
para aceptar filas que contengan valores que no coincidan con el esquema. Para obtener más información, consulta los detalles del campoignoreUnknownvalues
en la tabla de referencia deJobConfigurationLoad
.use_avro_logical_types
: Para valoresfile_format
deAVRO
, configúralo comoTRUE
de modo que puedas interpretar tipos lógicos en sus tipos correspondientes (por ejemplo,TIMESTAMP
), en lugar de solo usar sus tipos sin procesar (por ejemplo,INTEGER
).parquet_enum_as_string
: Para los valoresPARQUET
file_format
, establecer enTRUE
para inferir el tipo lógicoPARQUET
ENUM
comoSTRING
en lugar del valor predeterminadoBYTES
.parquet_enable_list_inference
: Para los valoresPARQUET
file_format
, configúralo comoTRUE
de modo que puedas usar la inferencia de esquema específicamente para el tipo lógicoPARQUET
LIST
.reference_file_schema_uri
: Es una ruta de acceso de URI a un archivo de referencia con el esquema de lector.field_delimiter
: para los valoresCSV
file_format
, es un carácter que separa los campos. El valor predeterminado es una coma.quote
: Para los valoresCSV
file_format
, es un carácter que se usa para entrecomillar secciones de datos en un archivo CSV. El valor predeterminado es una comilla doble ("
).skip_leading_rows
: para los valoresCSV
file_format
, indica la cantidad de filas de encabezado iniciales que no quieres importar. El valor predeterminado es 0.allow_quoted_newlines
: Para los valoresCSV
file_format
, se establece enTRUE
para permitir saltos de línea dentro de los campos entre comillas.allow_jagged_rows
: Para los valoresCSV
file_format
, se establece enTRUE
para aceptar filas a las que les falten columnas opcionales finales. Los valores faltantes se completan conNULL
.preserve_ascii_control_characters
: Para los valoresCSV
file_format
, se establece enTRUE
para preservar cualquier carácter de control ASCII incorporado.encoding
: Especifica el tipo de codificaciónCSV
. Los valores admitidos sonUTF8
,ISO_8859_1
,UTF16BE
,UTF16LE
,UTF32BE
yUTF32LE
.delete_source_files
: Se establece enTRUE
para borrar los archivos de origen después de cada transferencia exitosa. Los trabajos de borrado no se vuelven a ejecutar si falla el primer intento de borrar el archivo de origen. El valor predeterminado esFALSE
.
- SERVICE_ACCOUNT_NAME es el nombre de la cuenta de servicio que se usa para autenticar tu transferencia. La cuenta de servicio debe ser propiedad del mismo
project_id
que se usa para crear la transferencia y debe tener todos los permisos necesarios.
Por ejemplo, con el siguiente comando se crea una transferencia de datos de Cloud Storage llamada My Transfer
con un valor data_path_template
de gs://mybucket/myfile/*.csv
, el conjunto de datos de destino mydataset
y el CSV
como file_format
. Este ejemplo incluye valores no predeterminados para los parámetros opcionales asociados con el file_format CSV
.
La transferencia de datos se crea en el proyecto predeterminado:
bq mk --transfer_config \
--target_dataset=mydataset \
--project_id=myProject \
--display_name='My Transfer' \
--destination_kms_key=projects/myproject/locations/mylocation/keyRings/myRing/cryptoKeys/myKey \
--params='{"data_path_template":"gs://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"file_format":"CSV",
"max_bad_records":"1",
"ignore_unknown_values":"true",
"field_delimiter":"|",
"quote":";",
"skip_leading_rows":"1",
"allow_quoted_newlines":"true",
"allow_jagged_rows":"false",
"delete_source_files":"true"}' \
--data_source=google_cloud_storage \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/ 5dd12f26-0000-262f-bc38-089e0820fe38
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 suministra una instancia del recurso TransferConfig
.
Java
Antes de probar este ejemplo, sigue las instrucciones de configuración para Java incluidas en la guía de inicio rápido de BigQuery sobre cómo usar bibliotecas cliente. Para obtener más información, consulta la documentación de referencia de la API de BigQuery para Java.
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.
Especifica la clave de encriptación con transferencias
Puedes especificar claves de encriptación administradas por el cliente (CMEKs) para encriptar los datos de una ejecución de transferencia. Puedes usar una CMEK para admitir transferencias desde Cloud Storage.Cuando especificas una CMEK con una transferencia, el Servicio de transferencia de datos de BigQuery aplica la CMEK a cualquier memoria caché del disco intermedia de datos transferidos para que todo el flujo de trabajo de transferencia de datos cumpla con la CMEK.
No puedes actualizar una transferencia existente para agregar una CMEK si la transferencia no se creó en un principio con una CMEK. Por ejemplo, no puedes cambiar una tabla de destino que se encriptó de forma predeterminada para que ahora se encripte con CMEK. Por el contrario, tampoco puedes cambiar una tabla de destino encriptada con CMEK para que tenga un tipo de encriptación diferente.
Puedes actualizar una CMEK para una transferencia si la configuración de la transferencia se creó en un principio con una encriptación de CMEK. Cuando actualizas una CMEK para una configuración de transferencia, el Servicio de transferencia de datos de BigQuery propaga la CMEK a las tablas de destino en la siguiente ejecución de la transferencia, en la que el Servicio de transferencia de datos de BigQuery reemplaza cualquier CMEK desactualizada por la CMEK nueva durante la ejecución de la transferencia. Para obtener más información, consulta Actualiza una transferencia.
También puedes usar las claves predeterminadas del proyecto. Cuando especificas una clave predeterminada de proyecto con una transferencia, el Servicio de transferencia de datos de BigQuery usa la clave predeterminada del proyecto como la clave predeterminada para cualquier configuración de transferencia nueva.
Activa una transferencia de forma manual
Además de las transferencias de datos programadas de forma automática desde Cloud Storage, puedes activar una transferencia de forma manual para cargar archivos de datos adicionales.
Si la configuración de la transferencia tiene parámetros de entorno de ejecución, deberás especificar un rango de fechas para las que se iniciarán transferencias adicionales.
Para activar una transferencia de datos:
Console
Ve a la página de BigQuery en la consola de Google Cloud.
Haz clic en
Transferencias de datos.Selecciona tu transferencia de datos en la lista.
Haz clic en Ejecutar transferencia ahora o Programar el reabastecimiento (para configuraciones de transferencia con parámetros de entorno de ejecución).
Si hiciste clic en Ejecutar transferencia ahora, selecciona Ejecutar transferencia de un solo uso o Ejecutar en una fecha específica según corresponda. Si seleccionaste Ejecutar en una fecha específica, selecciona una fecha y hora específicas:
Si hiciste clic en Programar el reabastecimiento, selecciona Ejecutar transferencia de un solo uso o Ejecutar durante un período según corresponda. Si seleccionaste Ejecutar durante un período, selecciona una fecha y hora de inicio y de finalización:
Haz clic en Aceptar.
bq
Ingresa el comando bq mk
y proporciona la marca --transfer_run
. Puedes usar la marca --run_time
o las marcas --start_time
y --end_time
.
bq mk \ --transfer_run \ --start_time='START_TIME' \ --end_time='END_TIME' \ RESOURCE_NAME
bq mk \ --transfer_run \ --run_time='RUN_TIME' \ RESOURCE_NAME
Donde:
START_TIME y END_TIME son marcas de tiempo que terminan en
Z
o contienen un desplazamiento de zona horaria válido. Por ejemplo:2017-08-19T12:11:35.00Z
2017-05-25T00:00:00+00:00
RUN_TIME es una marca de tiempo que especifica la hora para programar la ejecución de la transferencia de datos. Si deseas ejecutar una transferencia de un solo uso para la hora actual, puedes usar la marca
--run_time
.RESOURCE_NAME es el nombre del recurso de la transferencia (también conocido como la configuración de transferencia), por ejemplo,
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7
. Si no conoces el nombre del recurso de la transferencia, ejecuta el comandobq ls --transfer_config --transfer_location=LOCATION
para encontrar el nombre del recurso.
API
Usa el método projects.locations.transferConfigs.startManualRuns
y proporciona el recurso de configuración de la transferencia con el parámetro parent
.
¿Qué sigue?
- Obtén información acerca de parámetros del entorno de ejecución en las transferencias de Cloud Storage
- Obtén más información acerca del Servicio de transferencia de datos de BigQuery.