클러스터링된 테이블 생성 및 사용

이 문서는 BigQuery에서 클러스터링된 테이블을 만들고 사용하는 방법을 설명합니다. BigQuery의 클러스터링된 테이블 지원 개요는 클러스터링된 테이블 소개를 참조하세요.

제한사항

BigQuery의 클러스터링된 테이블에는 다음과 같은 제한사항이 적용됩니다.

  • 현재 클러스터링은 파티션을 나눈 테이블에 대해서만 지원됩니다.
  • 클러스터링된 테이블을 쿼리하거나 클러스터링된 테이블에 쿼리 결과를 쓰는 데는 표준 SQL만 지원됩니다.
  • 테이블이 생성된 경우에만 클러스터링 열을 지정할 수 있습니다.
  • 클러스터링된 테이블이 생성되면 클러스터링 열을 수정할 수 없습니다.
  • 클러스터링 열은 최상위 수준의 반복되지 않는 열이어야 하며 INT64, STRING, DATE, TIMESTAMP, BOOL, NUMERIC 또는 GEOGRAPHY 유형 중 하나여야 합니다. 데이터 유형에 대한 자세한 내용은 표준 SQL 데이터 유형을 참조하세요.
  • 클러스터링 열은 최대 4개까지 지정할 수 있습니다.

클러스터링된 테이블 만들기

현재는 파티션을 나눈 테이블만 클러스터링할 수 있습니다. 여기에는 수집 시간으로 파티션을 나눈 테이블TIMESTAMP 또는 DATE 열로 파티션을 나눈 테이블이 모두 포함됩니다.

BigQuery에서 클러스터링된 테이블을 만드는 방법은 다음과 같습니다.

테이블 이름 지정

BigQuery에서 테이블을 만들 때 테이블 이름은 데이터세트별로 고유해야 합니다. 다음과 같은 테이블 이름을 사용할 수 있습니다.

  • 최대 1,024자
  • 문자(대문자 또는 소문자), 숫자, 밑줄 포함

필수 권한

테이블을 만들려면 최소한 다음 권한이 부여되어 있어야 합니다.

  • 테이블을 만들기 위한 bigquery.tables.create 권한
  • 로드 작업, 쿼리 작업, 복사 작업을 사용하여 테이블에 데이터를 쓰기 위한 bigquery.tables.updateData 권한
  • 테이블에 데이터를 쓰는 쿼리 작업, 로드 작업, 복사 작업을 실행하기 위한 bigquery.jobs.create 권한

테이블에 쓰려는 데이터에 액세스하기 위해서는 bigquery.tables.getData와 같은 추가 권한이 필요할 수 있습니다.

사전 정의된 다음 Cloud IAM 역할에는 bigquery.tables.createbigquery.tables.updateData 권한이 모두 포함되어 있습니다.

  • bigquery.dataEditor
  • bigquery.dataOwner
  • bigquery.admin

사전 정의된 다음 Cloud IAM 역할에는 bigquery.jobs.create 권한이 포함되어 있습니다.

  • bigquery.user
  • bigquery.jobUser
  • bigquery.admin

또한 사용자에게 bigquery.datasets.create 권한이 있으면, 해당 사용자가 데이터세트를 만들 때 이에 대한 bigquery.dataOwner 액세스 권한이 부여됩니다. bigquery.dataOwner 액세스 권한이 있으면 사용자가 해당 데이터세트에서 테이블을 만들고 업데이트할 수 있습니다.

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

스키마 정의가 있는 빈 클러스터링된 테이블 만들기

클러스터링 열은 BigQuery에서 테이블을 만들 때 지정합니다. 테이블을 만든 후에는 클러스터링 열을 수정할 수 없습니다. 현재는 파티션을 나눈 테이블에만 클러스터링 열을 지정할 수 있습니다.

클러스터링 열은 최상위 수준의 반복되지 않는 열이어야 하며 INTEGER, STRING, DATE, TIMESTAMP, BOOLEAN, NUMERIC, 또는 GEOGRAPHY의 간단한 데이터 유형 중 하나여야 합니다.

클러스터링 열은 최대 4개까지 지정할 수 있습니다. 여러 열을 지정할 경우 열 순서에 따라 데이터 정렬 방식이 결정됩니다. 예를 들어 테이블이 a, b, c열로 클러스터링되면 데이터도 동일한 순서(a열 - b열 - c열 순)로 정렬됩니다. 가장 자주 필터링되거나 집계되는 열이 먼저 표시되는 것이 좋습니다.

또한 클러스터링 열의 순서는 쿼리 성능 및 가격에도 영향을 줍니다. 클러스터링된 테이블의 쿼리 권장사항에 대한 자세한 내용은 클러스터링된 테이블 쿼리를 참조하세요.

스키마 정의가 있는 빈 클러스터링된 테이블을 만드는 방법은 다음과 같습니다.

Console

  1. GCP Console에서 BigQuery 웹 UI를 엽니다.
    BigQuery 웹 UI로 이동

  2. 탐색 패널의 리소스 섹션에서 프로젝트를 펼치고 데이터세트를 선택합니다.

  3. 창의 오른쪽에 있는 세부정보 패널에서 테이블 만들기를 클릭합니다. 데이터를 로드하는 프로세스는 빈 테이블을 만드는 프로세스와 동일합니다.

    필드 추가를 이용해 스키마 추가

  4. 테이블 만들기 페이지의 소스 섹션에서 다음 항목으로 테이블 만들기에서 빈 테이블을 선택합니다.

    필드 추가를 이용해 스키마 추가

  5. 테이블 만들기 페이지의 대상 섹션에서 다음을 수행합니다.

    • 데이터세트 이름에서 적절한 데이터세트를 선택하고, 테이블 이름 필드에 BigQuery에서 만들려는 테이블의 이름을 입력합니다.

      필드 추가를 이용해 스키마 추가

    • 테이블 유형기본 테이블로 설정되어 있는지 확인합니다.

  6. 스키마 섹션에 스키마 정의를 입력합니다.

    • 다음 방법 중 하나를 사용하여 스키마 정보를 직접 입력합니다.

      • 텍스트로 편집을 사용 설정하고 테이블 스키마를 JSON 배열로 입력합니다.

      • 필드 추가를 사용하여 스키마를 직접 입력합니다.

  7. 파티션 및 클러스터 설정 섹션에서 다음을 수행합니다.

    • 파티션 나누기에서 파티션 없음을 클릭하고 수집 시간으로 파티션 나누기를 선택하여 수집 시간으로 파티션을 나눈 테이블을 클러스터링합니다. 또는 Partition by field(필드로 파티션 나누기)를 선택한 후 DATE 또는 TIMESTAMP 열을 선택하여 파티션을 나눈 테이블을 클러스터링합니다.

    • 클러스터링 순서에 쉼표로 구분된 열 이름을 1개에서 4개까지 입력합니다.

  8. 테이블 만들기를 클릭합니다.

테이블을 만든 후에 클러스터링된 테이블의 테이블 만료 시간, 설명, 라벨을 업데이트할 수 있습니다. BigQuery 웹 UI를 사용하여 테이블을 만든 경우에는 파티션 만료를 추가할 수 없습니다.

기본 UI

  1. 기본 BigQuery 웹 UI로 이동합니다.

    기본 BigQuery 웹 UI로 이동

  2. 탐색창에서 데이터세트 이름 옆에 있는 아래쪽 화살표 아이콘(아래쪽 화살표 아이콘)을 클릭하고 새 테이블 만들기를 클릭합니다.

  3. 테이블 만들기 페이지의 소스 데이터 섹션에서 빈 테이블 만들기를 클릭합니다.

  4. 테이블 만들기 페이지의 대상 테이블 섹션에서 다음을 수행합니다.

    • 테이블 이름으로 적절한 데이터세트를 선택하고 테이블 이름 필드에 생성 중인 테이블 이름을 입력합니다.
    • 테이블 유형기본 테이블로 설정되어 있는지 확인합니다.
  5. 스키마 섹션에서 스키마 정의를 직접 입력합니다.

    • 스키마 정보를 직접 입력하는 방법은 다음과 같습니다.

      • Edit as text(텍스트로 수정)를 클릭하고 테이블 스키마를 JSON 배열로 입력합니다.

      • 필드 추가를 사용하여 스키마를 입력합니다.

  6. 옵션 섹션에서 다음을 수행합니다.

    • 파티션 나누기 유형에서 없음을 클릭하고 날짜를 선택합니다.
    • 파티션 나누기 필드에서 다음 중 하나를 선택합니다.
      • DATE 또는 TIMESTAMP 열로 파티션을 나눈 테이블을 만들려면 timestamp를 선택합니다.
      • 수집 시간으로 파티션을 나눈 테이블을 만들려면 _PARTITIONTIME을 선택합니다.
    • 클러스터링 열에 1~4개의 필드 이름을 입력합니다.
    • Destination encryption(대상 암호화)에서 Default 옵션을 그대로 둡니다. 이 속성은 고객 관리 암호화 키를 위한 것입니다. 기본적으로 BigQuery는 미사용 상태로 저장된 고객 콘텐츠를 암호화합니다.

      파티션을 나눈 테이블 세부정보

  7. 테이블 만들기를 클릭합니다.

테이블을 만든 후에 클러스터링된 테이블의 테이블 만료 시간, 설명, 라벨을 업데이트할 수 있습니다. BigQuery 웹 UI를 사용하여 테이블을 만든 경우에는 파티션 만료를 추가할 수 없습니다.

CLI

mk 명령어를 다음 플래그와 함께 사용합니다.

  • --table(또는 단축형으로 -t)
  • --schema &mdash: 테이블의 스키마 정의를 인라인으로 제공하거나 JSON 스키마 파일을 통해 제공할 수 있습니다.
  • --time_partitioning_type(내부 데이터화 시간으로 파티션을 나눈 테이블의 경우) 또는 --time_partitioning_field(파티션을 나눈 테이블의 경우). 현재 --time_partitioning_type에 지원되는 유일한 값은 DAY입니다.
  • --clustering_fields로 클러스터링 열을 최대 4개까지 지정할 수 있습니다.

선택적 매개변수로는 --expiration, --description, --time_partitioning_expiration, --destination_kms_key, --label이 있습니다.

기본 프로젝트가 아닌 프로젝트에서 테이블을 생성하는 경우에는 프로젝트 ID를 [PROJECT_ID]:[DATASET] 형식으로 데이터세트에 추가하세요.

--destination_kms_key는 여기서 설명하지 않습니다. 이 플래그 사용에 대한 자세한 내용은 고객 관리 암호화 키를 참조하세요.

다음 명령어를 입력해 스키마 정의가 있는 빈 클러스터링된 테이블을 만듭니다.

bq mk \
--table \
--expiration [INTEGER1] \
--schema [SCHEMA] \
--time_partitioning_type=DAY \
--time_partitioning_field [COLUMN] \
--clustering_fields [COLUMNS] \
--time_partitioning_expiration [INTEGER2] \
--description "[DESCRIPTION]" \
--label [KEY:VALUE, KEY:VALUE] \
[PROJECT_ID]:[DATASET].[TABLE]

각 항목의 의미는 다음과 같습니다.

  • [INTEGER1]은 테이블의 기본 수명(단위: 초)입니다. 최솟값은 3,600초(1시간)입니다. 만료 시간은 현재 UTC 시간과 정수 값을 더한 값으로 계산됩니다. 시간으로 파티션을 나눈 테이블을 생성할 때 테이블의 만료 시간을 설정하면 데이터세트의 기본 테이블 만료 설정은 무시됩니다. 이 값을 설정하면 지정한 시간 이후에 테이블과 모든 파티션이 삭제됩니다.
  • [SCHEMA][FIELD]:[DATA_TYPE],[FIELD]:[DATA_TYPE] 형식의 인라인 스키마 정의이거나 로컬 머신의 JSON 스키마 파일의 경로입니다.
  • [COLUMN]은 파티션을 나눈 테이블을 만들기 위해 사용되는 TIMESTAMP 또는 DATE 열의 이름입니다. 파티션을 나눈 테이블을 만드는 경우, --time_partitioning_type=DAY 플래그를 지정하지 않아도 됩니다.
  • [COLUMNS]는 클러스터링 열을 최대 4개까지 포함시킬 수 있는 쉼표로 구분된 목록입니다.
  • [INTEGER2]는 테이블 파티션의 기본 수명(단위: 초)입니다. 최솟값은 없습니다. 만료 시간은 파티션의 날짜와 정수 값을 더한 값입니다. 파티션 만료는 테이블의 만료와 별개이며 테이블 만료보다 우선하지 않습니다. 파티션 만료를 테이블 만료보다 길게 설정하면 테이블 만료가 우선합니다.
  • [DESCRIPTION]은 따옴표로 묶은 테이블 설명입니다.
  • [KEY:VALUE]라벨을 나타내는 키:값 쌍입니다. 쉼표로 구분된 목록을 사용하여 여러 라벨을 입력할 수도 있습니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 프로젝트의 데이터세트입니다.
  • [TABLE]은 만들고 있는 파티션을 나눈 테이블의 이름입니다.

명령줄에서 스키마를 지정할 때는 RECORD(STRUCT) 유형을 포함하거나, 열 설명을 포함하거나, 열 모드를 지정할 수 없습니다. 모든 모드는 기본적으로 NULLABLE로 설정됩니다. 설명, 모드, RECORD 유형을 포함하려면 대신 JSON 스키마 파일을 제공해야 합니다.

예:

다음 명령어를 입력하면 기본 프로젝트의 mydatasetmyclusteredtable이라는 클러스터링된 테이블을 만들 수 있습니다. 이 테이블은 파티션을 나눈 테이블입니다(TIMESTAMP 열로 파티션을 나눔). 파티션 나누기 만료 시간은 86,400초(1일), 테이블 만료 시간은 2,592,000초(한달-30일), 설명은 This is my clustered table, 라벨은 organization:development로 설정됩니다. 이 명령어는 --table 대신 단축형인 -t를 사용합니다.

스키마는 timestamp:timestamp,customer_id:string,transaction_amount:float와 같이 인라인으로 지정됩니다. 지정된 클러스터링 필드 customer_id는 파티션을 클러스터링하는 데 사용됩니다.

bq mk -t \
--expiration 2592000 \
--schema 'timestamp:timestamp,customer_id:string,transaction_amount:float' \
--time_partitioning_field timestamp \
--clustering_fields customer_id \
--time_partitioning_expiration 86400  \
--description "This is my clustered table" \
--label org:dev \
mydataset.myclusteredtable

다음 명령어를 입력해 기본 프로젝트가 아닌 myotherprojectmyclusteredtable이라는 이름의 클러스터링된 테이블을 만들 수 있습니다. 테이블은 내부 데이터화 시간으로 파티션을 나눈 테이블입니다. 파티션 만료 시간은 259,200초(3일)이며 설명은 This is my partitioned table, 라벨은 organization:development로 설정됩니다. 이 명령어는 --table 대신 단축형 -t를 사용합니다. 이 명령어는 테이블 만료를 지정하지 않습니다. 데이터세트에 기본 테이블 만료 시간이 있으면 그 값이 적용됩니다. 데이터세트에 기본 테이블 만료 시간이 없으면 테이블은 만료되지 않지만 파티션은 3일 후에 만료됩니다.

스키마는 로컬 JSON 파일 /tmp/myschema.json에 지정됩니다. customer_id 필드는 파티션을 클러스터링하는 데 사용됩니다.

bq mk -t \
--expiration 2592000 \
--schema /tmp/myschema.json \
--time_partitioning_type=DAY \
--clustering_fields=customer_id \
--time_partitioning_expiration 86400  \
--description "This is my partitioned table" \
--label org:dev \
myotherproject:mydataset.myclusteredtable

테이블을 만든 후에 파티션을 나눈 테이블의 테이블 만료 시간, 파티션 만료 시간, 설명, 라벨을 업데이트할 수 있습니다.

API

timePartitioning 속성, clustering.fields 속성, schema 속성을 지정하는 테이블 리소스를 정의하여 tables.insert 메서드를 호출합니다.

Go

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 확인하세요.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
sampleSchema := bigquery.Schema{
	{Name: "timestamp", Type: bigquery.TimestampFieldType},
	{Name: "origin", Type: bigquery.StringFieldType},
	{Name: "destination", Type: bigquery.StringFieldType},
	{Name: "amount", Type: bigquery.NumericFieldType},
}
metaData := &bigquery.TableMetadata{
	Schema: sampleSchema,
	TimePartitioning: &bigquery.TimePartitioning{
		Field:      "timestamp",
		Expiration: 90 * 24 * time.Hour,
	},
	Clustering: &bigquery.Clustering{
		Fields: []string{"origin", "destination"},
	},
}
tableRef := client.Dataset(datasetID).Table(tableID)
if err := tableRef.Create(ctx, metaData); err != nil {
	return err
}

쿼리 결과에서 클러스터링된 테이블 만들기

쿼리 결과에서 클러스터링된 테이블을 만드는 방법에는 두 가지가 있습니다.

파티션을 나눈 테이블이나 파티션을 나누지 않은 테이블을 쿼리하여 클러스터링된 테이블을 만들 수 있습니다. 쿼리 결과를 사용하여 기존 테이블을 클러스터링된 테이블로 변경할 수는 없습니다.

쿼리 결과에서 클러스터링된 테이블을 만드는 경우 표준 SQL을 사용해야 합니다. 현재 클러스터링된 테이블을 쿼리하거나 쿼리 결과를 클러스터링된 테이블에 쓰는 용도로 legacy SQL을 사용할 수 없습니다.

Console

콘솔 BigQuery 웹 UI를 사용하여 데이터를 쿼리하는 경우 DDL 문을 사용하지 않으면 대상 테이블의 클러스터링 옵션을 지정할 수 없습니다. 자세한 내용은 데이터 정의 언어 문 사용을 참조하세요.

기본 UI

기본 BigQuery 웹 UI를 사용하여 데이터를 쿼리하는 경우 DDL 문을 사용하지 않으면 대상 테이블의 클러스터링 옵션을 지정할 수 없습니다. 자세한 내용은 데이터 정의 언어 문 사용을 참조하세요.

CLI

다음 명령어를 입력하여 쿼리 결과에서 클러스터링된 새 대상 테이블을 만듭니다.

    bq --location=[LOCATION] query --use_legacy_sql=false '[QUERY]'

각 항목의 의미는 다음과 같습니다.

  • [LOCATION]은 사용자 위치 이름입니다. --location 플래그는 선택사항입니다. 예를 들어, 도쿄 지역에서 BigQuery를 사용하는 경우에는 플래그 값을 asia-northeast1로 설정할 수 있습니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [QUERY]는 표준 SQL 구문의 쿼리입니다. 현재 legacy SQL을 사용하여 클러스터링된 테이블을 쿼리하거나 쿼리 결과를 클러스터링된 테이블에 쓸 수 없습니다. 쿼리에는 클러스터링된 테이블 생성 옵션을 지정하는 CREATE TABLE DDL 문이 포함될 수 있습니다. 개별 명령줄 플래그를 지정하지 않고 DDL을 사용할 수 있습니다.

예:

다음 명령어를 입력해 mydataset에 있는 myclusteredtable이라는 클러스터링된 대상 테이블에 쿼리 결과를 쓸 수 있습니다. mydataset은 기본 프로젝트에 있습니다. 이 쿼리는 파티션을 나누지 않은 테이블인 mytable에서 데이터를 가져옵니다. 테이블의 customer_id 열은 테이블을 클러스터링하는 데 사용됩니다. 테이블의 timestamp 열은 파티션을 나눈 테이블을 만드는 데 사용됩니다.

bq query --use_legacy_sql=false \
'CREATE TABLE
   mydataset.myclusteredtable
 PARTITION BY
   DATE(timestamp)
 CLUSTER BY
   customer_id AS
 SELECT
   *
 FROM
   `mydataset.mytable`'

API

쿼리 결과를 클러스터링된 테이블에 저장하려면 jobs.insert 메서드를 호출하고, query 작업을 구성하고, 클러스터링된 테이블을 만드는 CREATE TABLE DDL 문을 포함합니다.

작업 리소스jobReference 섹션에 있는 location 속성에 사용자 위치를 지정합니다.

데이터 로드 시 클러스터링된 테이블 만들기

데이터를 새 테이블에 로드할 때 클러스터링 열을 지정하면 클러스터링된 테이블을 만들 수 있습니다. 이때 데이터를 로드하기 전에 빈 테이블을 만들지 않아도 됩니다. 클러스터링된 테이블을 만들면서 동시에 데이터를 로드할 수 있습니다.

데이터 로드에 대한 자세한 내용은 BigQuery로 데이터 로드하기 소개를 참조하세요.

로드 작업 정의 시 클러스터링을 정의하려면 다음과 같이 하세요.

API

로드 작업을 통해 테이블 생성 시 클러스터링 구성을 정의하려면 configuration.load.clustering 메시지를 채웁니다. 이때 configuration.load.clustering.Fields 속성을 우선순위에 따라 최대 4개의 클러스터링 열로 채웁니다.

Go

이 샘플을 시도하기 전에 BigQuery 빠른 시작: 클라이언트 라이브러리 사용의 Go 설정 안내를 따르세요. 자세한 내용은 BigQuery Go API 참조 문서를 확인하세요.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
gcsRef := bigquery.NewGCSReference("gs://cloud-samples-data/bigquery/sample-transactions/transactions.csv")
gcsRef.SkipLeadingRows = 1
gcsRef.Schema = bigquery.Schema{
	{Name: "timestamp", Type: bigquery.TimestampFieldType},
	{Name: "origin", Type: bigquery.StringFieldType},
	{Name: "destination", Type: bigquery.StringFieldType},
	{Name: "amount", Type: bigquery.NumericFieldType},
}
loader := client.Dataset(destDatasetID).Table(destTableID).LoaderFrom(gcsRef)
loader.TimePartitioning = &bigquery.TimePartitioning{
	Field: "timestamp",
}
loader.Clustering = &bigquery.Clustering{
	Fields: []string{"origin", "destination"},
}
loader.WriteDisposition = bigquery.WriteEmpty

job, err := loader.Run(ctx)
if err != nil {
	return err
}
status, err := job.Wait(ctx)
if err != nil {
	return err
}

if status.Err() != nil {
	return fmt.Errorf("Job completed with error: %v", status.Err())
}

클러스터링된 테이블에 대한 액세스 제어

테이블이나 보기에 액세스 제어를 직접 할당할 수는 없습니다. 액세스 권한을 부여할 수 있는 최저 BigQuery 리소스 수준은 데이터세트 수준입니다. 테이블 및 보기에 대한 액세스를 구성하려면 데이터세트 수준 이상의 항목에 Cloud IAM 역할을 부여합니다.

데이터세트 수준에서 역할을 부여하면 해당 특정 데이터세트의 테이블 및 보기에서 항목이 수행할 수 있는 작업이 지정됩니다. 데이터세트 수준의 액세스 제어 구성에 대한 자세한 내용은 데이터세트에 대한 액세스 제어를 참조하세요.

Google Cloud Platform 리소스 계층 구조의 상위 수준(예: 프로젝트, 폴더 또는 조직 수준)에서 Cloud IAM 역할을 부여할 수도 있습니다. 상위 수준에서 역할을 부여하면 항목이 더 광범위한 리소스에 액세스할 수 있습니다. 예를 들어 프로젝트 수준에서 항목에 역할을 부여하면 해당 프로젝트의 모든 데이터세트에 적용되는 권한이 해당 항목에 부여됩니다. 리소스에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 Cloud IAM 문서의 리소스에 대한 액세스 권한 부여, 변경, 취소를 참조하세요.

Cloud IAM 커스텀 역할을 만들 수도 있습니다. 커스텀 역할을 만들 경우 항목이 수행하도록 하려는 특정 작업에 따라 다른 권한을 부여합니다.

역할과 권한에 대한 자세한 내용은 다음을 참조하세요.

클러스터링된 테이블 사용

클러스터링된 테이블 정보 가져오기

다음과 같은 방법으로 테이블에 대한 정보를 가져올 수 있습니다.

  • GCP Console 또는 기본 BigQuery 웹 UI 사용
  • bq show CLI 명령어 사용
  • tables.get API 메서드 호출
  • INFORMATION_SCHEMA 보기 쿼리(베타)

필수 권한

테이블에 대한 정보를 가져오려면 최소한 bigquery.tables.get 권한이 부여되어 있어야 합니다. 아래의 사전 정의된 Cloud IAM 역할에는 bigquery.tables.get 권한이 있습니다.

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

또한 사용자에게 bigquery.datasets.create 권한이 있으면, 해당 사용자가 데이터세트를 만들 때 이에 대한 bigquery.dataOwner 액세스 권한이 부여됩니다. bigquery.dataOwner 액세스 권한은 사용자에게 데이터세트의 테이블에 대한 정보를 가져올 수 있는 권한을 제공합니다.

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

클러스터링된 테이블 정보 가져오기

클러스터링된 테이블 정보를 보는 방법은 다음과 같습니다.

Console

  1. 리소스 창에서 데이터세트 이름을 클릭하여 펼친 후 보려는 테이블 이름을 클릭합니다.

  2. 세부정보를 클릭하면 페이지에 클러스터링 열을 포함한 테이블의 세부정보가 표시됩니다.

    테이블 세부정보

기본 UI

  1. 탐색창에서 데이터세트 왼쪽에 있는 아래쪽 화살표 아이콘(아래쪽 화살표 아이콘)을 클릭하여 펼치거나 데이터세트 이름을 더블클릭합니다. 그러면 데이터세트에 있는 테이블과 보기가 표시됩니다.

  2. 테이블 이름을 클릭합니다.

  3. 세부정보를 클릭하면 테이블 세부정보 페이지에 클러스터링 열을 포함한 테이블 세부정보가 표시됩니다.

    클러스터링된 테이블 세부정보

CLI

bq show 명령어를 실행하여 모든 테이블 정보를 표시합니다. 테이블 스키마 정보만 표시하려면 --schema 플래그를 사용합니다. --format 플래그를 사용하면 출력을 제어할 수 있습니다.

기본 프로젝트가 아닌 프로젝트의 테이블에 대한 정보를 가져오려면 프로젝트 ID를 [PROJECT_ID]:[DATASET] 형식으로 데이터세트에 추가합니다.

bq show --schema --format=prettyjson [PROJECT_ID]:[DATASET].[TABLE]

각 항목의 의미는 다음과 같습니다.

  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 데이터세트의 이름입니다.
  • [TABLE]은 테이블의 이름입니다.

예:

mydatasetmyclusteredtable에 대한 정보를 모두 표시하려면 다음 명령어를 입력합니다. mydataset는 기본 프로젝트입니다.

bq show --format=prettyjson mydataset.myclusteredtable

다음과 유사하게 출력됩니다.

{
  "clustering": {
    "fields": [
      "customer_id"
    ]
  },
...
}

API

bigquery.tables.get 메서드를 호출하고 관련 매개변수를 제공합니다.

INFORMATION_SCHEMA(베타)를 사용하여 클러스터링된 테이블 정보 가져오기

INFORMATION_SCHEMA는 데이터세트, 테이블, 보기의 메타데이터에 액세스할 수 있는 일련의 보기를 가리킵니다.

INFORMATION_SCHEMA.TABLESINFORMATION_SCHEMA.TABLE_OPTIONS 보기를 쿼리하여 프로젝트의 테이블 및 보기에 대한 메타데이터를 검색할 수 있습니다. 또한 INFORMATION_SCHEMA.COLUMNSINFORMATION_SCHEMA.COLUMN_FIELD_PATHS 보기를 쿼리하여 테이블의 열(필드)에 대한 메타데이터를 검색할 수 있습니다.

클러스터링된 테이블의 경우, INFORMATION_SCHEMA.COLUMNS 보기의 CLUSTERING_ORDINAL_POSITION 열을 쿼리하여 클러스터링 열에 대한 정보를 검색할 수 있습니다.

TABLES 보기

INFORMATION_SCHEMA.TABLES 보기를 쿼리하면 쿼리 결과에 데이터세트의 각 테이블 또는 보기에 하나의 행이 포함됩니다.

INFORMATION_SCHEMA.TABLES 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이나 보기가 포함된 데이터세트에 액세스할 수 있어야 합니다.

INFORMATION_SCHEMA.TABLES 보기에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
TABLE_CATALOG STRING 데이터세트가 포함된 프로젝트 이름
TABLE_SCHEMA STRING 테이블이나 보기가 포함된 데이터세트 이름(또는 datasetId라고 함)
TABLE_NAME STRING 테이블 또는 보기의 이름(또는 tableId라고 함)
TABLE_TYPE STRING 테이블 유형:
IS_INSERTABLE_INTO STRING 테이블의 DML INSERT 문 지원 여부에 따라 YES 또는 NO
IS_TYPED STRING 값은 항상 NO
CREATION_TIME TIMESTAMP 테이블 생성 시간

데이터세트 속성에 대한 자세한 내용은 REST API 문서의 데이터세트 리소스 페이지를 참조하세요. 테이블 및 보기 속성에 대한 자세한 내용은 REST API 문서의 테이블 리소스 페이지를 참조하세요.

예시

예시 1:

추후 사용을 위해 예약된 is_typed를 제외하고 INFORMATION_SCHEMA.TABLES 보기에서 모든 열을 검색합니다. 반환되는 메타데이터는 기본 프로젝트인 myprojectmydataset에 있는 모든 테이블의 메타데이터입니다.

mydataset에는 다음 테이블이 포함되어 있습니다.

  • mytable1: 표준 BigQuery 테이블
  • myview1: BigQuery 보기

INFORMATION_SCHEMA.TABLES 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

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

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

Console

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

    GCP Console로 이동

  2. 쿼리 편집기 상자에 다음과 같은 표준 SQL 쿼리를 입력합니다. INFORMATION_SCHEMA에는 표준 SQL 구문이 필요합니다. 표준 SQL은 GCP Console의 기본 구문입니다.

    SELECT
     * EXCEPT(is_typed)
    FROM
     mydataset.INFORMATION_SCHEMA.TABLES
    
  3. 실행을 클릭합니다.

CLI

query 명령어를 사용하고 --nouse_legacy_sql 또는 --use_legacy_sql=false 플래그를 사용하여 표준 SQL 구문을 지정합니다. INFORMATION_SCHEMA 쿼리에는 표준 SQL 구문이 필요합니다.

쿼리를 실행하려면 다음 명령어를 입력합니다.

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(is_typed)
 FROM
   mydataset.INFORMATION_SCHEMA.TABLES'

결과는 다음과 같이 표시됩니다.

  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | myproject      | mydataset     | mytable1       | BASE TABLE | YES                | 2018-10-29 20:34:44 |
  | myproject      | mydataset     | myview1        | VIEW       | NO                 | 2018-12-29 00:19:20 |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  

예시 2:

다음 예시는 INFORMATION_SCHEMA.TABLES 보기에서 BASE TABLE 유형의 모든 테이블을 검색합니다. is_typed 열은 제외됩니다. 반환되는 메타데이터는 기본 프로젝트인 myprojectmydataset에 있는 테이블의 메타데이터입니다.

INFORMATION_SCHEMA.TABLES 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

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

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

Console

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

    GCP Console로 이동

  2. 쿼리 편집기 상자에 다음과 같은 표준 SQL 쿼리를 입력합니다. INFORMATION_SCHEMA에는 표준 SQL 구문이 필요합니다. 표준 SQL은 GCP Console의 기본 구문입니다.

    SELECT
     * EXCEPT(is_typed)
    FROM
     mydataset.INFORMATION_SCHEMA.TABLES
    WHERE
     table_type="BASE TABLE"
    
  3. 실행을 클릭합니다.

CLI

query 명령어를 사용하고 --nouse_legacy_sql 또는 --use_legacy_sql=false 플래그를 사용하여 표준 SQL 구문을 지정합니다. INFORMATION_SCHEMA 쿼리에는 표준 SQL 구문이 필요합니다.

쿼리를 실행하려면 다음 명령어를 입력합니다.

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(is_typed)
 FROM
   mydataset.INFORMATION_SCHEMA.TABLES
 WHERE
   table_type="BASE TABLE"'

결과는 다음과 같이 표시됩니다.

  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  | myproject      | mydataset     | mytable1       | BASE TABLE | NO                 | 2018-10-31 22:40:05 |
  +----------------+---------------+----------------+------------+--------------------+---------------------+
  

TABLE_OPTIONS 보기

INFORMATION_SCHEMA.TABLE_OPTIONS 보기를 쿼리하면 쿼리 결과에 데이터세트의 각 테이블 또는 보기에 대한 행이 하나씩 포함됩니다.

INFORMATION_SCHEMA.TABLE_OPTIONS 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이나 보기가 포함된 데이터세트에 액세스할 수 있어야 합니다.

INFORMATION_SCHEMA.TABLE_OPTIONS 보기에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
TABLE_CATALOG STRING 데이터세트가 포함된 프로젝트 이름
TABLE_SCHEMA STRING 테이블이나 보기가 포함된 데이터세트 이름(또는 datasetId라고 함)
TABLE_NAME STRING 테이블 또는 보기의 이름(또는 tableId라고 함)
OPTION_NAME STRING 옵션 표의 이름 값 중 하나
OPTION_TYPE STRING 옵션 표의 데이터 유형 값 중 하나
OPTION_VALUE STRING 옵션 표의 값 옵션 중 하나
옵션 표
OPTION_NAME OPTION_TYPE OPTION_VALUE
partition_expiration_days FLOAT64 파티션을 나눈 테이블의 모든 파티션 기본 수명(일)
expiration_timestamp FLOAT64 테이블의 기본 수명(일)
kms_key_name STRING 테이블을 암호화하는 데 사용된 Cloud KMS 키의 이름
friendly_name STRING 테이블을 설명하는 이름
description STRING 테이블에 대한 설명
labels ARRAY<STRUCT<STRING, STRING>> 테이블의 라벨을 나타내는 STRUCT 배열

데이터세트 속성에 대한 자세한 내용은 REST API 문서의 데이터세트 리소스 페이지를 참조하세요. 테이블 및 보기 속성에 대한 자세한 내용은 REST API 문서의 테이블 리소스 페이지를 참조하세요.

예시

예시 1:

다음 예는 INFORMATION_SCHEMATA.TABLE_OPTIONS 보기를 쿼리하여 기본 프로젝트(myproject)의 mydataset에 있는 모든 테이블의 기본 테이블 만료 시간을 검색합니다.

INFORMATION_SCHEMA.TABLE_OPTIONS 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

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

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

Console

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

    GCP Console로 이동

  2. 쿼리 편집기 상자에 다음과 같은 표준 SQL 쿼리를 입력합니다. INFORMATION_SCHEMA에는 표준 SQL 구문이 필요합니다. 표준 SQL은 GCP Console의 기본 구문입니다.

    SELECT
     *
    FROM
     mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
    WHERE
     option_name="expiration_timestamp"
    
  3. 실행을 클릭합니다.

CLI

query 명령어를 사용하고 --nouse_legacy_sql 또는 --use_legacy_sql=false 플래그를 사용하여 표준 SQL 구문을 지정합니다. INFORMATION_SCHEMA 쿼리에는 표준 SQL 구문이 필요합니다.

쿼리를 실행하려면 다음 명령어를 입력합니다.

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
 WHERE
   option_name="expiration_timestamp"'

결과는 다음과 같이 표시됩니다.

  +----------------+---------------+------------+----------------------+-------------+--------------------------------------+
  | table_catalog  | table_schema  | table_name |     option_name      | option_type |             option_value             |
  +----------------+---------------+------------+----------------------+-------------+--------------------------------------+
  | myproject      | mydataset     | mytable1   | expiration_timestamp | TIMESTAMP   | TIMESTAMP "2020-01-16T21:12:28.000Z" |
  | myproject      | mydataset     | mytable2   | expiration_timestamp | TIMESTAMP   | TIMESTAMP "2021-01-01T21:12:28.000Z" |
  +----------------+---------------+------------+----------------------+-------------+--------------------------------------+
  

예시 2:

다음 예는 테스트 데이터가 포함된 mydataset의 모든 테이블에 대한 메타데이터를 검색합니다. 이 쿼리는 description 옵션의 값을 사용하여 설명의 아무 곳에서나 'test'가 포함된 테이블을 찾습니다. mydataset는 기본 프로젝트인 myproject에 있습니다.

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

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

Console

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

    GCP Console로 이동

  2. 쿼리 편집기 상자에 다음과 같은 표준 SQL 쿼리를 입력합니다. INFORMATION_SCHEMA에는 표준 SQL 구문이 필요합니다. 표준 SQL은 GCP Console의 기본 구문입니다.

    SELECT
     *
    FROM
     mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
    WHERE
     option_name="description" AND option_value LIKE "%test%"
    
  3. 실행을 클릭합니다.

CLI

query 명령어를 사용하고 --nouse_legacy_sql 또는 --use_legacy_sql=false 플래그를 사용하여 표준 SQL 구문을 지정합니다. INFORMATION_SCHEMA 쿼리에는 표준 SQL 구문이 필요합니다.

쿼리를 실행하려면 다음 명령어를 입력합니다.

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   mydataset.INFORMATION_SCHEMA.TABLE_OPTIONS
 WHERE
   option_name="description" AND option_value LIKE "%test%"'

결과는 다음과 같이 표시됩니다.

  +----------------+---------------+------------+-------------+-------------+--------------+
  | table_catalog  | table_schema  | table_name | option_name | option_type | option_value |
  +----------------+---------------+------------+-------------+-------------+--------------+
  | myproject      | mydataset     | mytable1   | description | STRING      | "test data"  |
  | myproject      | mydataset     | mytable2   | description | STRING      | "test data"  |
  +----------------+---------------+------------+-------------+-------------+--------------+
  

COLUMNS 보기

INFORMATION_SCHEMA.COLUMNS 보기를 쿼리하면 쿼리 결과에 데이터세트의 각 테이블 또는 보기에 대한 행이 하나씩 포함됩니다.

INFORMATION_SCHEMA.COLUMNS 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

INFORMATION_SCHEMA.COLUMNS 보기에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
TABLE_CATALOG STRING 데이터세트가 포함된 프로젝트 이름
TABLE_SCHEMA STRING 테이블이 포함된 데이터세트 이름(또는 datasetId라고 함)
TABLE_NAME STRING 테이블 또는 보기의 이름(또는 tableId라고 함)
COLUMN_NAME STRING 열의 이름
ORDINAL_POSITION INT64 테이블에 있는 열의 1부터 시작하는 오프셋. _PARTITIONTIME 또는 _PARTITIONDATE와 같은 의사 열이면 값은 NULL입니다.
IS_NULLABLE STRING 열의 모드가 NULL 값을 허용하는지 여부에 따라 YES 또는 NO
DATA_TYPE STRING 열의 표준 SQL 데이터 유형
IS_GENERATED STRING 값이 항상 NEVER
GENERATION_EXPRESSION STRING 값이 항상 NULL
IS_STORED STRING 값이 항상 NULL
IS_HIDDEN STRING 열이 _PARTITIONTIME 또는 _PARTITIONDATE와 같은 의사 열인지 여부에 따라 YES 또는 NO
IS_UPDATABLE STRING 값이 항상 NULL
IS_SYSTEM_DEFINED STRING 열이 _PARTITIONTIME 또는 _PARTITIONDATE와 같은 의사 열인지 여부에 따라 YES 또는 NO
IS_PARTITIONING_COLUMN STRING 열이 파티션 나누기 열인지 여부에 따라 YES 또는 NO
CLUSTERING_ORDINAL_POSITION STRING 테이블 클러스터링 열에 있는 해당 열의 1부터 시작하는 오프셋. 테이블이 클러스터링된 테이블이 아니면 값은 NULL입니다.

데이터세트 속성에 대한 자세한 내용은 REST API 문서의 데이터세트 리소스 페이지를 참조하세요. 테이블 및 보기 속성에 대한 자세한 내용은 REST API 문서의 테이블 리소스 페이지를 참조하세요.

예시

다음 예시에서는 census_bureau_usa 데이터세트에 있는 population_by_zip_2010 테이블의 INFORMATION_SCHEMA.COLUMNS 보기에서 메타데이터를 검색합니다. 이 데이터세트는 BigQuery 공개 데이터세트 프로그램의 일부입니다.

쿼리하려는 이 테이블은 bigquery-public-data 프로젝트라는 다른 프로젝트에 있으므로 데이터세트에 프로젝트 ID를 `project_id`.dataset.INFORMATION_SCHEMA.view 형식으로 추가합니다(예시: `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES).

다음 열은 현재 나중에 사용하도록 예약되어 있으므로 쿼리 결과에서 제외됩니다.

  • IS_GENERATED
  • GENERATION_EXPRESSION
  • IS_STORED
  • IS_UPDATABLE

INFORMATION_SCHEMA.COLUMNS 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

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

Console

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

    GCP Console로 이동

  2. 쿼리 편집기 상자에 다음과 같은 표준 SQL 쿼리를 입력합니다. INFORMATION_SCHEMA에는 표준 SQL 구문이 필요합니다. 표준 SQL은 GCP Console의 기본 구문입니다.

    SELECT
     * EXCEPT(is_generated, generation_expression, is_stored, is_updatable)
    FROM
     `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.COLUMNS
    WHERE
     table_name="population_by_zip_2010"
    
  3. 실행을 클릭합니다.

CLI

query 명령어를 사용하고 --nouse_legacy_sql 또는 --use_legacy_sql=false 플래그를 사용하여 표준 SQL 구문을 지정합니다. INFORMATION_SCHEMA 쿼리에는 표준 SQL 구문이 필요합니다.

쿼리를 실행하려면 다음을 입력하세요.

bq query --nouse_legacy_sql \
'SELECT
   * EXCEPT(is_generated, generation_expression, is_stored, is_updatable)
 FROM
   `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.COLUMNS
 WHERE
   table_name="population_by_zip_2010"'

결과는 다음과 같이 표시됩니다. 가독성을 위해 table_catalogtable_schema는 결과에서 제외됩니다.

+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+
|       table_name       | column_name | ordinal_position | is_nullable | data_type | is_hidden | is_system_defined | is_partitioning_column | clustering_ordinal_position |
+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+
| population_by_zip_2010 | zipcode     |                1 | NO          | STRING    | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | geo_id      |                2 | YES         | STRING    | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | minimum_age |                3 | YES         | INT64     | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | maximum_age |                4 | YES         | INT64     | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | gender      |                5 | YES         | STRING    | NO        | NO                | NO                     |                        NULL |
| population_by_zip_2010 | population  |                6 | YES         | INT64     | NO        | NO                | NO                     |                        NULL |
+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+
  

COLUMN_FIELD_PATHS 보기

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS 보기를 쿼리하면 RECORD(또는 STRUCT) 열에 있는 중첩된 각 열마다 행이 하나씩 쿼리 결과에 포함됩니다.

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS 보기에는 다음과 같은 스키마가 있습니다.

열 이름 데이터 유형
TABLE_CATALOG >STRING 데이터세트가 포함된 프로젝트 이름
TABLE_SCHEMA STRING 테이블이 포함된 데이터세트 이름(또는 datasetId라고 함)
TABLE_NAME STRING 테이블 또는 보기의 이름(또는 tableId라고 함)
COLUMN_NAME STRING 열의 이름
FIELD_PATH STRING `RECORD` 또는 `STRUCT` 열에 있는 중첩된 열 경로
DATA_TYPE STRING 열의 표준 SQL 데이터 유형
DESCRIPTION STRING 열의 설명

데이터세트 속성에 대한 자세한 내용은 REST API 문서의 데이터세트 리소스 페이지를 참조하세요. 테이블 및 보기 속성에 대한 자세한 내용은 REST API 문서의 테이블 리소스 페이지를 참조하세요.

예시

다음 예시에서는 github_repos 데이터세트에 있는 commits 테이블의 INFORMATION_SCHEMA.COLUMN_FIELD_PATHS 보기에서 메타데이터를 검색합니다. 이 데이터세트는 BigQuery 공개 데이터세트 프로그램의 일부입니다.

쿼리하려는 이 테이블은 bigquery-public-data 프로젝트라는 다른 프로젝트에 있으므로 데이터세트에 프로젝트 ID를 `project_id`.dataset.INFORMATION_SCHEMA.view 형식으로 추가합니다(예시: `bigquery-public-data`.github_repos.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS).

commits 테이블에는 다음과 같은 중첩된 열과 중첩 및 반복되는 열이 포함됩니다.

  • author: 중첩 RECORD
  • committer: 중첩 RECORD
  • trailer: 중첩 및 반복 RECORD
  • difference: 중첩 및 반복 RECORD

이 쿼리는 authordifference 열에 대한 메타데이터를 검색합니다.

INFORMATION_SCHEMA.COLUMN_FIELD_PATHS 보기에 대한 쿼리에는 데이터세트 한정자가 있어야 합니다. 쿼리를 제출하는 사용자는 테이블이 포함된 데이터세트에 액세스할 수 있어야 합니다.

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

Console

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

    GCP Console로 이동

  2. 쿼리 편집기 상자에 다음과 같은 표준 SQL 쿼리를 입력합니다. INFORMATION_SCHEMA에는 표준 SQL 구문이 필요합니다. 표준 SQL은 GCP Console의 기본 구문입니다.

    SELECT
     *
    FROM
     `bigquery-public-data`.github_repos.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS
    WHERE
     table_name="commits"
     AND column_name="author"
     OR column_name="difference"
    
  3. 실행을 클릭합니다.

CLI

query 명령어를 사용하고 --nouse_legacy_sql 또는 --use_legacy_sql=false 플래그를 사용하여 표준 SQL 구문을 지정합니다. INFORMATION_SCHEMA 쿼리에는 표준 SQL 구문이 필요합니다.

쿼리를 실행하려면 다음을 입력하세요.

bq query --nouse_legacy_sql \
'SELECT
   *
 FROM
   `bigquery-public-data`.github_repos.INFORMATION_SCHEMA.COLUMN_FIELD_PATHS
 WHERE
   table_name="commits"
   AND column_name="author"
   OR column_name="difference"'

결과는 다음과 같이 표시됩니다. 가독성을 위해 table_catalogtable_schema는 결과에서 제외됩니다.

  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  | table_name | column_name |     field_path      |                                                                      data_type                                                                      | description |
  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  | commits    | author      | author              | STRUCT<name STRING, email STRING, time_sec INT64, tz_offset INT64, date TIMESTAMP>                                                                  | NULL        |
  | commits    | author      | author.name         | STRING                                                                                                                                              | NULL        |
  | commits    | author      | author.email        | STRING                                                                                                                                              | NULL        |
  | commits    | author      | author.time_sec     | INT64                                                                                                                                               | NULL        |
  | commits    | author      | author.tz_offset    | INT64                                                                                                                                               | NULL        |
  | commits    | author      | author.date         | TIMESTAMP                                                                                                                                           | NULL        |
  | commits    | difference  | difference          | ARRAY<STRUCT<old_mode INT64, new_mode INT64, old_path STRING, new_path STRING, old_sha1 STRING, new_sha1 STRING, old_repo STRING, new_repo STRING>> | NULL        |
  | commits    | difference  | difference.old_mode | INT64                                                                                                                                               | NULL        |
  | commits    | difference  | difference.new_mode | INT64                                                                                                                                               | NULL        |
  | commits    | difference  | difference.old_path | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.new_path | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.old_sha1 | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.new_sha1 | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.old_repo | STRING                                                                                                                                              | NULL        |
  | commits    | difference  | difference.new_repo | STRING                                                                                                                                              | NULL        |
  +------------+-------------+---------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------+-------------+
  

데이터세트의 클러스터링된 테이블 나열

GCP Console, 기본 BigQuery 웹 UI, bq ls CLI 명령어를 사용하거나, tables.list API 메서드를 호출하여 데이터세트의 클러스터링된 테이블을 나열할 수 있습니다.

클러스터링된 테이블을 나열하는 데 필요한 권한과 테이블을 나열하는 단계는 파티션을 나눈 테이블과 동일합니다. 테이블 나열에 대한 자세한 내용은 데이터세트의 파티션을 나눈 테이블 나열을 참조하세요.

개발 중인 기능

다음 기능은 개발 중이며, 현재 알파 출시 버전에서는 사용할 수 없습니다.

  • 네이티브(파티션을 나누지 않은) 테이블 클러스터링 지원
  • 클러스터링 열에 필터를 사용하는 특정 유형의 쿼리 비용 절감

다음 단계

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.