데이터 정의 언어 문 사용

데이터 정의 언어(DDL) 문에서는 표준 SQL 쿼리 구문을 사용하여 BigQuery 리소스를 만들고 수정할 수 있습니다. 현재 BigQuery에서 DDL 명령어를 사용하여 수행할 수 있는 작업은 아래와 같습니다.

CREATE TABLE 문

BigQuery에서 테이블을 만들려면 CREATE TABLE DDL 문을 사용합니다.

구문

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}
table_name
[(
  column_name column_schema[, ...]
)]
[PARTITION BY partition_expression]
[CLUSTER BY clustering_column_list]
[OPTIONS(table_option_list)]
[AS query_statement]

여기에서

{CREATE TABLE | CREATE TABLE IF NOT EXISTS | CREATE OR REPLACE TABLE}은 다음 문 중 하나입니다.

  • CREATE TABLE — 새 테이블을 만듭니다.
  • CREATE TABLE IF NOT EXISTS — 현재 지정된 데이터세트에 테이블이 없는 경우에만 새 테이블을 만듭니다.
  • CREATE OR REPLACE TABLE — 테이블을 만들고 지정된 데이터세트에 있는 같은 이름의 기존 테이블을 대체합니다.

CREATE TABLE 문은 다음 규칙을 준수해야 합니다.

  • CREATE 문 하나만 허용됩니다.
  • 열 목록, as query_statement 절 또는 두 가지가 모두 있어야 합니다.
  • 열 목록과 as query_statement 절 모두 있는 경우 BigQuery는 as query_statement 절의 이름을 무시하고 위치를 기준으로 열 목록과 열을 일치시킵니다.
  • as query_statement 절이 있고 열 목록이 없는 경우 BigQuery는 as query_statement 절에서 열 이름과 유형을 확인합니다.
  • 열 목록 또는 as query_statement 절을 통해 열 이름이 지정되어야 합니다.
  • 중복 열 이름은 허용되지 않습니다.

table_name

table_name은 만들고자 하는 테이블의 이름입니다. 테이블 이름은 데이터세트별로 고유해야 합니다. 테이블 이름의 제한사항은 아래와 같습니다.

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

column_namecolumn_schema

(column_name column_schema[, ...])에는 테이블의 스키마 정보가 쉼표로 구분된 목록으로 포함됩니다.

  • column_name은 열 이름으로 제한사항은 아래와 같습니다.
    • 문자(a-z, A-Z), 숫자(0-9), 밑줄(_)만 포함해야 함
    • 문자 또는 밑줄로 시작해야 함
    • 최고 128자까지 가능
  • column_schema데이터 형식과 비슷하지만 ARRAY 이외의 형식에 대해서 NOT NULL 제약 조건도 선택적으로 지원합니다. column_schema는 최상위 열과 STRUCT 필드의 옵션도 지원합니다.
column_schema :=
   {simple_type [NOT NULL] |
    STRUCT<field_list> [NOT NULL] |
    ARRAY<array_element_schema>}
   [OPTIONS(column_option_list)]

field_list := field_name column_schema [, ...]

array_element_schema := {simple_type | STRUCT<field_list>} [NOT NULL]

simple_typeSTRUCTARRAY 이외의 모든 지원되는 데이터 유형입니다.

field_name은 구조체 필드 이름입니다. 구조체 필드 이름의 제한사항은 열 이름과 같습니다.

열 또는 필드에 NOT NULL 제약 조건이 있으면 해당 열 또는 필드는 REQUIRED 모드로 만들어집니다. 반대로 NOT NULL 제약 조건이 없는 경우 열 또는 필드는 NULLABLE 모드로 만들어집니다.

ARRAY 형식의 열 및 필드는 NOT NULL 한정자를 지원하지 않습니다. 예를 들어 ARRAY<INT64> NOT NULLcolumn_schema는 유효하지 않습니다. ARRAY 열은 REPEATED 모드가 있고 빈 상태일 수 있지만 NULL이 될 수는 없기 때문입니다. 테이블의 배열 요소는 NOT NULL 제약 조건이 지정되었는지 여부와 관계없이 NULL이 될 수 없습니다. 예를 들어 ARRAY<INT64>ARRAY<INT64 NOT NULL>과 동일합니다.

테이블 column_schemaNOT NULL 속성은 쿼리를 통해 테이블 간에 전파되지 않습니다. 예를 들어 테이블 Tx INT64 NOT NULL로 선언된 열이 있으면 CREATE TABLE dataset.newtable AS SELECT x FROM Tdataset.newtable이라는 테이블을 만듭니다. 여기서 xNULLABLE입니다.

column_schemaCREATE TABLE 문의 열 정의 목록에만 사용될 수 있고 표현식에서는 형식으로 사용될 수 없습니다. 예를 들어 CAST(1 AS INT64 NOT NULL)는 유효하지 않습니다.

partition_expression

PARTITION BY테이블 파티션 나누기를 제어하는 절이며 옵션입니다. partition_expression은 테이블 파티션을 나누는 방식을 결정하는 표현식입니다. 파티션 표현식에는 다음 값이 포함될 수 있습니다.

  • PARTITION BY DATE(_PARTITIONTIME)_PARTITIONTIME pseudo column의 날짜 기반 타임스탬프를 사용하여 테이블 파티션을 나눕니다. 이 구문은 AS query_statement 절이 없는 CREATE TABLE에서만 지원됩니다.
  • PARTITION BY DATE(<timestamp_column>)TIMESTAMP 열의 날짜를 사용하여 테이블 파티션을 나눕니다.
  • PARTITION BY <date_column>DATE을 사용하여 테이블 파티션을 나눕니다.

clustering_column_list

CLUSTER BY테이블 클러스터링을 제어하는 선택사항 절입니다. clustering_column_list는 테이블을 클러스터링하는 방식을 결정하는 쉼표로 구분된 목록입니다. 클러스터링 열 목록에는 클러스터링 열이 최대 4개까지 포함될 수 있습니다.

table_option_list

옵션 목록을 사용하면 라벨 및 만료 시간과 같은 테이블 옵션을 설정할 수 있습니다. 쉼표로 구분된 목록을 사용하여 옵션을 여러 개 포함할 수 있습니다.

다음 형식으로 테이블 옵션 목록을 지정합니다.

NAME=VALUE, ...

NAMEVALUE는 다음 조합 중 하나여야 합니다.

NAME VALUE 세부정보
expiration_timestamp TIMESTAMP

예: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

이 속성은 expirationTime 테이블 리소스 속성과 동일합니다.

partition_expiration_days

FLOAT64

예: partition_expiration_days=7

이 속성은 timePartitioning.expirationMs 테이블 리소스 속성과 동일하지만 밀리초 대신 일 수를 사용합니다. 1일은 86,400,000밀리초 또는 24시간입니다.

파티션을 나눈 테이블에만 이 속성을 설정할 수 있습니다.

require_partition_filter

BOOL

예: require_partition_filter=true

이 속성은 timePartitioning.requirePartitionFilter 테이블 리소스 속성과 동일합니다.

파티션을 나눈 테이블에만 이 속성을 설정할 수 있습니다.

kms_key_name

STRING

예: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

이 속성은 encryptionConfiguration.kmsKeyName 테이블 리소스 속성과 동일합니다.

자세한 내용은 Cloud KMS 키를 사용하여 데이터 보호를 참조하세요.

friendly_name

STRING

예: friendly_name="my_table"

이 속성은 friendlyName 테이블 리소스 속성과 동일합니다.

description

STRING

예: description="a table that expires in 2020"

이 속성은 description 테이블 리소스 속성과 동일합니다.

labels

ARRAY<STRUCT<STRING, STRING>>

예: labels=[("org_unit", "development")]

이 속성은 labels 테이블 리소스 속성과 동일합니다.

VALUE는 리터럴, 쿼리 매개변수, 스칼라 함수만 포함하는 상수 표현식입니다. 상수 표현식이 null로 계산되면 해당 옵션 NAME은 무시됩니다.

상수 표현식에는 다음이 포함될 수 없습니다.

  • 테이블 참조
  • 하위 쿼리 또는 SQL 문(예: SELECT, CREATE, UPDATE)
  • 사용자 정의 함수, 집계 함수 또는 분석 함수
  • 다음 스칼라 함수:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

column_option_list

column_schemacolumn_option_list를 사용하면 열이나 필드 옵션을 지정할 수 있습니다. 열 옵션의 구문과 요구사항은 테이블 옵션과 동일하지만 NAMEVALUE 목록은 다릅니다.

NAME VALUE 세부정보
description

STRING

예: description="a unique id"

이 속성은 schema.fields[].description 테이블 리소스 속성과 동일합니다.

query_statement

AS query_statement 절은 테이블을 만들어야 하는 쿼리를 지정합니다. 지원되는 query_statement 양식은 SQL 구문 참조를 참조하세요.

제한사항:

  • 쿼리 결과에서 수집 시간으로 파티션을 나눈 테이블을 만들 수 없습니다. 대신 CREATE TABLE DDL 문을 사용하여 테이블을 만든 후 INSERT DML 문을 사용하여 데이터를 삽입합니다.
  • OR REPLACE 한정자를 사용하여 테이블을 다른 종류의 파티션 나누기로 대체할 수 없습니다. 대신 테이블을 DROP한 후 CREATE TABLE ... AS SELECT ... 문을 사용하여 다시 만듭니다.

CREATE TABLE 예

새 테이블 만들기

CREATE TABLE DDL 문은 지정된 옵션을 사용하여 테이블을 만듭니다. 데이터세트에 테이블 이름이 있는 경우 다음 오류가 반환됩니다.

Already Exists: [PROJECT]:[DATASET].[TABLE]

다음 예에서는 mydatasetnewtable이라는 파티션을 나눈 테이블을 만듭니다. 기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 추가합니다. 예를 들어 'myproject.mydataset.newtable'과 같은 형식입니다.

테이블은 다음 partition_expression을 사용하여 PARTITION BY DATE(_PARTITIONTIME) 테이블의 파티션을 나눕니다. 이 표현식은 _PARTITIONTIME 유사 열의 날짜 기반 타임스탬프를 사용하여 테이블의 파티션을 나눕니다.

테이블 스키마에는 2개의 열이 포함됩니다.

  • x — 정수, 'An optional INTEGER field'라는 설명 포함
  • y — 다음 2개의 열이 포함된 STRUCT:

    • a — 배열 문자열, 'A repeated STRING field' 설명 포함
    • b — 부울

테이블 옵션 목록은 다음을 지정합니다.

  • 테이블 만료 시간 — 2020년 1월 1일 00:00:00 UTC
  • 파티션 만료 시간 — 1일
  • 설명 — 2020년에 만료되는 테이블
  • 라벨 — org_unit = 개발

DDL을 사용하여 새 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.newtable
     (
       x INT64 OPTIONS(description="An optional INTEGER field"),
       y STRUCT<
         a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
         b BOOL
       >
     )
     PARTITION BY DATE(_PARTITIONTIME)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.newtable
     (
       x INT64 OPTIONS(description="An optional INTEGER field"),
       y STRUCT<
         a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
         b BOOL
       >
     )
     PARTITION BY DATE(_PARTITIONTIME)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       partition_expiration_days=1,
       description="a table that expires in 2020, with each partition living for 24 hours",
       labels=[("org_unit", "development")]
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.newtable
(
  x INT64 OPTIONS(description="An optional INTEGER field"),
  y STRUCT<
    a ARRAY<STRING> OPTIONS(description="A repeated STRING field"),
    b BOOL
  >
)
PARTITION BY DATE(_PARTITIONTIME)
OPTIONS(
  expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
  partition_expiration_days=1,
  description="a table that expires in 2020, with each partition living for 24 hours",
  labels=[("org_unit", "development")]
)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

기존 테이블에서 새 테이블 만들기

CREATE TABLE ... AS SELECT DDL 문은 쿼리에서 테이블을 만듭니다. 데이터세트에 테이블 이름이 있는 경우 다음 오류가 반환됩니다.

Already Exists: [PROJECT]:[DATASET].[TABLE]

다음 예에서는 mydataset에 이름이 top_words인 테이블을 만듭니다. 기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 붙입니다. 예를 들어 'myproject.mydataset.rainy_days'와 같은 형식입니다.

테이블 스키마에는 2개의 열이 포함됩니다.

  • corpus — Shakespeare corpus 이름
  • top_wordsword(STRING) 및 word_count(INT64, 단어 수 포함) 등 필드 2개가 포함된 STRUCTARRAY

테이블 옵션 목록은 다음을 지정합니다.

  • 설명 — Shakespeare corpus당 최상위 10개 단어

DDL을 사용하여 새 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM bigquery-public-data.samples.shakespeare
     GROUP BY corpus;

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count) ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM bigquery-public-data.samples.shakespeare
     GROUP BY corpus;

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
     CREATE TABLE mydataset.top_words
     OPTIONS(
       description="Top ten words per Shakespeare corpus"
     ) AS
     SELECT
       corpus,
       ARRAY_AGG(STRUCT(word, word_count)
                 ORDER BY word_count DESC LIMIT 10) AS top_words
     FROM `bigquery-public-data.samples.shakespeare`
     GROUP BY corpus;'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

테이블이 없는 경우에만 테이블 만들기

CREATE TABLE IF NOT EXISTS DDL 문은 데이터세트에 테이블 이름이 없는 경우에만 지정된 옵션으로 테이블을 만듭니다. 데이터세트에 테이블 이름이 있는 경우 오류가 반환되지 않고 아무런 작업도 수행되지 않습니다.

다음 예에서는 mydataset에 이름이 newtable인 테이블이 없는 경우에만 mydataset에 이름이 newtable인 테이블을 만듭니다. 기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 붙입니다. 예를 들어 'myproject.mydataset.newtable'과 같은 형식입니다.

테이블 스키마에는 2개의 열이 포함됩니다.

  • x — 정수
  • y — a(문자열 배열)와 b(부울)가 포함된 STRUCT

테이블 옵션 목록은 다음을 지정합니다.

  • 만료 시간 — 2020년 1월 1일, 00:00:00 UTC
  • 설명 — 2020년에 만료되는 테이블
  • 라벨 — org_unit = 개발

데이터세트에 테이블 이름이 없는 경우에만 DDL을 사용하여 새 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       description="a table that expires in 2020",
       labels=[("org_unit", "development")]
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       description="a table that expires in 2020",
       labels=[("org_unit", "development")]
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE IF NOT EXISTS mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
 OPTIONS(
   expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
   description="a table that expires in 2020",
   labels=[("org_unit", "development")]
 )'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

테이블 만들기 또는 대체

CREATE OR REPLACE TABLE DDL 문은 지정된 옵션을 사용하여 테이블을 만듭니다. 데이터세트에 테이블 이름이 있는 경우 빈 테이블이 테이블을 덮어씁니다.

다음 예에서는 mydataset에 이름이 newtable인 테이블을 만들고, newtablemydataset에 있는 경우 덮어씁니다. 기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 붙입니다. 예를 들어 'myproject.mydataset.newtable'과 같은 형식입니다.

테이블 스키마에는 2개의 열이 포함됩니다.

  • x — 정수
  • y — a(문자열 배열)와 b(부울)가 포함된 STRUCT

테이블 옵션 목록은 다음을 지정합니다.

  • 만료 시간 — 2020년 1월 1일, 00:00:00 UTC
  • 설명 — 2020년에 만료되는 테이블
  • 라벨 — org_unit = 개발

DDL을 사용하여 새 테이블을 만들고 같은 이름의 테이블을 덮어쓰려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       description="a table that expires in 2020",
       labels=[("org_unit", "development")]
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
     OPTIONS(
       expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
       description="a table that expires in 2020",
       labels=[("org_unit", "development")]
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE OR REPLACE TABLE mydataset.newtable (x INT64, y STRUCT<a ARRAY<STRING>, b BOOL>)
 OPTIONS(
   expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC",
   description="a table that expires in 2020",
   labels=[("org_unit", "development")]
 )'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

REQUIRED 열이 있는 테이블 만들기

CREATE TABLE 문의 열 정의 목록에 있는 NOT NULL 한정자는 열 또는 필드가 REQUIRED 모드로 생성되도록 지정합니다.

다음 예에서는 mydataset에 이름이 newtable인 테이블을 만듭니다. 데이터세트에 테이블 이름이 있는 경우 다음 오류가 반환됩니다.

Already Exists: [PROJECT]:[DATASET].[TABLE]

기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 붙입니다. 예를 들어 'myproject.mydataset.newtable'과 같은 형식입니다.

테이블 스키마에는 3개의 열이 포함됩니다.

  • xREQUIRED 정수
  • y — a(문자열 배열), b(REQUIRED 부울), c(NULLABLE 부동 소수점)가 포함된 REQUIRED STRUCT
  • zNULLABLE 문자열

DDL을 사용하여 REQUIRED 열이 있는 새 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE my_dataset.new_table (
       x INT64 NOT NULL,
       y STRUCT<
         a ARRAY<STRING>,
         b BOOL NOT NULL,
         c FLOAT64
       > NOT NULL,
       z STRING
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE my_dataset.new_table (
       x INT64 NOT NULL,
       y STRUCT<
         a ARRAY<STRING>,
         b BOOL NOT NULL,
         c FLOAT64
       > NOT NULL,
       z STRING
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
 CREATE TABLE my_dataset.new_table (
   x INT64 NOT NULL,
   y STRUCT<
     a ARRAY<STRING>,
     b BOOL NOT NULL,
     c FLOAT64
   > NOT NULL,
   z STRING
 )'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

파티션을 나눈 테이블 만들기

다음 예시에서는 DATE 열을 사용하여 mydatasetnewtable이라는 파티션을 나눈 테이블을 만듭니다. 기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 붙입니다. 예를 들어 'myproject.mydataset.newtable'과 같은 형식입니다.

테이블 스키마에는 2개의 열이 포함됩니다.

  • transaction_id — 정수
  • transaction_date — 날짜

테이블 옵션 목록은 다음을 지정합니다.

  • 파티션 만료 — 3일
  • 설명transaction_date로 파티션을 나눈 테이블

DDL을 사용하여 새 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
     PARTITION BY transaction_date
     OPTIONS(
       partition_expiration_days=3,
       description="a table partitioned by transaction_date"
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
     PARTITION BY transaction_date
     OPTIONS(
       partition_expiration_days=3,
       description="a table partitioned by transaction_date"
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.newtable (transaction_id INT64, transaction_date DATE)
PARTITION BY transaction_date
OPTIONS(
  partition_expiration_days=3,
  description="a table partitioned by transaction_date"
)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

쿼리 결과에서 파티션을 나눈 테이블 만들기

다음 예시에서는 DATE 열을 사용하여 mydatasetdays_with_rain이라는 파티션을 나눈 테이블을 만듭니다. 기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 붙입니다. 예를 들어 'myproject.mydataset.newtable'과 같은 형식입니다.

테이블 스키마에는 2개의 열이 포함됩니다.

  • date — 데이터 컬렉션의 DATE
  • station_name — 기상 관측소 이름(STRING)
  • prcp — 인치 단위의 강수량(FLOAT64)

테이블 옵션 목록은 다음을 지정합니다.

  • 파티션 만료 — 1년
  • 설명 — 강수량이 있는 기상 관측소, 날짜별로 파티션을 나눔

DDL을 사용하여 새 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.days_with_rain
     PARTITION BY date
     OPTIONS (
       partition_expiration_days=365,
       description="weather stations with precipitation, partitioned by day"
     ) AS
     SELECT
       DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
       (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
        WHERE stations.usaf = stn) AS station_name,  -- Stations may have multiple names
       prcp
     FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
     WHERE prcp != 99.9  -- Filter unknown values
       AND prcp > 0      -- Filter stations/days with no precipitation
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.days_with_rain
     PARTITION BY date
     OPTIONS (
       partition_expiration_days=365,
       description="weather stations with precipitation, partitioned by day"
     ) AS
     SELECT
       DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
       (SELECT ANY_VALUE(name) FROM `bigquery-public-data.noaa_gsod.stations` AS stations
        WHERE stations.usaf = stn) AS station_name,  -- Stations may have multiple names
       prcp
     FROM `bigquery-public-data.noaa_gsod.gsod2017` AS weather
     WHERE prcp != 99.9  -- Filter unknown values
       AND prcp > 0      -- Filter stations/days with no precipitation
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.days_with_rain
PARTITION BY date
OPTIONS (
  partition_expiration_days=365,
  description="weather stations with precipitation, partitioned by day"
) AS
SELECT
  DATE(CAST(year AS INT64), CAST(mo AS INT64), CAST(da AS INT64)) AS date,
  (SELECT ANY_VALUE(name) FROM \`bigquery-public-data.noaa_gsod.stations\` AS stations
   WHERE stations.usaf = stn) AS station_name,  -- Stations may have multiple names
  prcp
FROM \`bigquery-public-data.noaa_gsod.gsod2017\` AS weather
WHERE prcp != 99.9  -- Filter unknown values
  AND prcp > 0      -- Filter stations/days with no precipitation
'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

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

예시 1

다음 예시에서는 mydatasetmyclusteredtable이라는 클러스터링된 테이블을 만듭니다. 이 테이블은 TIMESTAMP 열로 파티션을 나누고 customer_id라는 STRING 열로 클러스터링된 파티션을 나눈 테이블입니다.

기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 추가합니다. 예를 들어 'myproject.mydataset.myclusteredtable'과 같은 형식입니다.

테이블 스키마에는 3개의 열이 포함됩니다.

  • timestamp — 데이터 컬렉션 시간(TIMESTAMP)
  • customer_id — 고객 ID(STRING)
  • transaction_amount — 거래 금액(NUMERIC)

테이블 옵션 목록은 다음을 지정합니다.

  • 파티션 만료 — 3일
  • 설명 — 'customer_id로 클러스터링된 테이블'

DDL 문을 사용하여 클러스터링된 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 CREATE TABLE DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

  4. 옵션 표시를 클릭합니다.

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

  6. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(timestamp)
CLUSTER BY customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

예 2

다음 예시에서는 mydatasetmyclusteredtable이라는 클러스터링된 테이블을 만듭니다. 이 테이블은 내부 데이터화 시간별로 파티션을 나눈 테이블입니다.

기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 추가합니다. 예를 들어 'myproject.mydataset.myclusteredtable'과 같은 형식입니다.

테이블 스키마에는 3개의 열이 포함됩니다.

  • timestamp — 데이터 컬렉션 시간(TIMESTAMP)
  • customer_id — 고객 ID(STRING)
  • transaction_amount — 거래 금액(NUMERIC)

테이블 옵션 목록은 다음을 지정합니다.

  • 파티션 만료 — 3일
  • 설명 — 'customer_id로 클러스터링된 테이블'

DDL 문을 사용하여 클러스터링된 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(_PARTITIONTIME)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 CREATE TABLE DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(_PARTITIONTIME)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )

  4. 옵션 표시를 클릭합니다.

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

  6. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
(
  timestamp TIMESTAMP,
  customer_id STRING,
  transaction_amount NUMERIC
)
PARTITION BY DATE(_PARTITIONTIME)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

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

다음 예에서는 쿼리 결과를 사용하여 mydatasetmyclusteredtable이라는 클러스터링된 테이블을 만듭니다. 이 테이블은 파티션을 나눈 테이블입니다(TIMESTAMP 열로 파티션을 나눔).

기본 프로젝트를 구성하지 않은 경우 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 데이터세트 이름 앞에 추가합니다. 예를 들어 'myproject.mydataset.myclusteredtable'과 같은 형식입니다.

테이블 스키마에는 3개의 열이 포함됩니다.

  • timestamp — 데이터 컬렉션 시간(TIMESTAMP)
  • customer_id — 고객 ID(STRING)
  • transaction_amount — 거래 금액(NUMERIC)

테이블 옵션 목록은 다음을 지정합니다.

  • 파티션 만료 — 3일
  • 설명 — 'customer_id로 클러스터링된 테이블'

DDL 문을 사용하여 클러스터링된 테이블을 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )
     AS SELECT * FROM mydataset.myothertable

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 CREATE TABLE DDL 문을 입력합니다.

     #standardSQL
     CREATE TABLE mydataset.myclusteredtable
     (
       timestamp TIMESTAMP,
       customer_id STRING,
       transaction_amount NUMERIC
     )
     PARTITION BY DATE(timestamp)
     CLUSTER BY
       customer_id
     OPTIONS (
       partition_expiration_days=3,
       description="a table clustered by customer_id"
     )
     AS SELECT * FROM mydataset.myothertable

  4. 옵션 표시를 클릭합니다.

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

  6. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE mydataset.myclusteredtable
  (
    timestamp TIMESTAMP,
    customer_id STRING,
    transaction_amount NUMERIC
  )
PARTITION BY DATE(timestamp)
CLUSTER BY
  customer_id
OPTIONS (
  partition_expiration_days=3,
  description="a table clustered by customer_id"
)
AS SELECT * FROM mydataset.myothertable'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

CREATE VIEW 문

BigQuery에서 뷰를 만들려면 CREATE VIEW DDL 문을 사용합니다.

구문

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}
view_name
[OPTIONS(view_option_list)]
AS query_expression

여기에서

{CREATE VIEW | CREATE VIEW IF NOT EXISTS | CREATE OR REPLACE VIEW}은 다음 문 중 하나입니다.

  • CREATE VIEW — 새 뷰를 만듭니다.
  • CREATE VIEW IF NOT EXISTS — 지정된 데이터세트에 현재 뷰가 없는 경우에만 새 뷰를 만듭니다.
  • CREATE OR REPLACE VIEW — 지정된 데이터세트에 뷰를 만들고 같은 이름의 기존 뷰를 대체합니다.

view_name은 만든 뷰의 이름입니다. 뷰 이름은 데이터세트별로 고유해야 합니다. 뷰 이름의 제한사항은 아래와 같습니다.

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

view_option_list를 사용하면 라벨 및 만료 시간과 같은 추가 뷰 만들기 옵션을 지정할 수 있습니다.

CREATE VIEW 문은 다음 규칙을 준수해야 합니다.

  • 하나의 CREATE 문만 허용됩니다.

query_expression은 뷰를 정의하는 데 사용되는 표준 SQL 쿼리 표현식입니다.

view_option_list

옵션 목록을 사용하면 라벨 및 만료 시간과 같은 뷰 옵션을 설정할 수 있습니다. 쉼표로 구분된 목록을 사용하여 옵션을 여러 개 포함할 수 있습니다.

다음 형식으로 뷰 옵션 목록을 지정합니다.

NAME=VALUE, ...

NAMEVALUE는 다음 조합 중 하나여야 합니다.

NAME VALUE 세부정보
expiration_timestamp TIMESTAMP

예: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

이 속성은 expirationTime 테이블 리소스 속성과 동일합니다.

friendly_name

STRING

예: friendly_name="my_view"

이 속성은 friendlyName 테이블 리소스 속성과 동일합니다.

description

STRING

예: description="a view that expires in 2020"

이 속성은 description 테이블 리소스 속성과 동일합니다.

labels

ARRAY<STRUCT<STRING, STRING>>

예: labels=[("org_unit", "development")]

이 속성은 labels 테이블 리소스 속성과 동일합니다.

VALUE는 리터럴, 쿼리 매개변수, 스칼라 함수만 포함하는 상수 표현식입니다. 상수 표현식이 null로 계산되면 해당 옵션 NAME은 무시됩니다.

상수 표현식에는 다음이 포함될 수 없습니다.

  • 테이블 참조
  • 하위 쿼리 또는 SQL 문(예: SELECT, CREATE, UPDATE)
  • 사용자 정의 함수, 집계 함수 또는 분석 함수
  • 다음 스칼라 함수:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

예시

새 뷰 만들기

CREATE VIEW DDL 문은 지정된 옵션을 사용하여 뷰를 만듭니다. 데이터세트에 뷰 이름이 있는 경우 다음 오류가 반환됩니다.

Already Exists: [PROJECT]:[DATASET].[VIEW]

다음 예에서는 mydataset에 이름이 newview인 뷰를 만듭니다. DDL 문을 사용하여 뷰를 만드는 경우 프로젝트, 데이터세트, 뷰를 '[PROJECT].[DATASET].[VIEW]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.newview'와 같은 형식입니다.

뷰는 다음 표준 SQL 쿼리를 사용하여 정의됩니다.

SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable

뷰 옵션 목록은 다음을 지정합니다.

  • 만료 시간 — 뷰가 만들어진 시점으로부터 48시간
  • 별칭 — newview
  • 설명 — 2일 후 만료되는 뷰
  • 라벨 — org_unit = 개발

DDL을 사용하여 새 뷰를 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE TABLE `myproject.mydataset.newview`
 OPTIONS(
   expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
   friendly_name="newview",
   description="a view that expires in 2 days",
   labels=[("org_unit", "development")]
 )
 AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

자바

BigQuery.create() 메서드를 호출하여 쿼리 작업을 시작합니다. Job.waitFor() 메서드를 호출하여 DDL 쿼리가 완료될 때까지 기다립니다.

// import com.google.cloud.bigquery.*;
// String projectId = "my-project";
// String datasetId = "my_dataset";
// String tableId = "new_view";
// BigQuery bigquery = BigQueryOptions.getDefaultInstance().toBuilder()
//     .setProjectId(projectId)
//     .build().getService();

String sql =
    String.format(
        "CREATE VIEW `%s.%s.%s`\n"
            + "OPTIONS(\n"
            + "  expiration_timestamp=TIMESTAMP_ADD(\n"
            + "    CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),\n"
            + "  friendly_name=\"new_view\",\n"
            + "  description=\"a view that expires in 2 days\",\n"
            + "  labels=[(\"org_unit\", \"development\")]\n"
            + ")\n"
            + "AS SELECT name, state, year, number\n"
            + "  FROM `bigquery-public-data.usa_names.usa_1910_current`\n"
            + "  WHERE state LIKE 'W%%';\n",
        projectId, datasetId, tableId);

// Make an API request to run the query job.
Job job = bigquery.create(JobInfo.of(QueryJobConfiguration.newBuilder(sql).build()));

// Wait for the query to finish.
job = job.waitFor();

QueryJobConfiguration jobConfig = (QueryJobConfiguration) job.getConfiguration();
System.out.printf(
    "Created new view \"%s.%s.%s\".\n",
    jobConfig.getDestinationTable().getProject(),
    jobConfig.getDestinationTable().getDataset(),
    jobConfig.getDestinationTable().getTable());

PYTHON

Client.query() 메서드를 호출하여 쿼리 작업을 시작합니다. QueryJob.result() 메서드를 호출하여 DDL 쿼리가 완료될 때까지 기다립니다.

# from google.cloud import bigquery
# project = 'my-project'
# dataset_id = 'my_dataset'
# table_id = 'new_view'
# client = bigquery.Client(project=project)

sql = """
CREATE VIEW `{}.{}.{}`
OPTIONS(
    expiration_timestamp=TIMESTAMP_ADD(
        CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
    friendly_name="new_view",
    description="a view that expires in 2 days",
    labels=[("org_unit", "development")]
)
AS SELECT name, state, year, number
    FROM `bigquery-public-data.usa_names.usa_1910_current`
    WHERE state LIKE 'W%'
""".format(
    project, dataset_id, table_id
)

job = client.query(sql)  # API request.
job.result()  # Waits for the query to finish.

print(
    'Created new view "{}.{}.{}".'.format(
        job.destination.project,
        job.destination.dataset_id,
        job.destination.table_id,
    )
)

뷰가 없는 경우에만 뷰 만들기

CREATE VIEW IF NOT EXISTS DDL 문은 데이터세트에 뷰 이름이 없는 경우에만 지정된 옵션으로 뷰를 만듭니다. 데이터세트에 뷰 이름이 있는 경우 오류가 반환되지 않고 아무런 작업도 수행되지 않습니다.

다음 예에서는 mydataset에 이름이 newview인 뷰가 없는 경우에만 mydataset에 이름이 newview인 뷰를 만듭니다. DDL 문을 사용하여 뷰를 만드는 경우 프로젝트, 데이터세트, 뷰를 '[PROJECT].[DATASET].[VIEW]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.newview'와 같은 형식입니다.

뷰는 다음 표준 SQL 쿼리를 사용하여 정의됩니다.

SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable

뷰 옵션 목록은 다음을 지정합니다.

  • 만료 시간 — 뷰가 만들어진 시점으로부터 48시간
  • 별칭 — newview
  • 설명 — 2일 후 만료되는 뷰
  • 라벨 — org_unit = 개발

데이터세트에 뷰 이름이 없는 경우에만 DDL을 사용하여 새 뷰를 만들려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE VIEW IF NOT EXISTS `myproject.mydataset.newview`
 OPTIONS(
   expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
   friendly_name="newview",
   description="a view that expires in 2 days",
   labels=[("org_unit", "development")]
 )
 AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

뷰 만들기 또는 대체

CREATE OR REPLACE VIEW DDL 문은 지정된 옵션을 사용하여 뷰를 만듭니다. 데이터세트에 뷰 이름이 있는 경우 지정된 쿼리 표현식을 사용하여 뷰를 덮어씁니다.

다음 예에서는 mydataset에 이름이 newview인 뷰를 만들고, mydatasetnewview가 있는 경우 덮어씁니다. DDL 문을 사용하여 뷰를 만드는 경우 프로젝트, 데이터세트, 뷰를 '[PROJECT].[DATASET].[VIEW]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.newview'와 같은 형식입니다.

뷰는 다음 표준 SQL 쿼리를 사용하여 정의됩니다.

    SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`

뷰 옵션 목록은 다음을 지정합니다.

  • 만료 시간 — 뷰가 만들어진 시점으로부터 48시간
  • 별칭 — newview
  • 설명 — 2일 후 만료되는 뷰
  • 라벨 — org_unit = 개발

DDL을 사용하여 새 뷰를 만들고 같은 이름의 뷰를 덮어쓰려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     CREATE OR REPLACE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     CREATE OR REPLACE VIEW `myproject.mydataset.newview`
     OPTIONS(
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
       friendly_name="newview",
       description="a view that expires in 2 days",
       labels=[("org_unit", "development")]
     )
     AS SELECT column_1, column_2, column_3 FROM myproject.mydataset.mytable
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에 나타납니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
CREATE OR REPLACE VIEW `myproject.mydataset.newview`
 OPTIONS(
   expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 48 HOUR),
   friendly_name="newview",
   description="a view that expires in 2 days",
   labels=[("org_unit", "development")]
 )
 AS SELECT column_1, column_2, column_3 FROM `myproject.mydataset.mytable`'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

CREATE FUNCTION 문

BigQuery는 사용자 정의 함수(UDF)를 지원합니다. UDF를 사용하면 SQL 표현식 또는 자바스크립트를 사용하여 함수를 만들 수 있습니다. 이러한 함수는 입력 열을 받아 작업을 수행하고 이러한 작업의 결과를 값으로 반환합니다.

legacy SQL의 사용자 정의 함수에 대한 자세한 내용은 legacy SQL의 사용자 정의 함수를 참조하세요.

UDF는 임시 또는 영구적일 수 있습니다. 임시 UDF는 현재 쿼리 또는 명령줄 세션에서만 사용할 수 있습니다.

일반 UDF 구문

BigQuery의 사용자 정의 함수에는 다음과 같은 일반 구문이 사용됩니다.

CREATE { [TEMPORARY | TEMP] FUNCTION | OR REPLACE [TEMPORARY | TEMP] FUNCTION |
    [TEMPORARY | TEMP] FUNCTION IF NOT EXISTS }
    function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  { [LANGUAGE language AS """body"""] | [AS (function_definition)] }
[OPTIONS (library = library_array)];

named_parameter:
  param_name param_type

이 구문은 다음 구성요소로 구성됩니다.

  • CREATE { [TEMPORARY | TEMP] FUNCTION | OR REPLACE [TEMPORARY | TEMP] FUNCTION | [TEMPORARY | TEMP] FUNCTION IF NOT EXISTS }. 새 함수를 만듭니다. 함수에는 named_parameter가 0개 이상 포함될 수 있습니다. 함수를 임시 함수로 만들려면 TEMP 또는 TEMPORARY 키워드를 사용하세요. 같은 이름의 기존 함수를 대체하려면 OR REPLACE 키워드를 사용하세요. 같은 이름의 함수가 이미 있는 경우 쿼리를 성공한 것으로 처리하고 추가 작업을 하지 않으려면 IF NOT EXISTS 절을 사용하세요.
  • named_parameter. 쉼표로 구분된 param_nameparam_type 쌍으로 구성됩니다. param_type 값은 BigQuery 데이터 유형입니다. SQL UDF의 경우 param_type 값은 ANY TYPE일 수도 있습니다.
  • [RETURNS data_type]. 함수가 반환하는 데이터 유형을 지정합니다. 함수가 SQL에 정의된 경우 RETURNS 절은 선택사항이며, BigQuery는 SQL 함수 본문으로부터 함수의 결과 유형을 유추합니다. 함수가 자바스크립트로 정의된 경우 RETURNS 절이 필수입니다. data_type에 허용되는 값에 대한 자세한 내용은 지원되는 UDF 데이터 유형을 참조하세요.
  • [LANGUAGE language AS '''body''']. 함수 및 함수를 정의하는 코드의 자바스크립트 언어를 지정합니다.
  • AS (function_definition). 함수를 정의하는 SQL 코드를 지정합니다. function_definition은 SQL 표현식입니다.
  • [OPTIONS (library = library_array)]. 자바스크립트 UDF의 경우 함수 정의에 포함할 자바스크립트 라이브러리 배열을 지정합니다.

SQL UDF 구조

다음 구문을 사용하여 SQL UDF를 만듭니다.

CREATE { [TEMPORARY | TEMP] FUNCTION | OR REPLACE [TEMPORARY | TEMP] FUNCTION |
    [TEMPORARY | TEMP] FUNCTION IF NOT EXISTS } function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  AS (sql_expression)

named_parameter:
  param_name param_type

템플릿 SQL UDF 매개변수

함수 호출 시 템플릿 매개변수 한 개가 2개 이상의 인수 유형과 일치할 수 있습니다. 함수 서명에 템플릿 매개변수가 포함되어 있으면 BigQuery는 함수 호출 시 여러 인수 유형 중 하나를 함수에 전달할 수 있도록 합니다.

SQL 맞춤설정 함수 서명에는 다음과 같은 템플릿 param_type 값이 포함될 수 있습니다.

  • ANY TYPE. 이 함수는 이 인수에 모든 유형의 입력을 허용합니다. 매개변수 2개 이상이 ANY TYPE 유형이면 BigQuery는 함수 생성 시 이러한 인수 간의 관계를 적용하지 않습니다. 그러나 함수 정의와 호환되지 않는 유형의 함수 인수를 전달하면 호출 시 오류가 발생합니다.

SQL UDF 예시

다음 예시는 UDF를 생성합니다.

CREATE FUNCTION mydataset.multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js AS """
  return x*y;
""";

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x, y, mydataset.multiplyInputs(x, y) as product
FROM numbers;

위 예시는 다음 출력을 생성합니다.

+-----+-----+--------------+
| x   | y   | product      |
+-----+-----+--------------+
| 1   | 5   | 5            |
| 2   | 10  | 20           |
| 3   | 15  | 45           |
+-----+-----+--------------+

TEMP 또는 TEMPORARY 키워드를 사용하여 이 함수를 임시 함수로 만들 수 있습니다.

다음 예시에서는 SQL 함수가 사용된 UDF를 보여줍니다.

CREATE TEMP FUNCTION addFourAndDivide(x INT64, y INT64) AS ((x + 4) / y);

WITH numbers AS
  (SELECT 1 as val
  UNION ALL
  SELECT 3 as val
  UNION ALL
  SELECT 4 as val
  UNION ALL
  SELECT 5 as val)
SELECT val, addFourAndDivide(val, 2) AS result
FROM numbers;

위 예시는 다음 출력을 생성합니다.

+-----+--------+
| val | result |
+-----+--------+
| 1   | 2.5    |
| 3   | 3.5    |
| 4   | 4      |
| 5   | 4.5    |
+-----+--------+

다음 예시에서는 템플릿 매개변수를 사용하는 SQL UDF를 보여줍니다. 이에 따른 함수는 다양한 유형의 인수를 허용합니다.

CREATE TEMP FUNCTION addFourAndDivideAny(x ANY TYPE, y ANY TYPE) AS (
  (x + 4) / y
);
SELECT addFourAndDivideAny(3, 4) AS integer_output,
       addFourAndDivideAny(1.59, 3.14) AS floating_point_output;

위 예시는 다음 출력을 반환합니다.

+----------------+-----------------------+
| integer_output | floating_point_output |
+----------------+-----------------------+
| 1.75           | 1.7802547770700636    |
+----------------+-----------------------+

다음 예시에서는 템플릿 매개변수를 사용하여 모든 유형의 배열에서 마지막 요소를 반환하는 SQL UDF를 보여줍니다.

CREATE TEMP FUNCTION lastArrayElement(arr ANY TYPE) AS (
  arr[ORDINAL(ARRAY_LENGTH(arr))]
);
SELECT
  names[OFFSET(0)] AS first_name,
  lastArrayElement(names) AS last_name
FROM (
  SELECT ['Fred', 'McFeely', 'Rogers'] AS names UNION ALL
  SELECT ['Marie', 'Skłodowska', 'Curie']
);

위 예시는 다음 출력을 반환합니다.

+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Fred       | Rogers    |
| Marie      | Curie     |
+------------+-----------+

자바스크립트 UDF 구조

다음 구조를 사용하여 자바스크립트 UDF를 만듭니다.

CREATE { [TEMPORARY | TEMP] FUNCTION | OR REPLACE [TEMPORARY | TEMP] FUNCTION |
    [TEMPORARY | TEMP] FUNCTION IF NOT EXISTS } function_name ([named_parameter[, ...]])
  [RETURNS data_type]
  LANGUAGE js
  AS javascript_code

자바스크립트 UDF 예시

CREATE TEMP FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x*y;
""";

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x, y, multiplyInputs(x, y) as product
FROM numbers;

위 예시는 다음 출력을 반환합니다.

+-----+-----+--------------+
| x   | y   | product      |
+-----+-----+--------------+
| 1   | 5   | 5            |
| 2   | 10  | 20           |
| 3   | 15  | 45           |
+-----+-----+--------------+

쿼리 전에 UDF를 여러 개 만들 수 있습니다. 예를 들면 다음과 같습니다.

CREATE TEMP FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x*y;
""";

CREATE TEMP FUNCTION divideByTwo(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x / 2;
""";

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x,
  y,
  multiplyInputs(x, y) as product,
  divideByTwo(x) as half_x,
  divideByTwo(y) as half_y
FROM numbers;

위 예시는 다음 출력을 반환합니다.

+-----+-----+--------------+--------+--------+
| x   | y   | product      | half_x | half_y |
+-----+-----+--------------+--------+--------+
| 1   | 5   | 5            | 0.5    | 2.5    |
| 2   | 10  | 20           | 1      | 5      |
| 3   | 15  | 45           | 1.5    | 7.5    |
+-----+-----+--------------+--------+--------+

UDF의 결과를 다른 UDF의 입력으로 전달할 수 있습니다. 예를 들면 다음과 같습니다.

CREATE TEMP FUNCTION multiplyInputs(x FLOAT64, y FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x*y;
""";

CREATE TEMP FUNCTION divideByTwo(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS """
  return x/2;
""";

WITH numbers AS
  (SELECT 1 AS x, 5 as y
  UNION ALL
  SELECT 2 AS x, 10 as y
  UNION ALL
  SELECT 3 as x, 15 as y)
SELECT x,
  y,
  multiplyInputs(divideByTwo(x), divideByTwo(y)) as half_product
FROM numbers;

위 예시는 다음 출력을 반환합니다.

+-----+-----+--------------+
| x   | y   | half_product |
+-----+-----+--------------+
| 1   | 5   | 1.25         |
| 2   | 10  | 5            |
| 3   | 15  | 11.25        |
+-----+-----+--------------+

다음 예시는 지정된 JSON 문자열로 이름이 'foo'인 모든 필드의 값을 합산합니다.

CREATE TEMP FUNCTION SumFieldsNamedFoo(json_row STRING)
  RETURNS FLOAT64
  LANGUAGE js
  AS """
  function SumFoo(obj) {
    var sum = 0;
    for (var field in obj) {
      if (obj.hasOwnProperty(field) &amp;&amp; obj[field] != null) {
        if (typeof obj[field] == "object") {
          sum += SumFoo(obj[field]);
        } else if (field == "foo") {
          sum += obj[field];
        }
      }
    }
    return sum;
  }
  var row = JSON.parse(json_row);
  return SumFoo(row);
  """;

WITH Input AS (
  SELECT STRUCT(1 AS foo, 2 AS bar, STRUCT('foo' AS x, 3.14 AS foo) AS baz) AS s, 10 AS foo UNION ALL
  SELECT NULL, 4 AS foo UNION ALL
  SELECT STRUCT(NULL, 2 AS bar, STRUCT('fizz' AS x, 1.59 AS foo) AS baz) AS s, NULL AS foo
)
SELECT
  TO_JSON_STRING(t) AS json_row,
  SumFieldsNamedFoo(TO_JSON_STRING(t)) AS foo_sum
FROM Input AS t;

위 예시는 다음 출력을 반환합니다.

+---------------------------------------------------------------------+---------+
| json_row                                                            | foo_sum |
+---------------------------------------------------------------------+---------+
| {"s":{"foo":1,"bar":2,"baz":{"x":"foo","foo":3.14}},"foo":10}       | 14.14   |
| {"s":null,"foo":4}                                                  | 4       |
| {"s":{"foo":null,"bar":2,"baz":{"x":"fizz","foo":1.59}},"foo":null} | 1.59    |
+---------------------------------------------------------------------+---------+

지원되는 자바스크립트 UDF 데이터 유형

자바스크립트 UDF에 대해 BigQuery는 다음과 같은 데이터 유형을 지원합니다.

  • ARRAY
  • BOOL
  • BYTES
  • DATE
  • FLOAT64
  • NUMERIC
  • STRING
  • STRUCT
  • TIMESTAMP

자바스크립트의 SQL 유형 인코딩

일부 SQL 유형에는 자바스크립트 유형에 대한 직접 매핑이 포함되지만 다른 유형은 그렇지 않습니다.

자바스크립트는 64비트 정수 유형을 지원하지 않으므로 INT64는 자바스크립트 UDF의 입력 유형으로 지원되지 않습니다. 대신 FLOAT64를 사용하여 정수 값을 숫자로 표현하거나 STRING을 사용하여 정수 값을 문자열로 표현해야 합니다.

BigQuery는 INT64를 자바스크립트 UDF의 반환 유형으로 지원합니다. 이 경우 자바스크립트 함수 본문은 자바스크립트 숫자 또는 문자열을 반환할 수 있습니다. 그런 다음 BigQuery가 이들 유형 중 하나를 INT64로 변환합니다.

BigQuery는 다음 방법으로 유형을 표현합니다.

BigQuery 데이터 유형 자바스크립트 데이터 유형
ARRAY ARRAY
BOOL BOOLEAN
BYTES base64로 인코딩된 STRING
FLOAT64 NUMBER
NUMERIC NUMERIC 값을 정확히 IEEE 754 부동 소수점 값으로 표현할 수 있고 여기에 소수점 부분이 없으며, NUMBER로 인코딩됩니다. 이러한 값의 범위는 [-253, 253]입니다. 그렇지 않으면 문자열로 인코딩됩니다.
STRING STRING
STRUCT 각 STRUCT 필드가 이름이 지정된 필드인 OBJECT입니다.
TIMESTAMP 타임스탬프의 microsecond 부분을 포함하는 마이크로초 필드가 포함된 DATE입니다.
DATE DATE

따옴표 규칙

자바스크립트 코드는 따옴표로 묶어야 합니다. 간단한 1줄 코드 스니펫의 경우 표준 따옴표 문자열을 사용할 수 있습니다.

CREATE TEMP FUNCTION plusOne(x FLOAT64)
RETURNS FLOAT64
LANGUAGE js
AS "return x+1;";

SELECT val, plusOne(val) AS result
FROM UNNEST([1, 2, 3, 4, 5]) AS val;

위 예시는 다음 출력을 반환합니다.

+-----------+-----------+
| val       | result    |
+-----------+-----------+
| 1         | 2         |
| 2         | 3         |
| 3         | 4         |
| 4         | 5         |
| 5         | 6         |
+-----------+-----------+

스니펫에 따옴표가 포함되었거나 스니펫이 여러 줄로 구성된 경우에는 삼중 따옴표 블록을 사용합니다.

CREATE TEMP FUNCTION customGreeting(a STRING)
RETURNS STRING
LANGUAGE js AS """
  var d = new Date();
  if (d.getHours() &lt; 12) {
    return 'Good Morning, ' + a + '!';
  } else {
    return 'Good Evening, ' + a + '!';
  }
  """;
SELECT customGreeting(names) as everyone
FROM UNNEST(["Hannah", "Max", "Jakob"]) AS names;

위 예시는 다음 출력을 생성합니다.

+-----------------------+
| everyone              |
+-----------------------+
| Good Morning, Hannah! |
| Good Morning, Max!    |
| Good Morning, Jakob!  |
+-----------------------+

자바스크립트 라이브러리 포함

OPTIONS 섹션을 사용하여 자바스크립트 UDF를 확장할 수 있습니다. 이 섹션에서는 UDF를 위한 자바스크립트 코드 라이브러리를 지정할 수 있습니다.

CREATE TEMP FUNCTION myFunc(a FLOAT64, b STRING)
  RETURNS STRING
  LANGUAGE js AS
  """
      // Assumes 'doInterestingStuff' is defined in one of the library files.
      return doInterestingStuff(a, b);
  """
OPTIONS (
  library="gs://my-bucket/path/to/lib1.js",
  library=["gs://my-bucket/path/to/lib2.js", "gs://my-bucket/path/to/lib3.js"]
);

SELECT myFunc(3.14, 'foo');</code></pre>

앞 예시에서 lib1.js, lib2.js, lib3.js의 코드는 UDF의 javascript_code 섹션의 모든 코드에 사용할 수 있습니다. 단일 요소 또는 배열 구문을 사용하여 라이브러리 파일을 지정할 수 있습니다.

UDF 및 웹 UI

BigQuery 웹 UI에서는 하나 이상의 UDF를 사용하여 쿼리를 실행할 수 있습니다.

UDF를 사용하여 쿼리 실행

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 UDF 문을 입력합니다. 예를 들면 다음과 같습니다.

      CREATE TEMPORARY FUNCTION timesTwo(x FLOAT64)
      RETURNS FLOAT64
        LANGUAGE js AS """
        return x*2;
      """;
    
  4. UDF 문 아래에 쿼리를 입력합니다. 예를 들면 다음과 같습니다.

      SELECT timesTwo(numbers) as doubles
      FROM UNNEST([1, 2, 3, 4, 5]) AS numbers;
    
  5. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  6. 실행을 클릭합니다.

UDF 및 bq 명령줄 도구

Google Cloud SDK에서 bq 명령줄 도구를 사용하면 UDF가 한 개 이상 포함된 쿼리를 실행할 수 있습니다.

UDF가 포함된 쿼리를 실행하려면 다음 구문을 사용하세요.

bq query <statement_with_udf_and_query>

자바스크립트 UDF 권장사항

입력 사전 필터링

입력을 자바스크립트 UDF로 전달하기 전에 쉽게 필터링할 수 있으면, 쿼리 속도가 빨라지고 비용이 낮아질 것입니다.

영구적인 변경 가능 상태 금지

자바스크립트 UDF 호출에서는 변경 가능 상태를 저장하거나 액세스하지 않는 것이 좋습니다.

효율적인 메모리 사용

자바스크립트 처리 환경은 쿼리당 사용 가능한 메모리가 제한되어 있습니다. 로컬 상태를 너무 많이 누적하는 자바스크립트 UDF 쿼리는 메모리 소진으로 인해 실패할 수 있습니다.

제한사항

임시 및 영구 사용자 정의 함수에는 다음 제한사항이 적용됩니다.

  • DOM 객체 Window, Document, Node와 이를 필요로 하는 함수는 지원되지 않습니다.
  • 네이티브 코드를 사용하는 자바스크립트 함수는 지원되지 않습니다.
  • 비확정성으로 인해 자바스크립트 사용자 정의 함수를 호출하는 쿼리는 캐시 처리된 결과를 사용할 수 없습니다.
  • UDF의 테이블을 참조할 수 없습니다.
  • 뷰는 UDF를 호출할 수 없습니다.
  • 단일 행을 처리할 때 자바스크립트 UDF가 출력하는 데이터 양 — 약 5MB 이하
  • 사용자 정의 함수(UDF)가 포함된 legacy SQL 쿼리의 동시 비율 한도 — 6개 동시 쿼리
  • UDF가 포함된 legacy SQL 쿼리에 대한 동시 비율 한도에는 대화형 및 일괄 쿼리가 모두 포함됩니다. UDF가 포함된 대화형 쿼리는 대화형 쿼리에 대한 동시 비율 한도에도 계산됩니다. 이 제한은 표준 SQL 쿼리에는 적용되지 않습니다.

  • 쿼리 작업의 자바스크립트 UDF 리소스(예: 인라인 코드 blob이나 외부 파일) 최대 개수 — 50개
  • 인라인 코드 blob당 최대 크기 — 32KB
  • 외부 코드 리소스당 최대 크기 — 1MB

영구적인 사용자 정의 함수에는 다음 제한사항이 적용됩니다.
  • 함수 이름 최대 길이 — 256자
  • 최대 인수 개수 — 256개
  • 인수 이름 최대 길이 — 128자
  • 사용자 정의 함수 참조 체인의 최대 깊이 — 16
  • STRUCT 유형 인수 또는 출력의 최대 깊이 — 15
  • STRUCT 유형 인수 또는 출력의 최대 필드 개수(UDF당) — 1,024개
  • 고유한 UDF와 테이블 참조를 합한 최대 개수(쿼리당) — 1,000개 완전히 확장하면 UDF당 총 1,000개까지 고유한 테이블과 UDF를 참조할 수 있습니다.
  • CREATE FUNCTION 문으로 된 자바스크립트 라이브러리의 최대 개수 — 50개
  • 포함된 자바스크립트 라이브러리 경로의 최대 길이 — 5,000자
  • UDF당 최대 업데이트 속도 — 10초당 5회 함수 생성 후에는 10초당 최대 5회까지 각 함수를 업데이트할 수 있습니다.
  • 각 인라인 코드 blob 크기는 최대 32KB로 제한됩니다.
  • 각 자바스크립트 코드 리소스 크기는 최대 1MB로 제한됩니다.
  • 자바스크립트의 비트 연산은 32비트만 처리합니다.
  • 각 프로젝트에는 동일한 function_name의 영구 UDF를 하나만 포함할 수 있습니다. 그러나 function_name이 현재 프로젝트의 테이블 이름과 동일한 UDF를 만들 수 있습니다.
  • 다른 영구 UDF 또는 논리 뷰에서 영구 UDF를 참조하는 경우 프로젝트 이름으로 참조를 검증해야 합니다. 예를 들면 다음과 같습니다.
    CREATE FUNCTION mydataset.referringFunction() AS (myproject.mydataset.referencedFunction());

임시 사용자 정의 함수에는 다음 제한사항이 적용됩니다.

  • 임시 UDF를 만들 때 function_name에는 마침표를 포함할 수 없습니다.
  • 임시 UDF를 참조하는 쿼리를 뷰로 저장할 수 없습니다.

ALTER TABLE SET OPTIONS 문

BigQuery에서 테이블의 옵션을 설정하려면 ALTER TABLE SET OPTIONS DDL 문을 사용합니다.

구문

{ALTER TABLE | ALTER TABLE IF EXISTS}
table_name
SET OPTIONS(table_set_options_list)

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

{ALTER TABLE | ALTER TABLE IF EXISTS}는 다음 문 중 하나입니다.

  • ALTER TABLE — 기존 테이블의 옵션을 변경합니다.
  • ALTER TABLE IF EXISTS — 테이블의 옵션이 있는 경우에만 옵션을 변경합니다.

table_name은 변경할 테이블의 이름입니다.

table_set_options_list

옵션 목록을 사용하면 라벨 및 만료 시간과 같은 테이블 옵션을 설정할 수 있습니다. 쉼표로 구분된 목록을 사용하여 옵션을 여러 개 포함할 수 있습니다.

다음 형식으로 테이블 옵션 목록을 지정합니다.

NAME=VALUE, ...

NAMEVALUE는 다음 조합 중 하나여야 합니다.

NAME VALUE 세부정보
expiration_timestamp TIMESTAMP

예: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

이 속성은 expirationTime 테이블 리소스 속성과 동일합니다.

partition_expiration_days

FLOAT64

예: partition_expiration_days=7

이 속성은 timePartitioning.expirationMs 테이블 리소스 속성과 동일하지만 밀리초 대신 일 수를 사용합니다. 1일은 86,400,000밀리초 또는 24시간입니다.

파티션을 나눈 테이블에만 이 속성을 설정할 수 있습니다.

require_partition_filter

BOOL

예: require_partition_filter=true

이 속성은 timePartitioning.requirePartitionFilter 테이블 리소스 속성과 동일합니다.

파티션을 나눈 테이블에만 이 속성을 설정할 수 있습니다.

kms_key_name

STRING

예: kms_key_name="projects/project_id/locations/location/keyRings/keyring/cryptoKeys/key"

이 속성은 encryptionConfiguration.kmsKeyName 테이블 리소스 속성과 동일합니다.

자세한 내용은 Cloud KMS 키를 사용하여 데이터 보호를 참조하세요.

friendly_name

STRING

예: friendly_name="my_table"

이 속성은 friendlyName 테이블 리소스 속성과 동일합니다.

description

STRING

예: description="a table that expires in 2020"

이 속성은 description 테이블 리소스 속성과 동일합니다.

labels

ARRAY<STRUCT<STRING, STRING>>

예: labels=[("org_unit", "development")]

이 속성은 labels 테이블 리소스 속성과 동일합니다.

VALUE는 리터럴, 쿼리 매개변수, 스칼라 함수만 포함하는 상수 표현식입니다. 상수 표현식이 null로 계산되면 해당 옵션 NAME은 무시됩니다.

상수 표현식에는 다음이 포함될 수 없습니다.

  • 테이블 참조
  • 하위 쿼리 또는 SQL 문(예: SELECT, CREATE, UPDATE)
  • 사용자 정의 함수, 집계 함수 또는 분석 함수
  • 다음 스칼라 함수:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

VALUE를 설정하면 테이블 옵션의 기존 값이 바뀝니다(있는 경우). VALUENULL로 설정하면 옵션의 테이블 값이 지워집니다.

예시

테이블의 만료 타임스탬프 및 설명 설정

다음 예시에서는 테이블의 만료 타임스탬프를 ALTER TABLE 문의 실행 시간으로부터 7일로 설정하고 설명도 설정합니다.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="Table that expires seven days from now"
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="Table that expires seven days from now"
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블에 속성이 설정됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
ALTER TABLE mydataset.mytable
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="Table that expires seven days from now"
)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

파티션을 나눈 테이블에 필수 파티션 필터 속성 설정

다음 예시에서는 파티션을 나눈 테이블timePartitioning.requirePartitionFilter 속성을 설정합니다. true로 설정하면 이 테이블을 참조하는 쿼리가 파티션 나누기 열에서 필터를 사용해야 합니다. 그렇지 않으면 BigQuery가 오류를 반환합니다. 이 옵션을 true로 설정하면 의도한 것보다 더 많은 데이터를 쿼리하는 실수를 방지할 수 있습니다.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     ALTER TABLE mydataset.mypartitionedtable
     SET OPTIONS (require_partition_filter=true)
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     ALTER TABLE mydataset.mypartitionedtable
     SET OPTIONS (require_partition_filter=true)
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블에 속성이 설정됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
ALTER TABLE mydataset.mypartitionedtable
SET OPTIONS (require_partition_filter=true)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

테이블의 만료 타임스탬프 지우기

다음 예시에서는 테이블이 만료되지 않도록 테이블의 만료 타임스탬프를 지웁니다.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (expiration_timestamp=NULL)
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     ALTER TABLE mydataset.mytable
     SET OPTIONS (expiration_timestamp=NULL)
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블에 더 이상 만료 시간이 없습니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
ALTER TABLE mydataset.mytable
SET OPTIONS (expiration_timestamp=NULL)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

ALTER VIEW SET OPTIONS 문

BigQuery의 에 옵션을 설정하려면 ALTER VIEW SET OPTIONS DDL 문을 사용합니다.

구문

{ALTER VIEW | ALTER VIEW IF EXISTS}
view_name
SET OPTIONS(view_set_options_list)

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

{ALTER VIEW | ALTER VIEW IF EXISTS}는 다음 문 중 하나입니다.

  • ALTER VIEW — 기존 뷰의 옵션을 변경합니다.
  • ALTER VIEW IF EXISTS — 뷰의 옵션을 변경합니다(있는 경우에만).

view_name은 변경할 뷰의 이름입니다.

view_set_options_list

옵션 목록을 사용하면 라벨 및 만료 시간과 같은 뷰 옵션을 설정할 수 있습니다. 쉼표로 구분된 목록을 사용하여 옵션을 여러 개 포함할 수 있습니다.

다음 형식으로 뷰 옵션 목록을 지정합니다.

NAME=VALUE, ...

NAMEVALUE는 다음 조합 중 하나여야 합니다.

NAME VALUE 세부정보
expiration_timestamp TIMESTAMP

예: expiration_timestamp=TIMESTAMP "2020-01-01 00:00:00 UTC"

이 속성은 expirationTime 테이블 리소스 속성과 동일합니다.

friendly_name

STRING

예: friendly_name="my_view"

이 속성은 friendlyName 테이블 리소스 속성과 동일합니다.

description

STRING

예: description="a view that expires in 2020"

이 속성은 description 테이블 리소스 속성과 동일합니다.

labels

ARRAY<STRUCT<STRING, STRING>>

예: labels=[("org_unit", "development")]

이 속성은 labels 테이블 리소스 속성과 동일합니다.

VALUE는 리터럴, 쿼리 매개변수, 스칼라 함수만 포함하는 상수 표현식입니다. 상수 표현식이 null로 계산되면 해당 옵션 NAME은 무시됩니다.

상수 표현식에는 다음이 포함될 수 없습니다.

  • 테이블 참조
  • 하위 쿼리 또는 SQL 문(예: SELECT, CREATE, UPDATE)
  • 사용자 정의 함수, 집계 함수 또는 분석 함수
  • 다음 스칼라 함수:
    • ARRAY_TO_STRING
    • REPLACE
    • REGEXP_REPLACE
    • RAND
    • FORMAT
    • LPAD
    • RPAD
    • REPEAT
    • SESSION_USER
    • GENERATE_ARRAY
    • GENERATE_DATE_ARRAY

VALUE를 설정하면 뷰 옵션의 기존 값이 바뀝니다(있는 경우). VALUENULL로 설정하면 옵션의 뷰 값이 지워집니다.

예시

뷰의 만료 타임스탬프 및 설명 설정

다음 예시에서는 뷰의 만료 타임스탬프를 ALTER VIEW 문의 실행 시간으로부터 7일로 설정하고 설명도 설정합니다.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     ALTER VIEW mydataset.myview
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="View that expires seven days from now"
     )
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     ALTER VIEW mydataset.myview
     SET OPTIONS (
       expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
       description="View that expires seven days from now"
     )
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 뷰에 속성이 설정됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
ALTER VIEW mydataset.myview
SET OPTIONS (
  expiration_timestamp=TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 7 DAY),
  description="View that expires seven days from now"
)'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

DROP TABLE 문

BigQuery에서 테이블을 삭제하려면 DROP TABLE DDL 문을 사용합니다.

구문

{DROP TABLE | DROP TABLE IF EXISTS}
table_name

여기에서

{DROP TABLE | DROP TABLE IF EXISTS}는 다음 문 중 하나입니다.

  • DROP TABLE — 지정된 데이터세트에서 테이블을 삭제합니다.
  • DROP TABLE IF EXISTS — 지정된 데이터세트에 테이블이 있는 경우에만 테이블을 삭제합니다.

table_name은 삭제할 테이블의 이름입니다.

예시

테이블 삭제

DROP TABLE DDL 문은 지정된 데이터세트에서 테이블을 삭제합니다. 데이터세트에 테이블 이름이 없는 경우 다음 오류가 반환됩니다.

Error: Not found: Table myproject:mydataset.mytable

다른 프로젝트의 테이블을 삭제하는 경우 프로젝트, 데이터세트, 테이블을 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.mytable'과 같은 형식입니다.

DDL을 사용하여 테이블을 삭제하려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     DROP TABLE mydataset.mytable
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     DROP TABLE mydataset.mytable
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에서 제거됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
DROP TABLE mydataset.mytable'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

테이블이 있는 경우에만 테이블 삭제

DROP TABLE IF EXISTS DDL 문은 지정된 데이터세트에 테이블이 있는 경우에만 테이블을 삭제합니다. 데이터세트에 테이블 이름이 없는 경우 오류가 반환되지 않고 아무런 작업도 수행되지 않습니다.

다른 프로젝트의 테이블을 삭제하는 경우 프로젝트, 데이터세트, 테이블을 '[PROJECT].[DATASET].[TABLE]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.mytable'과 같은 형식입니다.

테이블이 있는 경우에만 DDL을 사용하여 테이블을 삭제하려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     DROP TABLE IF EXISTS mydataset.mytable
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에서 제거됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
DROP TABLE IF EXISTS mydataset.mytable'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

DROP VIEW 문

BigQuery에서 뷰를 삭제하려면 DROP VIEW DDL 문을 사용합니다.

구문

{DROP VIEW | DROP VIEW IF EXISTS}
view_name

여기에서

{DROP VIEW | DROP VIEW IF EXISTS}는 다음 문 중 하나입니다.

  • DROP VIEW — 지정된 데이터세트에서 뷰를 삭제합니다.
  • DROP VIEW IF EXISTS — 지정된 데이터세트에 뷰가 있는 경우에만 뷰를 삭제합니다.

view_name은 삭제할 뷰의 이름입니다.

예시

뷰 삭제

DROP VIEW DDL 문은 지정된 데이터세트에서 뷰를 삭제합니다. 데이터세트에 뷰 이름이 없는 경우 다음 오류가 반환됩니다.

Error: Not found: Table myproject:mydataset.myview

다른 프로젝트의 뷰를 삭제하는 경우 프로젝트, 데이터세트, 뷰를 '[PROJECT].[DATASET].[VIEW]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.myview'와 같은 형식입니다.

DDL을 사용하여 뷰를 삭제하려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     DROP VIEW mydataset.myview
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     DROP VIEW mydataset.myview
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 탐색 창에서 뷰가 제거됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
DROP VIEW mydataset.myview'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

뷰가 있는 경우에만 뷰 삭제

DROP VIEW IF EXISTS DDL 문은 지정된 데이터세트에 뷰가 있는 경우에만 뷰를 삭제합니다. 데이터세트에 뷰 이름이 없는 경우 오류가 반환되지 않고 아무런 작업도 수행되지 않습니다.

다른 프로젝트의 뷰를 삭제하는 경우 프로젝트, 데이터세트, 뷰를 '[PROJECT].[DATASET].[VIEW]'(백틱 포함) 형식으로 지정해야 합니다. 예를 들어 'myproject.mydataset.myview'와 같은 형식입니다.

뷰가 있는 경우에만 DDL을 사용하여 뷰를 삭제하려면 다음 안내를 따르세요.

Console

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

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

    새 쿼리 작성

  3. 쿼리 편집기 텍스트 영역에 DDL 문을 입력합니다. 예를 들면 다음과 같습니다.

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

  4. (선택사항) 데이터 처리 위치를 변경하려면 더보기, 쿼리 설정을 차례로 클릭합니다. 처리 위치에서 자동 선택을 클릭하고 데이터의 위치를 선택합니다. 마지막으로 저장을 클릭하여 쿼리 설정을 업데이트합니다.

  5. 실행을 클릭합니다. 쿼리가 완료되면 테이블이 리소스 창에 나타납니다.

기본 UI

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

    BigQuery 웹 UI로 이동

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

  3. 새 쿼리 텍스트 영역에 DDL 문을 입력합니다.

     #standardSQL
     DROP VIEW IF EXISTS mydataset.myview
     

  4. 쿼리 실행을 클릭합니다. 쿼리가 완료되면 테이블이 탐색 창에서 제거됩니다.

명령줄

bq query 명령어를 입력하고 쿼리 매개변수로 DDL 문을 입력합니다.

bq query --use_legacy_sql=false '
DROP VIEW IF EXISTS mydataset.myview'

API

jobs.query 메서드를 호출하고 요청 본문의 query 속성에 DDL 문을 입력합니다.

DDL 기능은 작업 리소스에서 반환한 정보를 확장합니다. statistics.query.statementType에는 DDL 지원을 위한 다음 추가 값이 포함됩니다.

  • CREATE_TABLE
  • CREATE_TABLE_AS_SELECT
  • DROP_TABLE
  • CREATE_VIEW
  • DROP_VIEW

statistics.query에는 2개의 추가 필드가 있습니다.

  • ddlOperationPerformed: 수행된 DDL 작업으로, DDL 타겟의 존재 여부에 종속될 수 있습니다. 현재 값에는 다음이 포함됩니다.
    • CREATE: 쿼리가 DDL 타겟을 만들었습니다.
    • SKIP: 작업 없음. 예: CREATE TABLE IF NOT EXISTS가 제출되었고 테이블이 존재합니다. 또는 DROP TABLE IF EXISTS가 제출되었고 테이블이 존재하지 않습니다.
    • REPLACE: 쿼리가 DDL 타겟을 대체했습니다. 예: CREATE OR REPLACE TABLE이 제출되었고 테이블이 이미 존재합니다.
    • DROP: 쿼리가 DDL 타겟을 삭제했습니다.
  • ddlTargetTable: CREATE TABLE/VIEW 문 또는 DROP TABLE/VIEW 문을 제출하면 타겟 테이블이 3개의 필드가 있는 객체로 반환됩니다.
    • 'projectId': 문자열
    • 'datasetId': 문자열
    • 'tableId': 문자열

DROP FUNCTION 문

구문

DROP FUNCTION [ IF EXISTS ] [`project_name`.]dataset_name.function_name

설명

dataset_name 데이터세트에서 function_name 함수를 삭제합니다.

옵션 절

IF EXISTS 지정된 데이터세트에 함수가 있는 경우에만 함수를 삭제합니다.

project_name. 함수가 포함된 프로젝트를 지정합니다. 함수가 현재 프로젝트에 없는 경우 project_name이 있어야 합니다.

예시

다음 예시 문은 mydataset 데이터세트에 포함된 parseJsonAsStruct 함수를 삭제합니다.

DROP FUNCTION mydataset.parseJsonAsStruct;

다음 예시 문은 other_project 프로젝트의 sample_dataset 데이터세트에서 parseJsonAsStruct 함수를 삭제합니다.

DROP FUNCTION `other_project`.sample_dataset.parseJsonAsStruct;
이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

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

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