CREATE INTERACTIVE TABLE

현재/지정된 스키마에 새 대화형 테이블을 만들거나 기존 테이블을 대체합니다. 대화형 테이블은 대기 시간이 짧은 대화형 쿼리에 최적화되어 있으며 대화형 웨어하우스를 사용하여 쿼리할 때 최상의 성능을 제공합니다.

대화형 테이블은 표준 테이블보다 좀 더 제한된 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>
  CLUSTER BY ( <expr> [ , <expr> , ... ] )
  [ TARGET_LAG = '<num> { seconds | minutes | hours | days }' ]
  [ WAREHOUSE = <warehouse_name> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  AS <query>
Copy

필수 매개 변수

table_name

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

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

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

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

필수 테이블에서 하나 이상의 열 또는 열 식을 클러스터링 키로 지정합니다. 시간이 가장 중요한 쿼리의 WHERE 절에서 사용되는 클러스터링 열을 선택합니다. 이 작업이 쿼리 성능에 상당한 영향을 미치기 때문입니다.

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

AS query

필수. 대화형 테이블을 채우는 :doc:`SELECT 문</sql-reference/constructs>`을 지정합니다. 이 쿼리는 포함된 다른 매개 변수와 관계없이 CREATE INTERACTIVE TABLE 문의 마지막에 지정해야 합니다.

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

선택적 매개 변수

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'

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

액세스 제어 요구 사항

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

권한

오브젝트

참고

CREATE INTERACTIVE TABLE

스키마

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

SELECT

테이블, 외부 테이블, 뷰

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

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 사용)은 지정된 표준 웨어하우스를 사용하여 자동으로 새로 고쳐집니다. 지연 시간은 데이터 최신성과 컴퓨팅 비용의 균형을 유지합니다.

  • 정적 대화형 테이블을 수동으로 새로 고쳐 소스 테이블의 새 데이터로 업데이트해야 합니다.

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

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

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

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

정적 대화형 테이블은 자동으로 새로 고쳐지지 않으며 소스 데이터의 변경 사항을 반영하기 위해 수동으로 업데이트해야 합니다.

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

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

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