CREATE TABLE ... FLOW (alur)

Important

Fitur ini ada di Beta.

CREATE TABLE ... FLOW Gunakan pernyataan untuk membuat tabel terkelola dalam alur, yang ditulis oleh satu atau beberapa alur.

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

Untuk menginterpretasikan beberapa sumber ke dalam satu tabel terkelola, deklarasikan beberapa alur yang menargetkannya dengan CREATE FLOW (alur):

CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query

Parameters

  • table_name

    Nama tabel terkelola yang akan dibuat. Jika nama tidak memenuhi syarat, tabel dibuat dalam skema target alur. Nama belum boleh menjadi milik tabel streaming.

  • spesifikasi_tabel

    Secara opsional menentukan kolom, jenis, properti, dan deskripsinya. Jika dihilangkan, skema disimpulkan dari kueri alur.

  • CONSTRAINT nama_ekspetasi EXPECT (ekspresi_ekspetasi) [ PADA PELANGGARAN { GAGAL UPDATE | HAPUS BARIS } ]

    Menambahkan ekspektasi kualitas data ke tabel yang dikelola. Ekspektasi kualitas data ini dapat dilacak dari waktu ke waktu dan diakses melalui log peristiwa pipeline. Ekspektasi FAIL UPDATE menyebabkan pemrosesan gagal saat membuat tabel serta me-refresh tabel. DROP ROW Ekspektasi menyebabkan seluruh baris dihapus jika ekspektasi tidak terpenuhi. Lihat Mengelola kualitas data dengan ekspektasi alur kerja.

    expectation_expr dapat terdiri dari literal, pengenal kolom dalam tabel, dan fungsi atau operator SQL bawaan deterministik kecuali:

    Juga expectation_expr tidak boleh berisi subkueri apa pun.

  • DIPARTISI OLEH (kol [, ...])

    Secara opsional mempartisi tabel menurut subset kolom.

  • CLUSTER BY klausa

    Secara opsional memungkinkan pengklusteran cairan pada tabel. Anda tidak dapat menggabungkan PARTITIONED BY dan CLUSTER BY.

  • Jalur LOKASI

    Lokasi penyimpanan opsional untuk data tabel.

  • KOMENTAR table_comment

    Literal STRING yang menjelaskan tabel.

  • Klausa TBLPROPERTIES

    Secara opsional mengatur satu atau beberapa properti tabel yang ditentukan pengguna.

  • Klausa WITH ROW FILTER

    Menambahkan fungsi filter baris ke tabel. Kueri di masa mendatang untuk tabel tersebut menerima subset baris tempat fungsi dievaluasi ke TRUE.

  • KUERI FLOW INSERT [ONCE] BY NAME

    Menentukan alur tambahan yang menyisipkan hasil query ke dalam tabel, mencocokkan kolom hasil ke kolom tabel berdasarkan nama. query dapat mereferensikan sumber batch atau streaming. ONCE menjalankan alur satu kali (misalnya, untuk isi ulang) daripada pada setiap pembaruan. Setiap alur bernama memproses inputnya tepat sekali per pembaruan alur, identik dengan FLOW INSERT BY NAME pada tabel streaming.

Keterbatasan

  • Tabel terkelola tidak mendukung alur perubahan CDC. AUTO CDC INTO(SQL) atau apply_changes / apply_changes_from_snapshot (Python) terhadap tabel terkelola gagal dengan MANAGED_TABLE_DOES_NOT_SUPPORT_CDC. CREATE STREAMING TABLE Gunakan (alur) untuk target CDC.
  • Tabel terkelola tidak mendukung FLOW ... REPLACE WHERE. Hanya FLOW INSERT BY NAME yang didukung.
  • Tabel terkelola hanya didukung dalam alur dengan Unity Catalog. Metastore Apache Hive tidak didukung.
  • Anda tidak dapat menggunakan kembali nama tabel streaming yang ada untuk tabel terkelola. Letakkan tabel streaming terlebih dahulu, atau pernyataan gagal dengan CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE.

Examples

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

Sumber daya tambahan