Crear tablas de BigLake de Blob Storage

En este documento se describe cómo crear una tabla de BigLake de Azure Blob Storage. Una tabla de BigLake te permite usar la delegación de acceso para consultar datos en Blob Storage. 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 Blob Storage, consulta Flujo de datos al consultar datos.

Antes de empezar

Asegúrate de que tienes una conexión para acceder a los datos de tu Blob Storage.

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

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, selecciona el proyecto en el que quieras crear el conjunto de datos.
  3. Abre la opción Ver acciones y haz clic en Crear conjunto de datos.
  4. En la página Crear conjunto de datos, especifica los siguientes detalles:
    1. En ID del conjunto de datos, introduzca un nombre único para el conjunto de datos.
    2. En Ubicación de los datos, elige una región admitida.
    3. 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 Azure no se eliminan cuando caduca la tabla.
    4. Si quieres usar la ordenación predeterminada, despliega la sección Opciones avanzadas y selecciona la opción Habilitar ordenación predeterminada.
    5. 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 azure-eastus2:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE SCHEMA mydataset
    OPTIONS (
      location = 'azure-eastus2');

  3. 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 datos

    Para 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 proyecto

  • DATASET_NAME: el nombre del conjunto de datos que quieres crear

    Para 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.

Crear tablas de BigLake a partir de datos sin particiones

Selecciona una de las opciones siguientes:

Consola

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  3. En la sección Información del conjunto de datos, haz clic en Crear tabla.

  4. En la página Crear tabla, ve a la sección Fuente y haz lo siguiente:

    1. En Crear tabla a partir de, selecciona Azure Blob Storage.
    2. En Seleccionar ruta de Azure Blob Storage, introduce una ruta de Blob Storage con el siguiente formato: azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH

      Haz los cambios siguientes:

      • AZURE_STORAGE_ACCOUNT_NAME: nombre de la cuenta de Blob Storage. La región de la cuenta debe ser la misma que la del conjunto de datos.
      • CONTAINER_NAME: nombre del contenedor de Blob Storage.
      • FILE_PATH: ruta de datos que apunta a los datos de Blob Storage. Por ejemplo, en un archivo CSV, FILE_PATH puede ser myfile.csv.
    3. En Formato de archivo, seleccione el formato de datos en Azure. Los formatos admitidos son AVRO, CSV, DELTA_LAKE, ICEBERG, JSONL, ORC y PARQUET.

  5. En la sección Destino, haga lo siguiente:

    1. En Conjunto de datos, elija el conjunto de datos adecuado.
    2. En el campo Tabla, introduce el nombre de la tabla.
    3. Verifica que el Tipo de tabla sea Tabla externa.
    4. En ID de conexión, elija el ID de conexión adecuado en el menú desplegable. Para obtener información sobre las conexiones, consulta Conectarse a Blob Storage.
  6. 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.

  7. Haz clic en Crear tabla.

SQL

Para crear una tabla de BigLake, usa la instrucción CREATE EXTERNAL TABLE con la cláusula WITH CONNECTION:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. En el editor de consultas, introduce la siguiente instrucción:

    CREATE EXTERNAL TABLE DATASET_NAME.TABLE_NAME
    WITH CONNECTION `AZURE_LOCATION.CONNECTION_NAME`
      OPTIONS (
        format = 'DATA_FORMAT',
        uris = ['azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH']);

    Haz los cambios siguientes:

    • DATASET_NAME: el nombre del conjunto de datos que has creado
    • TABLE_NAME: el nombre que quieras asignar a esta tabla.
    • AZURE_LOCATION: una ubicación de Azure en Google Cloud, como azure-eastus2
    • CONNECTION_NAME: el nombre de la conexión que has creado
    • DATA_FORMAT: cualquiera de los formatos federados de BigQuery admitidos, como AVRO, CSV, DELTA_LAKE o ICEBERG (vista previa).
    • AZURE_STORAGE_ACCOUNT_NAME: el nombre de la cuenta de almacenamiento de blobs
    • CONTAINER_NAME: el nombre del contenedor de Blob Storage
    • FILE_PATH: ruta de datos que apunta a los datos de Blob Storage

  3. Haz clic en Ejecutar.

Para obtener más información sobre cómo ejecutar consultas, consulta Ejecutar una consulta interactiva.

Ejemplo:

CREATE EXTERNAL TABLE absdataset.abstable
WITH CONNECTION `azure-eastus2.abs-read-conn`
  OPTIONS (
    format = 'CSV', uris = ['azure://account_name.blob.core.windows.net/container/path/file.csv']);

bq

Crea un archivo de definición de tabla:

bq mkdef  \
    --source_format=DATA_FORMAT \
    --connection_id=AZURE_LOCATION.CONNECTION_NAME \
    "azure://AZURE_STORAGE_ACCOUNT_NAME.blob.core.windows.net/CONTAINER_NAME/FILE_PATH" > table_def

Haz los cambios siguientes:

  • DATA_FORMAT: cualquiera de los formatos federados de BigQuery admitidos, como AVRO, CSV, ICEBERG o PARQUET
  • AZURE_LOCATION: una ubicación de Azure en Google Cloud, como azure-eastus2
  • CONNECTION_NAME: el nombre de la conexión que has creado
  • AZURE_STORAGE_ACCOUNT_NAME: el nombre de la cuenta de almacenamiento de blobs
  • CONTAINER_NAME: el nombre del contenedor de Blob Storage
  • FILE_PATH: la ruta de datos que apunta a los datos de Blob Storage

A continuación, crea la tabla de BigLake:

bq mk --external_table_definition=table_def DATASET_NAME.TABLE_NAME

Haz los cambios siguientes:

  • DATASET_NAME: el nombre del conjunto de datos que has creado
  • TABLE_NAME: el nombre que quieras asignar a esta tabla

Por ejemplo, los siguientes comandos crean una tabla de BigLake, my_dataset.my_table, que puede consultar los datos de Blob Storage almacenados en la ruta azure://account_name.blob.core.windows.net/container/path y que tiene una conexión de lectura en la ubicación azure-eastus2:

bq mkdef \
    --source_format=AVRO \
    --connection_id=azure-eastus2.read-conn \
    "azure://account_name.blob.core.windows.net/container/path" > table_def

bq mk \
    --external_table_definition=table_def my_dataset.my_table
.

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 Blob Storage.

Crear tablas de BigLake en datos con particiones

Puedes crear una tabla de BigLake para los datos con particiones de Hive en Blob Storage. 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

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, expande tu proyecto y selecciona un conjunto de datos.

  3. Haz clic en Ver acciones y, a continuación, en Crear tabla. Se abrirá el panel Crear tabla.

  4. En la sección Fuente, especifica los siguientes detalles:

    1. En Crear tabla a partir de, selecciona una de las siguientes opciones:

      • Amazon S3
      • Azure Blob Storage
    2. Proporciona la ruta a la carpeta con comodines. Por ejemplo:

      • En Amazon S3: s3://mybucket/*
      • En el caso de Blob Storage: azure://mystorageaccount.blob.core.windows.net/mycontainer/*

      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.

    3. En la lista Formato de archivo, selecciona el tipo de archivo.

    4. Seleccione la casilla Partición de datos de origen y, a continuación, especifique los siguientes detalles:

      1. En Selecciona el prefijo del URI de origen, introduce el prefijo del URI. Por ejemplo, s3://mybucket/my_files.
      2. 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.
      3. 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.
  5. En la sección Destino, especifica los siguientes detalles:

    1. En Proyecto, selecciona el proyecto en el que quieras crear la tabla.
    2. En Conjunto de datos, selecciona el conjunto de datos en el que quieras crear la tabla.
    3. En Tabla, introduce el nombre de la tabla que quieras crear.
    4. En Tipo de tabla, comprueba que esté seleccionada la opción Tabla externa.
    5. En ID de conexión, selecciona la conexión que has creado anteriormente.
  6. 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.

  7. 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.

  8. Haz clic en Crear tabla.

SQL

Usa la CREATE EXTERNAL TABLEdeclaración de DDL:

  1. En la Google Cloud consola, ve a la página BigQuery.

    Ir a BigQuery

  2. 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"
    );

    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ón
    • PARTITION_COLUMN_TYPE: el tipo de la columna de partición
    • REGION: 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: prefijo de URI de partición de Hive. Por ejemplo:

      • s3://mybucket/
      • azure://mystorageaccount.blob.core.windows.net/mycontainer/
    • FILE_PATH: ruta a la fuente de datos de la tabla externa que quieras crear. Por ejemplo:

      • s3://mybucket/*.parquet
      • azure://mystorageaccount.blob.core.windows.net/mycontainer/*.parquet
    • TABLE_FORMAT: el formato de la tabla que quieres crear (por ejemplo, PARQUET)

  3. 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/*']
);

En el siguiente ejemplo se crea una tabla de BigLake sobre datos particionados en Blob Storage. Se especifica el esquema.

CREATE EXTERNAL TABLE `my_dataset.my_table`
(
  ProductId INTEGER,
  ProductName, STRING,
  ProductType, STRING
)
WITH PARTITION COLUMNS
(
  sku STRING,
)
WITH CONNECTION `us.my-connection`
OPTIONS(
  hive_partition_uri_prefix = "azure://mystorageaccount.blob.core.windows.net/mycontainer/products",
  uris = ['azure://mystorageaccount.blob.core.windows.net/mycontainer/*']
);

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 \
 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 es false.
  • URIS: la ruta a la carpeta de Amazon S3 o Blob Storage, 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=GCS_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 --external_table_definition=DEFINITION_FILE \
DATASET_NAME.TABLE_NAME \
SCHEMA

Haz los cambios siguientes:

  • 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 formato field: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 --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 \
  s3://mybucket/myTable/* > mytable_def

bq mk --external_table_definition=mytable_def \
  mydataset.mytable \
  Region:STRING,Quarter:STRING,Total_sales:INTEGER

En el siguiente ejemplo se usa el modo de partición de CUSTOM Hive para los datos de almacenamiento de blobs:

bq mkdef --source_format=CSV \
  --connection_id=us.my-connection \
  --hive_partitioning_mode=CUSTOM \
  --hive_partitioning_source_uri_prefix=azure://mystorageaccount.blob.core.windows.net/mycontainer/{dt:DATE}/{val:STRING} \
  azure://mystorageaccount.blob.core.windows.net/mycontainer/* > mytable_def

bq mk --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:

  1. 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 actualizar

    • DATASET: el conjunto de datos que contiene la tabla que quieres actualizar

    • TABLE: 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 Blob Storage.

Ver metadatos de recursos con INFORMATION_SCHEMA

Puede ver los metadatos de recursos con las vistas INFORMATION_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

  1. Ve a la página BigQuery.

    Ir a BigQuery

  2. Si no se muestra la pestaña del editor, haz clic en Redactar nueva consulta.

  3. Haz clic en Más > Configuración de consultas. Se abrirá el cuadro de diálogo Configuración de la consulta.

  4. 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, especifica us-east4.

  5. 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-azure-eastus2.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.

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

  1. 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

    Ir a Controles de Servicio de VPC

  2. 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:

    1. En el panel Reglas de salida, haz clic en Añadir regla.

    2. En la sección Atributos FROM del cliente de API, seleccione una opción de la lista Identidad.

    3. Selecciona A atributos de recursos externos.

    4. Para añadir un recurso externo, haz clic en Añadir recursos externos.

    5. 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.

    6. Selecciona los métodos que quieras permitir en tus recursos externos:

      1. Si quieres permitir todos los métodos, selecciona Todos los métodos en la lista Métodos.
      2. 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.
    7. 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:

  1. Define la política de acceso predeterminada.
  2. Crea el archivo de entrada de la política de salida.
  3. 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 bloque from.

  • serviceName: define bigquery.googleapis.com para BigQuery Omni.

  • methodSelectors: lista los métodos a los que puede acceder un cliente que cumpla las condiciones de from. 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étodos serviceName.

  • permission: un permiso de servicio válido, como \"*\", externalResource.read o externalResource.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, como s3://bucket_name, o por una ruta de contenedor de Blob Storage, como azure://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 o identities: 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 Blob Storage desde la VPC de BigQuery Omni

Como administrador de BigQuery, puedes crear una regla de red para conceder acceso a BigQuery Omni a tus recursos de Blob Storage. De esta forma, solo las VPCs de BigQuery Omni autorizadas pueden interactuar con tu Blob Storage, lo que mejora la seguridad de tus datos.

Aplicar una regla de red a la VPC de BigQuery Omni

Para aplicar una regla de red, usa Azure PowerShell o Terraform:

Azure PowerShell

Ejecuta el siguiente comando para añadir una regla de red a tu cuenta de almacenamiento que especifique los IDs de subred de BigQuery Omni obtenidos como VirtualNetworkResourceId.

  Add-AzStorageAccountNetworkRule`
   -ResourceGroupName "RESOURCE_GROUP_NAME"`
   -Name "STORAGE_ACCOUNT_NAME"`
   -VirtualNetworkResourceId "SUBNET_ID1","SUBNET_ID2"

Haz los cambios siguientes:

  • RESOURCE_GROUP_NAME: el nombre del grupo de recursos.
  • STORAGE_ACCOUNT_NAME: el nombre de la cuenta de almacenamiento.
  • SUBNET_ID1,SUBNET_ID1: los IDs de subred. 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 "azurerm_storage_account_network_rules" "example" {
    storage_account_name       = "STORAGE_ACCOUNT_NAME"
    resource_group_name        = "RESOURCE_GROUP_NAME"
    default_action             = "Allow"
    bypass                     = ["Logging", "Metrics", "AzureServices"]
    virtual_network_subnet_ids = ["SUBNET_ID1","SUBNET_ID2"]
  }

Haz los cambios siguientes:

  • STORAGE_ACCOUNT_NAME: el nombre de la cuenta de almacenamiento.
  • RESOURCE_GROUP_NAME: el nombre del grupo de recursos.
  • SUBNET_ID1,SUBNET_ID1: los IDs de subred. Puedes encontrar esta información en la tabla de esta página.

IDs de recursos de VPC de BigQuery Omni

Region IDs de subred
azure-eastus2 /subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus21-yurduaaaaa-private
/subscriptions/95f30708-58d1-48ba-beac-d71870c3b2f5/resourceGroups/bqe-prod-eastus2-resource-group/providers/Microsoft.Network/virtualNetworks/bqe-prod-eastus2-network/subnets/azure-prod-eastus22-yurduaaaab-private

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