获取数据集的相关信息

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

您可以通过以下方式获取数据集信息:

  • 使用 Cloud Console。
  • bq 命令行工具中使用 bq show 命令。
  • 调用 datasets.get API 方法。
  • 查询 INFORMATION_SCHEMA 视图(Beta 版
  • 使用客户端库。

所需权限

如需获取数据集的相关信息或元数据,您必须至少具备 bigquery.datasets.get 权限。以下预定义的 IAM 角色具有 bigquery.datasets.get 权限:

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

如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅访问权限控制

获取数据集信息

如需获取项目中数据集的相关信息,请执行以下操作:

控制台

点击资源面板中的相应数据集名称。您应该会在查询编辑器下方看到数据集的说明和详细信息。在资源面板中,数据集下方会以嵌套结构显示数据集的表。

查看数据集。

默认情况下,Cloud Console 会隐藏匿名数据集。如需显示匿名数据集的相关信息,请使用 bq 命令行工具或 API。

bq

发出 bq show 命令。可使用 --format 标志来控制输出。如果您要获取非默认项目中数据集的相关信息,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset

如需显示匿名数据集的相关信息,请使用 bq ls --all 命令列出所有数据集,然后在 bq show 命令中使用匿名数据集的名称。

bq show --format=prettyjson project_id:dataset

请替换以下内容:

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

示例:

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

bq show --format=prettyjson mydataset

输入以下命令可显示 myotherproject 项目中 mydataset 数据集的相关信息。

bq show --format=prettyjson myotherproject:mydataset

输入以下命令可显示默认项目中匿名数据集 _1234abcd56efgh78ijkl1234 的相关信息。

bq show --format=prettyjson _1234abcd56efgh78ijkl1234

API

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

Go

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

import (
	"context"
	"fmt"
	"io"

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

// printDatasetInfo demonstrates fetching dataset metadata and printing some of it to an io.Writer.
func printDatasetInfo(w io.Writer, projectID, datasetID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	meta, err := client.Dataset(datasetID).Metadata(ctx)
	if err != nil {
		return err
	}

	fmt.Fprintf(w, "Dataset ID: %s\n", datasetID)
	fmt.Fprintf(w, "Description: %s\n", meta.Description)
	fmt.Fprintln(w, "Labels:")
	for k, v := range meta.Labels {
		fmt.Fprintf(w, "\t%s: %s", k, v)
	}
	fmt.Fprintln(w, "Tables:")
	it := client.Dataset(datasetID).Tables(ctx)

	cnt := 0
	for {
		t, err := it.Next()
		if err == iterator.Done {
			break
		}
		cnt++
		fmt.Fprintf(w, "\t%s\n", t.TableID)
	}
	if cnt == 0 {
		fmt.Fprintln(w, "\tThis dataset does not contain any tables.")
	}
	return nil
}

Java

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

import com.google.api.gax.paging.Page;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQuery.TableListOption;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.Dataset;
import com.google.cloud.bigquery.DatasetId;
import com.google.cloud.bigquery.Table;

public class GetDatasetInfo {

  public static void runGetDatasetInfo() {
    // TODO(developer): Replace these variables before running the sample.
    String projectId = "MY_PROJECT_ID";
    String datasetName = "MY_DATASET_NAME";
    getDatasetInfo(projectId, datasetName);
  }

  public static void getDatasetInfo(String projectId, String datasetName) {
    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();
      DatasetId datasetId = DatasetId.of(projectId, datasetName);
      Dataset dataset = bigquery.getDataset(datasetId);

      // View dataset properties
      String description = dataset.getDescription();
      System.out.println(description);

      // View tables in the dataset
      // For more information on listing tables see:
      // https://javadoc.io/static/com.google.cloud/google-cloud-bigquery/0.22.0-beta/com/google/cloud/bigquery/BigQuery.html
      Page<Table> tables = bigquery.listTables(datasetName, TableListOption.pageSize(100));

      tables.iterateAll().forEach(table -> System.out.print(table.getTableId().getTable() + "\n"));

      System.out.println("Dataset info retrieved successfully.");
    } catch (BigQueryException e) {
      System.out.println("Dataset info not retrieved. \n" + e.toString());
    }
  }
}

Node.js

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

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

async function getDataset() {
  // Retrieves dataset named "my_dataset".

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

  // Retrieve dataset reference
  const [dataset] = await bigquery.dataset(datasetId).get();

  console.log('Dataset:');
  console.log(dataset.metadata.datasetReference);
}
getDataset();

Python

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


from google.cloud import bigquery

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

# TODO(developer): Set dataset_id to the ID of the dataset to fetch.
# dataset_id = 'your-project.your_dataset'

dataset = client.get_dataset(dataset_id)  # Make an API request.

full_dataset_id = "{}.{}".format(dataset.project, dataset.dataset_id)
friendly_name = dataset.friendly_name
print(
    "Got dataset '{}' with friendly_name '{}'.".format(
        full_dataset_id, friendly_name
    )
)

# View dataset properties.
print("Description: {}".format(dataset.description))
print("Labels:")
labels = dataset.labels
if labels:
    for label, value in labels.items():
        print("\t{}: {}".format(label, value))
else:
    print("\tDataset has no labels defined.")

# View tables in dataset.
print("Tables:")
tables = list(client.list_tables(dataset))  # Make an API request(s).
if tables:
    for table in tables:
        print("\t{}".format(table.table_id))
else:
    print("\tThis dataset does not contain any tables.")

INFORMATION_SCHEMABeta 版

INFORMATION_SCHEMA 是一系列视图,可让您访问数据集、例程、表、视图、作业、预留和流式数据的相关元数据。

SCHEMATA 视图

当您查询 INFORMATION_SCHEMA.SCHEMATA 视图时,项目中当前用户有权访问的每个数据集都会有一行对应的查询结果。

INFORMATION_SCHEMA.SCHEMATA 视图具有如下架构:

列名 数据类型
CATALOG_NAME STRING 包含数据集的项目的名称
SCHEMA_NAME STRING 数据集的名称(也称为 datasetId
SCHEMA_OWNER STRING 值始终为 NULL
CREATION_TIME TIMESTAMP 数据集的创建时间
LAST_MODIFIED_TIME TIMESTAMP 数据集的上次修改时间
LOCATION STRING 数据集的地理位置

示例

以下示例从 INFORMATION_SCHEMA.SCHEMATA 视图中检索 schema_owner(该列留待将来使用)以外的所有列。系统会返回默认项目 myproject 中所有数据集的元数据。

如需对非默认项目运行查询,请按 `project_id`.INFORMATION_SCHEMA.view 格式将相应的项目 ID 添加到数据集,例如 `myproject`.INFORMATION_SCHEMA.SCHEMATA

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

控制台

  1. 在 Cloud Console 中打开 BigQuery 页面。

    转到 BigQuery 页面

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

    SELECT
     * EXCEPT(schema_owner)
    FROM
     INFORMATION_SCHEMA.SCHEMATA
    
  3. 点击运行

bq

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

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

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(schema_owner)
 FROM
   INFORMATION_SCHEMA.SCHEMATA'

结果应如下所示:

  +----------------+---------------+---------------------+---------------------+-----------------+
  |  catalog_name  |  schema_name  |    creation_time    | last_modified_time  |    location     |
  +----------------+---------------+---------------------+---------------------+-----------------+
  | myproject      | mydataset1    | 2018-11-07 19:50:24 | 2018-11-07 19:50:24 | US              |
  | myproject      | mydataset2    | 2018-07-16 04:24:22 | 2018-07-16 04:24:22 | US              |
  | myproject      | mydataset3    | 2018-02-07 21:08:45 | 2018-05-01 23:32:53 | asia-northeast1 |
  +----------------+---------------+---------------------+---------------------+-----------------+
  

SCHEMATA_OPTIONS 视图

当您查询 INFORMATION_SCHEMA.SCHEMATA_OPTIONS 视图时,项目中当前用户有权访问的每个数据集的每个选项都会有一行对应的查询结果。

INFORMATION_SCHEMA.SCHEMATA_OPTIONS 视图具有如下架构:

列名 数据类型
CATALOG_NAME STRING 包含数据集的项目的名称
SCHEMA_NAME STRING 数据集的名称(也称为 datasetId
OPTION_NAME STRING 选项表中的一个名称值
OPTION_TYPE STRING 选项表中的一个数据类型值
OPTION_VALUE STRING 选项表中的一个值选项

选项表
OPTION_NAME OPTION_TYPE OPTION_VALUE
default_table_expiration_days FLOAT64 数据集中所有表的默认生命周期(以天为单位)
friendly_name STRING 数据集的描述性名称
description STRING 数据集的说明
labels ARRAY<STRUCT<STRING, STRING>> 由代表数据集标签的 STRUCT 组成的数组

示例

示例 1:

以下示例查询 INFORMATION_SCHEMATA.SCHEMATA_OPTIONS 视图来检索默认项目 (myproject) 中所有数据集的默认表过期时间。

如需对非默认项目运行查询,请按 `project_id`.INFORMATION_SCHEMA.view 格式将相应的项目 ID 添加到数据集,例如 `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS

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

控制台

  1. 在 Cloud Console 中打开 BigQuery 页面。

    转到 BigQuery 页面

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

    SELECT
     *
    FROM
     INFORMATION_SCHEMA.SCHEMATA_OPTIONS
    WHERE
     option_name="default_table_expiration_days"
    
  3. 点击运行

bq

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

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

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   INFORMATION_SCHEMA.SCHEMATA_OPTIONS
 WHERE
   option_name="default_table_expiration_days"'

结果应如下所示:

  +----------------+---------------+-------------------------------+-------------+---------------------+
  |  catalog_name  |  schema_name  |          option_name          | option_type |    option_value     |
  +----------------+---------------+-------------------------------+-------------+---------------------+
  | myproject      | mydataset3    | default_table_expiration_days | FLOAT64     | 0.08333333333333333 |
  | myproject      | mydataset2    | default_table_expiration_days | FLOAT64     | 90.0                |
  | myproject      | mydataset1    | default_table_expiration_days | FLOAT64     | 30.0                |
  +----------------+---------------+-------------------------------+-------------+---------------------+
  

示例 2:

以下示例查询 INFORMATION_SCHEMATA.SCHEMATA_OPTIONS 视图来检索默认项目 (myproject) 中所有数据集的标签。

如需对非默认项目运行查询,请按 `project_id`.INFORMATION_SCHEMA.view 格式将相应的项目 ID 添加到数据集,例如 `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS

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

控制台

  1. 在 Cloud Console 中打开 BigQuery 页面。

    转到 BigQuery 页面

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

    SELECT
     *
    FROM
     INFORMATION_SCHEMA.SCHEMATA_OPTIONS
    WHERE
     option_name="labels"
    
  3. 点击运行

bq

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

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

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   INFORMATION_SCHEMA.SCHEMATA_OPTIONS
 WHERE
   option_name="labels"'

结果应如下所示:

  +----------------+---------------+-------------+---------------------------------+------------------------+
  |  catalog_name  |  schema_name  | option_name |          option_type            |      option_value      |
  +----------------+---------------+-------------+---------------------------------+------------------------+
  | myproject      | mydataset1    | labels      | ARRAY<STRUCT<STRING, STRING>>   | [STRUCT("org", "dev")] |
  | myproject      | mydataset2    | labels      | ARRAY<STRUCT<STRING, STRING>>   | [STRUCT("org", "dev")] |
  +----------------+---------------+-------------+---------------------------------+------------------------+
  

后续步骤