Crear tablas de objetos
En este documento se describe cómo acceder a datos no estructurados en BigQuery creando una tabla de objetos.
Para crear una tabla de objetos, debes completar las siguientes tareas:
- Crea una conexión para leer información de objetos de Cloud Storage.
- Asigna el rol Lector de objetos de Storage (
roles/storage.objectViewer
) a la cuenta de servicio asociada a la conexión. - Crea la tabla de objetos y asóciala a la conexión mediante la instrucción
CREATE EXTERNAL TABLE
.
Antes de empezar
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator
(
roles/resourcemanager.projectCreator
), which contains theresourcemanager.projects.create
permission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the BigQuery and BigQuery Connection API APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin
), which contains theserviceusage.services.enable
permission. Learn how to grant roles. - Asegúrate de que tu administrador de BigQuery haya creado una conexión y configurado el acceso a Cloud Storage.
Administrador de lago de datos
Para obtener los permisos que necesitas para conectarte a Cloud Storage, pide a tu administrador que te asigne el rol Administrador de conexiones de BigQuery (
roles/bigquery.connectionAdmin
) en el proyecto.Para obtener los permisos que necesitas para crear y gestionar segmentos de Cloud Storage, pide a tu administrador que te conceda el rol Administrador de Storage (
roles/storage.admin
) en el proyecto.Este rol predefinido contiene los permisos necesarios para conectarse a Cloud Storage y crear y gestionar segmentos de Cloud Storage. Para ver los permisos exactos que se necesitan, despliega la sección Permisos obligatorios:
Permisos obligatorios
bigquery.connections.create
bigquery.connections.get
bigquery.connections.list
bigquery.connections.update
bigquery.connections.use
bigquery.connections.delete
storage.bucket.*
storage.object.*
Administrador de almacén de datos
Para obtener los permisos que necesita para crear tablas de objetos, pida a su administrador que le conceda los siguientes roles en el proyecto:
- Rol Editor de datos de BigQuery (
roles/bigquery.dataEditor
). - Rol Administrador de conexión de BigQuery (
roles/bigquery.connectionAdmin
).
Este rol predefinido contiene los permisos necesarios para crear tablas de objetos. Para ver los permisos exactos que se necesitan, despliega la sección Permisos obligatorios:
Permisos obligatorios
bigquery.tables.create
bigquery.tables.update
bigquery.connections.delegate
- Rol Editor de datos de BigQuery (
Analista de datos
Para obtener los permisos que necesitas para consultar tablas de objetos, pide a tu administrador que te conceda los siguientes roles en el proyecto:
- Rol Lector de datos de BigQuery (
roles/bigquery.dataViewer
) - Rol Usuario de conexión de BigQuery (
roles/bigquery.connectionUser
)
Este rol predefinido contiene los permisos necesarios para consultar tablas de objetos. Para ver los permisos exactos que se necesitan, despliega la sección Permisos obligatorios:
Permisos obligatorios
bigquery.jobs.create
bigquery.tables.get
bigquery.tables.getData
bigquery.readsessions.create
También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.
- Rol Lector de datos de BigQuery (
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_ID.TABLE_NAME` WITH CONNECTION {`PROJECT_ID.REGION.CONNECTION_ID`| DEFAULT} OPTIONS( object_metadata = 'SIMPLE', uris = ['BUCKET_PATH'[,...]], max_staleness = STALENESS_INTERVAL, metadata_cache_mode = 'CACHE_MODE');
Haz los cambios siguientes:
PROJECT_ID
: tu ID de proyecto.DATASET_ID
: el ID del conjunto de datos que contiene la tabla de objetos.TABLE_NAME
: el nombre de la tabla de objetos.REGION
: la región o multirregión que contiene la conexión.CONNECTION_ID
: ID de la conexión de recursos en la nube que se va a usar con esta tabla de objetos. La conexión determina qué cuenta de servicio se usa para leer datos de Cloud Storage.Cuando consultas los detalles de la conexión en la consola de Google Cloud , el ID de conexión es el valor de la última sección del ID de conexión completo que se muestra en ID de conexión, por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.Para usar una conexión predeterminada, especifica
DEFAULT
en lugar de la cadena de conexión que contiene PROJECT_ID.REGION.CONNECTION_ID.BUCKET_PATH
: ruta al segmento de Cloud Storage que contiene los objetos representados por la tabla de objetos, con el formato['gs://bucket_name/[folder_name/]*']
.Puede usar un carácter comodín de asterisco (
*
) en cada ruta para limitar los objetos incluidos en la tabla de objetos. Por ejemplo, si el contenedor contiene varios tipos de datos no estructurados, puede crear la tabla de objetos solo con objetos PDF especificando['gs://bucket_name/*.pdf']
. Para obtener más información, consulta Compatibilidad con comodines para URIs de Cloud Storage.Puedes especificar varios contenedores para la opción
uris
proporcionando varias rutas, por ejemplo,['gs://mybucket1/*', 'gs://mybucket2/folder5/*']
.Para obtener más información sobre cómo usar URIs de Cloud Storage en BigQuery, consulta Ruta de recursos de Cloud Storage.
STALENESS_INTERVAL
: especifica si las operaciones en la tabla de objetos usan metadatos almacenados en caché y cuánto tiempo deben haber pasado desde la última actualización de los metadatos almacenados en caché para que la operación los pueda usar. 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.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 Cloud Storage.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 el artículo 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.PROJECT_ID
: tu ID de proyecto.DATASET_ID
: el ID del conjunto de datos que contiene la tabla de objetos.TABLE_NAME
: el nombre de la tabla de objetos.REGION
: la región o multirregión que contiene la conexión.CONNECTION_ID
: el ID de la conexión de recursos en la nube que se va a usar con esta tabla externa. La conexión determina qué cuenta de servicio se usa para leer datos de Cloud Storage.Cuando consultas los detalles de la conexión en la consola de Google Cloud , el ID de conexión es el valor de la última sección del ID de conexión completo que se muestra en ID de conexión. Por ejemplo,
projects/myproject/locations/connection_location/connections/myconnection
.BUCKET_PATH
: ruta al segmento de Cloud Storage que contiene los objetos representados por la tabla de objetos, con el formatogs://bucket_name/[folder_name/]*
.Puede usar un carácter comodín de asterisco (
*
) en cada ruta para limitar los objetos incluidos en la tabla de objetos. Por ejemplo, si el contenedor contiene varios tipos de datos no estructurados, puede crear la tabla de objetos solo con objetos PDF especificandogs://bucket_name/*.pdf
. Para obtener más información, consulta Compatibilidad con comodines para URIs de Cloud Storage.Puedes especificar varios contenedores para la opción
uris
proporcionando varias rutas, por ejemplo,gs://mybucket1/*,gs://mybucket2/folder5/*
.Para obtener más información sobre cómo usar URIs de Cloud Storage en BigQuery, consulta Ruta de recursos de Cloud Storage.
STALENESS_INTERVAL
: especifica si las operaciones en la tabla de objetos usan metadatos almacenados en caché y cuánto tiempo deben haber pasado desde la última actualización de los metadatos almacenados en caché para que la operación los pueda usar. 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.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 intervalo entre 30 minutos y 7 días con el formato
Y-M D H:M:S
descrito en la documentación del tipo de datosINTERVAL
. Por ejemplo, especifica0-0 0 4:0:0
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 Cloud Storage.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 el artículo 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.- Abre Cloud Shell.
-
Define el Google Cloud proyecto Google Cloud predeterminado en el que quieras aplicar tus configuraciones de Terraform.
Solo tiene que ejecutar este comando una vez por proyecto y puede hacerlo en cualquier directorio.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Las variables de entorno se anulan si defines valores explícitos en el archivo de configuración de Terraform.
-
En Cloud Shell, crea un directorio y un archivo nuevo en ese directorio. El nombre del archivo debe tener la extensión
.tf
. Por ejemplo,main.tf
. En este tutorial, nos referiremos al archivo comomain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si estás siguiendo un tutorial, puedes copiar el código de ejemplo de cada sección o paso.
Copia el código de ejemplo en el archivo
main.tf
que acabas de crear.También puedes copiar el código de GitHub. Se recomienda cuando el fragmento de Terraform forma parte de una solución integral.
- Revisa y modifica los parámetros de ejemplo para aplicarlos a tu entorno.
- Guarda los cambios.
-
Inicializa Terraform. Solo tienes que hacerlo una vez por directorio.
terraform init
Si quieres usar la versión más reciente del proveedor de Google, incluye la opción
-upgrade
:terraform init -upgrade
-
Revisa la configuración y comprueba que los recursos que va a crear o actualizar Terraform se ajustan a tus expectativas:
terraform plan
Haga las correcciones necesarias en la configuración.
-
Aplica la configuración de Terraform ejecutando el siguiente comando e introduciendo
yes
en la petición:terraform apply
Espera hasta que Terraform muestre el mensaje "Apply complete!".
- Abre tu Google Cloud proyecto para ver los resultados. En la Google Cloud consola, ve a tus recursos en la interfaz de usuario para asegurarte de que Terraform los ha creado o actualizado.
- Consulta cómo ejecutar inferencias en tablas de objetos de imagen.
- Consulta cómo analizar tablas de objetos mediante funciones remotas.
Roles obligatorios
Para trabajar con tablas de objetos, los usuarios necesitan los siguientes permisos de gestión de identidades y accesos en función de su rol en la organización. Para obtener más información sobre los roles de usuario, consulta el modelo de seguridad. Para obtener más información sobre cómo conceder permisos, consulta el artículo Ver los roles que se pueden conceder en los recursos.
Crear tablas de objetos
Antes de crear una tabla de objetos, debe tener un conjunto de datos que la contenga. Para obtener más información, consulta el artículo Crear conjuntos de datos.
Para crear una tabla de objetos, sigue estos pasos:
SQL
Usa la instrucción CREATE EXTERNAL TABLE
.
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 objetos con un intervalo de obsolescencia de la caché de metadatos de 1 día:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://mybucket/*'], max_staleness = INTERVAL 1 DAY, metadata_cache_mode = 'AUTOMATIC' );
En el siguiente ejemplo se crea una tabla de objetos a partir de los objetos de tres segmentos de Cloud Storage:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bucket1/*','gs://bucket2/folder1/*','gs://bucket3/*'] );
En el siguiente ejemplo se crea una tabla de objetos que contiene solo los objetos PDF de un segmento de Cloud Storage:
CREATE EXTERNAL TABLE `my_dataset.object_table` WITH CONNECTION `us.my-connection` OPTIONS( object_metadata = 'SIMPLE', uris = ['gs://bucket1/*.pdf'] );
bq
Usa el comando bq mk
.
bq mk --table \ --external_table_definition=BUCKET_PATH@REGION.CONNECTION_ID \ --object_metadata=SIMPLE \ --max_staleness=STALENESS_INTERVAL \ --metadata_cache_mode=CACHE_MODE \ PROJECT_ID:DATASET_ID.TABLE_NAME
Haz los cambios siguientes:
Ejemplos
En el siguiente ejemplo se crea una tabla de objetos con un intervalo de obsolescencia de la caché de metadatos de 1 día:
bq mk --table \ --external_table_definition=gs://mybucket/*@us.my-connection \ --object_metadata=SIMPLE \ --max_staleness=0-0 1 0:0:0 \ --metadata_cache_mode=AUTOMATIC \ my_dataset.object_table
En el siguiente ejemplo se crea una tabla de objetos a partir de los objetos de tres segmentos de Cloud Storage:
bq mk --table \ --external_table_definition=gs://bucket1/*,gs://bucket2/folder1/*,gs://bucket3/*@us.my-connection \ --object_metadata=SIMPLE \ my_dataset.object_table
En el siguiente ejemplo se crea una tabla de objetos que contiene solo los objetos PDF de un segmento de Cloud Storage:
bq mk --table \ --external_table_definition=gs://bucket1/*.pdf@us.my-connection \ --object_metadata=SIMPLE \ my_dataset.object_table
API
Llama al método tables.insert
.
Incluye un objeto ExternalDataConfiguration
con el campo objectMetadata
definido como SIMPLE
en el recurso Table
que envíes.
En el siguiente ejemplo se muestra cómo llamar a este método mediante curl
:
ACCESS_TOKEN=$(gcloud auth print-access-token) curl \
-H "Authorization: Bearer ${ACCESS_TOKEN}" \
-H "Content-Type: application/json" \
-X POST \
-d '{"tableReference": {"projectId": "my_project", "datasetId": "my_dataset", "tableId": "object_table_name"}, "externalDataConfiguration": {"objectMetadata": "SIMPLE", "sourceUris": ["gs://mybucket/*"]}}' \
https://www.googleapis.com/bigquery/v2/projects/my_project/datasets/my_dataset/tables
Terraform
En este ejemplo se crea una tabla de objetos con el almacenamiento en caché de metadatos habilitado y la actualización manual.
Para autenticarte en BigQuery, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta Configurar la autenticación para bibliotecas de cliente.
Los campos clave que se deben especificar en una tabla de objetos son google_bigquery_table.external_data_configuration.object_metadata
, google_bigquery_table.external_data_configuration.metadata_cache_mode
y google_bigquery_table.max_staleness
. Para obtener más información sobre cada recurso, consulta la documentación de Terraform BigQuery.
Para aplicar la configuración de Terraform en un proyecto, sigue los pasos que se indican en las siguientes secciones. Google Cloud
Preparar Cloud Shell
Preparar el directorio
Cada archivo de configuración de Terraform debe tener su propio directorio (también llamado módulo raíz).
Aplica los cambios
Consultar tablas de objetos
Puedes consultar una tabla de objetos como cualquier otra tabla de BigQuery. Por ejemplo:
SELECT * FROM mydataset.myobjecttable;
Al consultar una tabla de objetos, se devuelven los metadatos de los objetos subyacentes. Para obtener más información, consulta el esquema de la tabla de objetos.