Crea y administra tablas de BigLake

En este documento, se analiza cómo implementar tablas de BigLake y se supone que estás familiarizado con las tablas de base de datos y la administración de permisos. Para obtener una descripción general de las tablas de BigLake, consulta Introducción a las tablas de BigLake.

Antes de comenzar

  1. En la página del selector de proyectos de la consola de Google Cloud, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyectos

    Para este instructivo, recomendamos crear un proyecto de prueba a fin de asegurarte de que las cargas de trabajo de producción no se vean afectadas.

  2. Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.

  3. Habilita BigQuery Connection API.

    Habilita la API

    Si deseas leer tablas de BigLake de motores de código abierto, como Apache Spark, debes habilitar la API de lectura de almacenamiento de BigQuery.

  4. En la consola de Google Cloud, activa Cloud Shell.

    Activar Cloud Shell

  5. Asegúrate de que tu versión del SDK de Google Cloud sea 366.0.0 o posterior:

    gcloud version
    

    Si es necesario, actualiza el SDK de Google Cloud.

  6. Opcional: Para Terraform, usa la versión 4.25.0 o una posterior de Terraform GCP. Puedes descargar la última versión desde las descargas de HashiCorp Terraform.

Permisos de IAM

Para trabajar con tablas de BigLake, tus usuarios necesitan los siguientes permisos de Identity and Access Management (IAM) según su rol en la organización. Para obtener más información sobre los roles de los usuarios, consulta Modelo de seguridad. Para obtener más información sobre cómo otorgar permisos, consulta Visualiza los roles que se pueden otorgar en los recursos.

  • Administrador de data lake:
    • bigquery.connections.create
    • bigquery.connections.delete
    • bigquery.connections.list
    • bigquery.connections.update
  • Administrador del almacén de datos:
    • bigquery.tables.create
    • bigquery.tables.update
    • bigquery.connections.delegate
  • Analista de datos:
    • bigquery.jobs.create
    • bigquery.tables.get
    • bigquery.tables.getData
    • bigquery.readsessions.create

Consideración de la ubicación

Si usas Cloud Storage para almacenar archivos de datos, te recomendamos que uses buckets de Cloud Storage de una sola región o de una región doble. para obtener un rendimiento óptimo. No utilices buckets multirregionales.

Crea y visualiza un recurso de conexión

BigLake usa un recurso de conexión para acceder a los data lakes. Puedes asociar un recurso de conexión con una sola tabla o un grupo arbitrario de tablas en un proyecto.

Crea una conexión de recurso en la nube

Selecciona una de las opciones siguientes:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. Para crear una conexión, haz clic en Agregar datos y, luego, en Fuente de datos externa.

  3. En la lista Tipo de conexión, selecciona BigLake y funciones remotas (Cloud Resource).

  4. En el campo ID de conexión, ingresa un nombre para tu conexión.

  5. Haga clic en Crear conexión.

  6. En el panel Explorador, haz clic en la conexión del proyecto que usaste para crear el recurso de conexión. Se muestra la información de conexión:

    Consulta la información de conexión.

  7. En la sección Información de conexión, copia el ID de la cuenta de servicio porque lo necesitarás en un paso posterior.

bq

  1. En un entorno de línea de comandos, crea una conexión:

    bq mk --connection --location=REGION --project_id=PROJECT_ID \
        --connection_type=CLOUD_RESOURCE CONNECTION_ID
    

    El parámetro --project_id anula el proyecto predeterminado.

    Reemplaza lo siguiente:

    • REGION: tu región de conexión
    • PROJECT_ID: El ID del proyecto de Cloud
    • CONNECTION_ID: Es un ID para tu conexión.

    Cuando creas un recurso de conexión, BigQuery crea una cuenta de servicio del sistema única y la asocia con la conexión.

  2. Recupera y copia el ID de cuenta de servicio porque lo necesitarás en otro paso:

    bq show --connection PROJECT_ID.REGION.CONNECTION_ID
    

    El resultado es similar a este:

    name                          properties
    1234.REGION.CONNECTION_ID     {"serviceAccountId": "connection-1234-9u56h9@gcp-sa-bigquery-condel.iam.gserviceaccount.com"}
    

Terraform

Agrega la siguiente sección a tu archivo main.tf.

 ## This creates a cloud resource connection.
 ## Note: The cloud resource nested object has only one output only field - serviceAccountId.
 resource "google_bigquery_connection" "connection" {
    connection_id = "CONNECTION_ID"
    project = "PROJECT_ID"
    location = "REGION"
    cloud_resource {}
}        
Reemplaza lo siguiente:

  • CONNECTION_ID: Es un ID para tu conexión.
  • PROJECT_ID: El ID del proyecto de Cloud
  • REGION: tu región de conexión

Si recibes el siguiente error de conexión, actualiza el SDK de Google Cloud:

Flags parsing error: flag --connection_type=CLOUD_RESOURCE: value should be one of...

Crea una conexión de AWS de BigQuery

Para conectarte a AWS, debes crear una conexión de AWS de BigQuery. Cuando creas un recurso de conexión, BigQuery crea un ID único y lo asocia con la conexión.

Crea una conexión de Azure para BigQuery

BigQuery Omni proporciona dos métodos para acceder de forma segura a los datos desde Azure Blob Storage. Puedes usar la federación de identidades si otorgas a una cuenta de servicio de Google Cloud acceso a la aplicación de Azure o puedes otorgar acceso directo a la aplicación de Azure Active Directory (AD) en el usuario.

Configura el acceso a un data lake

En los pasos siguientes, le otorgas al recurso de conexión nuevo acceso de solo lectura al data lake para que BigQuery pueda acceder a los archivos en nombre de los usuarios.

Configura el acceso a Cloud Storage

Selecciona una de las opciones siguientes:

Console

Recomendamos que otorgues a la cuenta de servicio de recurso de conexión la función de IAM de Visualizador de objetos de almacenamiento(roles/storage.objectViewer), que permite que la cuenta de servicio acceda a los buckets de Cloud Storage.

Console

  1. Ir a la página IAM y administración

    Ir a IAM y administración

  2. Haga clic en Agregar.

    Se abre el cuadro de diálogo Agregar principales.

  3. En el campo Principales nuevas (New principals), ingresa el ID de la cuenta de servicio que copiaste antes.

  4. En el campo Selecciona una función, elige Cloud Storage y, luego, Visualizador de objetos de almacenamiento.

  5. Haz clic en Guardar.

gsutil

Usa el comando gsutil iam ch:

gsutil iam ch serviceAccount:MEMBER:objectViewer gs://example-bucket

Reemplaza MEMBER por el ID de la cuenta de servicio que copiaste antes, por ejemplo, example@gcp-sa-bigquery-condel.iam.gserviceaccount.com.

Para obtener más información, consulta Agrega una principal a una política a nivel del bucket.

Terraform

Agrega la siguiente sección a tu archivo main.tf.

## This grants permissions to the service account of the connection created in the last step.
resource "google_project_iam_member" "connectionPermissionGrant" {
    project = "PROJECT_ID"
    role = "roles/storage.objectViewer"
    member = format("serviceAccount:%s", google_bigquery_connection.connection.cloud_resource[0].service_account_id)
}    

Después de migrar usuarios a tablas de BigLake, quita sus permisos para acceder directamente a Cloud Storage. El acceso directo a los archivos permite que los usuarios omitan las políticas de administración (como la seguridad a nivel de fila y de columna) establecidas en las tablas de BigLake.

Configura el acceso a Amazon S3

Para acceder a los datos de S3, debes agregar una relación de confianza a la función de AWS. Sin embargo, si tu cuenta de AWS tiene un proveedor de identidad personalizado, sigue las instrucciones en Configura un proveedor de identidad de AWS personalizado.

Configura el acceso a Azure

Según cómo te conectas a Azure, los pasos para configurar el acceso a tu app de Azure varían. Si usas la federación de identidades para acceder a los datos almacenados en Azure, sigue estos pasos:

  1. Agrega la credencial federada a la aplicación de Azure.
  2. Asigna un rol a las aplicaciones de Azure de BigQuery

Si usaste una identidad no federada, sigue estos pasos:

  1. Crea un principal del servicio de Azure AD.
  2. Asigna un rol a las aplicaciones de Azure AD de BigQuery.

Crea una tabla de BigLake

Si estás familiarizado con la creación de tablas en BigQuery, el proceso de creación de una tabla de BigLake es similar. La tabla puede estar en cualquier formato de archivo compatible con BigLake. Para obtener más información, consulta Limitaciones.

Crea una tabla de BigLake para Cloud Storage

Antes de crear una tabla de BigLake, debes tener un conjunto de datos. Para crear una tabla de BigLake, elige una de las siguientes opciones:

Console

  1. Ve a la página de BigQuery.

    Ir a BigQuery

  2. En el panel Explorador, selecciona el conjunto de datos en el que deseas crear una tabla y, luego, haz clic en Crear tabla.

  3. En Crear tabla desde, selecciona Google Cloud Storage y, luego, selecciona la fuente de datos de la tabla externa de tu bucket de Cloud Storage.

  4. En Formato de archivo, selecciona el formato que coincida con tu archivo.

  5. En el campo Tabla, ingresa un nombre para tu tabla, por ejemplo, mytable.

  6. En Tipo de tabla, establece el tipo de tabla como Tabla externa. De forma predeterminada, la casilla de verificación Crear una tabla de BigLake con una conexión de recurso de Cloud está seleccionada.

  7. En ID de conexión, selecciona la conexión que creaste antes.

  8. Haz clic en Crear tabla.

SQL

Para crear una tabla de BigLake cuando se conecta a una tabla de Cloud Storage externa, usa la CREATE EXTERNAL TABLEdeclaración DDL:

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

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente sentencia:

    CREATE EXTERNAL TABLE `PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME`
      WITH CONNECTION `PROJECT_ID.REGION.CONNECTION_ID`
      OPTIONS (
        format ="TABLE_FORMAT",
        uris = ['FILE_PATH']);
    

    Reemplaza lo siguiente:

    • DATASET: el nombre del conjunto de datos de BigQuery en el que deseas crear una tabla, por ejemplo, mydataset
    • EXTERNAL_FILE_NAME: el nombre de la tabla que deseas crear, por ejemplo, mytable.
    • TABLE_FORMAT: el formato de la tabla que deseas crear, por ejemplo, PARQUET
    • FILE_PATH: ruta de acceso a la fuente de datos para la tabla externa que deseas crear, por ejemplo, gs://mybucket/myfile.parquet

  3. Haz clic en Ejecutar.

Si quieres obtener información para ejecutar consultas, visita Ejecuta consultas interactivas.

bq

En un entorno de línea de comandos, usa el decorador @connection para especificar la conexión que se usará al final del parámetro --external_table_definition:

bq mk \
    --table \
    --external_table_definition=TABLE_FORMAT=FILE_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
    PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME

Reemplaza lo siguiente:

  • TABLE_FORMAT: el formato de la tabla que deseas crear, por ejemplo, PARQUET.
  • FILE_PATH: La ruta de acceso a la fuente de datos para la tabla externa que deseas crear, por ejemplo, gs://mybucket/myfile.parquet
  • DATASET: El nombre del conjunto de datos de BigQuery en el que deseas crear una tabla, por ejemplo, mydataset
  • EXTERNAL_TABLE_NAME: El nombre de la tabla que deseas crear, por ejemplo, mytable.

Terraform

Agrega la siguiente sección a tu archivo main.tf. Si usas la detección automática de esquemas, quita el comentario de las líneas relevantes en la siguiente sección.

## This creates a dataset for your table.
resource "google_bigquery_dataset" "dataset" {
    provider                    = google
    project                     = "PROJECT_ID"
    dataset_id                  = "DATASET"
    location                    = "REGION"
}
## If you are using schema autodetect, uncomment the following to set up ## a delay to give IAM changes time to propagate. #resource "time_sleep" "wait_7_min" { #depends_on = [google_project_iam_member.connectionPermissionGrant] #create_duration = "7m" #}
## This creates a table using the connection id. resource "google_bigquery_table" "biglakeTable" { ## If you are using schema autodetect, uncomment the following to ## set up a dependency on the prior delay. # depends_on = [time_sleep.wait_7_min] dataset_id = google_bigquery_dataset.dataset.dataset_id table_id = "EXTERNAL_TABLE_NAME" project = "PROJECT_ID" schema = <<EOF [ { "name": "country", "type": "STRING" }, { "name": "product", "type": "STRING" }, { "name": "price", "type": "INT64" } ] EOF external_data_configuration { ## Autodetect determines whether schema autodetect is active or inactive. autodetect = AUTODETECT_BOOLEAN source_format = "PARQUET" connection_id = google_bigquery_connection.connection.name source_uris = [ "gs://huron-userguide-demo/orders/*.parquet", ] } deletion_protection = false }

Reemplaza lo siguiente:

  • DATASET: El nombre del conjunto de datos de BigQuery en el que deseas crear una tabla, por ejemplo, mydataset
  • EXTERNAL_TABLE_NAME: El nombre de la tabla que deseas crear, por ejemplo, mytable.
  • AUTODETECT_BOOLEAN: define si usas la detección automática de esquemas en tu proyecto, por ejemplo, verdadero o falso

BigLake admite la detección automática de esquemas. Sin embargo, si no proporcionaste un esquema y no se le otorgó acceso a la cuenta de servicio en los pasos anteriores, estos pasos fallarán con un mensaje de acceso denegado si intentas detectar el esquema de forma automática.

Crea una tabla de BigLake para Amazon S3

Para acceder a los datos almacenados en S3, necesitas una tabla externa. A fin de crear una tabla de BigLake para Amazon S3, sigue las instrucciones en Crea una tabla externa para los datos de Amazon S3.

Crea una tabla de BigLake para Azure

Para acceder a los datos almacenados en Azure Storage, necesitas una tabla externa. Si deseas crear una tabla de BigLake para el almacenamiento de Azure, sigue las instrucciones en Crea una tabla externa para los datos de Azure Storage.

Actualiza las tablas externas a tablas de BigLake

Para actualizar las tablas externas a tablas de BigLake, asocia la tabla externa a una conexión de recursos en la nube. Para obtener una lista completa de marcas y argumentos, consulta los temas de referencia bq update y bq mkdef.

Puedes usar cualquier formato de origen que admita BigLake. Para obtener más información, consulta Limitaciones.

Para actualizar una tabla externa a una tabla de BigLake, selecciona una de las siguientes opciones:

SQL

En el siguiente ejemplo, se usa la CREATE OR REPLACE EXTERNAL TABLEdeclaración DDL para actualizar las tablas externas a las de BigLake mediante la asociación de la tabla externa a una conexión de recursos de Cloud:

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

    Ir a BigQuery

  2. En el editor de consultas, ingresa la siguiente sentencia:

    CREATE OR REPLACE EXTERNAL TABLE
      `EXTERNAL_TABLE_NAME`
      WITH CONNECTION `CONNECTION_ID`
      OPTIONS(
        format="TABLE_FORMAT",
        uris="[FILE_PATH]"
        )
    

    Reemplaza lo siguiente:

    • DATASET: el nombre del conjunto de datos de BigQuery en el que deseas crear una tabla, por ejemplo, mydataset
    • EXTERNAL_FILE_NAME: el nombre de la tabla que deseas crear, por ejemplo, mytable.
    • TABLE_FORMAT: el formato de la tabla que deseas crear, por ejemplo, PARQUET
    • FILE_PATH: ruta de acceso a la fuente de datos para la tabla externa que deseas crear, por ejemplo, gs://mybucket/myfile.parquet

  3. Haz clic en Ejecutar.

Si quieres obtener información para ejecutar consultas, visita Ejecuta consultas interactivas.

bq

  1. Genera una definición de tabla externa nueva que especifique la conexión que se usará:

    bq mkdef --connection_id=PROJECT_ID.REGION.CONNECTION_ID \
      --source_format=TABLE_FORMAT \
      "FILE_PATH" > /tmp/DEFINITION_FILE
    

    Reemplaza DEFINITION_FILE por el nombre del archivo de definición de tablas que deseas crear, por ejemplo, tabledefinition.json.

  2. Actualiza la tabla con la definición de tabla externa nueva:

bq update --external_table_definition=/tmp/DEFINITION_FILE PROJECT_ID:DATASET.EXTERNAL_TABLE_NAME

Configura las políticas de control de acceso

A fin de crear políticas de control de acceso para tablas de BigLake, primero debes crear una taxonomía de etiquetas de política en Data Catalog. Luego, debes aplicar las etiquetas de política a las filas o columnas sensibles.

  • Para obtener instrucciones sobre cómo configurar la seguridad a nivel de columna, consulta la guía de seguridad a nivel de columna.

    El flujo de trabajo que define las políticas de control de acceso a nivel de columnas para BigLake es idéntico al flujo de trabajo de las tablas administradas de BigQuery.

  • Para obtener instrucciones sobre cómo configurar la seguridad a nivel de fila, consulta la guía de seguridad a nivel de fila.

Por ejemplo, supongamos que deseas limitar el acceso a las filas de la tabla mytable en el conjunto de datos mydataset:

+---------+---------+-------+
| country | product | price |
+---------+---------+-------+
| US      | phone   |   100 |
| JP      | tablet  |   300 |
| UK      | laptop  |   200 |
+---------+---------+-------+

Puedes crear un filtro a nivel de fila para Kim (kim@example.com) que restrinja su acceso a las filas en las que country es igual a US.

CREATE ROW ACCESS POLICY only_us_filter
ON mydataset.mytable
GRANT TO ('user:kim@example.com')
FILTER USING (country = 'US');

Luego, Kim ejecuta la siguiente consulta:

SELECT * FROM projectid.mydataset.mytable;

En el resultado, solo se muestran las filas en las que country es igual a US:

+---------+---------+-------+
| country | product | price |
+---------+---------+-------+
| US      | phone   |   100 |
+---------+---------+-------+

Consulta una tabla de BigLake con BigQuery

Puedes usar cualquier cliente de BigQuery para enviar una consulta. Si usas la herramienta de línea de comandos de bq, usa el comando query y especifica la sintaxis de SQL estándar de Google mediante las marcas --nouse_legacy_sql o --use_legacy_sql=false. Por ejemplo:

bq query --nouse_legacy_sql "SELECT * FROM PROJECT_ID.DATASET.EXTERNAL_TABLE_NAME;"

Consulta una tabla de BigLake con conectores

Puedes acceder a las tablas de BigLake en Cloud Storage mediante otras herramientas de procesamiento de datos que no sean BigQuery. Por ejemplo, puedes usar Apache Spark, Trino o Apache Hive si usas conectores de BigQuery. La API de BigQuery Storage aplica políticas de administración a nivel de fila y de columna para todas las tablas de BigLake en Cloud Storage o BigQuery.

Spark

En el siguiente ejemplo, se usa Dataproc, pero también funciona con cualquier implementación de Spark que use el conector de BigQuery de Spark.

En este ejemplo, proporcionas el conector de BigQuery de Spark como una acción de inicialización cuando creas un clúster. Esta acción te permite usar un notebook de Zeppelin y realizar el recorrido del usuario de analistas de datos.

  • Crea un clúster de nodo único con la acción de inicialización para el conector de BigQuery de Spark:

    gcloud dataproc clusters create biglake-demo-cluster \
        --optional-components=ZEPPELIN \
        --region=REGION \
        --enable-component-gateway \
        --single-node \
        --initialization-actions gs://goog-dataproc-initialization-actions-us-central1/connectors/connectors.sh \
        --metadata bigquery-connector-url=gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar \
        --metadata spark-bigquery-connector-url=gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar
    

Dataflow

Para leer tablas de BigLake de Dataflow, usa el conector de Dataflow en modo DIRECT_READ a fin de usar la API de BigQuery Storage. También se admite la lectura de una string de consulta. Consulta E/S de BigQuery en la documentación de Apache Beam.

Registros de auditoría

Para obtener más información sobre el registro en BigQuery, consulta Introducción a la supervisión de BigQuery. Para obtener más información sobre el registro en Google Cloud, consulta Cloud Logging.