CREATE TABLE ... FLOW(파이프라인)

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 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 파이프라인 업데이트당 입력을 정확히 한 번 처리합니다.

Limitations

  • 관리되는 테이블은 CDC 변경 흐름을 지원하지 않습니다. AUTO CDC INTO관리되는 테이블에 대한 (SQL) 또는 apply_changes / apply_changes_from_snapshot (Python)가 실패합니다.MANAGED_TABLE_DOES_NOT_SUPPORT_CDC CDC 대상의 경우, 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실패합니다.
  • CREATE TABLE ... FLOW 기존의 관리 테이블을 채택할 수 없습니다. 목표는 새로운 관리 테이블이어야 합니다.

예제

-- 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');

추가 리소스