获取视图相关信息

本文档介绍了如何列出和查看 BigQuery 中视图的元数据,以及获取相关信息。

您可以通过以下方式列出数据集中的视图:

  • 使用 Google Cloud 控制台
  • 在 bq 命令行工具中使用 bq ls 命令
  • 调用 tables.list API 方法
  • 使用客户端库

准备工作

授予为用户提供执行本文档中的每个任务所需权限的 Identity and Access Management (IAM) 角色。

列出视图

列出视图的过程与列出表的过程完全相同。

所需权限

如需列出数据集中的视图,您需要拥有 bigquery.tables.list IAM 权限。

以下每个预定义 IAM 角色都包含列出数据集中的视图所需的权限:

  • roles/bigquery.user
  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

列出数据集中的视图

要列出数据集中的视图,请执行以下操作:

控制台

  1. 浏览器面板中,展开您的项目并选择数据集。

  2. 滚动列表,查看数据集中的表。表和视图由不同的图标进行标识。

    表和视图图标

SQL

使用 INFORMATION_SCHEMA.VIEWS 视图

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

    SELECT table_name
    FROM DATASET_ID.INFORMATION_SCHEMA.VIEWS;

    DATASET_ID 替换为数据集的名称。

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

发出 bq ls 命令。--format 标志可用于控制输出。如果您要列出非默认项目中的视图,请按照以下格式将项目 ID 添加到数据集:project_id:dataset

bq ls --format=pretty project_id:dataset

其中:

  • project_id 是您的项目 ID。
  • dataset 是数据集的名称。

运行该命令时,Type 字段会显示 TABLEVIEW。例如:

+-------------------------+-------+----------------------+-------------------+
|         tableId         | Type  |        Labels        | Time Partitioning |
+-------------------------+-------+----------------------+-------------------+
| mytable                 | TABLE | department:shipping  |                   |
| myview                  | VIEW  |                      |                   |
+-------------------------+-------+----------------------+-------------------+

示例:

输入以下命令可列出默认项目的数据集 mydataset 中的视图。

bq ls --format=pretty mydataset

输入以下命令可列出 myotherproject 的数据集 mydataset 中的视图。

bq ls --format=pretty myotherproject:mydataset

API

要使用 API 列出视图,请调用 tables.list 方法。

Go

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
	"google.golang.org/api/iterator"
)

// listTables demonstrates iterating through the collection of tables in a given dataset.
func listTables(w io.Writer, projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	ts := client.Dataset(datasetID).Tables(ctx)
	for {
		t, err := ts.Next()
		if err == iterator.Done {
			break
		}
		if err != nil {
			return err
		}
		fmt.Fprintf(w, "Table: %q\n", t.TableID)
	}
	return nil
}

Python

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set dataset_id to the ID of the dataset that contains
#                  the tables you are listing.
# dataset_id = 'your-project.your_dataset'

tables = client.list_tables(dataset_id)  # Make an API request.

print("Tables contained in '{}':".format(dataset_id))
for table in tables:
    print("{}.{}.{}".format(table.project, table.dataset_id, table.table_id))

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

  • 使用 Google Cloud 控制台
  • 使用 bq 命令行工具的 bq show 命令
  • 调用 tables.get API 方法
  • 使用客户端库
  • 查询 INFORMATION_SCHEMA 视图

获取有关视图的信息

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

所需权限

如需获取有关视图的信息,您需要拥有 bigquery.tables.get IAM 权限。

以下每个预定义 IAM 角色都包含获取视图相关信息所需的权限:

  • roles/bigquery.metadataViewer
  • roles/bigquery.dataViewer
  • roles/bigquery.dataOwner
  • roles/bigquery.dataEditor
  • roles/bigquery.admin

此外,如果您拥有 bigquery.datasets.create 权限,则可以获取在自己创建的数据集中的视图相关信息。

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限

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

控制台

  1. 展开您的数据集。

  2. 点击视图名称。

  3. 点击详细信息详细信息标签页显示了视图的说明、视图信息和定义视图的 SQL 查询。

    查看详情

SQL

查询 INFORMATION_SCHEMA.VIEWS 视图。以下示例检索 check_option(该列留待将来使用)以外的所有列。系统会返回默认项目中 DATASET_ID 的所有视图的元数据:

  1. 在 Google Cloud 控制台中,转到 BigQuery 页面。

    转到 BigQuery

  2. 在查询编辑器中,输入以下语句:

      SELECT
        * EXCEPT (check_option)
      FROM
        DATASET_ID.INFORMATION_SCHEMA.VIEWS;
      

    DATASET_ID 替换为数据集的名称。

  3. 点击 运行

如需详细了解如何运行查询,请参阅运行交互式查询

bq

发出 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

输入以下命令,显示 myotherproject 中数据集 mydatasetmyview 视图的相关信息。

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

API

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

Go

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

import (
	"context"
	"fmt"
	"io"

	"cloud.google.com/go/bigquery"
)

// getView demonstrates fetching the metadata from a BigQuery logical view and printing it to an io.Writer.
func getView(w io.Writer, projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	view := client.Dataset(datasetID).Table(viewID)
	meta, err := view.Metadata(ctx)
	if err != nil {
		return err
	}
	fmt.Fprintf(w, "View %s, query: %s\n", view.FullyQualifiedName(), meta.ViewQuery)
	return nil
}

Java

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Table;
import com.google.cloud.bigquery.TableId;

// Sample to get a view
public class GetView {

  public static void main(String[] args) {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String viewName = "MY_VIEW_NAME";
    getView(datasetName, viewName);
  }

  public static void getView(String datasetName, String viewName) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      TableId tableId = TableId.of(datasetName, viewName);
      Table view = bigquery.getTable(tableId);
      System.out.println("View retrieved successfully" + view.getDescription());
    } catch (BigQueryException e) {
      System.out.println("View not retrieved. \n" + e.toString());
    }
  }
}

Node.js

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function getView() {
  // Retrieves view properties.

  /**
   * TODO(developer): Uncomment the following lines before running the sample
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_view";

  // Retrieve view
  const dataset = bigquery.dataset(datasetId);
  const [view] = await dataset.table(tableId).get();

  const fullTableId = view.metadata.id;
  const viewQuery = view.metadata.view.query;

  // Display view properties
  console.log(`View at ${fullTableId}`);
  console.log(`View query: ${viewQuery}`);
}
getView();

Python

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

如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
# Make an API request to get the table resource.
view = client.get_table(view_id)

# Display view properties
print(f"Retrieved {view.table_type}: {str(view.reference)}")
print(f"View Query:\n{view.view_query}")

视图安全性

如需控制对 BigQuery 中视图的访问权限,请参阅授权视图

后续步骤