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 [ 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>
필수 매개 변수¶
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_nameTARGET_LAG가 지정된 경우 필수. TARGET_LAG가 설정되면 새로 고침 작업에 사용되는 표준 웨어하우스를 지정합니다. 이는 대화형 웨어하우스가 아닌 표준 웨어하우스여야 합니다.
COPY GRANTSCREATE 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 절 패턴을 기준으로 클러스터링 열을 신중하게 선택하세요.
대화형 테이블은 대화형 웨어하우스를 통해 쿼리할 때 최상의 성능을 제공합니다. 대화형 테이블에 대한 최적의 성능을 얻으려면 다음을 수행하세요.
대화형 웨어하우스 만들기
ALTER WAREHOUSE … ADD TABLES를 사용하여 대화형 테이블을 대화형 웨어하우스와 연결합니다.
대화형 웨어하우스 재개
대화형 웨어하우스를 사용하여 대화형 테이블 쿼리
대화형 테이블은 표준 테이블과 비교하여 제한된 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>
정적 대화형 테이블은 자동으로 새로 고쳐지지 않으며 소스 데이터의 변경 사항을 반영하기 위해 수동으로 업데이트해야 합니다.
베리언트 구문: 동적 대화형 테이블¶
지정된 지연 시간에 따라 자동으로 새로 고쳐지는 동적 대화형 테이블을 만듭니다.
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>
동적 대화형 테이블은 새로 고침 작업을 위해 지정된 표준 웨어하우스를 사용하여 소스 데이터의 지정된 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';
자동으로 새로 고쳐지는 동적 대화형 테이블¶
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;
복잡한 쿼리를 위한 다중 열 클러스터링¶
다양한 쿼리 패턴에 최적화된 다중 열 클러스터링을 사용하여 대화형 테이블을 만듭니다.
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');
기존 대화형 테이블 바꾸기¶
기존 대화형 테이블을 업데이트된 클러스터링 및 새로 고침 설정으로 바꿉니다.
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());