获取视图的相关信息

本文档介绍了如何在 BigQuery 中获取有关视图的信息或元数据。

您可以通过以下方式获取视图元数据:

  • 使用 GCP Console 或经典版 BigQuery 网页界面
  • 使用 bq show CLI 命令
  • 调用 tables.get API 方法
  • 查询 INFORMATION_SCHEMA 视图(测试版

所需权限

要获取有关视图的信息,您必须被指定为数据集的 READER 角色,或者必须被指定为具有 bigquery.tables.get 权限的项目级层 IAM 角色。如果您拥有项目级层的 bigquery.tables.get 权限,则可获取项目中所有视图的相关信息。除了 bigquery.jobUserbigquery.user,其他所有预定义的项目级层 IAM 角色都具有 bigquery.tables.get 权限。

此外,分配有 bigquery.user 角色的用户具有 bigquery.datasets.create 权限。这允许分配有 bigquery.user 角色的用户获取其创建的任何数据集内视图的相关信息。分配有 bigquery.user 角色的用户创建数据集后,将获得对该数据集的 OWNER 访问权限。凭借对数据集的 OWNER 访问权限,用户可以完全掌控该数据集以及其中的所有视图。

要详细了解 BigQuery 中的 IAM 角色和权限,请参阅访问权限控制。要详细了解数据集级层角色,请参阅数据集的初始角色

获取视图信息

获取视图相关信息的过程与获取表相关信息的过程相同。

要获取有关视图的信息,请执行如下操作:

经典版界面

  1. 展开您的数据集。

  2. 点击视图名称。

  3. 点击详细信息视图详细信息 (View Details) 页面显示了视图的说明、视图信息和定义视图的 SQL 查询。

    查看详情

命令行

发出 bq show 命令。--format 标志可用于控制输出。如果您要获取默认项目以外的项目内的视图信息,请按照如下格式将项目 ID 添加到数据集中:[PROJECT_ID]:[DATASET]

bq show --format=prettyjson [PROJECT_ID]:[DATASET].[VIEW]

其中:

  • [PROJECT_ID] 是项目 ID。
  • [DATASET] 是数据集的名称。
  • [VIEW] 是视图名称。

示例:

输入以下命令,显示默认项目中数据集 mydatasetmyview 的相关信息。

bq show --format=prettyjson mydataset.myview

输入以下命令,显示 myotherprojectmydatasetmyview 的相关信息。

bq show --format=prettyjson myotherproject:mydataset.myview

API

调用 tables.get 方法并提供所有相关参数。

Go

在尝试此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。如需了解详情,请参阅 BigQuery Go API 参考文档

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
view := client.Dataset(datasetID).Table(viewID)
meta, err := view.Metadata(ctx)
if err != nil {
	return err
}
fmt.Printf("View %s, query: %s\n", view.FullyQualifiedName(), meta.ViewQuery)

Python

在尝试此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。如需了解详情,请参阅 BigQuery Python API 参考文档

# from google.cloud import bigquery
# client = bigquery.Client()
# shared_dataset_id = 'my_shared_dataset'

view_ref = client.dataset(shared_dataset_id).table('my_shared_view')
view = client.get_table(view_ref)  # API Request

# Display view properties
print('View at {}'.format(view.full_table_id))
print('View Query:\n{}'.format(view.view_query))

INFORMATION_SCHEMA测试版

INFORMATION_SCHEMA 是一系列视图,可以访问有关数据集、表和视图的元数据。

VIEWS 视图

查询 INFORMATION_SCHEMA.VIEWS 视图时,查询结果包含数据集中每个视图对应的一行。

针对 INFORMATION_SCHEMA.VIEWS 视图的查询必须具有数据集限定符。提交查询的用户必须能够访问包含视图的数据集。

INFORMATION_SCHEMA.VIEWS 视图具有以下架构:

列名 数据类型
TABLE_CATALOG STRING 包含数据集的项目的名称
TABLE_SCHEMA STRING 包含视图的数据集的名称(也称为 datasetId
TABLE_NAME STRING 视图的名称(也称为 tableId
VIEW_DEFINITION STRING 定义视图的 SQL 查询
CHECK_OPTION STRING 返回的值始终为 NULL
USE_STANDARD_SQL STRING 如果视图是使用标准 SQL 查询创建的,则为 YES;如果 useLegacySql 设置为 true,则为 NO

示例

示例 1:

以下示例从 INFORMATION_SCHEMA.VIEWS 视图中检索所有列,check_option 除外,该列留待将来使用。返回的元数据用于默认项目 myprojectmydataset 中的所有视图。

针对 INFORMATION_SCHEMA.VIEWS 视图的查询必须具有数据集限定符。提交查询的用户必须能够访问包含视图的数据集。

要对默认项目以外的项目运行查询,请按照以下格式将项目 ID 添加到数据集:`[PROJECT_ID]:[DATASET].INFORMATION_SCHEMA.[VIEW]`,例如 `myproject:mydataset.INFORMATION_SCHEMA.VIEWS`

要运行查询,请执行以下操作:

Console

  1. 在 GCP Console 中打开 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 查询编辑器框中输入以下标准 SQL 查询。 INFORMATION_SCHEMA 需要标准 SQL 语法。标准 SQL 是 GCP Console 中的默认语法。

    SELECT
     * EXCEPT(check_option)
    FROM
     `mydataset.INFORMATION_SCHEMA.VIEWS`
    
  3. 点击运行

命令行

使用 query 命令并使用 --nouse_legacy_sql--use_legacy_sql=false 标志指定标准 SQL 语法。INFORMATION_SCHEMA 查询需要标准 SQL 语法。

要运行查询,请输入以下命令:

bq query --nouse_legacy_sql \
'SELECT * EXCEPT(check_option) FROM `mydataset.INFORMATION_SCHEMA.VIEWS`'

结果应如下所示:

  +----------------+---------------+---------------+---------------------------------------------------------------------+------------------+
  | table_catalog  | table_schema  |  table_name   |                        view_definition                              | use_standard_sql |
  +----------------+---------------+---------------+---------------------------------------------------------------------+------------------+
  | myproject      | mydataset     | myview        | SELECT column1, column2 FROM [myproject:mydataset.mytable] LIMIT 10 | NO               |
  +----------------+---------------+---------------+---------------------------------------------------------------------+------------------+
  

请注意,结果显示此视图是使用旧版 SQL 查询创建的。

示例 2:

以下示例检索用于在默认项目 myprojectmydataset 中定义 myview 的 SQL 查询和查询语法。

针对 INFORMATION_SCHEMA.VIEWS 视图的查询必须具有数据集限定符。提交查询的用户必须能够访问包含视图的数据集。

要对默认项目以外的项目运行查询,请按照以下格式将项目 ID 添加到数据集:`[PROJECT_ID]:[DATASET].INFORMATION_SCHEMA.[VIEW]`,例如 `myproject:mydataset.INFORMATION_SCHEMA.VIEWS`

要运行查询,请执行以下操作:

Console

  1. 在 GCP Console 中打开 BigQuery 网页界面。

    转到 BigQuery 网页界面

  2. 查询编辑器框中输入以下标准 SQL 查询。 INFORMATION_SCHEMA 需要标准 SQL 语法。标准 SQL 是 GCP Console 中的默认语法。

    SELECT
     table_name, view_definition, use_standard_sql
    FROM
     `mydataset.INFORMATION_SCHEMA.VIEWS`
    WHERE
     table_name="myview"
    
  3. 点击运行

命令行

使用 query 命令并使用 --nouse_legacy_sql--use_legacy_sql=false 标志指定标准 SQL 语法。INFORMATION_SCHEMA 查询需要标准 SQL 语法。

要运行查询,请输入以下命令:

bq query --nouse_legacy_sql \
'SELECT table_name, view_definition, use_standard_sql FROM `mydataset.INFORMATION_SCHEMA.VIEWS` WHERE table_name="myview"'

结果应如下所示:

  +---------------+---------------------------------------------------------------+------------------+
  |  table_name   |                        view_definition                        | use_standard_sql |
  +---------------+---------------------------------------------------------------+------------------+
  | myview        | SELECT column1, column2, column3 FROM mydataset.mytable       | YES              |
  +---------------+---------------------------------------------------------------+------------------+
  

请注意,结果显示此视图是使用标准 SQL 查询创建的。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面