수집 시간으로 파티션을 나눈 테이블 생성 및 사용

이 문서에서는 BigQuery에서 수집 시간으로 파티션을 나눈 테이블을 만들고 사용하는 방법을 설명합니다. 파티션을 나눈 테이블에 대한 자세한 내용은 파티션을 나눈 테이블 생성 및 사용을 참조하세요.

수집 시간으로 파티션을 나눈 테이블을 만든 후에는 다음을 수행할 수 있습니다.

  • 테이블 데이터에 대한 액세스 제어
  • 파티션을 나눈 테이블에 대한 정보 가져오기
  • 데이터세트의 파티션을 나눈 테이블 나열
  • 메타테이블을 사용하여 파티션을 나눈 테이블 메타데이터 가져오기

파티션을 나눈 테이블 속성 업데이트, 파티션을 나눈 테이블 복사, 파티션을 나눈 테이블 삭제를 포함하여 파티션을 나눈 테이블의 관리에 대한 자세한 내용은 파티션을 나눈 테이블 관리를 참조하세요.

수집 시간으로 파티션을 나눈 테이블 만들기

BigQuery에서는 다음과 같은 방법으로 수집 시간으로 파티션을 나눈 테이블을 만들 수 있습니다.

  • partition_expression이 지정된 DDL CREATE TABLE 문을 사용하여 만들기
  • GCP Console, 기본 BigQuery 웹 UI 또는 명령줄 도구의 bq mk 명령어를 직접 사용하여 만들기
  • tables.insert API 메서드를 호출하여 프로그래매틱 방식으로 만들기
  • 쿼리 결과에서 만들기
  • 데이터를 로드할 때 만들기
  • 날짜로 샤딩된 테이블을 파티션을 나눈 테이블로 변환합니다.

테이블 이름 지정

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 역할 및 권한에 대한 자세한 내용은 액세스 제어를 참조하세요.

스키마 정의가 있는 수집 시간으로 파티션을 나눈 빈 테이블 만들기

스키마 정의가 있는 시간으로 파티션을 나눈 빈 테이블을 만들 때는 다음 작업을 할 수 있습니다.

  • GCP Console 또는 기본 BigQuery 웹 UI를 사용하여 스키마를 입력합니다.
  • 명령줄 도구를 이용해 스키마를 인라인으로 제공합니다.
  • 명령줄 도구를 사용하여 JSON 스키마 파일 제출
  • API의 tables.insert 메서드를 호출할 때 테이블 리소스에 스키마를 제공합니다.

테이블 스키마 지정에 대한 자세한 내용은 스키마 지정을 참조하세요.

시간으로 파티션을 나눈 테이블이 만들어졌으면 다음 작업을 할 수 있습니다.

  • 데이터를 테이블에 로드
  • 쿼리 결과를 테이블에 쓰기
  • 데이터를 테이블에 복사

스키마 정의가 있는 시간으로 파티션을 나눈 빈 테이블을 만들려면 다음 안내를 따르세요.

Console

  1. 탐색 패널의 리소스 섹션에서 데이터세트를 선택합니다. 창의 오른쪽에 있는 테이블 만들기를 클릭합니다. 테이블 만들기
  2. 테이블 만들기 페이지의 소스 섹션에서 빈 테이블 만들기를 선택합니다.
  3. 테이블 만들기 페이지의 대상 섹션에서 다음을 수행합니다.

    • 데이터세트 이름에서 적절한 데이터세트를 선택합니다. 데이터세트 선택

    • 테이블 이름 필드에 BigQuery로 만들려는 테이블의 이름을 입력합니다.

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

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

    • 다음과 같이 스키마 정보를 직접 입력합니다.

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

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

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

    • 파티션 나누기에서 파티션 없음을 클릭하고 수집 시간으로 파티션 나누기를 선택합니다. 수집 시간으로 파티션 나누기
  6. (선택사항) 고급 옵션을 클릭하고 암호화에서 Cloud Key Management Service 키를 사용하도록 고객 관리 키를 클릭합니다. Google 관리 키 설정을 그대로 두면 BigQuery는 저장 데이터를 암호화합니다.

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

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

기본 UI

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

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

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

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

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

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

        JSON 배열로 스키마 추가

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

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

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

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

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

CLI

--table 플래그(또는 단축형 -t) 및 --time_partitioning_type=DAY 플래그가 지정된 mk 명령어를 사용합니다. 현재 --time_partitioning_type에 지원되는 유일한 값은 DAY입니다. 테이블의 스키마 정의를 인라인으로 제공하거나 JSON 스키마 파일을 통해 제공할 수 있습니다. 선택적 매개변수에는 --expiration, --description, --time_partitioning_expiration, --destination_kms_key, --label이 있습니다. 기본 프로젝트가 아닌 다른 프로젝트의 테이블을 만드는 경우 프로젝트 ID를 project_id:dataset 형식으로 데이터세트에 추가합니다.

여기서는 --destination_kms_key를 설명하지 않습니다. 이 플래그를 사용하는 방법에 대한 자세한 내용은 Cloud KMS 키로 데이터 보호를 참조하세요.

다음 명령어를 입력하여 스키마 정의가 있는 수집 시간으로 파티션을 나눈 빈 테이블을 만듭니다.

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

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

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

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

예:

다음 명령어를 입력하여 기본 프로젝트의 mydataset에 이름이 mytable인 수집 시간으로 파티션을 나눈 테이블을 만듭니다. 파티션 나누기 만료 시간은 259,200초(3일)로, 테이블 만료 시간은 2,592,000초(30일-1개월)로 설정되고, 설명은 This is my time-partitioned table, 라벨은 organization:development로 설정됩니다. 이 명령어는 --table 대신 단축형 -t를 사용합니다. 스키마는 qtr:STRING,sales:FLOAT,year:STRING과 같이 인라인으로 지정됩니다.

bq mk -t \
--expiration 2592000 \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
--description "This is my time-partitioned table" \
--label organization:development \
mydataset.mytable \
qtr:STRING,sales:FLOAT,year:STRING

다음 명령어를 입력하여 기본 프로젝트가 아닌 myotherproject에 이름이 mytable인 시간으로 파티션을 나눈 테이블을 만듭니다. 파티션 나누기 만료 시간은 259,200초(3일)로 설정되고, 설명은 This is my time-partitioned table, 라벨은 organization:development로 설정됩니다. 이 명령어는 --table 대신 단축형 -t를 사용합니다. 테이블 만료 시간을 지정하지 않습니다. 데이터세트에 기본 테이블 만료 시간이 있으면 그 값이 적용됩니다. 데이터세트에 기본 테이블 만료 시간이 없으면 테이블은 만료되지 않지만 파티션은 3일 후에 만료됩니다. 스키마 파일의 경로는 /tmp/myschema.json입니다.

bq mk -t \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
--description "This is my time-partitioned table" \
--label organization:development \
myotherproject:mydataset.mytable \
/tmp/myschema.json

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

API

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

쿼리 결과에서 수집 시간으로 파티션을 나눈 테이블 만들기

쿼리 결과에서 파티션을 나눈 테이블을 만들려면 새 대상 테이블에 결과를 써야 합니다. 파티션을 나눈 테이블 또는 파티션을 나누지 않은 테이블을 쿼리하여 새로운 파티션을 나눈 테이블을 만들 수 있습니다. 쿼리 결과를 사용하여 기존 테이블을 파티션을 나눈 테이블로 변경할 수는 없습니다.

시간으로 파티션을 나눈 테이블의 쿼리에 대한 자세한 내용은 파티션을 나눈 테이블 쿼리를 참조하세요.

Console

콘솔 BigQuery 웹 UI를 사용하여 데이터를 쿼리할 때는 대상 테이블의 파티션 나누기 옵션을 지정할 수 없습니다.

기본 UI

BigQuery 웹 UI를 사용하여 데이터를 쿼리할 때는 대상 테이블의 파티션 나누기 옵션을 지정할 수 없습니다.

CLI

bq query 명령어를 입력하고 --destination_table 플래그를 지정하여 쿼리 결과를 바탕으로 영구 테이블을 만든 다음 --time_partitioning_type=DAY 플래그를 지정하여 수집 시간으로 파티션을 나눈 대상 테이블을 만듭니다. 현재 --time_partitioning_type에 지원되는 유일한 값은 DAY입니다.

표준 SQL 구문을 사용하려면 use_legacy_sql=false 플래그를 지정합니다. 기본 프로젝트에 없는 테이블에 쿼리 결과를 기록하려면 프로젝트 ID를 [PROJECT_ID]:[DATASET] 형식으로 데이터세트 이름에 추가합니다.

(선택사항) --location 플래그를 지정하고 값을 사용자의 위치로 설정합니다.

다음 명령어를 실행하여 쿼리 결과에서 수집 시간으로 파티션을 나눈 새로운 대상 테이블을 만듭니다.

    bq --location=[LOCATION] query \
    --destination_table [PROJECT_ID]:[DATASET].[TABLE] \
    --time_partitioning_type=DAY \
    --use_legacy_sql=false \
    '[QUERY]'

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

  • [LOCATION]은 사용자 위치 이름입니다. --location 플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우에는 플래그 값을 asia-northeast1로 설정할 수 있습니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 시간으로 파티션을 나눈 새로운 테이블을 포함할 데이터세트의 이름입니다.
  • [TABLE]은 쿼리 결과를 사용하여 생성하려는 시간으로 파티션을 나눈 테이블의 이름입니다.
  • [QUERY]는 표준 SQL 구문의 쿼리입니다.

예:

다음 명령어를 입력하여 mydataset에서 이름이 mytable인 수집 시간으로 파티션을 나눈 대상 테이블에 쿼리 결과를 기록합니다. 데이터세트는 기본 프로젝트에 있습니다. 이 쿼리는 파티션을 나누지 않은 테이블인 USA Name Data 공개 데이터세트에서 데이터를 검색합니다.

bq query \
--destination_table mydataset.mytable \
--time_partitioning_type=DAY \
--use_legacy_sql=false \
'SELECT
   name,
   number
 FROM
   `bigquery-public-data`.usa_names.usa_1910_current
 WHERE
   gender = "M"
 ORDER BY
   number DESC'

다음 명령어를 입력하여 mydataset에서 이름이 mytable인 수집 시간으로 파티션을 나눈 대상 테이블에 쿼리 결과를 기록합니다. 데이터세트는 기본 프로젝트가 아닌 myotherproject에 있습니다. 이 쿼리는 파티션을 나누지 않은 테이블인 USA Name Data 공개 데이터세트에서 데이터를 검색합니다.

bq query \
--destination_table myotherproject:mydataset.mytable \
--time_partitioning_type=DAY \
--use_legacy_sql=false \
'SELECT
   name,
   number
 FROM
   `bigquery-public-data`.usa_names.usa_1910_current
 WHERE
   gender = "M"
 ORDER BY
   number DESC'

API

쿼리 결과를 수집 시간으로 파티션을 나눈 영구 테이블에 저장하려면 jobs.insert 메서드를 호출하고, query 작업을 구성하고, destinationTabletimePartitioning 속성의 값을 포함합니다.

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

데이터를 로드할 때 수집 시간으로 파티션을 나눈 테이블 만들기

새 테이블에 데이터를 로드할 때 파티션 나누기 옵션을 지정하여 수집 시간으로 파티션을 나눈 테이블을 만들 수 있습니다. 데이터를 로드하기 전에 파티션을 나눈 빈 테이블을 만들지 않아도 됩니다. 파티션을 나눈 테이블 만들기와 데이터 로드를 동시에 수행할 수 있습니다.

데이터를 BigQuery로 로드할 때는 테이블 스키마를 제공할 수 있고, 지원되는 데이터 형식에는 스키마 자동 감지를 사용할 수 있습니다.

파티션 데코레이터를 사용하면 특정 파티션에 데이터를 로드할 수 있습니다. 시간대를 조정하려면 파티션 데코레이터를 사용하여 원하는 표준 시간대에 따라 파티션에 데이터를 로드합니다. 예를 들어 태평양 표준시(PST)를 사용하는 경우에는 2016년 5월 1일 PST에 생성된 모든 데이터를 해당 파티션 데코레이터를 사용하여 해당 날짜의 파티션에 로드합니다.

[TABLE_NAME]$20160501

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

날짜로 샤딩된 테이블을 수집 시간으로 파티션을 나눈 테이블로 변환

이전에 날짜로 샤딩된 테이블을 만든 경우 bq 명령줄 도구에서 partition 명령어를 사용하여 관련된 테이블 세트 전체를 수집 시간으로 파티션을 나눈 테이블 하나로 변환할 수 있습니다. 날짜로 샤딩된 테이블은 이름 지정 규칙 [TABLE]_YYYYMMDD를 사용해야 합니다. 예를 들면 mytable_20160101, ... , mytable_20160331입니다.

선택적 매개변수에는 --time_partitioning_expiration, --location, --time_partitioning_type이 있습니다. 현재 지원되는 유일한 값은 --time_partitioning_type=DAY이며 이 매개변수는 선택적입니다. 소스 테이블 또는 대상 테이블이 기본 프로젝트가 아닌 다른 프로젝트에 있는 경우 해당 프로젝트 ID를 [PROJECT_ID]:[DATASET] 형식으로 데이터세트 이름에 추가합니다.

날짜로 샤딩된 일련의 테이블을 하나의 수집 시간으로 파티션을 나눈 테이블로 변환하려면 다음 명령어를 입력합니다.

bq --location=[LOCATION] partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration [INTEGER] \
[PROJECT_ID]:[DATASET].[SOURCE_TABLE]_ \
[PROJECT_ID]:[DATASET].[DESTINATION_TABLE]

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

  • [LOCATION]은 사용자 위치 이름입니다. --location 플래그는 선택사항입니다. 예를 들어 도쿄 리전에서 BigQuery를 사용하는 경우 플래그 값을 asia-northeast1로 설정합니다. .bigqueryrc 파일을 사용하여 위치 기본값을 설정할 수 있습니다.
  • [INTEGER]는 테이블 파티션의 기본 수명(단위: 초)입니다. 최솟값은 없습니다. 만료 시간은 파티션의 UTC 날짜에 정수 값을 더한 값입니다. 파티션 만료 시간은 테이블의 만료 시간과 별개이며 테이블 만료 시간보다 우선하지 않습니다. 파티션 만료 시간을 테이블 만료 시간보다 길게 설정하면 테이블 만료 시간이 우선합니다.
  • [PROJECT_ID]는 프로젝트 ID입니다.
  • [DATASET]는 프로젝트의 데이터세트입니다.
  • [SOURCE_TABLE]_은 날짜로 샤딩된 테이블의 프리픽스입니다.
  • [DESTINATION_TABLE]은 만들려고 하는 파티션을 나눈 테이블의 이름입니다.

예:

다음 명령어를 입력하여 기본 프로젝트의 mydataset에 이름이 mytable_partitioned인 수집 시간으로 파티션을 나눈 테이블을 만듭니다. 파티션 나누기 만료 시간은 259,200초(3일)로 설정됩니다. 날짜로 샤딩된 소스 테이블에는 sourcetable_이라는 프리픽스가 붙습니다. 소스 테이블은 기본 프로젝트에도 있습니다.

bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned

명령어를 실행하면 파티션을 나눈 테이블에서 파티션을 생성하는 복사 작업이 만들어집니다. 예를 들어 날짜로 샤딩된 테이블이sourcetable_20180126sourcetable_20180127이면 복사 작업을 통해 mydataset.mytable_partitioned$20180126mydataset.mytable_partitioned$20180127 파티션이 생성됩니다.

다음 명령어를 입력하여 mydataset에 이름이 mytable_partitioned인 수집 시간으로 파티션을 나눈 테이블을 만듭니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다. 파티션 나누기 만료 시간은 86,400초(1일)로 설정됩니다. 날짜로 샤딩된 소스 테이블에는 sourcetable_이라는 프리픽스가 붙습니다. 소스 테이블은 기본 프로젝트에 있습니다.

bq partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 86400 \
mydataset.sourcetable_ \
myotherproject:mydataset.mytable_partitioned

다음 명령어를 입력하여 기본 프로젝트의 mydataset에 이름이 mytable_partitioned인 수집 시간으로 파티션을 나눈 테이블을 만듭니다. mydatasetasia-northeast1 리전에서 생성되었습니다. 파티션 나누기 만료 시간은 259,200초(3일)로 설정됩니다. 날짜로 샤딩된 소스 테이블에는 sourcetable_이라는 프리픽스가 붙습니다. 소스 테이블은 기본 프로젝트에도 있습니다.

bq --location=asia-northeast1 partition \
--time_partitioning_type=DAY \
--time_partitioning_expiration 259200 \
mydataset.sourcetable_ \
mydataset.mytable_partitioned

시간으로 파티션을 나눈 테이블의 액세스 제어

테이블이나 파티션에 액세스 제어를 직접 할당할 수는 없습니다. 테이블의 액세스를 제어하려면 데이터세트 수준이나 프로젝트 수준에서 액세스 제어를 구성해야 합니다.

데이터세트 수준의 액세스 제어는 사용자, 그룹, 서비스 계정이 해당 데이터세트의 테이블에서 수행할 수 있는 작업을 지정합니다. 데이터세트 수준의 권한만 할당할 경우에는 프로젝트에 대한 액세스 권한을 제공하는 기본 또는 사전 정의된 프로젝트 수준 역할(예: bigquery.user)도 할당해야 합니다.

개별 데이터세트에 대한 액세스 권한을 부여하는 대신, 프로젝트의 모든 데이터세트에 포함된 모든 테이블 데이터에 대한 권한을 부여하는 사전 정의된 프로젝트 수준 IAM 역할을 할당할 수 있습니다.

IAM 커스텀 역할을 만들 수도 있습니다. 커스텀 역할을 만들 때 부여하는 권한은 사용자, 그룹 또는 서비스 계정에 허용하려는 테이블 작업에 따라 달라집니다.

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

수집 시간으로 파티션을 나눈 테이블 사용

수집 시간으로 파티션을 나눈 테이블에 대한 정보 가져오기

GCP Console, 기본 BigQuery 웹 UI 또는 bq show CLI 명령어를 사용하거나 tables.get API 메서드를 호출하여 테이블에 대한 정보를 가져올 수 있습니다.

필수 권한

테이블 정보를 가져오려면 데이터세트에 대한 READER 역할을 할당받거나 bigquery.tables.get 권한이 있는 프로젝트 수준의 IAM 역할을 할당받아야 합니다. 프로젝트 수준의 bigquery.tables.get 권한을 할당받으면 프로젝트의 모든 테이블 정보를 가져올 수 있습니다. 다음과 같은 사전 정의된 Cloud IAM 역할에는 bigquery.tables.get 권한이 포함되어 있습니다.

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

또한 bigquery.user 역할을 할당받은 사용자에게는 bigquery.datasets.create 권한이 있습니다. 따라서 bigquery.user 역할을 할당받은 사용자는 자신이 생성한 모든 데이터세트의 테이블 정보를 가져올 수 있습니다. bigquery.user 역할이 할당된 사용자가 데이터세트를 만들면 이 사용자에게 데이터세트에 대한 OWNER 액세스 권한이 부여됩니다. 데이터세트에 대한 OWNER 액세스 권한이 있는 사용자는 데이터세트와 그 안에 포함된 모든 테이블을 완벽하게 제어할 수 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. 데이터세트 수준 역할에 대한 자세한 내용은 데이터세트 기본 역할을 참조하세요.

수집 시간으로 파티션을 나눈 테이블 정보 가져오기

수집 시간으로 파티션을 나눈 테이블에 대한 정보를 보려면 다음 안내를 따르세요.

Console

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

  2. 탐색 패널의 리소스 섹션에서 프로젝트를 확장하고 데이터세트를 선택하여 포함된 테이블과 뷰를 나열합니다.

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

  4. 세부정보를 클릭하면 이 탭에 테이블 설명과 테이블 정보가 표시됩니다.

    테이블 세부정보

  5. 스키마 탭을 클릭하여 테이블의 스키마 정의를 확인합니다. 추가 유사 열 _PARTITIONTIME에 테이블에 로드된 데이터의 날짜 기반 타임스탬프가 포함되어 있습니다.

기본 UI

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

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

  3. 세부정보를 클릭하면 테이블 세부정보 페이지에 테이블 설명과 테이블 정보가 표시됩니다.

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

  4. 스키마 탭을 클릭하여 테이블의 스키마 정의를 확인합니다. 추가 유사 열 _PARTITIONTIME에 테이블에 로드된 데이터의 날짜 기반 타임스탬프가 포함되어 있습니다.

    파티션을 나눈 테이블 스키마

CLI

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

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

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

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

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

예:

다음 명령어를 입력하여 mydatasetmytable 관련 정보를 모두 표시합니다. mydataset는 기본 프로젝트에 있습니다.

bq show --format=prettyjson mydataset.mytable

다음 명령어를 입력하여 mydatasetmytable 관련 정보를 모두 표시합니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다.

bq show --format=prettyjson myotherproject:mydataset.mytable

mydatasetmytable 관련 스키마 정보만 표시하려면 다음 명령어를 입력합니다. mydataset는 기본 프로젝트가 아닌 myotherproject에 있습니다.

시간으로 파티션을 나눈 테이블의 스키마 정보를 표시할 때 _PARTITIONTIME 유사 열은 표시되지 않습니다.

bq show --schema --format=prettyjson myotherproject:mydataset.mytable

API

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

데이터세트의 수집 시간으로 파티션을 나눈 테이블 나열

GCP Console, 기본 BigQuery 웹 UI 또는 bq ls CLI 명령어를 사용하거나 tables.list API 메서드를 호출하여 데이터세트의 테이블(파티션을 나눈 테이블 포함)을 나열할 수 있습니다.

필수 권한

데이터세트의 테이블을 나열하려면 최소한 bigquery.tables.list 권한이 부여되어 있어야 합니다. 다음과 같은 사전 정의된 Cloud IAM 역할에는 bigquery.tables.list 권한이 있습니다.

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

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

파티션을 나눈 테이블 나열

데이터세트의 테이블(파티션을 나눈 테이블 포함)을 나열하려면 다음 안내를 따르세요.

Console

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

  2. 탐색 패널의 리소스 섹션에서 프로젝트를 확장하고 데이터세트를 클릭합니다.

  3. 목록을 스크롤하여 데이터세트의 테이블을 확인합니다. 테이블, 파티션을 나눈 테이블, 모델, 뷰는 서로 다른 아이콘으로 구분됩니다.

기본 UI

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

  2. 목록을 스크롤하여 데이터세트의 테이블을 확인합니다. 테이블과 뷰는 서로 다른 아이콘으로 구분됩니다.

    테이블 보기

CLI

bq ls 명령어를 실행합니다. --format 플래그를 사용하면 출력을 제어할 수 있습니다. 기본 프로젝트가 아닌 다른 프로젝트의 테이블을 나열하는 경우 프로젝트 ID를 [PROJECT_ID]:[DATASET] 형식으로 데이터세트에 추가합니다.

bq ls --format=pretty [PROJECT_ID]:[DATASET]

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

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

명령어를 실행하면 Type 필드에 TABLE 또는 VIEW가 표시됩니다. 수집 시간으로 파티션을 나눈 테이블의 경우 Time Partitioning 필드에 DAY 및 밀리초 단위의 파티션 만료 시간(파티션 만료 시간이 지정된 경우)이 표시됩니다.

예:

+-------------------------+-------+----------------------+--------------------------------+
|         tableId         | Type  |        Labels        | Time Partitioning              |
+-------------------------+-------+----------------------+--------------------------------+
| mytable                 | TABLE | department:shipping  |  DAY (expirationMs: 259200000) |
| myview                  | VIEW  |                      |                                |
+-------------------------+-------+----------------------+--------------------------------+

예:

다음 명령어를 입력하면 기본 프로젝트의 데이터세트 mydataset에 있는 테이블이 나열됩니다.

bq ls --format=pretty mydataset

myotherproject의 데이터세트 mydataset에 있는 테이블을 나열하려면 다음 명령어를 입력합니다.

bq ls --format=pretty myotherproject:mydataset

API

API를 사용하여 테이블을 나열하려면 tables.list 메서드를 호출합니다.

수집 시간으로 파티션을 나눈 테이블의 파티션 나열

표준 SQL의 _PARTITIONTIME 유사 열 또는 legacy SQL의 __PARTITIONS_SUMMARY__ 메타테이블을 쿼리하여 수집 시간으로 파티션을 나눈 테이블의 파티션을 나열할 수 있습니다.

bq query 명령어를 사용하거나 jobs.insert 메서드를 호출하고 query 작업을 구성하여 GCP Console, 기본 BigQuery 웹 UI에서 쿼리를 실행할 수 있습니다.

필수 권한

__PARTITIONS_SUMMARY__ 메타테이블 또는 _PARTITIONTIME 유사 열을 사용하는 쿼리 작업을 실행하려면 bigquery.jobs.create 권한이 있어야 합니다. 다음과 같은 사전 정의된 프로젝트 수준의 IAM 역할에는 bigquery.jobs.create 권한이 포함되어 있습니다.

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

또한 데이터세트 수준에서 READER 역할을 할당받거나 bigquery.tables.getData 권한이 있는 프로젝트 수준의 IAM 역할을 할당받아야 합니다. bigquery.user, bigquery.jobUser, bigquery.metadataViewer제외하고 사전 정의된 프로젝트 수준의 모든 IAM 역할에는 bigquery.tables.getData 권한이 포함되어 있습니다.

BigQuery의 IAM 역할과 권한에 대한 자세한 내용은 액세스 제어를 참조하세요. 데이터세트 수준 역할에 대한 자세한 내용은 데이터세트 기본 역할을 참조하세요.

수집 시간으로 파티션을 나눈 테이블의 파티션 나열

표준 SQL 또는 legacy SQL을 사용하여 수집 시간으로 파티션을 나눈 테이블의 파티션을 나열할 수 있습니다. 파티션을 나열하는 방법은 다음과 같습니다.

표준 SQL:

Console

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

  2. 새 쿼리 작성 버튼을 클릭합니다.

  3. 쿼리 편집기 상자에 다음 텍스트를 입력하여 _PARTITIONTIME 유사 열을 쿼리합니다.

    SELECT
      _PARTITIONTIME as pt
    FROM
      `[DATASET].[TABLE]`
    GROUP BY 1
    

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

    • [DATASET]는 테이블을 포함하는 데이터세트입니다.
    • [TABLE]은 테이블의 이름입니다.
  4. (선택사항) 더보기를 클릭하고 쿼리 설정을 선택합니다.

    쿼리 설정

  5. (선택사항) 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 처리 위치를 자동 선택으로 설정된 상태로 두어 자동으로 위치를 감지하도록 할 수 있습니다.

    쿼리 처리 위치

  6. 실행을 클릭합니다.

기본 UI

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

    BigQuery 웹 UI로 이동

  2. 쿼리 작성 버튼을 클릭합니다.

  3. 새 쿼리 상자에 다음 텍스트를 입력하여 테이블의 _PARTITIONTIME 유사 열을 쿼리합니다.

    #standardSQL
    SELECT
      _PARTITIONTIME as pt
    FROM
      `[DATASET].[TABLE]`
    GROUP BY 1
    

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

    • [DATASET]는 테이블을 포함하는 데이터세트입니다.
    • [TABLE]은 테이블의 이름입니다.
  4. 옵션 표시를 클릭합니다.

  5. (선택사항) 처리 위치에서 미지정을 클릭하고 데이터의 위치를 선택합니다.

  6. 쿼리 실행을 클릭합니다.

CLI

bq query 명령어를 사용하여 다음 쿼리를 입력합니다.

bq --location=[LOCATION] query --use_legacy_sql=false '
SELECT
  _PARTITIONTIME as pt
FROM
  `[DATASET].[TABLE]`
GROUP BY 1'

Where:

  + `[LOCATION]` is the name of your location. The `--location` flag is
    optional. For example, if you are using BigQuery in
    the Tokyo region, you can set the flag's value to `asia-northeast1`.
    You can set a default value for the location using the
    [.bigqueryrc file](/bigquery/docs/bq-command-line-tool#setting_default_values_for_command-line_flags).
  + `[DATASET]` is the dataset that contains the table.
  + `[TABLE]` is the name of the table.

API

jobs.insert 메서드를 호출하고 테이블의 _PARTITIONTIME 유사 열을 쿼리하는 query 작업을 구성합니다.

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

Legacy SQL:

Console

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

  2. 새 쿼리 작성 버튼을 클릭합니다.

  3. 쿼리 편집기 상자에 다음 텍스트를 입력하여 __PARTITIONS_SUMMARY__ 메타테이블을 쿼리합니다.

    #legacySQL
    SELECT
      partition_id
    FROM
      [[DATASET].[TABLE]$__PARTITIONS_SUMMARY__]
    

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

    • [DATASET]는 테이블을 포함하는 데이터세트입니다.
    • [TABLE]은 테이블의 이름입니다.
  4. 더보기를 클릭하고 쿼리 설정을 선택합니다.

    쿼리 설정

  5. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 데이터가 US 또는 EU 멀티 리전 위치에 있는 경우 처리 위치를 자동 선택으로 설정된 상태로 두어도 됩니다. 데이터가 US 또는 EU에 있으면 처리 위치가 자동으로 감지됩니다.

    쿼리 처리 위치

  6. 실행을 클릭합니다.

기본 UI

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

    BigQuery 웹 UI로 이동

  2. 쿼리 작성 버튼을 클릭합니다.

  3. 새 쿼리 상자에 다음 텍스트를 입력하여 테이블의 __PARTITIONS_SUMMARY__ 메타테이블을 쿼리합니다.

    #legacySQL
    SELECT
       partition_id
     FROM
       [[DATASET].[TABLE]$__PARTITIONS_SUMMARY__]
    

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

    • [DATASET]는 테이블을 포함하는 데이터세트입니다.
    • [TABLE]은 테이블의 이름입니다.
  4. 옵션 표시를 클릭합니다.

  5. (선택사항) 처리 위치에서 미지정을 클릭하고 데이터의 위치를 선택합니다.

  6. 쿼리 실행을 클릭합니다.

CLI

bq query 명령어를 사용하여 다음 쿼리를 입력합니다.

bq --location=[LOCATION] query --use_legacy_sql=true '
SELECT
   partition_id
 FROM
   [[DATASET].[TABLE]$__PARTITIONS_SUMMARY__]'

Where:

  + `[LOCATION]` is the name of your location. The `--location` flag is
    optional. For example, if you are using BigQuery in
    the Tokyo region, you can set the flag's value to `asia-northeast1`.
    You can set a default value for the location using the
    [.bigqueryrc file](/bigquery/docs/bq-command-line-tool#setting_default_values_for_command-line_flags).
  + `[DATASET]` is the dataset that contains the table.
  + `[TABLE]` is the name of the table.

API

jobs.insert 메서드를 호출하고 __PARTITIONS_SUMMARY__ 메타테이블을 쿼리하는 query 작업을 구성합니다.

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

메타테이블을 사용하여 테이블 메타데이터 가져오기

메타테이블이라고 부르는 특수한 테이블을 사용하여 파티션을 나눈 테이블에 대한 정보를 가져올 수 있습니다. 메타테이블에는 데이터세트에 있는 테이블 및 뷰 목록과 같은 메타데이터가 포함됩니다. 메타테이블은 읽기 전용입니다.

메타테이블을 사용하여 파티션 메타데이터 가져오기

__PARTITIONS_SUMMARY__ 메타테이블은 시간으로 파티션을 나눈 테이블의 파티션 관련 메타데이터를 나타내는 콘텐츠가 있는 특수한 테이블입니다. __PARTITIONS_SUMMARY__ 메타테이블은 읽기 전용입니다.

시간으로 파티션을 나눈 테이블의 파티션과 관련 메타데이터에 액세스하려면 쿼리의 SELECT 문에서 __PARTITIONS_SUMMARY__ 메타테이블을 사용합니다. 쿼리를 실행할 수 있는 방법은 다음과 같습니다.

  • GCP Console 또는 기본 BigQuery 웹 UI 사용
  • 명령줄 도구의 bq query 명령어 사용
  • jobs.insert API 메서드를 호출하고 query 작업 구성
  • 클라이언트 라이브러리 사용

현재 표준 SQL은 파티션 데코레이터 구분자($)를 지원하지 않으므로 표준 SQL에서 __PARTITIONS_SUMMARY__를 쿼리할 수 없습니다. __PARTITIONS_SUMMARY__ 메타테이블을 사용하는 legacy SQL 쿼리는 다음과 같습니다.

SELECT
  column
FROM
  [dataset.table$__PARTITIONS_SUMMARY__]

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

  • dataset는 데이터세트 이름입니다.
  • table은 시간으로 파티션을 나눈 테이블의 이름입니다.
  • column은 다음 중 하나입니다.
설명
project_id 프로젝트 이름입니다.
dataset_id 데이터세트 이름입니다.
table_id 시간으로 파티션을 나눈 테이블의 이름입니다.
partition_id 파티션의 이름(날짜)입니다.
creation_time 파티션이 생성된 시간이며 1970년 1월 1일 UTC 이후의 밀리초로 표시됩니다.
last_modified_time 파티션이 마지막으로 수정된 시간이며 1970년 1월 1일 UTC 이후의 밀리초로 표시됩니다.

파티션 메타테이블 권한

__PARTITIONS_SUMMARY__ 메타테이블을 사용하는 쿼리 작업을 실행하려면 최소한 bigquery.jobs.create 권한이 부여되어 있어야 합니다. 다음과 같은 사전 정의된 Cloud IAM 역할에는 bigquery.jobs.create 권한이 포함되어 있습니다.

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

bigquery.tables.getData 권한도 부여받아야 합니다. 다음과 같은 사전 정의된 Cloud IAM 역할에는 bigquery.tables.getData 권한이 포함되어 있습니다.

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

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

파티션 메타테이블 예시

다음 쿼리는 이름이 mydataset.mytable이고 시간으로 파티션을 나눈 테이블의 모든 파티션 메타데이터를 검색합니다.

Console

#legacySQL
SELECT
  *
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]

기본 UI

#legacySQL
SELECT
  *
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]

CLI

bq query --use_legacy_sql=true '
SELECT
  *
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]'

출력 결과는 다음과 같습니다.

+----------------+------------+----------------+--------------+---------------+--------------------+
|   project_id   | dataset_id |    table_id    | partition_id | creation_time | last_modified_time |
+----------------+------------+----------------+--------------+---------------+--------------------+
| myproject      | mydataset  | mytable        | 20160314     | 1517190224120 | 1517190224997      |
| myproject      | mydataset  | mytable        | 20160315     | 1517190224120 | 1517190224997      |
+----------------+------------+----------------+--------------+---------------+--------------------+

다음 쿼리는 mydataset.mytable의 파티션이 마지막으로 수정된 시간을 나열합니다.

Console

#legacySQL
SELECT
  partition_id,
  last_modified_time
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]

기본 UI

#legacySQL
SELECT
  partition_id,
  last_modified_time
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]

CLI

bq query --use_legacy_sql=true '
SELECT
  partition_id,
  last_modified_time
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]'

출력 결과는 다음과 같습니다.

+--------------+--------------------+
| partition_id | last_modified_time |
+--------------+--------------------+
| 20160102     |      1471632556179 |
| 20160101     |      1471632538142 |
| 20160103     |      1471632570463 |
+--------------+--------------------+

last_modified_time 필드를 사람이 읽을 수 있는 형식으로 표시하려면 FORMAT_UTC_USEC 함수를 사용합니다. 예:

Console

#legacySQL
SELECT
  partition_id,
  FORMAT_UTC_USEC(last_modified_time*1000) AS last_modified
FROM
  [mydataset.table1$__PARTITIONS_SUMMARY__]

기본 UI

#legacySQL
SELECT
  partition_id,
  FORMAT_UTC_USEC(last_modified_time*1000) AS last_modified
FROM
  [mydataset.table1$__PARTITIONS_SUMMARY__]

CLI

bq query --use_legacy_sql=true '
SELECT
  partition_id,
  FORMAT_UTC_USEC(last_modified_time*1000) AS last_modified
FROM
  [mydataset.mytable$__PARTITIONS_SUMMARY__]'

출력 결과는 다음과 같습니다.

+--------------+----------------------------+
| partition_id |       last_modified        |
+--------------+----------------------------+
| 20160103     | 2016-08-19 18:49:30.463000 |
| 20160102     | 2016-08-19 18:49:16.179000 |
| 20160101     | 2016-08-19 18:48:58.142000 |
+--------------+----------------------------+

예: 쿼리 결과를 사용하여 수집 시간으로 파티션을 나눈 테이블 만들기

이 예시에서는 명령줄 도구를 사용하여 수집 시간으로 파티션을 나눈 테이블을 만들고 쿼리 결과를 사용하여 세 개의 파티션에 데이터를 추가합니다. 이 테이블에는 2016년의 첫 3일간의 날씨 데이터가 날짜로 파티션을 나눈 형태로 포함됩니다.

이 예시에서는 NOAA GSOD 날씨 데이터세트에서 2016년의 첫 3일의 기온을 쿼리하고 그 결과를 파티션을 나눈 테이블에 기록합니다.

1단계: 이름이 mydataset인 데이터세트에 이름이 temps인 수집 시간으로 파티션을 나눈 빈 테이블을 만듭니다. 테이블의 스키마를 지정할 필요는 없습니다. 쿼리 결과의 스키마가 테이블의 스키마 정의로 사용됩니다.

bq mk --time_partitioning_type=DAY mydataset.temps

구성 설정을 보려면 bq show 명령어를 사용합니다.

bq show --format=prettyjson mydataset.temps

bq show 명령어 결과에서 timePartitioning 항목을 찾아보세요.

{
  ...
  "timePartitioning": {
    "type": "DAY"
  },
  "type": "TABLE"
}

2단계: NOAA GSOD 날씨 데이터세트에서 2016년의 첫 3일의 기온을 쿼리하고 그 결과를 temps 테이블의 해당 파티션에 기록합니다. 다음 쿼리에서는 --destination_table 옵션과 표준 SQL 구문을 사용하여 쿼리 결과의 100행을 파티션에 기록합니다.

  1. 다음 쿼리를 실행하여 2016년 1월 1일의 기온을 파티션 mydataset.temps$20160101에 기록합니다.

    bq query --use_legacy_sql=false \
    --destination_table 'mydataset.temps$20160101' \
    'SELECT
       stn,
       temp
     FROM
       `bigquery-public-data`.noaa_gsod.gsod2016
     WHERE
       mo="01"
       AND da="01"
     LIMIT
       100'
    
  2. 다음 쿼리를 실행하여 2016년 1월 2일의 기온을 파티션 mydataset.temps$20160102에 기록합니다.

    bq --location=US query --use_legacy_sql=false \
    --destination_table 'mydataset.temps$20160102' \
    'SELECT
       stn,
       temp
     FROM
       `bigquery-public-data`.noaa_gsod.gsod2016
     WHERE
       mo="01"
       AND da="02"
     LIMIT
       100'
    
  3. 다음 쿼리를 실행하여 2016년 1월 3일의 기온을 파티션 mydataset.temps$20160103에 기록합니다.

    bq --location=US query --use_legacy_sql=false \
    --destination_table 'mydataset.temps$20160103' \
    'SELECT
       stn,
       temp
     FROM
       `bigquery-public-data`.noaa_gsod.gsod2016
     WHERE
       mo="01"
       AND da="03"
     LIMIT
       100'
    

3단계: bq show 명령어를 사용하여 테이블에 300행이 있는지 확인합니다.

bq show mydataset.temps

결과에 스키마와 총 행이 표시됩니다.

  Last modified        Schema       Total Rows   Total Bytes     Expiration      Time Partitioning   Labels   kmsKeyName
 ----------------- ---------------- ------------ ------------- ----------------- ------------------- -------- ------------
  28 Jan 15:03:45   |- stn: string   300          4800          29 Jan 15:00:32   DAY
                    |- temp: float

다음 단계

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

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

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