데이터 세트 정보 가져오기

이 문서에서는 BigQuery의 데이터 세트에 대한 정보 또는 메타데이터를 가져오는 방법에 대해 설명합니다.

다음을 통해 데이터 세트 정보를 가져올 수 있습니다.

  • Cloud Console 또는 기본 BigQuery 웹 UI 사용
  • bq 명령줄 도구에서 bq show 명령어 사용
  • datasets.get API 메서드 호출
  • INFORMATION_SCHEMA 뷰 쿼리(베타)
  • 클라이언트 라이브러리 사용

필수 권한

데이터 세트에 대한 정보 또는 메타데이터를 가져오려면 최소한 bigquery.datasets.get 권한이 부여되어 있어야 합니다. 다음과 같은 사전 정의된 IAM 역할에는 bigquery.datasets.get 권한이 포함되어 있습니다.

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

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

데이터 세트 정보 가져오기

프로젝트에서 데이터 세트 정보를 가져오려면 다음 안내를 따르세요.

Console

리소스 패널에서 데이터 세트 이름을 클릭합니다. 쿼리 편집기 아래에 데이터 세트의 설명과 세부정보가 표시됩니다. 데이터 세트의 테이블은 리소스 패널의 테이블 아래에 중첩되어 있습니다.

데이터 세트 보기

기본적으로 익명 데이터 세트는 BigQuery 웹 UI에 표시되지 않습니다. 익명 데이터 세트 정보를 표시하려면 bq 명령줄 도구 또는 API를 사용하세요.

기본 UI

데이터 세트 이름을 클릭합니다. 데이터 세트 세부정보 페이지에 데이터 세트 설명, 세부정보, 테이블이 표시됩니다.

데이터 세트 보기

기본적으로 익명 데이터 세트는 BigQuery 웹 UI에 표시되지 않습니다. 익명 데이터 세트 정보를 표시하려면 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
}

자바

이 샘플을 사용해 보기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 자바 설정 안내를 따르세요. 자세한 내용은 BigQuery 자바 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_SCHEMA(베타)

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 데이터 세트의 지리적 위치

예시

다음 예시는 나중에 사용할 수 있도록 예약된 schema_owner를 제외하고 INFORMATION_SCHEMA.SCHEMATA 뷰에서 모든 열을 검색합니다. 반환된 메타데이터는 기본 프로젝트 myproject에 있는 모든 데이터 세트의 메타데이터입니다.

기본 프로젝트 이외의 프로젝트에 쿼리를 실행하려면 프로젝트 ID를 `project_id`.INFORMATION_SCHEMA.view 형식으로 데이터 세트에 추가합니다(예: `myproject`.INFORMATION_SCHEMA.SCHEMATA).

쿼리를 실행하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 BigQuery 웹 UI를 엽니다.

    Cloud Console로 이동

  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)에 있는 모든 데이터 세트의 기본 테이블 만료 시간을 검색합니다.

기본 프로젝트 이외의 프로젝트에 쿼리를 실행하려면 프로젝트 ID를 `project_id`.INFORMATION_SCHEMA.view 형식으로 데이터 세트에 추가합니다(예: `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS).

쿼리를 실행하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 BigQuery 웹 UI를 엽니다.

    Cloud Console로 이동

  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)에 있는 모든 데이터 세트의 라벨을 검색합니다.

기본 프로젝트가 아닌 프로젝트에 쿼리를 실행하려면 프로젝트 ID를 `project_id`.INFORMATION_SCHEMA.view 형식으로 데이터 세트에 추가합니다(예: `myproject`.INFORMATION_SCHEMA.SCHEMATA_OPTIONS).

쿼리를 실행하려면 다음 안내를 따르세요.

Console

  1. Cloud Console에서 BigQuery 웹 UI를 엽니다.

    Cloud Console로 이동

  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")] |
  +----------------+---------------+-------------+---------------------------------+------------------------+
  

다음 단계