列出数据集

本文档介绍如何在 BigQuery 中列出和获取数据集的相关信息。

准备工作

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

所需角色

如需获得列出数据集或获取数据集相关信息所需的权限,请让您的管理员为您授予项目的 BigQuery Metadata Viewer (roles/bigquery.metadataViewer) IAM 角色。 如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色包含 bigquery.datasets.get 权限,该权限是列出数据集或获取数据集相关信息所需的权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

在项目或组织级层应用 roles/bigquery.metadataViewer 角色时,您可以列出项目中的所有数据集。在数据集级层应用 roles/bigquery.metadataViewer 角色时,您可以列出您已获得该角色的所有数据集。

列出数据集

从下列选项中选择一项:

控制台

  1. 在导航菜单中,点击 Studio

  2. 在左侧窗格中,点击 探索器

    突出显示的“探索器”窗格按钮。

  3. 探索器窗格中,展开项目,点击数据集以查看该项目中的数据集,然后点击数据集的名称。您还可以使用搜索字段或过滤条件来查找数据集。

SQL

查询 INFORMATION_SCHEMA.SCHEMATA 视图

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

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

    SELECT   schema_name FROM   PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.SCHEMATA;

    替换以下内容:

    • PROJECT_ID:您的Google Cloud 项目的 ID。如果未指定,则使用默认项目。
    • REGION:任何数据集区域名称。 例如 us

  3. 点击 运行

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

bq

发出 bq ls 命令以按数据集 ID 列出数据集。您可以使用 --format 标志来控制输出。如果您要列出非默认项目中的数据集,请在该命令中添加 --project_id 标志。

如需列出项目中的所有数据集(包括隐藏数据集),请使用 --all 标志或 -a 快捷方式。

如需列出项目中的所有数据集(不包括隐藏数据集),请使用 --datasets 标志或 -d 快捷方式。此标志是可选标志。默认情况下,系统不会列出隐藏数据集。

其他标志包括:

  • --filter:用于列出匹配过滤条件表达式的数据集。请使用以空格分隔的标签键和值列表,格式为 labels.key:value。如需详细了解如何使用标签过滤数据集,请参阅添加和使用标签
  • --max_results-n:用于表示结果数量上限的整数,默认值为 50
bq ls --filter labels.key:value \ --max_results integer \ --format=prettyjson \ --project_id project_id

替换以下内容:

  • key:value:标签键和值
  • integer:表示要列出的数据集数量的整数
  • project_id:您的项目的名称

示例:

输入以下命令可列出默认项目中的数据集。-- format 设置为 pretty 可返回采用基本格式的表。

bq ls --format=pretty 

输入以下命令可列出 myotherproject 中的数据集。--format 设置为 prettyjson 可返回 JSON 格式的详细结果。

bq ls --format=prettyjson --project_id myotherproject 

输入以下命令可列出默认项目中的所有数据集(包括隐藏数据集)。在输出中,隐藏数据集以下划线开头。

bq ls -a 

输入以下命令可从默认项目返回超过 50 个(默认输出)数据集。

bq ls --max_results 60 

输入以下命令可列出默认项目中具有 org:dev 标签的数据集。

bq ls --filter labels.org:dev 

API

要使用 API 列出数据集,请调用 datasets.list API 方法。

C#

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

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

 using Google.Cloud.BigQuery.V2; using System; using System.Collections.Generic; using System.Linq;  public class BigQueryListDatasets {     public void ListDatasets(         string projectId = "your-project-id"     )     {         BigQueryClient client = BigQueryClient.Create(projectId);         // Retrieve list of datasets in project         List<BigQueryDataset> datasets = client.ListDatasets().ToList();         // Display the results         if (datasets.Count > 0)         {             Console.WriteLine($"Datasets in project {projectId}:");             foreach (var dataset in datasets)             {                 Console.WriteLine($"\t{dataset.Reference.DatasetId}");             }         }         else         {             Console.WriteLine($"{projectId} does not contain any datasets.");         }     } }

Go

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

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

import ( 	"context" 	"fmt" 	"io"  	"cloud.google.com/go/bigquery" 	"google.golang.org/api/iterator" )  // listDatasets demonstrates iterating through the collection of datasets in a project. func listDatasets(projectID string, w io.Writer) error { 	// projectID := "my-project-id" 	ctx := context.Background() 	client, err := bigquery.NewClient(ctx, projectID) 	if err != nil { 		return fmt.Errorf("bigquery.NewClient: %v", err) 	} 	defer client.Close()  	it := client.Datasets(ctx) 	for { 		dataset, err := it.Next() 		if err == iterator.Done { 			break 		} 		if err != nil { 			return err 		} 		fmt.Fprintln(w, dataset.DatasetID) 	} 	return nil } 

Java

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

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

import com.google.api.gax.paging.Page; import com.google.cloud.bigquery.BigQuery; import com.google.cloud.bigquery.BigQuery.DatasetListOption; import com.google.cloud.bigquery.BigQueryException; import com.google.cloud.bigquery.BigQueryOptions; import com.google.cloud.bigquery.Dataset;  public class ListDatasets {    public static void runListDatasets() {     // TODO(developer): Replace these variables before running the sample.     String projectId = "MY_PROJECT_ID";     listDatasets(projectId);   }    public static void listDatasets(String projectId) {     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();        Page<Dataset> datasets = bigquery.listDatasets(projectId, DatasetListOption.pageSize(100));       if (datasets == null) {         System.out.println("Dataset does not contain any models");         return;       }       datasets           .iterateAll()           .forEach(               dataset -> System.out.printf("Success! Dataset ID: %s ", dataset.getDatasetId()));     } catch (BigQueryException e) {       System.out.println("Project does not contain any datasets \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 listDatasets() {   /**    * TODO(developer): Uncomment the following lines before running the sample.    */   // const projectId = "my_project_id";    // Lists all datasets in the specified project.   // If projectId is not specified, this method will take   // the projectId from the authenticated BigQuery Client.   const [datasets] = await bigquery.getDatasets({projectId});   console.log('Datasets:');   datasets.forEach(dataset => console.log(dataset.id)); }

PHP

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

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

use Google\Cloud\BigQuery\BigQueryClient;  /** Uncomment and populate these variables in your code */ // $projectId  = 'The Google project ID';  $bigQuery = new BigQueryClient([     'projectId' => $projectId, ]); $datasets = $bigQuery->datasets(); foreach ($datasets as $dataset) {     print($dataset->id() . PHP_EOL); }

Python

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

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

 from google.cloud import bigquery  # Construct a BigQuery client object. client = bigquery.Client()  datasets = list(client.list_datasets())  # Make an API request. project = client.project  if datasets:     print("Datasets in project {}:".format(project))     for dataset in datasets:         print("\t{}".format(dataset.dataset_id)) else:     print("{} project does not contain any datasets.".format(project))

Ruby

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

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

require "google/cloud/bigquery"  def list_datasets project_id = "your-project-id"   bigquery = Google::Cloud::Bigquery.new project: project_id    puts "Datasets in project #{project_id}:"   bigquery.datasets.each do |dataset|     puts "\t#{dataset.dataset_id}"   end end

获取有关数据集的信息

从下列选项中选择一项:

控制台

  1. 在左侧窗格中,点击 探索器

    突出显示的“探索器”窗格按钮。

  2. 探索器窗格中,展开项目,点击数据集以查看该项目中的数据集,然后点击数据集的名称。您还可以使用搜索字段或过滤条件来查找数据集。

    说明和详细信息会显示在详细信息标签页中。

  3. 可选:您可以前往其他标签页,查看数据集中的表、例程和模型列表。

默认情况下,隐藏数据集在 Google Cloud 控制台中处于隐藏状态。如需显示隐藏数据集的相关信息,请使用 bq 命令行工具或 API。

SQL

查询 INFORMATION_SCHEMA.SCHEMATA 视图

  1. 在 Google Cloud 控制台中,前往 BigQuery 页面。

    转到 BigQuery

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

    SELECT   * EXCEPT (schema_owner) FROM   PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.SCHEMATA;

    替换以下内容:

    • PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
    • REGION:任何数据集区域名称。 例如 us

  3. 点击 运行

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

您还可以查询 INFORMATION_SCHEMA.SCHEMATA_OPTIONS 视图

SELECT   * FROM   PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS;

bq

发出 bq show 命令。--format 标志可用于控制输出。如果您要获取非默认项目中数据集的相关信息,请按以下格式将相应项目 ID 添加到数据集名称中:project_id:dataset。 输出会显示数据集的信息,例如访问权限控制、标签和位置。此命令不会显示数据集的继承权限,但您可以在 Google Cloud 控制台中查看这些权限。

如需显示隐藏数据集的相关信息,请使用 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 参考文档

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

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 参考文档

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

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 参考文档

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

// 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 参考文档

如需向 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 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.")

验证数据集名称

以下示例展示了如何检查数据集是否存在:

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.Dataset; import com.google.cloud.bigquery.DatasetId;  // Sample to check dataset exist public class DatasetExists {    public static void main(String[] args) {     // TODO(developer): Replace these variables before running the sample.     String datasetName = "MY_DATASET_NAME";     datasetExists(datasetName);   }    public static void datasetExists(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();        Dataset dataset = bigquery.getDataset(DatasetId.of(datasetName));       if (dataset != null) {         System.out.println("Dataset already exists.");       } else {         System.out.println("Dataset not found.");       }     } catch (BigQueryException e) {       System.out.println("Something went wrong. \n" + e.toString());     }   } }

Python

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

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

from google.cloud import bigquery from google.cloud.exceptions import NotFound  client = bigquery.Client()  # TODO(developer): Set dataset_id to the ID of the dataset to determine existence. # dataset_id = "your-project.your_dataset"  try:     client.get_dataset(dataset_id)  # Make an API request.     print("Dataset {} already exists".format(dataset_id)) except NotFound:     print("Dataset {} is not found".format(dataset_id))

后续步骤