查询 BigLake 表中的 Cloud Storage 数据

本文档介绍如何查询存储在 Cloud Storage BigLake 表中的数据。

准备工作

确保您拥有 Cloud Storage BigLake 表

所需的角色

如需查询 Cloud Storage BigLake 表,请确保您具有以下角色:

  • BigQuery Data Viewer (roles/bigquery.dataViewer)
  • BigQuery User (roles/bigquery.user)

根据您的权限,您可以自行授予这些角色给自己,或者让管理员授予给您。如需详细了解如何授予角色,请参阅查看可针对资源授予的角色

如需查看查询 Cloud Storage BigLake 表所需的确切权限,请展开所需权限部分:

所需权限

您也可以使用自定义角色或其他预定义角色来获取这些权限。

查询 BigLake 表

创建 Cloud Storage BigLake 表后,您可以使用 GoogleSQL 语法查询表,就如查询标准 BigQuery 表一样。例如 SELECT field1, field2 FROM mydataset.my_cloud_storage_table;

使用外部数据处理工具查询 BigLake 表

您可以将 BigQuery 连接器与其他数据处理工具搭配使用,以访问 Cloud Storage 上的 BigLake 表。如需了解详情,请参阅连接器

Apache Spark

以下示例使用的是 Dataproc,但它也适用于使用 Spark-BigQuery 连接器的任何 Spark 部署。

在此示例中,您在创建集群时提供了 Spark-BigQuery 连接器作为初始化操作。此操作可让您使用 Zeppelin 笔记本并练习数据分析师用户体验历程。

GitHub GoogleCloudDataproc/spark-bigquery-connector 代码库中列出了 Spark-BigQuery 连接器版本。

使用 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

以下示例使用的是 Dataproc,但它也适用于使用 Hive-BigQuery 连接器的任何 Hive 部署。

在此示例中,您在创建集群时提供了 Hive-BigQuery 连接器作为初始化操作。

GitHub GoogleCloudDataproc/hive-bigquery-connector 代码库中列出了 Hive-BigQuery 连接器版本。

使用 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

如需详细了解 Hive-BigQuery 连接器,请参阅使用 Hive-BigQuery 连接器

Dataflow

要从 Dataflow 中读取 BigLake 表,请使用 DIRECT_READ 模式的 Dataflow 连接器来使用 BigQuery Storage API。此外,还支持从查询字符串读取。请参阅 Apache Beam 文档中的 BigQuery I/O

查询临时 BigLake 表

使用临时表查询外部数据源适用于对外部数据进行一次性临时查询,或执行提取、转换和加载 (ETL) 过程。

要在不创建永久表的情况下查询外部数据源,请为临时表提供表定义,然后在命令或调用中使用该表定义来查询临时表。您可以通过以下任一方式提供表定义:

系统会使用表定义文件或提供的架构来创建临时外部表,然后对临时外部表运行查询。

使用临时外部表时,并不会在您的某个 BigQuery 数据集中创建表。由于该表不会永久存储在数据集内,因此无法与他人共享。

您可以使用 bq 命令行工具、API 或客户端库来创建和查询链接到外部数据源的临时表。

bq

使用带有 --external_table_definition 标志bq query 命令。

(可选)提供 --location 标志并将其值设置为您的位置

如需使用表定义文件查询链接到外部数据源的临时表,请输入以下命令。

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

替换以下内容:

  • LOCATION:您所在位置的名称。--location 是可选标志。例如,如果您在东京区域使用 BigQuery,可将该标志的值设置为 asia-northeast1。您可以使用 .bigqueryrc 文件设置该位置的默认值。
  • TABLE:您要创建的临时表的名称。
  • DEFINITION_FILE:本地机器上表定义文件的路径。
  • QUERY:您要提交到临时表的查询。

例如,以下命令使用名为 sales_def 的表定义文件创建并查询名为 sales 的临时表。

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

如需使用内嵌架构定义查询链接到外部数据源的临时表,请输入以下命令。

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

替换以下内容:

  • LOCATION:您所在位置的名称。--location 是可选标志。例如,如果您在东京区域使用 BigQuery,可将该标志的值设置为 asia-northeast1。您可以使用 .bigqueryrc 文件设置该位置的默认值。
  • TABLE:您要创建的临时表的名称。
  • SCHEMA:内嵌架构定义,格式为 field:data_type,field:data_type
  • SOURCE_FORMAT:外部数据源的格式。例如 CSV
  • BUCKET_PATH:包含表数据的 Cloud Storage 存储桶的路径,格式为 gs://bucket_name/[folder_name/]file_pattern

    您可以通过在 file_pattern 中指定一个星号 (*) 通配符从存储桶中选择多个文件。例如 gs://mybucket/file00*.parquet。如需了解详情,请参阅 Cloud Storage URI 的通配符支持

    您可以通过提供多个路径来为 uris 选项指定多个存储桶。

    以下示例展示了有效的 uris 值:

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

    如果指定以多个文件为目标的 uris 值,则所有这些文件都必须共享一个兼容的架构。

    如需详细了解如何在 BigQuery 中使用 Cloud Storage URI,请参阅 Cloud Storage 资源路径

  • PROJECT_ID:包含连接的项目。

  • REGION:包含连接的区域,例如 us

  • CONNECTION_ID:Spark 连接的名称,例如 myconnection

  • QUERY:您要提交到临时表的查询。

例如,以下命令使用以下架构定义创建并查询名为 sales 的临时表,该表链接到存储在 Cloud Storage 中的 CSV 文件: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'

如需使用 JSON 架构文件查询链接到外部数据源的临时表,请输入以下命令。

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

替换以下内容:

  • LOCATION:您所在位置的名称。--location 是可选标志。例如,如果您在东京区域使用 BigQuery,可将该标志的值设置为 asia-northeast1。您可以使用 .bigqueryrc 文件设置该位置的默认值。
  • SCHEMA_FILE:本地机器上 JSON 架构文件的路径。
  • SOURCE_FORMAT:外部数据源的格式。例如 CSV
  • BUCKET_PATH:包含表数据的 Cloud Storage 存储桶的路径,格式为 gs://bucket_name/[folder_name/]file_pattern

    您可以通过在 file_pattern 中指定一个星号 (*) 通配符从存储桶中选择多个文件。例如 gs://mybucket/file00*.parquet。如需了解详情,请参阅 Cloud Storage URI 的通配符支持

    您可以通过提供多个路径来为 uris 选项指定多个存储桶。

    以下示例展示了有效的 uris 值:

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

    如果指定以多个文件为目标的 uris 值,则所有这些文件都必须共享一个兼容的架构。

    如需详细了解如何在 BigQuery 中使用 Cloud Storage URI,请参阅 Cloud Storage 资源路径

  • PROJECT_ID:包含连接的项目。

  • REGION:包含连接的区域,例如 us

  • CONNECTION_ID:Spark 连接的名称,例如 myconnection

  • QUERY:您要提交到临时表的查询。

例如,以下命令使用 /tmp/sales_schema.json 架构文件创建并查询名为 sales 的临时表,该表链接到存储在 Cloud Storage 中的 CSV 文件。

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

API

要使用 API 运行查询,请按以下步骤操作:

  1. 创建一个 Job 对象
  2. 使用 JobConfiguration 对象填充 Job 对象的 configuration 部分。
  3. 使用 JobConfigurationQuery 对象填充 JobConfiguration 对象的 query 部分。
  4. 使用 ExternalDataConfiguration 对象填充 JobConfigurationQuery 对象的 tableDefinitions 部分。 在 connectionId 字段中指定用于到 Cloud Storage 的连接。
  5. 调用 jobs.insert 方法以异步运行查询,或调用 jobs.query 方法以同步运行查询,同时传入Job 对象。

后续步骤