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
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
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.
-
Asegúrate de que la facturación esté habilitada para tu proyecto de Google Cloud.
-
Enable the BigQuery Connection 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.
-
In the Google Cloud console, activate Cloud Shell.
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.
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
Ve a la página de BigQuery.
Para crear una conexión, haz clic en
Agregar datos y, luego, en Fuente de datos externa.En la lista Tipo de conexión, selecciona BigLake y funciones remotas (Cloud Resource).
En el campo ID de conexión, ingresa un nombre para tu conexión.
Haga clic en Crear conexión.
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:
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
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ónPROJECT_ID
: El ID del proyecto de CloudCONNECTION_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.
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 {} }
CONNECTION_ID
: Es un ID para tu conexión.PROJECT_ID
: El ID del proyecto de CloudREGION
: 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
Ir a la página IAM y administración
Haga clic en
Agregar.Se abre el cuadro de diálogo Agregar principales.
En el campo Principales nuevas (New principals), ingresa el ID de la cuenta de servicio que copiaste antes.
En el campo Selecciona una función, elige Cloud Storage y, luego, Visualizador de objetos de almacenamiento.
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:
- Agrega la credencial federada a la aplicación de Azure.
- Asigna un rol a las aplicaciones de Azure de BigQuery
Si usaste una identidad no federada, sigue estos pasos:
- Crea un principal del servicio de Azure AD.
- 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
Ve a la página de BigQuery.
En el panel Explorador, selecciona el conjunto de datos en el que deseas crear una tabla y, luego, haz clic en
Crear tabla.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.
En Formato de archivo, selecciona el formato que coincida con tu archivo.
En el campo Tabla, ingresa un nombre para tu tabla, por ejemplo,
mytable
.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.
En ID de conexión, selecciona la conexión que creaste antes.
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 TABLE
declaración DDL:
En la consola de Google Cloud, ve a la página de BigQuery.
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
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 TABLE
declaració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:
En la consola de Google Cloud, ve a la página de BigQuery.
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
Haz clic en
Ejecutar.
Si quieres obtener información para ejecutar consultas, visita Ejecuta consultas interactivas.
bq
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
.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.