Cargar datos de Blob Storage en BigQuery
Puede cargar datos de Blob Storage en BigQuery mediante el conector BigQuery Data Transfer Service para Blob Storage. Con BigQuery Data Transfer Service, puedes programar tareas de transferencia periódicas que añadan tus datos más recientes de Blob Storage a BigQuery.
Antes de empezar
Antes de crear una transferencia de datos de Blob Storage, haz lo siguiente:
- Comprueba que has completado todas las acciones necesarias para habilitar BigQuery Data Transfer Service.
- Elige un conjunto de datos de BigQuery que ya tengas o crea uno para almacenar los datos.
- Elige una tabla de BigQuery que ya tengas o crea una 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.
- Obtén el nombre de la cuenta de almacenamiento de Blob Storage, el nombre del contenedor, la ruta de datos (opcional) y el token de SAS. Para obtener información sobre cómo conceder acceso a Blob Storage mediante una firma de acceso compartido (SAS), consulta Firma de acceso compartido (SAS).
- Si restringes el acceso a tus recursos de Azure mediante un firewall de Azure Storage, añade los trabajadores de BigQuery Data Transfer Service a tu lista de IPs permitidas.
- Si tienes previsto especificar una clave de cifrado gestionada por el cliente (CMEK), asegúrate de que tu cuenta de servicio tenga permisos para cifrar y descifrar y de que tengas el ID de recurso de clave de Cloud KMS necesario para usar la CMEK. Para obtener información sobre cómo funciona CMEK con BigQuery Data Transfer Service, consulta Especificar una clave de cifrado en las transferencias.
Permisos obligatorios
Para crear una transferencia de datos de Blob Storage, necesitas el permiso de bigquery.transfers.update
Gestión de Identidades y Accesos (IAM). También necesitas los permisos bigquery.datasets.get
y bigquery.datasets.update
en el conjunto de datos de destino.
El rol de gestión de identidades y accesos bigquery.admin
predefinido incluye los permisos que necesita para crear una transferencia de datos de Blob Storage.
Para obtener más información sobre la gestión de identidades y accesos de BigQuery, consulta el artículo sobre el control de acceso con la gestión de identidades y accesos.
Para confirmar que tienes los permisos correctos en Blob Storage para habilitar la transferencia de datos, consulta Firma de acceso compartido (SAS).
Si quieres configurar notificaciones de ejecuciones de transferencias para Pub/Sub, debes tener el permiso pubsub.topics.setIamPolicy
.
Los permisos de Pub/Sub solo son necesarios para las 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 Blob Storage están sujetas a las siguientes limitaciones:
- El intervalo mínimo entre transferencias de datos periódicas es de 1 hora. El intervalo predeterminado es de 24 horas.
- En función del formato de los datos de origen de Blob Storage, puede haber limitaciones adicionales:
- No se admiten transferencias de datos a ubicaciones de BigQuery Omni.
Configurar una transferencia de datos de Blob Storage
Selecciona una de las opciones siguientes:
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, selecciona Azure Blob Storage y ADLS:
En la sección Nombre de la configuración de transferencia, en Nombre visible, indica un nombre para la transferencia de datos.
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 especificar una frecuencia de repetición personalizada. Si seleccionas Bajo demanda, la transferencia de datos 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, elija el conjunto de datos que haya creado para almacenar sus datos.
En la sección Detalles de la fuente de datos, haga lo siguiente:
- 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 Nombre de cuenta de almacenamiento de Azure, introduce el nombre de la cuenta de Blob Storage.
- En Container name (Nombre del contenedor), escribe el nombre del contenedor de Blob Storage.
- En Ruta de datos, introduzca la ruta para filtrar los archivos que se van a transferir. Consulta ejemplos.
- En Token de SAS, introduce el token de SAS de Azure.
- En Formato de archivo, elija el formato de los datos de origen.
- En Disposición de escritura, seleccione
WRITE_APPEND
para añadir datos nuevos de forma incremental a la tabla de destino oWRITE_TRUNCATE
para sobrescribir los datos de la tabla de destino durante cada ejecución de la transferencia.WRITE_APPEND
es el valor predeterminado de Escribir disposición.
Para obtener más información sobre cómo ingiere datos BigQuery Data Transfer Service mediante
WRITE_APPEND
oWRITE_TRUNCATE
, consulta Ingestión de datos para transferencias de Azure Blob. Para obtener más información sobre el campowriteDisposition
, consultaJobConfigurationLoad
.En la sección Opciones de transferencia, haga lo siguiente:
- En Número de errores permitidos, introduce un valor entero para el número máximo de registros incorrectos que se pueden ignorar. El valor predeterminado es 0.
- (Opcional) En el caso de los tipos de destino decimales, introduzca una lista separada por comas de los posibles tipos de datos SQL a los que se convertirán los valores decimales de los datos de origen. El tipo de datos SQL que se selecciona para la conversión depende de las siguientes condiciones:
- En el orden
NUMERIC
,BIGNUMERIC
ySTRING
, se elige un tipo si está en la lista especificada y si admite la precisión y la escala. - Si ninguno de los tipos de datos de la lista admite la precisión y la escala, se seleccionará 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 produce 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 yNUMERIC
para otros formatos de archivo. - Este campo no puede contener tipos de datos duplicados.
- Se ignora el orden de los tipos de datos que incluyas.
- En el orden
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.
Si has elegido CSV como formato de archivo, en la sección CSV, introduce las opciones adicionales de CSV que quieras para cargar los datos.
En la sección Opciones de notificación, puedes habilitar las notificaciones por correo electrónico y las notificaciones de Pub/Sub.
- Si habilitas las notificaciones por correo, el administrador de la transferencia recibirá una notificación por correo cuando falle una ejecución de transferencia.
- Cuando habilites las notificaciones de Pub/Sub, elige un nombre de tema para publicar o haz clic en Crear tema para crear uno.
Si usas CMEKs, en la sección Opciones avanzadas, selecciona Clave gestionada por el cliente. Aparecerá una lista de las CMEKs disponibles para que elijas la que quieras. Para obtener información sobre cómo funcionan las CMEKs con BigQuery Data Transfer Service, consulta Especificar una clave de cifrado en las transferencias.
Haz clic en Guardar.
bq
Usa el
bq mk --transfer_config
comando
para crear una transferencia de Blob Storage:
bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=DATA_SOURCE \ --display_name=DISPLAY_NAME \ --target_dataset=DATASET \ --destination_kms_key=DESTINATION_KEY \ --params=PARAMETERS
Haz los cambios siguientes:
PROJECT_ID
: (opcional) ID del proyecto que contiene el conjunto de datos de destino. Si no se especifica, se usará el proyecto predeterminado.DATA_SOURCE
:azure_blob_storage
.DISPLAY_NAME
: 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 necesitas modificarla más adelante.DATASET
: el conjunto de datos de destino de la configuración de transferencia de datos.DESTINATION_KEY
: (Opcional) 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
: los parámetros de la configuración de transferencia de datos, que se indican en formato JSON. Por ejemplo,--params={"param1":"value1", "param2":"value2"}
. Estos son los parámetros de una transferencia de datos de Blob Storage:destination_table_name_template
: obligatorio. El nombre de la tabla de destino.storage_account
: obligatorio. Nombre de la cuenta de Blob Storage.container
: obligatorio. Nombre del contenedor de Blob Storage.data_path
: opcional. Ruta para filtrar los archivos que se van a transferir. Consulta los ejemplos.sas_token
: obligatorio. Token SAS de Azure.file_format
: opcional. El tipo de archivos que quieres transferir:CSV
,JSON
,AVRO
,PARQUET
oORC
. El valor predeterminado esCSV
.write_disposition
: opcional. SeleccionaWRITE_APPEND
para añadir datos a la tabla de destino oWRITE_TRUNCATE
para sobrescribir los datos de la tabla de destino. 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 convierten los valores decimales de los datos de origen. Si no se proporciona este campo, el tipo de datos predeterminado esNUMERIC,STRING
para ORC yNUMERIC
para los demás formatos de archivo.ignore_unknown_values
: es opcional y se ignora sifile_format
no esJSON
niCSV
. Asigna el valortrue
para aceptar filas que contengan valores que no coincidan con el esquema.field_delimiter
: opcional y solo se aplica cuandofile_format
esCSV
. El carácter que separa los campos. El valor predeterminado es,
.skip_leading_rows
: opcional y solo se aplica cuandofile_format
esCSV
. Indica el número de filas de encabezado que no quieres importar. El valor predeterminado es 0.allow_quoted_newlines
: es opcional y solo se aplica cuandofile_format
esCSV
. Indica si se permiten saltos de línea en los campos entre comillas.allow_jagged_rows
: opcional y solo se aplica cuandofile_format
esCSV
. Indica si se deben aceptar las filas a las que les faltan columnas opcionales finales. Los valores que faltan se rellenan conNULL
.
Por ejemplo, el siguiente comando crea una transferencia de datos de Blob Storage llamada mytransfer
:
bq mk \ --transfer_config \ --data_source=azure_blob_storage \ --display_name=mytransfer \ --target_dataset=mydataset \ --destination_kms_key=projects/myproject/locations/us/keyRings/mykeyring/cryptoKeys/key1 --params={"destination_table_name_template":"mytable", "storage_account":"myaccount", "container":"mycontainer", "data_path":"myfolder/*.csv", "sas_token":"my_sas_token_value", "file_format":"CSV", "max_bad_records":"1", "ignore_unknown_values":"true", "field_delimiter":"|", "skip_leading_rows":"1", "allow_quoted_newlines":"true", "allow_jagged_rows":"false"}
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.
Especificar la clave de cifrado en las transferencias
Puedes especificar claves de cifrado gestionadas por el cliente (CMEKs) para cifrar los datos de una ejecución de transferencia. Puedes usar una CMEK para admitir transferencias desde Azure Blob Storage.Cuando especifica una CMEK con una transferencia, BigQuery Data Transfer Service aplica la CMEK a cualquier caché intermedio en disco de los datos ingeridos para que todo el flujo de trabajo de transferencia de datos cumpla los requisitos de la CMEK.
No puedes actualizar una transferencia para añadir una CMEK si no se creó originalmente con una CMEK. Por ejemplo, no puedes cambiar una tabla de destino que originalmente estaba cifrada de forma predeterminada para que ahora se cifre con CMEK. Del mismo modo, tampoco puedes cambiar el tipo de cifrado de una tabla de destino cifrada con CMEK.
Puedes actualizar una CMEK de una transferencia si la configuración de la transferencia se creó originalmente con un cifrado CMEK. Cuando actualizas una CMEK de una configuración de transferencia, BigQuery Data Transfer Service propaga la CMEK a las tablas de destino en la siguiente ejecución de la transferencia, donde BigQuery Data Transfer Service sustituye las CMEKs obsoletas por la nueva CMEK durante la ejecución de la transferencia. Para obtener más información, consulta Actualizar una transferencia.
También puedes usar las claves predeterminadas del proyecto. Cuando especifica una clave predeterminada de proyecto con una transferencia, BigQuery Data Transfer Service usa la clave predeterminada de proyecto como clave predeterminada para cualquier configuración de transferencia nueva.
Solucionar problemas de configuración de transferencias
Si tienes problemas para configurar la transferencia de datos, consulta Problemas de transferencia de Blob Storage.
Siguientes pasos
- Más información sobre los parámetros de tiempo de ejecución en las transferencias
- Más información sobre BigQuery Data Transfer Service
- Consulta cómo cargar datos con operaciones entre nubes.