Compartir a través de


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

  1. Haga clic en API y servicios en el panel de navegación izquierdo.

  2. Haga clic en el botón HABILITAR API Y SERVICIOS.

    Habilitación de servicios de Google

  3. Escriba bigquery storage api en la barra de búsqueda y seleccione el primer resultado.

    Almacenamiento de Google BigQuery

  4. Asegúrese de que la API de almacenamiento de BigQuery está habilitada.

    Google BigQuery

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:

  1. Haga clic en IAM y administración en el panel de navegación izquierdo.

  2. Haga clic en Cuentas de servicio.

  3. Haga clic en + CREAR CUENTA DE SERVICIO.

  4. Escriba el nombre y la descripción de la cuenta de servicio.

    Creación de una cuenta de servicio de Google

  5. Haga clic en CREATE (Crear).

  6. Especifique los roles de la cuenta de servicio. En la lista desplegable Seleccionar un rol, escriba BigQuery y agregue los siguientes roles:

    Permisos de Google

  7. Haga clic en CONTINUE (Continuar).

  8. Haga clic en LISTO.

Para crear claves para la cuenta de servicio:

  1. En la lista de cuentas de servicio, haga clic en la cuenta recién creada.

  2. En la sección Claves, seleccione el botón AGREGAR CLAVE > Crear nueva clave .

    Creación de claves de Google

  3. Acepte el tipo de clave JSON.

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

  1. Haga clic en Almacenamiento en el panel de navegación izquierdo.

  2. Haga clic en CREATE BUCKET (CREAR CUBO).

    Creación de cubos de Google

  3. Configure los detalles del cubo.

    Detalles del cubo de Google

  4. Haga clic en CREATE (Crear).

  5. Haga clic en la pestaña Permisos y Agregar miembros.

  6. Proporcione los permisos siguientes a la cuenta de servicio en el cubo.

    Permisos de cubo de Google

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

Obtener el cuaderno

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.

Cuaderno de ejemplo de Scala de Google BigQuery

Obtener el cuaderno