Important
이 기능은 베타 버전으로 제공됩니다.
CREATE TABLE ... FLOW 문을 사용하여 하나 이상의 흐름으로 작성된 파이프라인에서 관리되는 테이블을 만듭니다.
Syntax
CREATE TABLE
table_name
[ table_specification ]
[ table_clauses ]
[ flow_clause ]
table_specification
( { column_identifier column_type [column_properties] } [, ...]
[ CONSTRAINT expectation_name EXPECT (expectation_expr)
[ ON VIOLATION { FAIL UPDATE | DROP ROW } ] ] [, ...] )
table_clauses
{ PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT table_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [ ... ]
flow_clause
FLOW [ IMPORT CHECKPOINT checkpoint_path ] INSERT [ONCE] BY NAME query
여러 원본을 하나의 관리되는 테이블로 팬하려면 CREATE FLOW(파이프라인)를 대상으로 하는 여러 흐름을 선언합니다.
CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query
Parameters
table_name
만들 관리되는 테이블의 이름입니다. 이름이 정규화되지 않은 경우 테이블은 파이프라인의 대상 스키마에 만들어집니다. 이름은 스트리밍 테이블에 아직 속하지 않아야 합니다.
테이블_규격
필요에 따라 열, 해당 형식, 속성 및 설명을 정의합니다. 생략하면 스키마가 흐름 쿼리에서 유추됩니다.
CONSTRAINT expectation_name 기대 (expectation_expr) [ 위반 시 { 실패 UPDATE | 행 삭제 } ]
관리 테이블에 데이터 품질 기대치를 추가합니다. 이러한 데이터 품질 기대치는 시간에 따라 추적할 수 있으며, 파이프라인의 이벤트 로그를 통해 접근할 수 있습니다.
FAIL UPDATE예상으로 인해 테이블을 만들고 테이블을 새로 고치면 처리가 실패합니다.DROP ROW기대치로 인해 기대치가 충족되지 않으면 전체 행이 삭제됩니다. 파이프라인 기대를 사용하여 데이터 품질을 관리하기를 참조하세요.expectation_expr리터럴, 테이블 내 열 식별자, 그리고 결정론적이고 내장된 SQL 함수 또는 연산자로 구성될 수 있으며, 단:또한
expectation_expr에는 하위 쿼리가 포함되어서는 안 됩니다.PARTITIONED BY(col [, ...])
필요에 따라 열의 하위 집합으로 테이블을 분할합니다.
CLUSTER BY 절
필요에 따라 테이블에서 액체 클러스터링을 사용하도록 설정합니다. 결합
PARTITIONED BY할 수 없습니다.CLUSTER BY위치 경로
테이블 데이터의 선택적 스토리지 위치입니다.
코멘트 table_comment
STRING테이블을 설명하는 리터럴입니다.TBLPROPERTIES 절
필요에 따라 하나 이상의 사용자 정의 테이블 속성을 설정합니다.
WITH ROW FILTER 절
테이블에 행 필터 함수를 추가합니다. 해당 테이블에 대한 이후 쿼리는 함수가 계산되는 행의 하위 집합을
TRUE받습니다.FLOW INSERT [ONCE] BY NAME 쿼리
결과 열을 테이블 열과
query별로 일치시켜 테이블에 결과를 삽입하는 추가 흐름을 정의합니다.query는 일괄 처리 또는 스트리밍 원본을 참조할 수 있습니다.ONCE는 모든 업데이트가 아닌 한 번 흐름(예: 백필)을 실행합니다. 명명된 각 흐름은 스트리밍 테이블에서와 동일한FLOW INSERT BY NAME파이프라인 업데이트당 입력을 정확히 한 번 처리합니다.수입 검문소 checkpoint_path
STRING기존 구조화 스트리밍 체크포인트로 가는 경로를 포함하는 리터럴로, 마이그레이션된 스트림이 소스를 재처리하지 않고 마지막으로 커밋된 오프셋에서 재개되도록 합니다. 체크포인트 가져오기는 베타 단계입니다. 구조 화된 스트리밍 체크포인트 마이그레이션을 참조하세요.
구조화된 스트리밍 체크포인트 마이그레이션
Important
체크포인트 가져오기는 베타 단계입니다.
기존 구조화 스트리밍 워크로드를 소스를 재처리하지 않고 파이프라인으로 마이그레이션하는 데 사용 IMPORT CHECKPOINT 하세요. 사용하는 구조화 스트리밍 쿼리(클라우드 저장소, Unity 카탈로그 볼륨, DBFS 경로 등)로 checkpointLocation 설정 checkpoint_path 하세요. 첫 번째 파이프라인 업데이트에서는 해당 체크포인트를 파이프라인의 관리 저장소로 클론합니다. 흐름은 마지막으로 커밋된 오프셋에서 다시 시작되며, 그 상태(예: 집계, 중복 제거 키, 워터마크)가 그대로 유지됩니다. 이후 파이프라인 업데이트는 플로우의 복제된 체크포인트를 사용합니다; 원래 체크포인트는 수정되지 않습니다.
Warning
파이프라인을 실행하기 전에 원래의 구조화된 스트리밍 쿼리를 멈추세요. 원래 구조화된 스트리밍 쿼리는 가져오기 후 재사용할 수 있지만, 체크포인트 상태를 관리하고 파이프라인과 쿼리가 동시에 같은 테이블에 쓰지 않도록 해야 합니다. 이는 중복 데이터가 발생할 수 있습니다.
구조화된 스트리밍 쿼리를 쿼리가 작성한 테이블에 계속 쓰는 파이프라인 플로우로 다시 만들고, 체크포인트를 가져오세요:
-- Use the existing table your Structured Streaming query writes to; CREATE TABLE adopts it.
CREATE TABLE streaming_table
-- Continue from the imported checkpoint instead of reprocessing the source.
FLOW IMPORT CHECKPOINT '/Volumes/my_catalog/my_schema/checkpoints/my_stream'
INSERT BY NAME
-- The same source your original query read from.
SELECT * FROM STREAM(source_table);
체크포인트는 첫 번째 파이프라인 업데이트에서만 불러옵니다. 이후 업데이트에서는 무시 IMPORT CHECKPOINT합니다.
완전 새로고침은 체크포인트를 다시 가져오지 않습니다. 새롭고 빈 체크포인트에서 시작해 소스를 재처리합니다.
Limitations
- 관리되는 테이블은 CDC 변경 흐름을 지원하지 않습니다.
AUTO CDC INTO관리되는 테이블에 대한 (SQL) 또는apply_changes/apply_changes_from_snapshot(Python)가 실패합니다.MANAGED_TABLE_DOES_NOT_SUPPORT_CDCCDC 대상의 경우, CREATE FLOW(파이프라인)로 정의된 흐름을 가진 (파이프라인)을 사용CREATE STREAMING TABLE하세요. - 관리되는 테이블은 지원하지
FLOW ... REPLACE WHERE않습니다.FLOW INSERT BY NAME만 지원됩니다. 테이블의 목표 부분집합을 재계산하고 덮어쓰려면, 스트리밍 테이블을 만들고 CREATE FLOW(파이프라인)로 플로우를REPLACE WHERE정의하세요. REPLACE WHERE 흐름을 사용한 Batch 처리를 참조하세요. - 관리되는 테이블은 Unity 카탈로그를 사용하는 파이프라인에서만 지원됩니다. Hive 메타스토어는 지원되지 않습니다.
- 관리되는 테이블에 대해 기존 스트리밍 테이블의 이름을 다시 사용할 수 없습니다. 먼저 스트리밍 테이블을 삭제하거나 문이 .와 함께
CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE실패합니다. -
IMPORT CHECKPOINT는 오직 에서만FLOW INSERT BY NAME지원됩니다.
예제
-- Create a managed table populated by an inline append flow from a streaming table
CREATE TABLE output
FLOW INSERT BY NAME SELECT * FROM STREAM(samples.tpch.orders);
-- Create a managed table that ingests files with schema inference and evolution
CREATE TABLE raw_data
FLOW INSERT BY NAME
SELECT * FROM STREAM read_files('abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/base/path');
-- Create a partitioned managed table from a streaming source
CREATE TABLE events
PARTITIONED BY (bucket)
FLOW INSERT BY NAME
SELECT id, bucket FROM STREAM read_files('abfss://my_path', format => 'json');
-- Create a managed table with liquid clustering
CREATE TABLE orders_clustered
CLUSTER BY (order_date, customer_id)
FLOW INSERT BY NAME
SELECT
o_orderkey AS order_id,
o_custkey AS customer_id,
o_orderdate AS order_date,
o_totalprice AS total_price
FROM STREAM(samples.tpch.orders);
-- Create a managed table with a data quality expectation that drops violating rows
CREATE TABLE valid_events
(CONSTRAINT positive_id EXPECT (id > 0) ON VIOLATION DROP ROW)
FLOW INSERT BY NAME
SELECT id FROM STREAM read_files('s3://bucket/path', format => 'json');