Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:
Databricks SQL
Databricks Runtime 12.0 ke atas
Menambahkan watermark ke relasi dalam pernyataan SELECT. Klausa WATERMARK hanya berlaku untuk kueri pada data streaming stateful, yang mencakup penggabungan stream-stream dan agregasi.
Sintaks
from_item
{ table_name [ TABLESAMPLE clause ] [ watermark_clause ] [ table_alias ] |
JOIN clause |
[ LATERAL ] table_valued_function [ table_alias ] |
VALUE clause |
[ LATERAL ] ( query ) [ TABLESAMPLE clause ] [ watermark_clause ] [ table_alias ] }
watermark_clause
WATERMARK named_expression DELAY OF interval
Parameter
-
Ekspresi yang menghasilkan nilai dari jenis
timestamp. Ekspresi harus berupa referensi ke kolom yang ada, atau transformasi deterministik terhadap kolom yang ada. Ekspresi menambahkan kolom bertipe tanda waktu yang digunakan untuk melacak penanda. Kolom yang ditambahkan tersedia untuk perintah pencarian. -
Interval literal yang menentukan ambang penundaan marka air. Harus berupa nilai positif kurang dari sebulan.
Kondisi kesalahan umum
- CANNOT_ASSIGN_EVENT_TIME_COLUMN_WITHOUT_WATERMARK
- TIDAK_BISA_MENGGUNAKAN_BANYAK_ALIAS_DALAM_CLAUSE_WATERMARK
- REQUIRES_EXPLICIT_NAME_IN_WATERMARK_CLAUSE
Contoh
-- Creating a streaming table performing time window row count, with defining watermark from existing column
> CREATE OR REFRESH STREAMING TABLE window_agg_1
AS SELECT window(ts, '10 seconds') as w, count(*) as CNT
FROM
STREAM stream_source WATERMARK ts DELAY OF INTERVAL 10 SECONDS AS stream
GROUP BY window(ts, '10 seconds');
-- Creating a streaming table performing time window row count, with deriving a new timestamp column to define watermark
> CREATE OR REFRESH STREAMING TABLE window_agg_2
AS SELECT window(ts, '10 seconds') as w, count(*) as CNT
FROM
STREAM stream_source WATERMARK to_timestamp(ts_str) AS ts DELAY OF INTERVAL 10 SECONDS AS stream
GROUP BY window(ts, '10 seconds');