Google BigQuery
En este artículo se describe cómo leer y escribir en tablas de Google BigQuery en Azure Databricks.
Importante
Las configuraciones descritas en este artículo son experimentales. Las características experimentales se proporcionan tal cual y no cuentan con soporte técnico de Databricks a través del soporte técnico al cliente. Para obtener compatibilidad completa con la federación de consultas, debe usar la federación de Lakehouse, que permite a los usuarios de Azure Databricks aprovechar la sintaxis de Unity Catalog y las herramientas de gobernanza de datos.
Debe conectarse a BigQuery mediante la autenticación basada en claves.
Permisos
Los proyectos deben tener permisos específicos de Google para leer y escribir con BigQuery.
Nota:
En este artículo se describen las vistas materializadas de BigQuery. Para obtener más información, consulte el artículo de Google Introducción a las vistas materializadas. Para obtener información sobre la terminología de BigQuery y el modelo de seguridad de BigQuery, consulte la documentación de Google BigQuery.
La lectura y escritura de datos con BigQuery depende de dos proyectos de Google Cloud:
- Proyecto (
project
): el identificador del proyecto de Google Cloud desde el que Azure Databricks lee o escribe la tabla de BigQuery. - Proyecto primario (
parentProject
): el identificador del proyecto primario, que es el identificador de proyecto de Google Cloud que se factura para leer y escribir. Establézcalo en el proyecto de Google Cloud asociado a la cuenta de servicio de Google para la que generará claves.
Debe proporcionar explícitamente los valores de project
y parentProject
en el código que accede a BigQuery. Use un código similar al siguiente:
spark.read.format("bigquery") \
.option("table", table) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
Los permisos necesarios para los proyectos de Google Cloud dependen de si project
y parentProject
son los mismos. En las secciones siguientes se enumeran los permisos necesarios para cada escenario.
Permisos necesarios si project
y parentProject
coinciden
Si los identificadores de project
y parentProject
son los mismos, use la tabla siguiente para determinar los permisos mínimos:
Tarea de Azure Databricks | Permisos de Google necesarios en el proyecto |
---|---|
Leer una tabla de BigQuery sin vista materializada | En el proyecto project :- Usuario de sesión de lectura de BigQuery - Visor de datos de BigQuery (opcionalmente, conceda este permiso en el nivel de conjunto de datos o tabla en lugar de concederlo en el nivel de proyecto) |
Leer una tabla de BigQuery con vista materializada | En el proyecto project :- Usuario de trabajo de BigQuery - Usuario de sesión de lectura de BigQuery - Visor de datos de BigQuery (opcionalmente, conceda este permiso en el nivel de conjunto de datos o tabla en lugar de concederlo en el nivel de proyecto) En el proyecto de materialización: - Editor de datos de BigQuery |
Escribir una tabla de BigQuery | En el proyecto project :- Usuario de trabajo de BigQuery - Editor de datos de BigQuery |
Permisos necesarios si project
y parentProject
son diferentes
Si los identificadores de project
y parentProject
son diferentes, use la tabla siguiente para determinar los permisos mínimos:
Tarea de Azure Databricks | Permisos de Google necesarios |
---|---|
Leer una tabla de BigQuery sin vista materializada | En el proyecto parentProject :- Usuario de sesión de lectura de BigQuery En el proyecto project :- Visor de datos de BigQuery (opcionalmente, conceda este permiso en el nivel de conjunto de datos o tabla en lugar de concederlo en el nivel de proyecto) |
Leer una tabla de BigQuery con vista materializada | En el proyecto parentProject :- Usuario de sesión de lectura de BigQuery - Usuario de trabajo de BigQuery En el proyecto project :- Visor de datos de BigQuery (opcionalmente, conceda este permiso en el nivel de conjunto de datos o tabla en lugar de concederlo en el nivel de proyecto) En el proyecto de materialización: - Editor de datos de BigQuery |
Escribir una tabla de BigQuery | En el proyecto parentProject :- Usuario de trabajo de BigQuery En el proyecto project :- Editor de datos de BigQuery |
Paso 1: Configuración de Google Cloud
Habilitación de la API de almacenamiento de BigQuery
La API de almacenamiento de BigQuery está habilitada de manera predeterminada en los nuevos proyectos de Google Cloud en los que BigQuery está habilitado. Sin embargo, si tiene un proyecto existente y la API de almacenamiento de BigQuery no está habilitada, siga los pasos de esta sección para habilitarla.
Puede habilitar la API de almacenamiento de BigQuery mediante la CLI de Google Cloud o Google Cloud Console.
Habilitación de la API de almacenamiento de BigQuery mediante la CLI de Google Cloud
gcloud services enable bigquerystorage.googleapis.com
Habilitación de la API de almacenamiento de BigQuery mediante Google Cloud Console
Haga clic en API y servicios en el panel de navegación izquierdo.
Haga clic en el botón HABILITAR API Y SERVICIOS.
Escriba
bigquery storage api
en la barra de búsqueda y seleccione el primer resultado.Asegúrese de que la API de almacenamiento de BigQuery está habilitada.
Creación de una cuenta de servicio de Google para Azure Databricks
Cree una cuenta de servicio para el clúster de Azure Databricks. Databricks recomienda proporcionar a esta cuenta de servicio los privilegios mínimos necesarios para realizar sus tareas. Consulte Roles y permisos de BigQuery.
Puede crear una cuenta de servicio mediante la CLI de Google Cloud o Google Cloud Console.
Creación de una cuenta de servicio de Google mediante la CLI de Google Cloud
gcloud iam service-accounts create <service-account-name>
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"
Cree las claves de la cuenta de servicio:
gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json
Creación de una cuenta de servicio de Google con Google Cloud Console
Para crear la cuenta:
Haga clic en IAM y administración en el panel de navegación izquierdo.
Haga clic en Cuentas de servicio.
Haga clic en + CREAR CUENTA DE SERVICIO.
Escriba el nombre y la descripción de la cuenta de servicio.
Haga clic en CREATE (Crear).
Especifique los roles de la cuenta de servicio. En la lista desplegable Seleccionar un rol, escriba
BigQuery
y agregue los siguientes roles:Haga clic en CONTINUE (Continuar).
Haga clic en LISTO.
Para crear claves para la cuenta de servicio:
En la lista de cuentas de servicio, haga clic en la cuenta recién creada.
En la sección Claves, seleccione el botón AGREGAR CLAVE > Crear nueva clave .
Acepte el tipo de clave JSON.
Haga clic en CREATE (Crear). El archivo de clave JSON se descarga en el equipo.
Importante
El archivo de clave JSON que genera para la cuenta de servicio es una clave privada que solo se debe compartir con usuarios autorizados, ya que controla el acceso a conjuntos de datos y recursos de la cuenta de Google Cloud.
Creación de un cubo de Google Cloud Storage (GCS) para el almacenamiento temporal
Para escribir datos en BigQuery, el origen de datos necesita acceso a un cubo de GCS.
Haga clic en Almacenamiento en el panel de navegación izquierdo.
Haga clic en CREATE BUCKET (CREAR CUBO).
Configure los detalles del cubo.
Haga clic en CREATE (Crear).
Haga clic en la pestaña Permisos y Agregar miembros.
Proporcione los permisos siguientes a la cuenta de servicio en el cubo.
Haga clic en GUARDAR.
Paso 2: Configuración de Azure Databricks
Para configurar un clúster para acceder a las tablas de BigQuery, debe proporcionar el archivo de clave JSON como una configuración de Spark. Use una herramienta local para codificar en Base64 el archivo de clave JSON. Por motivos de seguridad, no use una herramienta remota o basada en web que pueda acceder a las claves.
Al configurar el clúster, haga lo siguiente:
En la pestaña Configuración de Spark, agregue la siguiente configuración de Spark. Reemplace <base64-keys>
por la cadena del archivo de clave JSON codificado en Base64. Reemplace los demás elementos entre corchetes (como <client-email>
) por los valores de esos campos del archivo de clave JSON.
credentials <base64-keys>
spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>
Lectura y escritura en una tabla de BigQuery
Para leer una tabla de BigQuery, especifique
df = spark.read.format("bigquery") \
.option("table",<table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.load()
Para escribir en una tabla de BigQuery, especifique
df.write.format("bigquery") \
.mode("<mode>") \
.option("temporaryGcsBucket", "<bucket-name>") \
.option("table", <table-name>) \
.option("project", <project-id>) \
.option("parentProject", <parent-project-id>) \
.save()
donde <bucket-name>
es el nombre del cubo que creó en Creación de un cubo de Google Cloud Storage (GCS) para el almacenamiento temporal. Consulte Permisos para obtener información sobre los requisitos de los valores de <project-id>
y <parent-id>
.
Creación de una tabla externa desde BigQuery
Importante
Este catálogo de Unity no admite esta característica.
Puede declarar una tabla no administrada en Databricks que leerá datos directamente desde BigQuery:
CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
parentProject 'gcp-parent-project-id',
project 'gcp-project-id',
temporaryGcsBucket 'some-gcp-bucket',
materializationDataset 'some-bigquery-dataset',
table 'some-bigquery-dataset.table-to-copy'
)
Ejemplo de cuaderno de Python: cargar una tabla de Google BigQuery en un DataFrame
El siguiente cuaderno de Python carga una tabla de Google BigQuery en un DataFrame de Azure Databricks.
Cuaderno de ejemplo de Python de Google BigQuery
Ejemplo de cuaderno de Scala: cargar una tabla de Google BigQuery en un DataFrame
El siguiente cuaderno de Scala carga una tabla de Google BigQuery en un DataFrame de Azure Databricks.