CREATE DYNAMIC TABLE

지정된 쿼리를 기반으로 동적 테이블 을 생성합니다.

참고 항목:

ALTER DYNAMIC TABLE, DESCRIBE DYNAMIC TABLE, DROP DYNAMIC TABLE , SHOW DYNAMIC TABLES

이 항목의 내용:

구문

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  [ ( <column_list> ) ]
  TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
  WAREHOUSE = <warehouse_name>
  REFRESH_MODE = { AUTO | FULL | INCREMENTAL }
  INITIALIZE = { ON_CREATE | ON_SCHEDULE }
  AS <query>
  [ COMMENT = '<string_literal>' ]
Copy

베리언트 구문

CREATE DYNAMIC TABLE … CLONE

데이터를 실제로 복사하지 않고 원본 동적 테이블의 모든 기존 데이터를 포함하고 똑같은 열 정의를 사용하여 새 동적 테이블을 만듭니다. 이 베리언트를 사용하여 과거 특정 시점의 동적 테이블을 복제할 수도 있습니다. 복제 고려 사항 섹션을 참조하십시오.

CREATE [ OR REPLACE ] DYNAMIC TABLE <name>
  CLONE <source_dynamic_table>
        [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [
    TARGET_LAG = { '<num> { seconds | minutes | hours | days }' | DOWNSTREAM }
    WAREHOUSE = <warehouse_name>
  ]
Copy

복제에 대한 세부 정보는 CREATE <오브젝트> … CLONE 을 참조하십시오.

필수 매개 변수

name

동적 테이블의 식별자(즉, 이름)를 지정하며, 동적 테이블이 생성되는 스키마에 대해 고유해야 합니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

TARGET_LAG = { num { seconds | minutes | hours | days } | DOWNSTREAM }

동적 테이블의 지연을 지정합니다.

'num seconds | minutes | hours | days'

동적 테이블의 콘텐츠가 기본 테이블에 대한 업데이트보다 지연되어야 하는 최대 시간을 지정합니다.

예:

  • 동적 테이블의 데이터가 5분 이상 지연되면 안 될 경우 5 minutes 를 지정하십시오.

  • 동적 테이블의 데이터가 5시간 이상 지연되면 안 될 경우 5 hours 를 지정하십시오.

최소값은 1분입니다. 동적 테이블 A가 다른 동적 테이블 B에 종속된 경우 A의 최소 지연은 B의 지연보다 크거나 같아야 합니다.

DOWNSTREAM

어떤 동적 테이블에 종속된 동적 테이블을 새로 고칠 때만 해당 동적 테이블을 새로 고치도록 지정합니다.

WAREHOUSE = warehouse_name

동적 테이블을 새로 고치기 위한 컴퓨팅 리소스를 제공하는 웨어하우스의 이름을 지정합니다.

동적 테이블을 만들기 위해 이 웨어하우스에 대한 USAGE 권한이 있어야 합니다.

REFRESH_MODE = { AUTO | FULL | INCREMENTAL }

동적 테이블의 새로 고침 유형 을 지정합니다. 동적 테이블을 생성한 후에는 이 속성을 변경할 수 없습니다. 속성을 수정하려면 CREATE OR REPLACE DYNAMIC TABLE 명령으로 동적 테이블을 복제하십시오.

AUTO

기본적으로 동적 테이블의 증분 새로 고침을 적용합니다. CREATE DYNAMIC TABLE 문이 증분 새로 고침 모드를 지원하지 않으면 전체 새로 고침 모드를 사용하여 동적 테이블이 자동으로 생성됩니다.

SHOW DYNAMIC TABLES 문을 사용하여 새로 고침 모드를 확인할 수 있습니다. refresh_mode 열에는 사용 중인 새로 고침 모드가 표시되고, text 열에는 사용자가 지정한 새로 고침 모드가 표시됩니다.

FULL

동적 테이블을 증분식으로 새로 고칠 수 있더라도 동적 테이블의 전체 새로 고침을 적용합니다.

INCREMENTAL

동적 테이블의 증분 새로 고침을 적용합니다. 동적 테이블의 기초가 되는 쿼리가 증분 새로 고침을 수행할 수 없는 경우 동적 테이블 생성이 실패하고 오류 메시지가 표시됩니다.

기본값: AUTO

INITIALIZE

동적 테이블의 초기 새로 고침 동작을 지정합니다. 동적 테이블을 생성한 후에는 이 속성을 변경할 수 없습니다. 속성을 수정하려면 CREATE OR REPLACE DYNAMIC TABLE 명령으로 동적 테이블을 복제하십시오.

ON_CREATE

생성 시 동적 테이블을 동기식으로 새로 고칩니다.

ON_SCHEDULE

다음 예약된 새로 고침 시 동적 테이블을 새로 고칩니다.

새로 고침 일정 프로세스가 실행되면 동적 테이블이 채워집니다. 동적 테이블이 생성될 때 데이터가 채워지지 않습니다. SELECT * FROM DYNAMIC TABLE 을 사용하여 테이블을 쿼리하려고 하면 예약된 첫 번째 새로 고침이 아직 발생하지 않았으므로 다음 오류가 표시될 수 있습니다.

기본값: ON_CREATE

AS query

동적 테이블에 포함해야 하는 결과를 보여주는 쿼리를 지정합니다.

선택적 매개 변수

COMMENT = 'string_literal'

동적 테이블에 대한 설명을 지정합니다.

기본값: 값 없음.

column_list

열 이름을 변경하거나 동적 테이블의 열에 설명을 추가하려면 열 이름을 지정하는 열 목록과 필요한 경우 열에 대한 설명을 포함하십시오. 열의 데이터 타입을 지정할 필요가 없습니다.

동적 테이블의 열이 식을 기반으로 하는 경우(예: 단순한 열 이름) 동적 테이블의 각 열에 대한 열 이름을 입력해야 합니다. 예를 들어 다음과 같은 경우에는 열 이름이 필요합니다.

CREATE DYNAMIC TABLE product (pre_tax_profit, taxes, after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

각 열에 대해 선택적 설명을 지정할 수 있습니다. 예:

CREATE DYNAMIC TABLE product (pre_tax_profit COMMENT 'revenue minus cost',
                taxes COMMENT 'assumes taxes are a fixed percentage of profit',
                after_tax_profit)
  TARGET_LAG = '20 minutes'
    WAREHOUSE = mywh
    AS
      SELECT revenue - cost, (revenue - cost) * tax_rate, (revenue - cost) * (1.0 - tax_rate)
      FROM staging_table;
Copy

액세스 제어 요구 사항

이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE DYNAMIC TABLE

동적 테이블을 만들려는 스키마입니다.

SELECT

새 동적 테이블에 대해 쿼리하려는 테이블, 뷰 및 동적 테이블입니다.

USAGE

테이블을 새로 고치는 데 사용하려는 웨어하우스입니다.

스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

  • CREATE DYNAMIC TABLE 명령을 실행하면 현재 사용 중인 역할이 동적 테이블의 소유자가 됩니다. 이 역할은 백그라운드에서 동적 테이블 새로 고침을 수행하는 데 사용됩니다.

  • 기본 데이터베이스 오브젝트가 변경되면 동적 테이블이 업데이트됩니다. 동적 테이블에서 사용하는 모든 기본 오브젝트에서 변경 내용 추적을 활성화해야 합니다. 동적 테이블 및 변경 사항 추적 섹션을 참조하십시오.

  • 기존 동적 테이블을 교체하려는데 현재 정의를 확인해야 하는 경우 GET_DDL 함수를 호출하십시오.

  • 고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

product 라는 동적 테이블을 만듭니다.

CREATE OR REPLACE DYNAMIC TABLE product
 TARGET_LAG = '20 minutes'
  WAREHOUSE = mywh
  AS
    SELECT product_id, product_name FROM staging_table;
Copy

위의 예에서:

  • 동적 테이블은 staging_table 테이블의 product_idproduct_name 열의 쿼리 결과를 구체화합니다.

  • 목표 지연 시간은 20분입니다. 즉, 동적 테이블의 데이터가 staging_table 에 있는 데이터보다 20분 이상 오래되지 않은 것이어야 이상적입니다.

  • 자동화된 새로 고침 프로세스에서는 웨어하우스 mywh 의 컴퓨팅 리소스를 사용하여 동적 테이블의 데이터를 새로 고칩니다.

테이블이 지정된 타임스탬프의 날짜 및 시간에 정확히 존재했던 대로 동적 테이블 복제:

CREATE DYNAMIC TABLE orders_clone_restore CLONE orders AT (TIMESTAMP => TO_TIMESTAMP_TZ('04/05/2013 01:02:03', 'mm/dd/yyyy hh24:mi:ss'));
Copy