Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A CREATE FLOW utasítással folyamatokat vagy visszatöltéseket hozhat létre egy csővezeték tábláihoz.
Note
CREATE FLOW A streaming tábla célzása mind AUTO CDC ... INTO a folyamatokat, REPLACE WHERE mind a flow-okat támogatja. Egy kezelt tábla, amelyet a kezelt táblával CREATE TABLE ... FLOW hoztak létre, nem támogatja a változásadat-rögzítést: egy AUTO CDC ... INTO menedzselt táblával szembeni folyamat meghibásodik .MANAGED_TABLE_DOES_NOT_SUPPORT_CDC
CREATE FLOW egy streaming táblára nem vonatkozik ez a korlátozás. Lásd...CREATE TABLE FLOW (csővezetékek).
Szemantika
CREATE FLOW flow_name [COMMENT comment] AS
{
AUTO CDC [ONCE] INTO target_table create_auto_cdc_flow_spec |
AUTO CDC [ONCE] INTO target_table create_auto_cdc_from_snapshot_spec |
INSERT [ONCE] INTO target_table BY NAME [ replace_using_spec | REPLACE WHERE condition ] query
}
create_auto_cdc_from_snapshot_spec
FROM SNAPSHOT ( snapshot_query )
[ WITH VERSION ( version_query ) ]
KEYS ( key [, ...] )
[ STORED AS { SCD TYPE 1 | SCD TYPE 2 } ]
[ TRACK HISTORY ON { col_list | * EXCEPT ( col_list ) } ]
replace_using_spec
REPLACE USING ( column_name [, ...] ) SEQUENCE BY sequence_column
Paraméterek
flow_name
A létrehozandó folyamat neve.
MEGJEGYZÉS
A folyamat opcionális leírása.
-
Egy
AUTO CDC ... INTOutasítás, amely meghatározza a folyamatot egycreate_auto_cdc_flow_spec. Tartalmaznia kell vagy egyAUTO CDC ... INTOutasítást, vagy egyINSERT INTOutasítást. Akkor használhatóAUTO CDC ... INTO, ha a forrás lekérdezés változásadat-szemantikát használ.További információ: AUTO CDC INTO (adattovábbítási csatornák).
AUTO CDC ... SNAPSHOTBÓL
Egy
AUTO CDC ... INTOolyan állítás, amely a változásokat a pillanatképek összehasonlításával vezeti le, nem pedig egy változási hírfolyamot. Használja ezt az űrlapot, ha a forrásban nincs engedélyezve a változás adatrögzítése, és csak teljes pillanatképek állnak rendelkezésre. A forrás két részből áll: egy kötelezőFROM SNAPSHOT (snapshot_query)záradék, amely olvassa a snapshot adatokat, és egy opcionálisWITH VERSION (version_query)záradék, amely kiválasztja a következő snapshot verziót feldolgozni. Tekintse meg , hogyan működik az AUTO CDC FROM SNAPSHOT.SNAPSHOT (snapshot_query) FORRÁSÁBÓL
Required. Egy lekérdezés, amely a kiválasztott verzió
WITH VERSION (...)pillanatkép adatait olvassa . A motor differálja az eredményt a korábban elkötelezett pillanatképtől, hogy beillesztéseket, frissítéseket és törléseket lehessen vezetni, majd sorazonosításhoz ésSTORED ASa változtatások tárolásának meghatározásához használja őket a célponttalKEYS.Hívjuk meg a current_snapshot_version() lekérdezést ebben a lekérdezésben, hogy hivatkozzon a kiválasztott verzióra
WITH VERSION (...). HaWITH VERSION (...)nincs megadva,current_snapshot_version()nem hívható be -n belülFROM SNAPSHOT (...).Ha
WITH VERSION (...)kihagyják, a motor közvetlenül a forrást olvaszaFROM SNAPSHOT (...), és a snapshot lekérdezés csak az első betöltés alatt fut, miközben a célpontnak nincs kötelezett adata és nincs elkötelezett snapshot állapota. Későbbi frissítésnél, amikor a célpont már tartalmaz adatot vagy elkötelezett pillanatképállapottal rendelkezik, a folyamat meghibásodik .AUTO_CDC_FROM_SNAPSHOT_NON_EMPTY_TARGET_WITHOUT_VERSIONA több frissítés pillanatképeinek feldolgozásához használdWITH VERSION (...).VERZIÓVAL (version_query)
Optional. Egy lekérdezés, amely kiválasztja a következő snapshot verziót a feldolgozáshoz. Pontosan egy sorra rendelhető oszlopot kell visszaadnia, és 0 vagy 1 sort. Amikor 1 sort ad vissza, az értéknek nem nullnak kell lennie. Az oszlop lehet skalárérték, például a
BIGINT, vagy aSTRUCT, amelynek mezői mind rendezhetők. Egy verziós lekérdezés, amely több oszlopot, több sort vagy null értéket ad vissza, megbukik az áramlásban .INVALID_AUTO_CDC_FROM_SNAPSHOT_VERSION_QUERYEgy pipeline frissítés során a motor a következő lépéseket ismétli: értékeli a verzió lekérdezést; ha a lekérdezés 0 sort ad vissza, abbahagyja ennek a folyamatnak a feldolgozását a jelenlegi frissítésnél; ha a lekérdezés 1 sort ad vissza, a motor current_snapshot_version()-en keresztül mutatja be az értéket, értékeli a snapshot lekérdezést, commit-olja a kapott snapshotot, és a kötelezett verziót last_snapshot_version()-en keresztül mutatja be. Ezután a motor újraértékeli a verziós lekérdezést, hogy kiválassza a következő verziót. Egy egyetlen pipeline frissítés sorrendben dolgozza fel a verziókat, amíg a verziólekérdezés nem ad sorokat.
Minden sikeres commit után visszahozott verziónak nagyobbnak kell lennie, mint a korábban elkötelezett verzió; egy nem növekvő verzió megbukja a frissítést .
APPLY_CHANGES_FROM_SNAPSHOT_ERROR.OUT_OF_ORDER_SNAPSHOT_VERSIONA verzió értékének adattípusának változatlannak kell maradnia a snapshot commit-ek között; egy adattípus-változtatás meghibásodik a frissítésnél .AUTO_CDC_FROM_SNAPSHOT_VERSION_SCHEMA_CHANGEDA teljes frissítés törli a tartós verzió állapotát.KULCSOK
Required. Az elsődleges kulcsoszlopokat a pillanatképek közötti sorok azonosítására használják a változásészlelés érdekében.
STORED AS { SCD TYPE 1 | SCD TYPE 2 }Optional. Megadja, hogyan tárolják a változásokat a céltáblában. Az alapértelmezett érték a
SCD TYPE 1.TRACK HISTORY ON { col_list | * EXCEPT (col_list) }Optional. Csak akkor érvényes, ha
SCD TYPE 2. Megadja, mely oszlopok indítanak el új történetsort, amikor azok változnak. Vagy adj egy explicit oszloplistát, vagy* EXCEPT (col_list)minden oszlopot kövess, kivéve a felsoroltokat.
A Snapshot CDC nem támogatja
WHEREaz vagySEQUENCE BY. A keresztpillanatkép sorrendezése a .WITH VERSION (...)target_table
A frissíteni kívánt táblázat. Ennek streamelésre alkalmas táblának kell lennie.
INSERT BE
A céltáblába való beszúrásra szánt táblalekérdezést definiál. Ha a
ONCEbeállítás nincs megadva, a lekérdezésnek streamelési lekérdezésnek kell lennie. A STREAM kulcsszóval stream-szemantikát használhat a forrásból való olvasáshoz. Ha az olvasás egy meglévő rekord módosítását vagy törlését tapasztalja, hibaüzenet jelenik meg. A legbiztonságosabb, ha statikus vagy csak hozzáfűző forrásokból olvas. A módosítási véglegesítéseket tartalmazó adatok betöltéséhez használhatja a Pythont és askipChangeCommitshibák kezelésére szolgáló lehetőséget.INSERT INTOkölcsönösen kizárja aAUTO CDC ... INTO. Akkor használhatóAUTO CDC ... INTO, ha a forrásadatok módosítási adatrögzítési (CDC) funkciót tartalmaznak. AINSERT INTOelemet akkor használja, ha a forrásban nem szerepel.További információért az adatfolyamokról, tekintse meg a Folyamatokkal történő adatátalakítást.
CSERÉLD KIHASZNÁLVA ( column_name [, ...] ) SOROZAT sequence_column
Important
Ez a funkció bétaverzióban érhető el. Databricks Runtime 18.2 vagy annál magasabb verziót igényel.
Definiálja az áramlást,
REPLACE USINGamely a céltáblában lévő összes sort lecseréli, hogy illeszkedjen a megadott kulcsoszlopokhoz, és minden más sort érintetlenül hagyja. Használd,REPLACE USINGha a forrásod részleges pillanatképek sorozata, amelyeket oszlopok szerint kulcsolnak.SEQUENCE BYRendeli a frissítéseket, így a kulcs legmagasabb sorrendje nyer, még akkor is, ha a frissítések sorrendben érkeznek.Legalább egy kulcsoszlopot és pontosan egy
SEQUENCE BYoszlopot kell megadni. A lekérdezésnek streaming lekérdezésnek kell lennie, ésBY NAMEkötelező.REPLACE USINGNem lehet kombinálni vagyONCEkombinálniAUTO CDC ... INTO.További információért lásd: Részleges snapshot helyettesítés CSERÉLJ USING flow-okkal.
CSERE WHERE állapot
Definiálja a flow-t egy
REPLACE WHEREáramlásként, amely újraszámolja és felülírja a céltáblák egy célzott részhalmazát. Minden frissítéskor a céltábla egyeztetésénekconditionminden sorát törlik, a forráslekérdezést ugyanarra a predikátumtartományra újraszámításra használják, és az eredményeket beillesztik. Azok a sorok, amelyek nem egyeznekcondition, érintetlenül maradnak. Nem kell hozzáadni a predikátumot a forráslekérdezéshez; a pipeline engine automatikusan alkalmazza, amikor a forrásból olvas.REPLACE WHEREBatch szemantikát használ, így a forráslekérdezésnek nem kell streaming lekérdezésnek lennie. ABY NAMEhasználata kötelező.REPLACE WHERENem kombinálható ,ONCEREPLACE USING, vagyAUTO CDC ... INTO.További információért lásd: Köteg feldolgozás REPLACE WHERE flow-okkal és REPLACE WHERE flows önálló streaming táblákhoz.
EGYSZER
Igény szerint a folyamatot egyszeri folyamatként, például visszatöltésként definiálhatja. A
ONCEhasználata kétféleképpen változtatja meg a folyamatot:- A forrás
queryvagycreate_auto_cdc_flow_specnem egy folyamatos tábla. - A folyamat alapértelmezés szerint egyszer fut. Ha a folyamat teljes frissítéssel frissül, akkor a
ONCEfolyamat újra fut az adatok újbóli létrehozásához.
ONCENem használható ,REPLACE USINGami streaming forrást igényel.- A forrás
Példák
-- EXAMPLE 1:
-- Create a streaming table, and add two flows that append data to it:
CREATE OR REFRESH STREAMING TABLE users;
-- first flow into target_table:
CREATE FLOW users_flow AS
INSERT INTO users BY NAME
SELECT * FROM stream(raw_data.users);
-- second flow into target_table:
CREATE FLOW backfill_users AS
INSERT ONCE INTO users BY NAME
SELECT * FROM user_backfill_table;
-- EXAMPLE 2:
-- Create a streaming table, and add a flow that applies CDC changes to it:
CREATE OR REFRESH STREAMING TABLE admins_cdc_target_table;
-- first flow into target_table:
CREATE FLOW admin_cdc_flow AS
AUTO CDC INTO admins_cdc_target_table
FROM stream(cdc_data.admins)
KEYS (userId)
APPLY AS DELETE WHEN
operation = "DELETE"
SEQUENCE BY sequenceNum
COLUMNS * EXCEPT (operation, sequenceNum)
STORED AS SCD TYPE 2;
-- EXAMPLE 3:
-- Create a streaming table, and add a REPLACE USING flow that keeps the latest
-- row for each payment_id from a stream of partial snapshots:
CREATE OR REFRESH STREAMING TABLE payments_latest;
CREATE FLOW payments_replace_flow AS
INSERT INTO payments_latest BY NAME
REPLACE USING (payment_id) SEQUENCE BY payment_date
SELECT payment_id, booking_id, status, payment_date
FROM STREAM(samples.wanderbricks.payments);
-- EXAMPLE 4:
-- AUTO CDC FROM SNAPSHOT without WITH VERSION: a one-time initial load from a snapshot table.
-- To process later snapshots on each update, add WITH VERSION (see EXAMPLE 5).
CREATE STREAMING TABLE users (user_id INT, name STRING, email STRING);
CREATE FLOW users_snapshot_flow AS
AUTO CDC ONCE INTO users
FROM SNAPSHOT (SELECT * FROM catalog.schema.users_snapshot)
KEYS (user_id)
STORED AS SCD TYPE 1;
-- EXAMPLE 5:
-- AUTO CDC FROM SNAPSHOT with WITH VERSION: pick the next file, then read it as the snapshot:
CREATE STREAMING TABLE orders (order_id INT, product STRING, quantity INT, order_date DATE);
CREATE FLOW orders_cdc AS
AUTO CDC INTO orders
FROM SNAPSHOT (
SELECT order_id, product, quantity, order_date
FROM read_files('/Volumes/catalog/schema/landing/orders/', format => 'json')
WHERE _metadata.file_path = (SELECT version.path FROM current_snapshot_version())
)
WITH VERSION (
SELECT struct(modification_time, path) AS version
FROM list_files('/Volumes/catalog/schema/landing/orders/')
WHERE (
NOT EXISTS (SELECT 1 FROM last_snapshot_version())
OR struct(modification_time, path) > (SELECT version FROM last_snapshot_version())
)
ORDER BY modification_time, path
LIMIT 1
)
KEYS (order_id)
STORED AS SCD TYPE 2;
-- EXAMPLE 6:
-- One-time snapshot backfill plus a streaming CDC flow into the same target.
-- The backfill omits WITH VERSION, so it uses an implicit timestamp version. The
-- streaming flow's SEQUENCE BY column (event_ts) must be a TIMESTAMP so its type
-- matches that implicit version on the shared target.
CREATE STREAMING TABLE customers (
customer_id INT, name STRING, email STRING, address STRING, event_ts TIMESTAMP
);
CREATE FLOW customers_snapshot_backfill AS
AUTO CDC ONCE INTO customers
FROM SNAPSHOT (SELECT * FROM catalog.schema.customers_snapshot)
KEYS (customer_id)
STORED AS SCD TYPE 1;
CREATE FLOW customers_cdc AS
AUTO CDC INTO customers
FROM STREAM(customers_cdc_events)
KEYS (customer_id)
SEQUENCE BY event_ts
STORED AS SCD TYPE 1;
-- EXAMPLE 7:
-- Create a streaming table, then add a REPLACE WHERE flow that recomputes and
-- overwrites a targeted window of the target table on each update:
CREATE STREAMING TABLE payments_latest;
CREATE FLOW payments_latest AS
INSERT INTO payments_latest BY NAME
REPLACE WHERE payment_date >= date_add(current_date(), -7)
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;
További információkért az egyszeri visszatöltés és a folyamatban lévő CDC kombinálásáról ugyanazon célponton, lásd: Backfilling historical data pipelines-szal.