CREATE INTERACTIVE TABLE

Creates a new interactive table in the current/specified schema or replaces an existing table. Interactive tables are optimized for low-latency, interactive queries and provide the best performance when queried using interactive warehouses.

대화형 테이블은 표준 테이블보다 좀 더 제한된 SQL 작업 세트를 지원하며, 대시보드 및 데이터 기반 APIs와 같은 동시성이 높은 실시간 쿼리 워크로드를 위해 설계되었습니다.

참고

대화형 테이블을 만들 때 시간이 가장 중요한 쿼리를 위해 WHERE 절에 사용되는 하나 이상의 열에 대해 CLUSTER BY 절을 정의해야 합니다.

다음 CREATE INTERACTIVE TABLE 베리언트를 사용할 수도 있습니다.

  • :ref:`label-create_interactive_table_static`(쿼리에서 채워진 정적 대화형 테이블 생성)

  • :ref:`label-create_interactive_table_dynamic`(자동 새로 고침으로 동적 대화형 테이블 생성)

표준 Snowflake 테이블에 사용되는 전체 CREATE TABLE 구문은 CREATE TABLE 섹션을 참조하십시오.

대화형 테이블을 만들고 사용하기 전에 :doc:`제한 사항 및 사용 사례</user-guide/interactive>`를 숙지해야 합니다. 대화형 테이블은 선택적 WHERE 절이 있는 간단한 SELECT 문에서 가장 잘 작동합니다.

참고 항목:

CREATE WAREHOUSE, ALTER WAREHOUSE, SHOW TABLES, SHOW WAREHOUSES, DROP TABLE

구문

CREATE [ OR REPLACE ] INTERACTIVE TABLE [ IF NOT EXISTS ] <table_name>
  (
    <col_name> <col_type>
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ , <col_name> <col_type> [ ... ] ]
  )
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] AGGREGATION POLICY <policy_name> [ ENTITY KEY ( <col_name> [ , <col_name> ... ] ) ] ]
  [ [ WITH ] JOIN POLICY <policy_name> [ ALLOWED JOIN KEYS ( <col_name> [ , ... ] ) ] ]
  [ [ WITH ] STORAGE LIFECYCLE POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  AS <query>
Copy

필수 매개 변수

table_name

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

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

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

CLUSTER BY ( expr [ , expr , ... ] )

Specifies one or more columns or column expressions in the table as the clustering key. Choose clustering columns that are used in the WHERE clauses of your most time-critical queries, as this significantly affects query performance.

효과적인 클러스터링 키 선택에 대한 자세한 내용은 클러스터링 키 및 클러스터링된 테이블 섹션을 참조하세요.

AS query

Specifies the SELECT statement that populates the interactive table. This query must be specified last in the CREATE INTERACTIVE TABLE statement, regardless of other parameters included.

이 쿼리는 대화형 테이블의 데이터와 스키마를 패턴화하고 정의하는 CREATE TABLE AS SELECT(CTAS) 패턴을 따릅니다.

col_name

Specifies the column identifier (i.e. name). Column identifiers must start with an alphabetic character and cannot contain spaces or special characters unless the entire identifier string is enclosed in double quotes.

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

col_type

열의 데이터 타입을 지정합니다.

테이블 열에 지정할 수 있는 데이터 타입에 대한 자세한 내용은 SQL 데이터 타입 참조 을 참조하십시오.

선택적 매개 변수

MASKING POLICY policy_name

열에 설정할 마스킹 정책 을 지정합니다.

USING ( col_name , cond_col_1 ... )

조건부 마스킹 정책 SQL 식에 전달할 인자를 지정합니다.

목록의 첫 번째 열은 데이터를 마스킹하거나 토큰화할 정책 조건에 대한 열을 지정하며, 마스킹 정책이 설정된 열과 반드시 일치해야 합니다.

추가 열은 첫 번째 열에 대해 쿼리가 수행될 때 쿼리 결과의 각 행에 있는 데이터를 마스킹할지 또는 토큰화할지 결정하기 위해 평가할 열을 지정합니다.

USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.

OR REPLACE

스키마에 이미 있는 경우 대화형 테이블을 바꾸도록 지정합니다. 이 작업은 기존 테이블에서 :doc:`drop-table`을 사용한 다음, 같은 이름을 가진 새 테이블을 만드는 것과 같습니다.

IF NOT EXISTS

스키마에 대화형 테이블이 아직 없는 경우에만 대화형 테이블을 만들도록 지정합니다. 이름이 같은 테이블이 이미 있는 경우 새 테이블을 만들지 않고 문이 성공합니다.

참고

OR REPLACE 및 IF NOT EXISTS 절은 상호 배타적이므로, 같은 문에서 둘 다 사용할 수는 없습니다.

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

대화형 테이블의 자동 새로 고침에 대한 최대 지연 시간을 지정합니다. 지정된 경우 대화형 테이블은 소스 데이터의 지정된 지연 시간 내로 유지되도록 자동으로 새로 고쳐지는 동적 대화형 테이블이 됩니다.

  • 최소값은 60초(1분)입니다.

  • 단위를 지정하지 않으면 이 숫자는 초를 나타냅니다.

  • TARGET_LAG가 지정되지 않은 경우, 테이블은 정적 대화형 테이블로 생성됩니다.

TARGET_LAG가 지정된 경우 WAREHOUSE 매개 변수도 필수입니다.

WAREHOUSE = warehouse_name

TARGET_LAG가 지정된 경우 필수. TARGET_LAG가 설정되면 새로 고침 작업에 사용되는 표준 웨어하우스를 지정합니다. 이는 대화형 웨어하우스가 아닌 표준 웨어하우스여야 합니다.

COPY GRANTS

CREATE OR REPLACE INTERACTIVE TABLE을 사용하여 대화형 테이블을 바꿀 때 원래 테이블의 액세스 권한을 유지하도록 지정합니다.

이 매개 변수는 OWNERSHIP을 제외한 모든 권한을 기존 테이블에서 새 테이블로 복사합니다. 기본적으로, CREATE INTERACTIVE TABLE 문을 실행하는 역할은 새 테이블을 소유합니다.

COMMENT = 'string_literal'

대화형 테이블에 대한 설명을 지정합니다.

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

테이블에 설정할 행 액세스 정책 을 지정합니다.

이 매개 변수는 CREATE OR ALTER 변형 구문에서 지원되지 않습니다.

AGGREGATION POLICY policy_name [ ENTITY KEY ( col_name [ , col_name ... ] ) ]

테이블에 설정할 집계 정책 을 지정합니다. 테이블에 하나 이상의 집계 정책을 적용할 수 있습니다.

선택적 ENTITY KEY 매개 변수를 사용하여 테이블 내에서 엔터티의 ID를 고유하게 지정하는 열을 정의할 수 있습니다. 자세한 내용은 집계 정책을 사용하여 엔터티 수준 개인정보 보호 구현하기 섹션을 참조하십시오. 집계 정책에 대해 하나 이상의 엔터티 키를 지정할 수 있습니다.

JOIN POLICY policy_name [ ALLOWED JOIN KEYS ( col_name [ , ... ] ) ]

테이블에 설정할 조인 정책 을 지정합니다.

ALLOWED JOIN KEYS 매개 변수(선택 사항)를 사용하여 이 정책이 적용될 때 조인 열로 사용할 수 있는 열을 정의합니다. 자세한 내용은 조인 정책 섹션을 참조하십시오.

이 매개 변수는 CREATE OR ALTER 변형 구문에서 지원되지 않습니다.

STORAGE LIFECYCLE POLICY policy_name ON ( col_name [ , col_name ... ] )

:doc:`저장소 수명 주기 정책</user-guide/storage-management/storage-lifecycle-policies>`을 지정하여 테이블에 연결합니다.

ON 절에 지정된 열은 정책 함수 서명에 정의된 인자 개수 및 데이터 타입과 일치해야 합니다. Snowflake는 이러한 열을 사용하여 정책 식을 평가하고 보관하거나 만료할 행을 결정합니다.

중요

아카이브 저장소 정책을 테이블에 연결하는 경우 테이블은 해당 수명 동안 지정된 아카이브 계층에 영구적으로 할당됩니다. 새 정책을 적용하여 아카이브 계층을 변경할 수 없습니다. 예를 들어, COOL 아카이브 계층으로 생성된 정책을 ALTER TABLE…DROP STORAGE LIFECYCLE POLICY에 지정한 후 테이블을 변경하여 COLD 아카이브 계층으로 생성된 정책을 추가할 수 없습니다. 테이블의 아카이브 계층을 변경하려면 Snowflake 지원에 문의하여 현재 보관된 데이터 삭제를 요청하세요. 추가 고려 사항은 아카이브 저장소 정책 섹션을 참조하십시오.

저장소 수명 주기 정책 생성 및 관리에 대한 자세한 내용은 Create and manage storage lifecycle policies 섹션을 참조하세요.

이 매개 변수는 CREATE OR ALTER 변형 구문에서 지원되지 않습니다.

액세스 제어 요구 사항

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

권한

오브젝트

참고

CREATE INTERACTIVE TABLE

스키마

스키마에서 대화형 테이블을 만드는 데 필요합니다.

SELECT

테이블, 외부 테이블, 뷰

AS SELECT 절에서 쿼리된 테이블 및/또는 뷰에 필요합니다.

APPLY

마스킹 정책, 행 액세스 정책, 태그, 저장소 수명 주기 정책

테이블 생성 시 마스킹 정책, 행 액세스 정책, 오브젝트 태그, 저장소 수명 주기 정책 또는 이러한 거버넌스 기능의 조합을 적용할 때만 필요합니다.

USAGE

데이터베이스, 스키마

대화형 테이블이 포함된 데이터베이스와 스키마에 필요합니다.

USAGE

웨어하우스

WAREHOUSE 매개 변수에 지정된 웨어하우스에 필요합니다(TARGET_LAG가 사용되는 경우).

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

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

사용법 노트

  • 대화형 테이블은 대화형 웨어하우스가 아닌 표준 웨어하우스를 사용하여 생성해야 합니다.

  • CLUSTER BY 절은 모든 대화형 테이블에 필요하며 쿼리 성능에 상당한 영향을 미칩니다. 가장 일반적인 WHERE 절 패턴을 기준으로 클러스터링 열을 신중하게 선택하세요.

  • 대화형 테이블은 대화형 웨어하우스를 통해 쿼리할 때 최상의 성능을 제공합니다. 대화형 테이블에 대한 최적의 성능을 얻으려면 다음을 수행하세요.

    1. 대화형 웨어하우스 만들기

    2. ALTER WAREHOUSE … ADD TABLES를 사용하여 대화형 테이블을 대화형 웨어하우스와 연결합니다.

    3. 대화형 웨어하우스 재개

    4. 대화형 웨어하우스를 사용하여 대화형 테이블 쿼리

  • 대화형 테이블은 표준 테이블과 비교하여 제한된 SQL 작업 세트를 지원합니다.

    • WHERE 절이 있는 SELECT 문이 최적화되었습니다.

    • 단순 GROUP BY 작업이 지원됩니다.

    • DML 작업(INSERT, UPDATE, DELETE)은 지원되지 않습니다. 유일하게 허용되는 DML 작업은 INSERT OVERWRITE입니다.

    • 복잡한 쿼리 작업은 성능상의 이점이 제한적일 수 있습니다.

  • 동적 대화형 테이블(TARGET_LAG 사용)은 지정된 표준 웨어하우스를 사용하여 자동으로 새로 고쳐집니다. 지연 시간은 데이터 최신성과 컴퓨팅 비용의 균형을 유지합니다.

  • Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

  • 조건부 열을 사용하는 단일 마스킹 정책은 테이블의 열 구조가 정책에 지정된 열과 일치하는 경우 여러 테이블에 적용할 수 있습니다.

  • 하나 이상의 테이블 열에 마스킹 정책을 사용하여 테이블을 생성하거나, 테이블에 추가된 행 액세스 정책을 생성할 때, POLICY_CONTEXT 함수를 사용하여, 마스킹 정책에 의해 보호되는 열 및 행 액세스 정책에 의해 보호되는 테이블에 대한 쿼리를 시뮬레이션합니다.

  • 대화형 테이블은 쿼리를 가속화하기 위해 추가 메타데이터와 인덱스 정보를 저장하지만, 압축되어 저장소 크기에 미치는 영향이 최소화됩니다.

  • 메타데이터 관련:

    주의

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

  • WITH STORAGE LIFECYCLE POLICY 절로 테이블을 생성하는 경우에는 다음과 같습니다.

    • 정책을 적용하려면 필요한 권한이 있어야 합니다. 필요한 권한에 대한 정보는 Storage lifecycle policy privileges 섹션을 참조하십시오.

    • 테이블에는 저장소 수명 주기 정책을 하나만 연결할 수 있습니다.

    • 열 개수는 정책 함수 서명의 인자 개수와 일치해야 하며 열 데이터는 인자 유형과 호환되어야 합니다.

    • 테이블 열의 이름을 바꿔도 관련 정책은 영향을 받지 않습니다. Snowflake는 열 IDs를 사용하여 정책을 테이블에 연결합니다.

    • 저장소 수명 주기 정책 식을 평가하고 적용하기 위해 Snowflake는 테이블에 대한 모든 거버넌스 정책을 내부적으로 일시적으로 우회합니다.

베리언트 구문: 정적 대화형 테이블

소스 쿼리에서 한 번 채워지는 정적 대화형 테이블을 만듭니다.

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

Static interactive tables don’t automatically refresh. They require manual updates to reflect changes in source data. To do so, run a CREATE OR REPLACE command or an INSERT OVERWRITE command on the interactive table.

베리언트 구문: 동적 대화형 테이블

지정된 지연 시간에 따라 자동으로 새로 고쳐지는 동적 대화형 테이블을 만듭니다.

CREATE [ OR REPLACE ] INTERACTIVE TABLE <table_name>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  TARGET_LAG = '<num> { seconds | minutes | hours | days }'
  WAREHOUSE = <warehouse_name>
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

동적 대화형 테이블은 새로 고침 작업을 위해 지정된 표준 웨어하우스를 사용하여 소스 데이터의 지정된 TARGET_LAG 내에서 유지되도록 자동으로 새로 고쳐집니다.

다음 예에서는 데이터 소스 지정 및 데이터를 새로 고치는 방법과 함께 대화형 테이블을 만드는 다양한 방법을 보여줍니다.

기본 정적 대화형 테이블

최적의 쿼리 성능을 위해 고객 및 날짜별로 클러스터링된 기존 주문 데이터에서 정적 대화형 테이블을 만듭니다.

CREATE INTERACTIVE TABLE orders_interactive
  CLUSTER BY (customer_id, order_date)
  COMMENT = 'Interactive table for real-time order analytics'
AS
  SELECT customer_id, order_date, product_id, quantity, total_amount
  FROM orders_staging
  WHERE order_date >= '2024-01-01';
Copy

자동으로 새로 고쳐지는 동적 대화형 테이블

5분마다 새로 고쳐지는 동적 대화형 테이블을 만들어 거의 실시간으로 판매 요약을 제공합니다.

CREATE INTERACTIVE TABLE sales_summary_interactive
  CLUSTER BY (region, product_category)
  TARGET_LAG = '5 minutes'
  WAREHOUSE = refresh_warehouse
  COMMENT = 'Real-time sales dashboard data'
AS
  SELECT
    region,
    product_category,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count,
    AVG(sales_amount) as avg_sale
  FROM sales_data
  GROUP BY region, product_category;
Copy

복잡한 쿼리를 위한 다중 열 클러스터링

다양한 쿼리 패턴에 최적화된 다중 열 클러스터링을 사용하여 대화형 테이블을 만듭니다.

CREATE INTERACTIVE TABLE customer_analytics_interactive
  CLUSTER BY (customer_tier, region, signup_date)
  TARGET_LAG = '10 minutes'
  WAREHOUSE = analytics_warehouse
AS
  SELECT
    customer_id,
    customer_tier,
    region,
    signup_date,
    total_orders,
    lifetime_value,
    last_order_date
  FROM customer_metrics
  WHERE customer_tier IN ('GOLD', 'PLATINUM', 'DIAMOND');
Copy

기존 대화형 테이블 바꾸기

기존 대화형 테이블을 업데이트된 클러스터링 및 새로 고침 설정으로 바꿉니다.

CREATE OR REPLACE INTERACTIVE TABLE product_performance_interactive
  CLUSTER BY (category, brand, launch_date)
  TARGET_LAG = '2 minutes'
  WAREHOUSE = fast_refresh_warehouse
  COPY GRANTS
AS
  SELECT
    product_id,
    category,
    brand,
    launch_date,
    units_sold,
    revenue,
    customer_rating
  FROM product_sales_view
  WHERE launch_date >= DATEADD('month', -6, CURRENT_DATE());
Copy