스트림 및 작업과 구체화된 뷰와 비교한 동적 테이블¶
스트림 및 작업과 마찬가지로, 동적 테이블은 파이프라인에서 데이터를 변환하는 방법을 제공합니다.
스트림 및 작업과 비교한 동적 테이블¶
동적 테이블은 스트림 및 작업과 비교 시 유사한 목적을 수행하지만, 다음과 같은 중요한 차이점이 있습니다.
동적 테이블에 스트림 만들기¶
기존 테이블의 스트림처럼 동적 테이블에서 스트림을 생성할 수 있으며, 다음과 같은 제한 사항이 있습니다.
새로 고침 모드: 스트림은 증분식으로 새로 고쳐지는 동적 테이블에서만 생성될 수 있습니다. 전체 새로 고침 동적 테이블은 새로 고칠 때마다 테이블을 완전히 다시 작성하므로 지원되지 않습니다.
스트림 유형: 동적 테이블은 표준(즉, 델타) 스트림만 지원합니다. 자세한 내용은 스트림의 유형 섹션을 참조하십시오.
다음 예에서는 동적 테이블에서 스트림을 생성하는 방법을 보여줍니다.
-- Create the dynamic table, for reference only
CREATE OR REPLACE DYNAMIC TABLE product ...;
-- Create the stream.
CREATE OR REPLACE STREAM deltaStream ON DYNAMIC TABLE product;
스트림 및 작업과 동적 테이블 간의 비교¶
스트림 및 작업 |
동적 테이블 |
---|---|
작업에서는 명령적 접근 방식을 사용합니다. 즉, 기본 테이블에서 데이터를 변환하는 프로시저 코드를 작성합니다. |
동적 테이블은 선언적 접근 방식을 사용합니다. 즉, 원하는 결과를 지정하는 쿼리를 작성하면 쿼리에 사용되는 기본 테이블에서 데이터가 검색 및 변환됩니다. 전체 새로 고침에서 지원되는 비결정 함수 를 제외하고, 쿼리에는 비결정적 함수가 포함될 수 없습니다. |
데이터를 변환하는 코드를 실행하기 위한 일정을 정의합니다. |
자동 새로 고침 프로세스는 새로 고침을 수행하는 일정을 결정합니다. 이 프로세스에서는 지정된 목표 수준의 최신성(지연)을 충족하도록 이러한 새로 고침을 예약합니다. |
프로시저 코드에는 비결정적 코드, 저장 프로시저, 기타 작업에 대한 호출이 포함될 수 있습니다. 프로시저 코드는 UDF와 외부 함수에 대한 호출을 포함할 수 있습니다. |
동적 테이블에 대한 SELECT 문은 조인, 집계, 윈도우 함수, 기타 SQL 함수 및 구성을 포함할 수 있지만, 이 문은 저장 프로시저와 작업에 대한 호출을 포함할 수 없습니다. 현재, SELECT 문은 외부 함수에 대한 호출도 포함할 수 없습니다. 이 제한은 동적 테이블을 새로 고치는 방식 때문입니다. 데이터를 새로 고치기 위해 자동화된 프로세스는 동적 테이블에 대한 SELECT 문을 분석하여 데이터를 새로 고치는 최상의 접근 방식을 결정합니다. 어떤 유형의 쿼리에 대해서는 자동화된 프로세스로 이를 결정할 수 없습니다. SELECT 문에 대한 제한 사항의 전체 목록은 증분 새로 고침에서 지원되는 쿼리 및 일반 제한 사항 섹션을 참조하십시오. |
작업은 스트림을 사용하여 대상 테이블의 데이터를 증분 방식으로 새로 고칠 수 있습니다. 이러한 작업을 정기적으로 실행하도록 예약할 수 있습니다. |
자동화된 새로 고침 프로세스는 정기적으로 동적 테이블의 증분 새로 고침을 수행합니다. 이 프로세스는 사용자가 지정하는 데이터의 목표 “최신성”을 기반으로 일정을 결정합니다. |
예: 스트림과 작업 및 동적 테이블 간의 데이터 변환 비교¶
데이터가 랜딩 테이블(raw
)로 스트리밍되므로 일정에 따라 로드된 JSON 데이터 변환하기 의 예에서는 스트림과 작업을 사용하여 새 데이터를 변환하여 1개의 대상 테이블(names
)에 삽입합니다.
다음 예에서는 동적 테이블을 사용하여 동일한 변환을 수행하는 방법을 보여줍니다. 동적 테이블을 생성할 때 확인할 결과를 위한 쿼리를 지정합니다. 데이터의 증분 새로 고침의 경우, 변경 사항을 추적하는 스트림을 생성하고 이러한 변경 사항을 검사하고 변경 사항을 대상 테이블에 적용하는 작업을 작성할 필요가 없습니다. 자동화된 새로 고침 프로세스에서는 사용자가 지정하는 쿼리를 기반으로 이러한 작업을 자동으로 수행합니다.
스트림과 작업에 대한 SQL 문 |
동적 테이블에 대한 SQL 문 |
---|---|
-- Create a landing table to store
-- raw JSON data.
CREATE OR REPLACE TABLE raw
(var VARIANT);
-- Create a stream to capture inserts
-- to the landing table.
CREATE OR REPLACE STREAM rawstream1
ON TABLE raw;
-- Create a table that stores the
-- names of office visitors from the
-- raw data.
CREATE OR REPLACE TABLE names
(id INT,
first_name STRING,
last_name STRING);
-- Create a task that inserts new name
-- records from the rawstream1 stream
-- into the names table.
-- Execute the task every minute when
-- the stream contains records.
CREATE OR REPLACE TASK raw_to_names
WAREHOUSE = mywh
SCHEDULE = '1 minute'
WHEN
SYSTEM$STREAM_HAS_DATA('rawstream1')
AS
MERGE INTO names n
USING (
SELECT var:id id, var:fname fname,
var:lname lname FROM rawstream1
) r1 ON n.id = TO_NUMBER(r1.id)
WHEN MATCHED AND metadata$action = 'DELETE' THEN
DELETE
WHEN MATCHED AND metadata$action = 'INSERT' THEN
UPDATE SET n.first_name = r1.fname, n.last_name = r1.lname
WHEN NOT MATCHED AND metadata$action = 'INSERT' THEN
INSERT (id, first_name, last_name)
VALUES (r1.id, r1.fname, r1.lname);
|
-- Create a landing table to store
-- raw JSON data.
CREATE OR REPLACE TABLE raw
(var VARIANT);
-- Create a dynamic table containing the
-- names of office visitors from
-- the raw data.
-- Try to keep the data up to date within
-- 1 minute of real time.
CREATE OR REPLACE DYNAMIC TABLE names
TARGET_LAG = '1 minute'
WAREHOUSE = mywh
AS
SELECT var:id::int id, var:fname::string first_name,
var:lname::string last_name FROM raw;
|
구체화된 뷰와 비교한 동적 테이블¶
동적 테이블과 구체화된 뷰는 둘 다 쿼리의 결과를 구체화 한다는 점에서 유사점이 있습니다. 하지만 다음과 같은 중요한 차이점이 있습니다.
구체화된 뷰 |
동적 테이블 |
---|---|
구체화된 뷰는 쿼리 성능을 투명하게 향상하도록 설계되었습니다. 예를 들어 기본 테이블을 쿼리하면 Snowflake의 쿼리 최적화 프로그램이 쿼리를 자동으로 다시 작성하여 구체화된 뷰를 대신 쿼리할 수 있습니다. |
동적 테이블은 다단계 데이터 파이프라인을 만들도록 설계되었습니다. 동적 테이블은 쿼리 성능을 향상할 수 있지만 Snowflake의 쿼리 최적화 프로그램은 동적 테이블을 사용하도록 쿼리를 자동으로 다시 작성하지 않습니다. 동적 테이블은 쿼리에서 동적 테이블을 지정할 경우에만 쿼리에 사용됩니다. |
구체화된 뷰는 단일 기본 테이블만 사용할 수 있습니다. 구체화된 뷰는 복잡한 쿼리(즉, 조인 또는 중첩된 뷰가 있는 쿼리)를 기반으로 할 수 없습니다. |
동적 테이블은 조인과 유니온이 있는 쿼리를 포함한 복잡한 쿼리를 기반으로 할 수 있습니다. |
구체화된 뷰를 통해 액세스한 데이터는 항상 최신입니다. DML 작업이 기본 테이블의 데이터를 변경하는 경우 Snowflake는 구체화된 뷰를 업데이트하거나 기본 테이블에서 업데이트된 데이터를 사용합니다. |
데이터는 동적 테이블의 목표 지연 시간까지 최신 상태입니다. 동적 테이블 유지 관리 및 새로 고침은 업데이트에 대한 컴퓨팅과 함께 새로 고침 논리를 포함한 별도의 컴퓨팅 서비스에 의해 자동으로 관리되며, 일반적으로 추가 비용이 발생합니다. 자세한 내용은 동적 테이블의 비용 이해하기 섹션을 참조하십시오. |