取得資料檢視的相關資訊

本文件說明如何在 BigQuery 中列出檢視表、取得相關資訊,以及查看檢視表的中繼資料。

您可以透過以下方式,列出資料集中的檢視表:

  • 使用 Google Cloud 主控台
  • 在 bq 指令列工具中使用 bq ls 指令
  • 呼叫 tables.list API 方法
  • 使用用戶端程式庫

事前準備

授予身分與存取權管理 (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. 在「Explorer」面板中展開專案並選取資料集。

  2. 捲動清單來檢視該資料集中的資料表。資料表和檢視表會分別以不同的圖示呈現。

    資料表和檢視表圖示

SQL

使用 INFORMATION_SCHEMA.VIEWS 檢視畫面

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

    SELECT table_name
    FROM DATASET_ID.INFORMATION_SCHEMA.VIEWS;

    DATASET_ID 換成資料集名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

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

只要輸入下列指令,即可列出 myotherprojectmydataset 資料集的檢視表。

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. 按一下 [Details] (詳細資料)。「Details」(詳細資料) 分頁會顯示檢視表的說明、相關資訊,以及定義該檢視表的 SQL 查詢。

    查看詳細資料

SQL

查詢 INFORMATION_SCHEMA.VIEWS 檢視表。下列範例從 check_option 檢視表擷取了所有資料欄,但保留 check_option 以供未來使用。系統傳回的是預設專案 DATASET_ID 中所有檢視表的中繼資料:

  1. 前往 Google Cloud 控制台的「BigQuery」頁面。

    前往 BigQuery

  2. 在查詢編輯器中輸入以下陳述式:

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

    DATASET_ID 換成資料集名稱。

  3. 按一下 「Run」

如要進一步瞭解如何執行查詢,請參閱「執行互動式查詢」一文。

bq

請發出 bq show 指令。--format 旗標可用來控管輸出。如果您要取得預設專案以外的專案檢視表相關資訊,請使用下列格式將專案 ID 新增至資料集:[PROJECT_ID]:[DATASET]

bq show \
--format=prettyjson \
project_id:dataset.view

其中:

  • project_id 是您的專案 ID。
  • dataset 是資料集名稱。
  • view 是視圖的名稱。

範例:

輸入下列指令,系統即會顯示您預設專案中 mydataset 資料集中的 myview 相關資訊。

bq show --format=prettyjson mydataset.myview

輸入下列指令,系統即會顯示 myotherprojectmydataset 資料集中的 myview 相關資訊。

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 中的檢視表存取權,請參閱「授權檢視表」。

後續步驟