Consultar datos de Cloud Storage en tablas de BigLake

En este documento se describe cómo consultar los datos almacenados en una tabla de BigLake de Cloud Storage.

Antes de empezar

Asegúrate de tener una tabla de BigLake de Cloud Storage.

Roles obligatorios

Para consultar tablas de BigLake de Cloud Storage, asegúrate de tener los siguientes roles:

  • Lector de datos de BigQuery (roles/bigquery.dataViewer)
  • Usuario de BigQuery (roles/bigquery.user)

En función de tus permisos, puedes asignarte estos roles o pedirle a tu administrador que te los asigne. Para obtener más información sobre cómo conceder roles, consulta el artículo Ver los roles que se pueden conceder en los recursos.

Para ver los permisos exactos que se necesitan para consultar tablas de BigLake de Cloud Storage, despliega la sección Permisos necesarios:

Permisos obligatorios

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Consultar tablas de BigLake

Después de crear una tabla de BigLake de Cloud Storage, puedes consultarla con la sintaxis de GoogleSQL, igual que si fuera una tabla estándar de BigQuery. Por ejemplo, SELECT field1, field2 FROM mydataset.my_cloud_storage_table;.

Consultar tablas de BigLake con herramientas de procesamiento de datos externos

Puedes usar conectores de BigQuery con otras herramientas de procesamiento de datos para acceder a tablas BigLake en Cloud Storage. Para obtener más información, consulta Conectores.

Apache Spark

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

En este ejemplo, se proporciona el conector Spark-BigQuery como acción de inicialización al crear un clúster. Esta acción te permite usar un cuaderno de Zeppelin y realizar el recorrido de usuario de analista de datos.

Las versiones del conector Spark-BigQuery se indican en el repositorio GoogleCloudDataproc/spark-bigquery-connector de GitHub.

Crea un clúster de un solo nodo con la acción de inicialización del conector Spark-BigQuery:

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

Apache Hive

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

En este ejemplo, se proporciona el conector Hive-BigQuery como acción de inicialización al crear un clúster.

Las versiones del conector Hive-BigQuery se indican en el repositorio GoogleCloudDataproc/hive-bigquery-connector de GitHub.

Crea un clúster de un solo nodo con la acción de inicialización del conector Hive-BigQuery:

gcloud dataproc clusters create biglake-hive-demo-cluster \
    --region=REGION \
    --single-node \
    --initialization-actions gs://goog-dataproc-initialization-actions-REGION/connectors/connectors.sh \
    --metadata hive-bigquery-connector-url=gs://goog-dataproc-artifacts-REGION/hive-bigquery/hive-bigquery-connector-CONNECTOR_VERSION.jar

Para obtener más información sobre el conector Hive-BigQuery, consulta el artículo Usar el conector Hive-BigQuery.

Dataflow

Para leer tablas de BigLake desde Dataflow, usa el conector de Dataflow en modo DIRECT_READ para usar la API Storage de BigQuery. También se admite la lectura de una cadena de consulta. Consulta BigQuery I/O en la documentación de Apache Beam.

Consultar tablas temporales de BigLake

Consultar una fuente de datos externa mediante una tabla temporal es útil para realizar consultas puntuales y ad hoc sobre datos externos, o para procesos de extracción, transformación y carga (ETL).

Para consultar una fuente de datos externa sin crear una tabla permanente, debes proporcionar una definición de tabla para la tabla temporal y, a continuación, usar esa definición de tabla en un comando o una llamada para consultar la tabla temporal. Puedes proporcionar la definición de la tabla de cualquiera de las siguientes formas:

El archivo de definición de tabla o el esquema proporcionado se usan para crear la tabla externa temporal y la consulta se ejecuta en la tabla externa temporal.

Cuando usas una tabla externa temporal, no creas una tabla en uno de tus conjuntos de datos de BigQuery. Como la tabla no se almacena de forma permanente en un conjunto de datos, no se puede compartir con otros usuarios.

Puedes crear y consultar una tabla temporal vinculada a una fuente de datos externa con la herramienta de línea de comandos bq, la API o las bibliotecas de cliente.

bq

Usa el comando bq query con la marca --external_table_definition.

(Opcional) Proporcione la marca --location y asigne el valor a su ubicación.

Para consultar una tabla temporal vinculada a tu fuente de datos externa mediante un archivo de definición de tabla, introduce el siguiente comando.

bq --location=LOCATION query \
--external_table_definition=TABLE::DEFINITION_FILE \
'QUERY'

Haz los cambios siguientes:

  • LOCATION: el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes definir el valor de la marca como asia-northeast1. Puede definir un valor predeterminado para la ubicación mediante el archivo.bigqueryrc.
  • TABLE: el nombre de la tabla temporal que vas a crear.
  • DEFINITION_FILE: la ruta al archivo de definición de tabla en tu máquina local.
  • QUERY: la consulta que envías a la tabla temporal.

Por ejemplo, el siguiente comando crea y consulta una tabla temporal llamada sales mediante un archivo de definición de tabla llamado sales_def.

bq query \
--external_table_definition=sales::sales_def@us.myconnection \
'SELECT
  Region,
  Total_sales
FROM
  sales'

Para consultar una tabla temporal vinculada a tu fuente de datos externa mediante una definición de esquema insertada, introduce el siguiente comando.

bq --location=LOCATION query \
--external_table_definition=TABLE::SCHEMA@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'query'

Haz los cambios siguientes:

  • LOCATION: el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes definir el valor de la marca como asia-northeast1. Puede definir un valor predeterminado para la ubicación mediante el archivo.bigqueryrc.
  • TABLE: el nombre de la tabla temporal que vas a crear.
  • SCHEMA: la definición del esquema insertado en el formato field:data_type,field:data_type.
  • SOURCE_FORMAT: el formato de la fuente de datos externa. Por ejemplo, CSV.
  • BUCKET_PATH: la ruta al segmento de Cloud Storage que contiene los datos de la tabla, con el formato gs://bucket_name/[folder_name/]file_pattern.

    Puede seleccionar varios archivos del segmento especificando un asterisco (*) en el carácter comodín file_pattern. Por ejemplo, gs://mybucket/file00*.parquet. Para obtener más información, consulta Compatibilidad con comodines en URIs de Cloud Storage.

    Puedes especificar varios segmentos para la opción uris proporcionando varias rutas.

    En los siguientes ejemplos se muestran valores de uris válidos:

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    Si especifica valores de uris que se dirijan a varios archivos, todos esos archivos deben compartir un esquema compatible.

    Para obtener más información sobre cómo usar URIs de Cloud Storage en BigQuery, consulta Ruta de recursos de Cloud Storage.

  • PROJECT_ID: el proyecto que contiene la conexión.

  • REGION: la región que contiene la conexión (por ejemplo, us).

  • CONNECTION_ID: el nombre de la conexión (por ejemplo, myconnection).

  • QUERY: la consulta que envías a la tabla temporal.

Por ejemplo, el siguiente comando crea y consulta una tabla temporal llamada sales vinculada a un archivo CSV almacenado en Cloud Storage con la siguiente definición de esquema: Region:STRING,Quarter:STRING,Total_sales:INTEGER.

bq query \
--external_table_definition=sales::Region:STRING,Quarter:STRING,Total_sales:INTEGER@CSV=gs://mybucket/sales.csv@us.myconnection \
'SELECT
  Region,
  Total_sales
FROM
  sales'

Para consultar una tabla temporal vinculada a tu fuente de datos externa mediante un archivo de esquema JSON, introduce el siguiente comando.

bq --location=LOCATION query \
--external_table_definition=SCHEMA_FILE@SOURCE_FORMAT=BUCKET_PATH@projects/PROJECT_ID/locations/REGION/connections/CONNECTION_ID \
'QUERY'

Haz los cambios siguientes:

  • LOCATION: el nombre de tu ubicación. La marca --location es opcional. Por ejemplo, si usas BigQuery en la región de Tokio, puedes definir el valor de la marca como asia-northeast1. Puede definir un valor predeterminado para la ubicación mediante el archivo.bigqueryrc.
  • SCHEMA_FILE: la ruta al archivo de esquema JSON en tu máquina local.
  • SOURCE_FORMAT: el formato de la fuente de datos externa. Por ejemplo, CSV.
  • BUCKET_PATH: la ruta al segmento de Cloud Storage que contiene los datos de la tabla, con el formato gs://bucket_name/[folder_name/]file_pattern.

    Puede seleccionar varios archivos del segmento especificando un asterisco (*) en el carácter comodín file_pattern. Por ejemplo, gs://mybucket/file00*.parquet. Para obtener más información, consulta Compatibilidad con comodines en URIs de Cloud Storage.

    Puedes especificar varios segmentos para la opción uris proporcionando varias rutas.

    En los siguientes ejemplos se muestran valores de uris válidos:

    • gs://bucket/path1/myfile.csv
    • gs://bucket/path1/*.parquet
    • gs://bucket/path1/file1*, gs://bucket1/path1/*

    Si especifica valores de uris que se dirijan a varios archivos, todos esos archivos deben compartir un esquema compatible.

    Para obtener más información sobre cómo usar URIs de Cloud Storage en BigQuery, consulta Ruta de recursos de Cloud Storage.

  • PROJECT_ID: el proyecto que contiene la conexión.

  • REGION: la región que contiene la conexión (por ejemplo, us).

  • CONNECTION_ID: el nombre de la conexión (por ejemplo, myconnection).

  • QUERY: la consulta que envías a la tabla temporal.

Por ejemplo, el siguiente comando crea y consulta una tabla temporal llamada sales vinculada a un archivo CSV almacenado en Cloud Storage mediante el archivo de esquema /tmp/sales_schema.json.

  bq query \
  --external_table_definition=sales::/tmp/sales_schema.json@CSV=gs://mybucket/sales.csv@us.myconnection \
  'SELECT
      Region,
      Total_sales
    FROM
      sales'

API

Para ejecutar una consulta mediante la API, sigue estos pasos:

  1. Crea un Job objeto.
  2. Rellena la sección configuration del objeto Job con un objeto JobConfiguration.
  3. Rellena la sección query del objeto JobConfiguration con un objeto JobConfigurationQuery.
  4. Rellena la sección tableDefinitions del objeto JobConfigurationQuery con un objeto ExternalDataConfiguration. Especifica la conexión que se va a usar para conectarse a Cloud Storage en el campo connectionId.
  5. Llama al método jobs.insert para ejecutar la consulta de forma asíncrona o al método jobs.query para ejecutarla de forma síncrona. En ambos casos, debes pasar el objeto Job.

Siguientes pasos