查询 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 表所需的确切权限,请展开所需权限部分:
所需权限
bigquery.jobs.create
bigquery.readsessions.create
(仅当您使用 BigQuery Storage Read API 读取数据时才需要)bigquery.tables.get
bigquery.tables.getData
查询 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 运行查询,请按以下步骤操作:
- 创建一个
Job
对象。 - 使用
JobConfiguration
对象填充Job
对象的configuration
部分。 - 使用
JobConfigurationQuery
对象填充JobConfiguration
对象的query
部分。 - 使用
ExternalDataConfiguration
对象填充JobConfigurationQuery
对象的tableDefinitions
部分。 在connectionId
字段中指定用于到 Cloud Storage 的连接。 - 调用
jobs.insert
方法以异步运行查询,或调用jobs.query
方法以同步运行查询,同时传入Job
对象。
后续步骤
- 了解如何在 BigQuery 中使用 SQL。
- 了解 BigLake 表。
- 了解 BigQuery 配额。