Crear tablas externas de BigLake de Amazon S3
En este documento se describe cómo crear una tabla de BigLake de Amazon Simple Storage Service (Amazon S3). Una tabla de BigLake te permite usar la delegación de acceso para consultar datos en Amazon S3. La delegación de acceso desacopla el acceso a la tabla de BigLake del acceso al almacén de datos subyacente.
Para obtener información sobre cómo fluyen los datos entre BigQuery y Amazon S3, consulta Flujo de datos al consultar datos.
Antes de empezar
Asegúrate de que tienes una conexión para acceder a los datos de Amazon S3.
Roles obligatorios
Para obtener los permisos que necesitas para crear una tabla externa, pide a tu administrador que te asigne el rol de gestión de identidades y accesos Administrador de BigQuery (roles/bigquery.admin
) en tu conjunto de datos.
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 una tabla externa. Para ver los permisos exactos que se necesitan, despliega la sección Permisos necesarios:
Permisos obligatorios
Para crear una tabla externa, se necesitan los siguientes permisos:
-
bigquery.tables.create
-
bigquery.connections.delegate
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
Crear conjunto de datos
Antes de crear una tabla externa, debe crear un conjunto de datos en la región admitida. Selecciona una de las siguientes opciones:Consola
Ve a la página BigQuery.
- En el panel Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.
- Abre la opción Ver acciones y haz clic en Crear conjunto de datos.
- En la página Crear conjunto de datos, especifica los siguientes detalles:
- En ID del conjunto de datos, introduzca un nombre único para el conjunto de datos.
- En Ubicación de los datos, elige una región admitida.
- Opcional: Para eliminar las tablas automáticamente, marque la casilla Habilitar la caducidad de las tablas y defina la Antigüedad máxima predeterminada de las tablas en días. Los datos de Amazon S3 no se eliminan cuando caduca la tabla.
- Si quieres usar la ordenación predeterminada, despliega la sección Opciones avanzadas y selecciona la opción Habilitar ordenación predeterminada.
- Haz clic en Crear conjunto de datos.
SQL
Usa la CREATE SCHEMA
declaración de DDL.
En el siguiente ejemplo se crea un conjunto de datos en la región aws-us-east-1
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE SCHEMA mydataset OPTIONS ( location = 'aws-us-east-1');
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 bq mk
comando:
bq --location=LOCATION mk \ --dataset \ PROJECT_ID:DATASET_NAME
El parámetro --project_id
anula el proyecto predeterminado.
Haz los cambios siguientes:
LOCATION
: la ubicación de tu conjunto de datosPara obtener información sobre las regiones admitidas, consulta Ubicaciones. Una vez que haya creado un conjunto de datos, no podrá cambiar su ubicación. Puedes definir un valor predeterminado para la ubicación mediante el archivo
.bigqueryrc
.PROJECT_ID
: tu ID de proyectoDATASET_NAME
: el nombre del conjunto de datos que quieres crearPara 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
.
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.
Crear tablas de BigLake a partir de datos sin particiones
Selecciona una de las opciones siguientes:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
En la sección Información del conjunto de datos, haz clic en
Crear tabla.En la página Crear tabla, ve a la sección Fuente y haz lo siguiente:
- En Crear tabla a partir de, selecciona Amazon S3.
- En Select S3 path (Seleccionar ruta de S3), introduce un URI que apunte a los datos de Amazon S3 con el formato
s3://BUCKET_NAME/PATH
. SustituyeBUCKET_NAME
por el nombre del segmento de Amazon S3. La región del segmento debe ser la misma que la del conjunto de datos. SustituyePATH
por la ruta en la que quieras escribir el archivo exportado. Puede contener un carácter comodín*
. - En Formato de archivo, seleccione el formato de datos de Amazon S3. Los formatos admitidos son AVRO, CSV, DELTA_LAKE, ICEBERG, JSONL, ORC y PARQUET.
En la sección Destino, especifica los siguientes detalles:
- En Conjunto de datos, elija el conjunto de datos adecuado.
- En el campo Tabla, introduce el nombre de la tabla.
- Verifica que el Tipo de tabla sea Tabla externa.
- En ID de conexión, elija el ID de conexión adecuado en el menú desplegable. Para obtener información sobre las conexiones, consulta el artículo Conectarse a Amazon S3.
En la sección Esquema, puedes habilitar la detección automática de esquemas o especificar manualmente un esquema si tienes un archivo de origen. Si no tienes un archivo de origen, debes especificar manualmente un esquema.
Para habilitar la detección automática de esquemas, selecciona la opción Detectar automáticamente.
Para especificar un esquema manualmente, desmarca la opción Detectar automáticamente. Habilita Editar como texto e introduce el esquema de la tabla como una matriz JSON.
Haz clic en Crear tabla.
SQL
Para crear una tabla de BigLake, usa la declaración CREATE EXTERNAL TABLE
con la cláusula WITH CONNECTION
:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME WITH CONNECTION `AWS_LOCATION.CONNECTION_NAME` OPTIONS ( format = "DATA_FORMAT", uris = ["S3_URI"], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Haz los cambios siguientes:
DATASET_NAME
: el nombre del conjunto de datos que has creadoTABLE_NAME
: el nombre que quieras asignar a esta tablaAWS_LOCATION
: una ubicación de AWS en Google Cloud (por ejemplo, `aws-us-east-1`)CONNECTION_NAME
: el nombre de la conexión que has creadoDATA_FORMAT
: cualquiera de los formatos federados de BigQuery admitidos (comoAVRO
,CSV
,DELTA_LAKE
,ICEBERG
oPARQUET
(vista previa))S3_URI
: un URI que apunta a los datos de Amazon S3 (por ejemplo,s3://bucket/path
)STALENESS_INTERVAL
: especifica si las operaciones de la tabla de BigLake usan metadatos almacenados en caché y cómo de actualizados deben estar los metadatos almacenados en caché para que la operación los use. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta el artículo Almacenamiento en caché de metadatos para mejorar el rendimiento.Para inhabilitar el almacenamiento en caché de metadatos, especifica 0. Este es el valor predeterminado.
Para habilitar el almacenamiento en caché de metadatos, especifica un valor de literal de intervalo entre 30 minutos y 7 días. Por ejemplo, especifica
INTERVAL 4 HOUR
para un intervalo de obsolescencia de 4 horas. Con este valor, las operaciones en la tabla usan metadatos almacenados en caché si se han actualizado en las últimas 4 horas. Si los metadatos almacenados en caché son anteriores a esa fecha, la operación recupera los metadatos de Amazon S3.CACHE_MODE
: especifica si la caché de metadatos se actualiza automáticamente o manualmente. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta Almacenamiento en caché de metadatos para mejorar el rendimiento.Defina el valor
AUTOMATIC
para que la caché de metadatos se actualice a un intervalo definido por el sistema, que suele ser de entre 30 y 60 minutos.Seleccione
MANUAL
si quiere actualizar la caché de metadatos según la programación que determine. En ese caso, puedes llamar alBQ.REFRESH_EXTERNAL_METADATA_CACHE
procedimiento del sistema para actualizar la caché.Debes definir
CACHE_MODE
siSTALENESS_INTERVAL
tiene un valor superior a 0.
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
Ejemplo:
CREATE EXTERNAL TABLE awsdataset.awstable WITH CONNECTION `aws-us-east-1.s3-read-connection` OPTIONS ( format="CSV", uris=["s3://s3-bucket/path/file.csv"], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
bq
Crea un archivo de definición de tabla:
bq mkdef \ --source_format=DATA_FORMAT \ --connection_id=AWS_LOCATION.CONNECTION_NAME \ --metadata_cache_mode=CACHE_MODE \ S3_URI > table_def
Haz los cambios siguientes:
DATA_FORMAT
: cualquiera de los formatos federados de BigQuery admitidos (comoAVRO
,CSV
,DELTA_LAKE
,ICEBERG
oPARQUET
).S3_URI
: un URI que apunta a los datos de Amazon S3 (por ejemplo,s3://bucket/path
).AWS_LOCATION
: una ubicación de AWS en Google Cloud (por ejemplo,aws-us-east-1
).CONNECTION_NAME
: el nombre de la conexión que has creado.CACHE_MODE
: especifica si la caché de metadatos se actualiza automáticamente o manualmente. Solo tienes que incluir esta marca si también tienes previsto usar la marca--max_staleness
en el comandobq mk
posterior para habilitar el almacenamiento en caché de metadatos. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta Almacenamiento en caché de metadatos para mejorar el rendimiento.Si se define como
AUTOMATIC
, la caché de metadatos se actualizará a un intervalo definido por el sistema, normalmente entre 30 y 60 minutos.Selecciona
MANUAL
si quieres actualizar la caché de metadatos según la programación que determines. En este caso, puedes llamar al procedimiento del sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para actualizar la caché. Debes definirCACHE_MODE
siSTALENESS_INTERVAL
tiene un valor superior a 0.
A continuación, crea la tabla de BigLake:
bq mk --max_staleness=STALENESS_INTERVAL --external_table_definition=table_def DATASET_NAME.TABLE_NAME
Haz los cambios siguientes:
STALENESS_INTERVAL
: especifica si las operaciones de la tabla de BigLake usan metadatos almacenados en caché y cómo de actualizados deben estar los metadatos almacenados en caché para que la operación los use. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta el artículo Almacenamiento en caché de metadatos para mejorar el rendimiento.Para inhabilitar el almacenamiento en caché de metadatos, especifica 0. Este es el valor predeterminado.
Para habilitar el almacenamiento en caché de metadatos, especifica un valor de literal de intervalo entre 30 minutos y 7 días. Por ejemplo, especifica
INTERVAL 4 HOUR
para un intervalo de obsolescencia de 4 horas. Con este valor, las operaciones en la tabla usan metadatos almacenados en caché si se han actualizado en las últimas 4 horas. Si los metadatos almacenados en caché son anteriores a esa fecha, la operación recupera los metadatos de Amazon S3.DATASET_NAME
: el nombre del conjunto de datos que has creado.TABLE_NAME
: el nombre que quieras asignar a esta tabla.
Por ejemplo, el siguiente comando crea una tabla de BigLake, awsdataset.awstable
, que puede consultar los datos de Amazon S3 almacenados en la ruta s3://s3-bucket/path/file.csv
y que tiene una conexión de lectura en la ubicación aws-us-east-1
:
bq mkdef \ --autodetect \ --source_format=CSV \ --connection_id=aws-us-east-1.s3-read-connection \ --metadata_cache_mode=AUTOMATIC \ s3://s3-bucket/path/file.csv > table_def bq mk --max_staleness=INTERVAL "1" HOUR \ --external_table_definition=table_def awsdataset.awstable
API
Llama al método tables.insert
de la API y crea un ExternalDataConfiguration
en el recurso Table
que le envíes.
Especifique la propiedad schema
o asigne el valor true
a la propiedad autodetect
para habilitar la detección automática del esquema en las fuentes de datos compatibles.
Especifica la propiedad connectionId
para identificar la conexión que se va a usar para conectarse a Amazon S3.
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.
Crear tablas de BigLake en datos con particiones
Puedes crear una tabla de BigLake para los datos con particiones de Hive en Amazon S3. Después de crear una tabla particionada externamente, no puedes cambiar la clave de partición. Para cambiar la clave de partición, debes volver a crear la tabla.
Para crear una tabla de BigLake basada en datos con particiones de Hive, seleccione una de las siguientes opciones:
Consola
Ve a la página BigQuery.
En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.
Haz clic en
Ver acciones y, a continuación, en Crear tabla. Se abrirá el panel Crear tabla.En la sección Fuente, especifica los siguientes detalles:
En Crear tabla a partir de, selecciona Amazon S3.
Proporciona la ruta a la carpeta con comodines. Por ejemplo,
s3://mybucket/*
.La carpeta debe estar en la misma ubicación que el conjunto de datos que contiene la tabla que quieres crear, añadir o sobrescribir.
En la lista Formato de archivo, selecciona el tipo de archivo.
Seleccione la casilla Partición de datos de origen y, a continuación, especifique los siguientes detalles:
- En Selecciona el prefijo del URI de origen, introduce el prefijo del URI. Por ejemplo,
s3://mybucket/my_files
. - Opcional: Para requerir un filtro de partición en todas las consultas de esta tabla, marque la casilla Requerir filtro de partición. Si se requiere un filtro de partición, se pueden reducir los costes y mejorar el rendimiento. Para obtener más información, consulta Requerir filtros de predicado en claves de partición en consultas.
En la sección Modo de inferencia de partición, seleccione una de las siguientes opciones:
- Tipos de inferencias automáticas: define el modo de detección del esquema de partición como
AUTO
. - Todas las columnas son cadenas: define el modo de detección del esquema de partición como
STRINGS
. - Proporcionar mi propio esquema: define el modo de detección del esquema de partición como
CUSTOM
e introduce manualmente la información del esquema de las claves de partición. Para obtener más información, consulta Esquema de clave de partición personalizada.
- Tipos de inferencias automáticas: define el modo de detección del esquema de partición como
- En Selecciona el prefijo del URI de origen, introduce el prefijo del URI. Por ejemplo,
En la sección Destino, especifica los siguientes detalles:
- En Proyecto, selecciona el proyecto en el que quieras crear la tabla.
- En Conjunto de datos, selecciona el conjunto de datos en el que quieras crear la tabla.
- En Tabla, introduce el nombre de la tabla que quieras crear.
- En Tipo de tabla, comprueba que esté seleccionada la opción Tabla externa.
- En ID de conexión, selecciona la conexión que has creado anteriormente.
En la sección Esquema, puedes habilitar la detección automática de esquemas o especificar manualmente un esquema si tienes un archivo de origen. Si no tienes un archivo de origen, debes especificar manualmente un esquema.
Para habilitar la detección automática de esquemas, selecciona la opción Detectar automáticamente.
Para especificar un esquema manualmente, desmarca la opción Detectar automáticamente. Habilita Editar como texto e introduce el esquema de la tabla como una matriz JSON.
Para ignorar las filas con valores de columna adicionales que no coincidan con el esquema, despliega la sección Opciones avanzadas y selecciona Valores desconocidos.
Haz clic en Crear tabla.
SQL
Usa la CREATE EXTERNAL TABLE
declaración de DDL:
En la Google Cloud consola, ve a la página BigQuery.
En el editor de consultas, introduce la siguiente instrucción:
CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME` WITH PARTITION COLUMNS ( PARTITION_COLUMN PARTITION_COLUMN_TYPE, ) WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID` OPTIONS ( hive_partition_uri_prefix = "HIVE_PARTITION_URI_PREFIX", uris=['FILE_PATH'], format ="TABLE_FORMAT" max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE' );
Haz los cambios siguientes:
PROJECT_ID
: el nombre del proyecto en el que quieres crear la tabla. Por ejemplo,myproject
.DATASET
: el nombre del conjunto de datos de BigQuery en el que quieres crear la tabla. Por ejemplo,mydataset
.EXTERNAL_TABLE_NAME
: el nombre de la tabla que quiere crear (por ejemplo,mytable
)PARTITION_COLUMN
: el nombre de la columna de particiónPARTITION_COLUMN_TYPE
: el tipo de la columna de particiónREGION
: la región que contiene la conexión (por ejemplo,us
)CONNECTION_ID
: el nombre de la conexión (por ejemplo,myconnection
)HIVE_PARTITION_URI_PREFIX
: partición de Hive prefijo de URI. Por ejemplo:s3://mybucket/
FILE_PATH
: ruta a la fuente de datos de la tabla externa que quiere crear. Por ejemplo:s3://mybucket/*.parquet
TABLE_FORMAT
: el formato de la tabla que quieres crear (por ejemplo,PARQUET
)STALENESS_INTERVAL
: especifica si las operaciones de la tabla de BigLake usan metadatos almacenados en caché y cómo de actualizados deben estar los metadatos almacenados en caché para que la operación los use. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta el artículo Almacenamiento en caché de metadatos para mejorar el rendimiento.Para inhabilitar el almacenamiento en caché de metadatos, especifica 0. Este es el valor predeterminado.
Para habilitar el almacenamiento en caché de metadatos, especifica un valor de literal de intervalo entre 30 minutos y 7 días. Por ejemplo, especifica
INTERVAL 4 HOUR
para un intervalo de obsolescencia de 4 horas. Con este valor, las operaciones en la tabla usan metadatos almacenados en caché si se han actualizado en las últimas 4 horas. Si los metadatos almacenados en caché son anteriores a esa fecha, la operación recupera los metadatos de Amazon S3.CACHE_MODE
: especifica si la caché de metadatos se actualiza automáticamente o manualmente. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta Almacenamiento en caché de metadatos para mejorar el rendimiento.Defina el valor
AUTOMATIC
para que la caché de metadatos se actualice a un intervalo definido por el sistema, que suele ser de entre 30 y 60 minutos.Seleccione
MANUAL
si quiere actualizar la caché de metadatos según la programación que determine. En ese caso, puedes llamar alBQ.REFRESH_EXTERNAL_METADATA_CACHE
procedimiento del sistema para actualizar la caché.Debes definir
CACHE_MODE
siSTALENESS_INTERVAL
tiene un valor superior a 0.
Haz clic en
Ejecutar.
Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.
Ejemplos
En el siguiente ejemplo se crea una tabla de BigLake sobre datos particionados en Amazon S3. El esquema se detecta automáticamente.
CREATE EXTERNAL TABLE `my_dataset.my_table` WITH PARTITION COLUMNS ( sku STRING, ) WITH CONNECTION `us.my-connection` OPTIONS( hive_partition_uri_prefix = "s3://mybucket/products", uris = ['s3://mybucket/products/*'] max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
bq
Primero, usa el comando bq mkdef
para crear un archivo de definición de tabla:
bq mkdef \ --source_format=SOURCE_FORMAT \ --connection_id=REGION.CONNECTION_ID \ --hive_partitioning_mode=PARTITIONING_MODE \ --hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX \ --require_hive_partition_filter=BOOLEAN \ --metadata_cache_mode=CACHE_MODE \ URIS > DEFINITION_FILE
Haz los cambios siguientes:
SOURCE_FORMAT
: el formato de la fuente de datos externa. Por ejemplo,CSV
.REGION
: la región que contiene la conexión (por ejemplo,us
).CONNECTION_ID
: el nombre de la conexión (por ejemplo,myconnection
).PARTITIONING_MODE
: el modo de particiones de Hive. Utilice uno de los siguientes valores:AUTO
: detecta automáticamente los nombres y los tipos de las claves.STRINGS
: convierte automáticamente los nombres de las claves en cadenas.CUSTOM
: codifica el esquema de clave en el prefijo del URI de origen.
URI_SHARED_PREFIX
: el prefijo del URI de origen.BOOLEAN
: especifica si se debe requerir un filtro de predicado en el momento de la consulta. Esta marca es opcional. El valor predeterminado esfalse
.CACHE_MODE
: especifica si la caché de metadatos se actualiza automáticamente o manualmente. Solo tienes que incluir esta marca si también tienes previsto usar la marca--max_staleness
en el comandobq mk
posterior para habilitar el almacenamiento en caché de metadatos. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta Almacenamiento en caché de metadatos para mejorar el rendimiento.Si se define como
AUTOMATIC
, la caché de metadatos se actualizará a un intervalo definido por el sistema, normalmente entre 30 y 60 minutos.Selecciona
MANUAL
si quieres actualizar la caché de metadatos según la programación que determines. En este caso, puedes llamar al procedimiento del sistemaBQ.REFRESH_EXTERNAL_METADATA_CACHE
para actualizar la caché. Debes definirCACHE_MODE
siSTALENESS_INTERVAL
tiene un valor superior a 0.URIS
: la ruta a la carpeta de Amazon S3, con formato de comodín.DEFINITION_FILE
: la ruta al archivo de definición de tabla en tu máquina local.
Si PARTITIONING_MODE
es CUSTOM
, incluye el esquema de clave de partición en el prefijo del URI de origen con el siguiente formato:
--hive_partitioning_source_uri_prefix=URI_SHARED_PREFIX/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Una vez que hayas creado el archivo de definición de tabla, usa el comando bq mk
para crear la tabla de BigLake:
bq mk --max_staleness=STALENESS_INTERVAL \ --external_table_definition=DEFINITION_FILE \ DATASET_NAME.TABLE_NAME \ SCHEMA
Haz los cambios siguientes:
STALENESS_INTERVAL
: especifica si las operaciones de la tabla de BigLake usan metadatos almacenados en caché y cómo de actualizados deben estar los metadatos almacenados en caché para que la operación los use. Para obtener más información sobre las consideraciones relativas al almacenamiento en caché de metadatos, consulta el artículo Almacenamiento en caché de metadatos para mejorar el rendimiento.Para inhabilitar el almacenamiento en caché de metadatos, especifica 0. Este es el valor predeterminado.
Para habilitar el almacenamiento en caché de metadatos, especifica un valor de literal de intervalo entre 30 minutos y 7 días. Por ejemplo, especifica
INTERVAL 4 HOUR
para un intervalo de obsolescencia de 4 horas. Con este valor, las operaciones en la tabla usan metadatos almacenados en caché si se han actualizado en las últimas 4 horas. Si los metadatos almacenados en caché son anteriores a esa fecha, la operación recupera los metadatos de Amazon S3.DEFINITION_FILE
: la ruta al archivo de definición de la tabla.DATASET_NAME
: el nombre del conjunto de datos que contiene la tabla.TABLE_NAME
: el nombre de la tabla que vas a crear.SCHEMA
: especifica una ruta a un archivo de esquema JSON o el esquema en el formatofield:data_type,field:data_type,...
. Para usar la detección automática de esquemas, omite este argumento.
Ejemplos
En el siguiente ejemplo se usa el modo de particiones de Hive AUTO
para datos de Amazon S3:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=AUTO \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/* > mytable_def
bq mk --max_staleness=INTERVAL "1" HOUR \
--external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
En el siguiente ejemplo se usa el modo de particiones de Hive STRING
para datos de Amazon S3:
bq mkdef --source_format=CSV \
--connection_id=us.my-connection \
--hive_partitioning_mode=STRING \
--hive_partitioning_source_uri_prefix=s3://mybucket/myTable \
--metadata_cache_mode=AUTOMATIC \
s3://mybucket/myTable/* > mytable_def
bq mk --max_staleness=INTERVAL "1" HOUR \
--external_table_definition=mytable_def \
mydataset.mytable \
Region:STRING,Quarter:STRING,Total_sales:INTEGER
API
Para definir la partición de Hive mediante la API de BigQuery, incluye el objeto hivePartitioningOptions
en el objeto ExternalDataConfiguration
cuando crees el archivo de definición de tabla.
Para crear una tabla BigLake, también debe especificar un valor para el campo connectionId
.
Si asigna el valor CUSTOM
al campo hivePartitioningOptions.mode
, debe codificar el esquema de la clave de partición en el campo hivePartitioningOptions.sourceUriPrefix
de la siguiente manera:
s3://BUCKET/PATH_TO_TABLE/{KEY1:TYPE1}/{KEY2:TYPE2}/...
Para forzar el uso de un filtro de predicado en el momento de la consulta, asigna el valor true
al campo hivePartitioningOptions.requirePartitionFilter
.
Tablas de Delta Lake
Delta Lake es un formato de tabla de código abierto que admite tablas de datos a escala de petabytes. Las tablas de Delta Lake se pueden consultar como tablas temporales y permanentes, y se admiten como tablas de BigLake.
Sincronización de esquemas
Delta Lake mantiene un esquema canónico como parte de sus metadatos. No puedes actualizar un esquema con un archivo de metadatos JSON. Para actualizar el esquema, sigue estos pasos:
Usa el comando
bq update
con la marca--autodetect_schema
:bq update --autodetect_schema PROJECT_ID:DATASET.TABLE
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto que contiene la tabla que quieres actualizarDATASET
: el conjunto de datos que contiene la tabla que quieres actualizarTABLE
: la tabla que quieras actualizar
Conversión de tipos
BigQuery convierte los tipos de datos de Delta Lake en los siguientes tipos de datos de BigQuery:
Tipo de Delta Lake | Tipo de BigQuery |
---|---|
boolean |
BOOL |
byte |
INT64 |
int |
INT64 |
long |
INT64 |
float |
FLOAT64 |
double |
FLOAT64 |
Decimal(P/S) |
NUMERIC o BIG_NUMERIC , según la precisión |
date |
DATE |
time |
TIME |
timestamp (not partition column) |
TIMESTAMP |
timestamp (partition column) |
DATETIME |
string |
STRING |
binary |
BYTES |
array<Type> |
ARRAY<Type> |
struct |
STRUCT |
map<KeyType, ValueType> |
ARRAY<Struct<key KeyType, value ValueType>> |
Limitaciones
Se aplican las siguientes limitaciones a las tablas de Delta Lake:
Las limitaciones de las tablas externas se aplican a las tablas Delta Lake.
Las tablas de Delta Lake solo se admiten en BigQuery Omni y tienen las limitaciones asociadas.
No puedes actualizar una tabla con un nuevo archivo de metadatos JSON. Debe usar una operación de actualización de tabla de esquema de detección automática. Consulta Sincronización de esquemas para obtener más información.
Las funciones de seguridad de BigLake solo protegen las tablas de Delta Lake cuando se accede a ellas a través de los servicios de BigQuery.
Crear una tabla Delta Lake
En el siguiente ejemplo se crea una tabla externa mediante la instrucción CREATE EXTERNAL
TABLE
con el formato Delta Lake:
CREATE [OR REPLACE] EXTERNAL TABLE table_name WITH CONNECTION connection_name OPTIONS ( format = 'DELTA_LAKE', uris = ["parent_directory"] );
Haz los cambios siguientes:
table_name: el nombre de la tabla.
connection_name: el nombre de la conexión. La conexión debe identificar una fuente de Amazon S3 o de Blob Storage.
parent_directory: el URI del directorio principal.
Transferencia entre nubes con Delta Lake
En el siguiente ejemplo se usa la instrucción LOAD DATA
para cargar datos en la tabla correspondiente:
LOAD DATA [INTO | OVERWRITE] table_name FROM FILES ( format = 'DELTA_LAKE', uris = ["parent_directory"] ) WITH CONNECTION connection_name;
Para ver más ejemplos de transferencias de datos entre nubes, consulta Cargar datos con operaciones entre nubes.
Consultar tablas de BigLake
Para obtener más información, consulta Consultar datos de Amazon S3.
Ver metadatos de recursos
Puede ver los metadatos de los recursos con las vistasINFORMATION_SCHEMA
. Cuando consultas las vistas
JOBS_BY_*
,
JOBS_TIMELINE_BY_*
y
RESERVATION*
,
debes especificar la ubicación de procesamiento de la consulta
que esté en la misma ubicación que la región de la tabla. Para obtener información sobre las ubicaciones de BigQuery Omni, consulta Ubicaciones. En el resto de las tablas del sistema, especificar la ubicación del trabajo de consulta es opcional.
Para obtener información sobre las tablas del sistema que admite BigQuery Omni, consulta Limitaciones.
Para consultar las tablas de sistema JOBS_*
y RESERVATION*
, seleccione uno de los siguientes métodos para especificar la ubicación de procesamiento:
Consola
Ve a la página BigQuery.
Si no se muestra la pestaña del editor, haz clic en
Redactar nueva consulta.Haz clic en Más > Configuración de consultas. Se abrirá el cuadro de diálogo Configuración de la consulta.
En el cuadro de diálogo Configuración de la consulta, en Configuración adicional > Ubicación de los datos, selecciona la región de BigQuery que esté ubicada en la misma zona que la región de BigQuery Omni. Por ejemplo, si tu región de BigQuery Omni es
aws-us-east-1
, especificaus-east4
.Seleccione los campos restantes y haga clic en Guardar.
bq
Usa la marca --location
para definir la ubicación de procesamiento del trabajo en la región de BigQuery que esté ubicada en la misma zona que la región de BigQuery Omni.
Por ejemplo, si tu región de BigQuery Omni es aws-us-east-1
, especifica us-east4
.
Ejemplo
bq query --use_legacy_sql=false --location=us-east4 \
"SELECT * FROM region-aws-us-east-1.INFORMATION_SCHEMA.JOBS limit 10;"
bq query --use_legacy_sql=false --location=asia-northeast3 \
"SELECT * FROM region-aws-ap-northeast-2.INFORMATION_SCHEMA.JOBS limit 10;"
API
Si ejecutas trabajos mediante programación,
define el argumento de ubicación en la región de BigQuery
que esté ubicada en la misma zona que la región de BigQuery Omni.
Por ejemplo, si tu región de BigQuery Omni es aws-us-east-1
, especifica us-east4
.
En el siguiente ejemplo se enumeran las tareas de actualización de metadatos de las últimas seis horas:
SELECT * FROM `region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_BY_PROJECT WHERE job_id LIKE '%metadata_cache_refresh%' AND creation_time > TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 6 HOUR) ORDER BY start_time desc LIMIT 10;
Sustituye REGION_NAME por tu región.
Controles de Servicio de VPC
Puedes usar perímetros de Controles de Servicio de VPC para restringir el acceso de BigQuery Omni a un servicio en la nube externo como capa de defensa adicional. Por ejemplo, los perímetros de Controles de Servicio de VPC pueden limitar las exportaciones de tus tablas de BigQuery Omni a un contenedor de Blob Storage o a un bucket de Amazon S3 específicos.
Para obtener más información sobre Controles de Servicio de VPC, consulta la información general sobre Controles de Servicio de VPC.
Permiso obligatorio
Asegúrate de que tienes los permisos necesarios para configurar perímetros de servicio. Para ver una lista de los roles de gestión de identidades y accesos necesarios para configurar Controles de Servicio de VPC, consulta la sección Control de acceso con IAM de la documentación de Controles de Servicio de VPC.
Configurar Controles de Servicio de VPC mediante la Google Cloud consola
En el menú de navegación de la consola, haga clic en Seguridad y, a continuación, en Controles de servicios de VPC. Google Cloud
Para configurar Controles de Servicio de VPC en BigQuery Omni, sigue los pasos que se indican en la guía Crear un perímetro de servicio. Cuando estés en el panel Reglas de salida, sigue estos pasos:
En el panel Reglas de salida, haz clic en Añadir regla.
En la sección Atributos FROM del cliente de API, seleccione una opción de la lista Identidad.
Selecciona A atributos de recursos externos.
Para añadir un recurso externo, haz clic en Añadir recursos externos.
En el cuadro de diálogo Añadir recurso externo, en Nombre del recurso externo, introduce un nombre de recurso válido. Por ejemplo:
En Amazon Simple Storage Service (Amazon S3):
s3://BUCKET_NAME
Sustituye BUCKET_NAME por el nombre de tu segmento de Amazon S3.
En Azure Blob Storage:
azure://myaccount.blob.core.windows.net/CONTAINER_NAME
Sustituye CONTAINER NAME por el nombre de tu contenedor de Blob Storage.
Para ver una lista de los atributos de las reglas de salida, consulta la referencia de reglas de salida.
Selecciona los métodos que quieras permitir en tus recursos externos:
- Si quieres permitir todos los métodos, selecciona Todos los métodos en la lista Métodos.
- Si quieres permitir métodos específicos, selecciona Método seleccionado, haz clic en Seleccionar métodos y, a continuación, selecciona los métodos que quieras permitir en tus recursos externos.
Haz clic en Crear perímetro.
Configurar Controles de Servicio de VPC con gcloud CLI
Para configurar Controles de Servicio de VPC con gcloud CLI, sigue estos pasos:
- Define la política de acceso predeterminada.
- Crea el archivo de entrada de la política de salida.
- Añada la política de salida.
Definir la política de acceso predeterminada
Una política de acceso es un contenedor de toda la organización para niveles de acceso y perímetros de servicio. Para obtener información sobre cómo definir una política de acceso predeterminada o cómo obtener el nombre de una política de acceso, consulta Gestionar una política de acceso.
Crear el archivo de entrada de la política de salida
Un bloque de reglas de salida define el acceso permitido desde dentro de un perímetro a los recursos que se encuentran fuera de él. En el caso de los recursos externos, la propiedad externalResources
define las rutas de los recursos externos a los que se permite el acceso desde dentro de tu perímetro de Controles de Servicio de VPC.
Las reglas de salida se pueden configurar mediante un archivo JSON o un archivo YAML. En el siguiente ejemplo se usa el formato .yaml
:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" *OR* - permission: "externalResource.read" externalResources: - EXTERNAL_RESOURCE_PATH egressFrom: identityType: IDENTITY_TYPE *OR* identities: - serviceAccount:SERVICE_ACCOUNT
egressTo
: muestra las operaciones de servicio permitidas en los Google Cloud recursos de los proyectos especificados que están fuera del perímetro.operations
: enumera los servicios, las acciones o los métodos accesibles a los que puede acceder un cliente que cumpla las condiciones del bloquefrom
.serviceName
: definebigquery.googleapis.com
para BigQuery Omni.methodSelectors
: lista los métodos a los que puede acceder un cliente que cumpla las condiciones defrom
. Para ver los métodos y permisos restringibles de los servicios, consulta Restricciones de métodos de servicio admitidas.method
: un método de servicio válido o\"*\"
para permitir todos los métodosserviceName
.permission
: un permiso de servicio válido, como\"*\"
,externalResource.read
oexternalResource.write
. Se permite el acceso a recursos fuera del perímetro para las operaciones que requieren este permiso.externalResources
: enumera los recursos externos a los que pueden acceder los clientes que se encuentran dentro de un perímetro. Sustituye EXTERNAL_RESOURCE_PATH por un segmento de Amazon S3 válido, comos3://bucket_name
, o por una ruta de contenedor de Blob Storage, comoazure://myaccount.blob.core.windows.net/container_name
.egressFrom
: muestra las operaciones de servicio permitidas en los recursos de Google Cloud de los proyectos especificados dentro del perímetro.identityType
oidentities
: define los tipos de identidad que pueden acceder a los recursos especificados fuera del perímetro. Sustituye IDENTITY_TYPE por uno de los siguientes valores válidos:ANY_IDENTITY
: para permitir todas las identidades.ANY_USER_ACCOUNT
: para permitir que todos los usuarios lo hagan.ANY_SERVICE_ACCOUNT
: para permitir todas las cuentas de servicio
identities
: muestra las cuentas de servicio que pueden acceder a los recursos especificados fuera del perímetro.serviceAccount
(opcional): sustituye SERVICE_ACCOUNT por la cuenta de servicio que puede acceder a los recursos especificados fuera del perímetro.
Ejemplos
En el siguiente ejemplo se muestra una política que permite operaciones de salida desde el interior del perímetro a la ubicación s3://mybucket
de Amazon S3 en AWS.
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - s3://mybucket - s3://mybucket2 egressFrom: identityType: ANY_IDENTITY
En el siguiente ejemplo se permiten las operaciones de salida a un contenedor de Blob Storage:
- egressTo: operations: - serviceName: bigquery.googleapis.com methodSelectors: - method: "*" externalResources: - azure://myaccount.blob.core.windows.net/mycontainer egressFrom: identityType: ANY_IDENTITY
Para obtener más información sobre las políticas de salida, consulta la referencia de reglas de salida.
Añade la política de salida
Para añadir la política de salida al crear un perímetro de servicio, usa el comando gcloud access-context-manager perimeters create
.
Por ejemplo, el siguiente comando crea un perímetro llamado omniPerimeter
que incluye el proyecto con el número de proyecto 12345
, restringe la API de BigQuery y añade una política de salida definida en el archivo egress.yaml
:
gcloud access-context-manager perimeters create omniPerimeter \ --title="Omni Perimeter" \ --resources=projects/12345 \ --restricted-services=bigquery.googleapis.com \ --egress-policies=egress.yaml
Para añadir la política de salida a un perímetro de servicio, usa el comando gcloud access-context-manager perimeters update
.
Por ejemplo, el siguiente comando añade una política de salida definida en el archivo egress.yaml
a un perímetro de servicio llamado omniPerimeter
:
gcloud access-context-manager perimeters update omniPerimeter --set-egress-policies=egress.yaml
Verificar el perímetro
Para verificar el perímetro, usa el comando gcloud access-context-manager perimeters describe
:
gcloud access-context-manager perimeters describe PERIMETER_NAME
Sustituye PERIMETER_NAME por el nombre del perímetro.
Por ejemplo, el siguiente comando describe el perímetro omniPerimeter
:
gcloud access-context-manager perimeters describe omniPerimeter
Para obtener más información, consulta Gestionar perímetros de servicio.
Permitir el acceso a Amazon S3 desde la VPC de BigQuery Omni
Como administrador de BigQuery, puedes crear una política de segmento de S3 para conceder acceso a BigQuery Omni a tus recursos de Amazon S3. De esta forma, solo las VPCs de BigQuery Omni autorizadas pueden interactuar con tu Amazon S3, lo que mejora la seguridad de tus datos.
Aplicar una política de segmentos de S3 para la VPC de BigQuery Omni
Para aplicar una política de segmento de S3, usa la CLI de AWS o Terraform:
CLI de AWS
Ejecuta el siguiente comando para aplicar una política de bucket de S3 que incluya una condición con el atributo aws:SourceVpc
:
aws s3api put-bucket-policy \ --bucket=BUCKET_NAME \ --policy "{ \"Version\": \"2012-10-17\", \"Id\": \"RestrictBucketReads\", \"Statement\": [ { \"Sid\": \"AccessOnlyToOmniVPC\", \"Principal\": \"*\", \"Action\": [\"s3:ListBucket\", \"s3:GetObject\"], \"Effect\": \"Allow\", \"Resource\": [\"arn:aws:s3:::BUCKET_NAME\", \"arn:aws:s3:::BUCKET_NAME/*\"], \"Condition\": { \"StringEquals\": { \"aws:SourceVpc\": \"VPC_ID\" } } } ] }"
Haz los cambios siguientes:
BUCKET_NAME
: el bucket de Amazon S3 al que quieres que acceda BigQuery.VPC_ID
: el ID de VPC de BigQuery Omni de la región de BigQuery Omni ubicada en el mismo lugar que el bucket de Amazon S3. Puedes encontrar esta información en la tabla de esta página.
Terraform
Añade lo siguiente a tu archivo de configuración de Terraform:
resource "aws_s3_bucket" "example" { bucket = "BUCKET_NAME" } resource "aws_s3_bucket_policy" "example" { bucket = aws_s3_bucket.example.id policy = jsonencode({ Version = "2012-10-17" Id = "RestrictBucketReads" Statement = [ { Sid = "AccessOnlyToOmniVPC" Effect = "Allow" Principal = "*" Action = ["s3:GetObject", "s3:ListBucket"] Resource = [ aws_s3_bucket.example.arn, "${aws_s3_bucket.example.arn}/*" ] Condition = { StringEquals = { "aws:SourceVpc": "VPC_ID" } } }, ] }) }
Haz los cambios siguientes:
BUCKET_NAME
: el bucket de Amazon S3 al que quieres que acceda BigQuery.VPC_ID
: el ID de VPC de BigQuery Omni de la región de BigQuery Omni ubicada en el mismo lugar que el bucket de Amazon S3.
IDs de recursos de VPC de BigQuery Omni
Region | ID de VPC |
---|---|
aws-ap-northeast-2 | vpc-0b488548024288af2 |
aws-ap-southeast-2 | vpc-0726e08afef3667ca |
aws-eu-central-1 | vpc-05c7bba12ad45558f |
aws-eu-west-1 | vpc-0e5c646979bbe73a0 |
aws-us-east-1 | vpc-0bf63a2e71287dace |
aws-us-west-2 | vpc-0cc24e567b9d2c1cb |
Limitaciones
Para ver una lista completa de las limitaciones que se aplican a las tablas de BigLake basadas en Amazon S3 y Blob Storage, consulta Limitaciones.
Siguientes pasos
- Consulta información sobre BigQuery Omni.
- Usa el laboratorio de BigQuery Omni con AWS.
- Consulta información sobre las tablas de BigLake.
- Consulte cómo exportar resultados de consultas a Amazon S3.
- Consulta cómo crear vistas materializadas sobre tablas de Amazon Simple Storage Service (Amazon S3) con la caché de metadatos habilitada.
- Consulta cómo hacer que los datos de Amazon S3 de una vista materializada estén disponibles localmente para las combinaciones creando una réplica de la vista materializada.