Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunun için geçerlidir:
Databricks SQL
Databricks Runtime 19.0 ve üzeri
Important
Bu özellik Beta sürümündedir. Çalışma alanı yöneticileri Bu özelliğe erişimi Önizlemeler sayfasından denetleyebilir. Bkz. Azure Databricks önizlemelerini yönetme.
Önceki table_reference satırlarındaki desenleri bulur ve filtreler.
MATCH_RECOGNIZE girişi bölümler, her bölümdeki satırları sıralar, sıralı diziye göre bir satır düzeniyle eşleşir ve eşleşme başına satır başına satır moduna bağlı olarak özet veya satır başına sonuçlar döndürür.
Tipik kullanımlar arasında ardışık değerlerin çalıştırmalarını algılama, V şeklinde veya W şeklindeki fiyat hareketlerini algılama ve olay akışlarını oturum açma sayılabilir.
Syntax
MATCH_RECOGNIZE (
[ PARTITION BY partition [, ...] ]
[ ORDER BY order_by ]
[ MEASURES measures ]
[ row_pattern_rows_per_match ]
[ AFTER MATCH row_pattern_skip_to ]
PATTERN ( row_pattern )
DEFINE row_pattern_definition_list )
measures
MEASURES { measureExpr AS measureName } [, ...]
row_pattern_rows_per_match
{ ONE ROW PER MATCH
| ALL ROWS PER MATCH [ SHOW EMPTY MATCHES ] }
row_pattern_skip_to
SKIP PAST LAST ROW
Parameters
PARTITION BY bölümü [, ...]
Desen eşleştirmenin çalıştığı satır gruplarını tanımlayan bir veya daha fazla ifade. atlarsanız
PARTITION BY, bölümü tüm satırları içerir.PARTITION BYyalnızca sütun başvurularını kabul eder. Başka bir ifade belirtirseniz, Azure Databricks MATCH_RECOGNIZE_PARTITION_BY_MUST_BE_COLUMN yükseltir.ORDER BY order_by
Her bölüm içindeki satırların sırasını belirtir. Desen eşleştirme ve gezinti işlevleri bu sırayı kullanır.
-
İsteğe bağlı olarak, her desen eşleşmesi için döndürülen ölçü sütunlarını tanımlar.
row_pattern_rows_per_match
Eşleşme başına kaç satır döndürülür denetler. Varsayılan değer:
ONE ROW PER MATCH.ONE ROW PER MATCHEşleşme başına bir satır döndürür. Sonuç yalnızca bölüm sütunlarını ve ölçü sütunlarını içerir.
ALL ROWS PER MATCH [ SHOW EMPTY MATCHES ]Bir eşleşmeye katılan her satır için bir satır döndürür. Her çıkış satırı, ilgili eşleşme için hesaplanan ,
table_referencesütunlarından vePARTITION BYsütunlarındanMEASURESilgili giriş sütunlarını içerir.SHOW EMPTY MATCHESaltındaALL ROWS PER MATCHkabul edilir ve empty-match-handling alt yan tümcesini atladığınızda varsayılan değerdir. Bu sürüm boş eşleşmeler oluşturmaz, bu nedenle anahtar sözcüğün sonuç üzerinde gözlemlenebilir bir etkisi yoktur.
EŞLEŞME SONRASI row_pattern_skip_to
Eşleşme bulunduktan sonra devam etmek istediğiniz satırı belirtir. Bu sürüm yalnızca destekler
SKIP PAST LAST ROW. Geçerli eşleşmenin son satırının hemen ardından satırla devam edin. Yan tümcesini atladığınızda varsayılan değerAFTER MATCHbudur.PATTERN ( row_pattern )
Eşleşecek deseni belirtir.
DEFINE row_pattern_definition_list
ve
PATTERNyan tümcelerindeMEASURESbaşvuruda bulunan boole değişkenlerini tanımlar.
Result
Sonuç, eşleşme başına satır moduna bağlıdır:
ONE ROW PER MATCHSütunları ve ardından
PARTITION BYsütunları döndürürMEASURES.ALL ROWS PER MATCHBir eşleşmeye katılan her satır için bir satır döndürür. Her çıkış satırı, ilgili eşleşme için hesaplanan ,
table_referencesütunlarından vePARTITION BYsütunlarındanMEASURESilgili giriş sütunlarını içerir.
Yaygın hata koşulları
- MATCH_RECOGNIZE_EMPTY_MEASURES
- MATCH_RECOGNIZE_FUNCTION_OUTSIDE_MATCH_RECOGNIZE
- UYUM_TANI_MALİYETLERİ_DİĞER_ADLARLA_ANILMALIDIR
- MATCH_RECOGNIZE_PARTITION_BY_MUST_BE_COLUMN
Examples
Her sorgu, kullanan son örnek dışında bir stock_ticker(symbol, tstamp, price) tablo kullanır page_views(user_id, event_time).
Örnek 1: Ardışık artan çalıştırma
Sembol başına ardışık fiyat artışlarının her en üst düzey çalıştırmasını bulun. Değişkenin strt girdisi olmadığından DEFINE , herhangi bir satırla eşleşir ve çalıştırmayı sabitler.
up+ eşleşmeyi art arda bir veya daha fazla artışa genişletir.
PREV(price) hemen önceki satırın ORDER BY fiyatını sırayla okur.
ONE ROW PER MATCH çalıştırma başına tek bir özet satırı yayar.
> CREATE OR REPLACE TEMP VIEW stock_ticker AS
SELECT * FROM VALUES
('AAPL', TIMESTAMP '2024-01-01 09:30:00', 100.0),
('AAPL', TIMESTAMP '2024-01-01 09:31:00', 102.0),
('AAPL', TIMESTAMP '2024-01-01 09:32:00', 105.0),
('AAPL', TIMESTAMP '2024-01-01 09:33:00', 104.0),
('AAPL', TIMESTAMP '2024-01-01 09:34:00', 106.0),
('AAPL', TIMESTAMP '2024-01-01 09:35:00', 108.0)
AS t(symbol, tstamp, price);
> SELECT symbol, start_tstamp, end_tstamp, run_length
FROM stock_ticker
MATCH_RECOGNIZE (
PARTITION BY symbol
ORDER BY tstamp
MEASURES FIRST(tstamp) AS start_tstamp,
LAST(tstamp) AS end_tstamp,
COUNT(*) AS run_length
ONE ROW PER MATCH
AFTER MATCH SKIP PAST LAST ROW
PATTERN ( strt up+ )
DEFINE up AS price > PREV(price) ) AS T;
symbol start_tstamp end_tstamp run_length
AAPL 2024-01-01 09:30:00 2024-01-01 09:32:00 3
AAPL 2024-01-01 09:33:00 2024-01-01 09:35:00 3
Örnek 2: V şekli (dip ve kurtarma)
Önce düşen, sonra yükselen bir fiyatı algılayın.
down+ düşen bacak ve up+ iyileşme ile eşleşir.
LAST(down.tstamp) olarak downsınıflandırılan son satırı seçer; bu, V'nin yayıdır. gibi down.tstamp bir değişken nitelikli başvuru, ifadenin belirli bir MEASURES desen değişkeniyle eşleşen satırları okumasına olanak tanır.
> SELECT symbol, start_tstamp, bottom_tstamp, end_tstamp
FROM stock_ticker
MATCH_RECOGNIZE (
PARTITION BY symbol
ORDER BY tstamp
MEASURES FIRST(tstamp) AS start_tstamp,
LAST(down.tstamp) AS bottom_tstamp,
LAST(tstamp) AS end_tstamp
ONE ROW PER MATCH
AFTER MATCH SKIP PAST LAST ROW
PATTERN ( strt down+ up+ )
DEFINE down AS price < PREV(price),
up AS price > PREV(price) ) AS T;
symbol start_tstamp bottom_tstamp end_tstamp
AAPL 2024-01-01 09:32:00 2024-01-01 09:33:00 2024-01-01 09:35:00
Örnek 3: Çift alt (W-shape)
Kısmi kurtarma ile ayrılmış iki dip algılayın. Desen dört bacak (down1+ up1+ down2+ up2+ ) şeklindedir ve farklı değişken adları her oluğu bağımsız olarak ölçmenize veya filtrelemenize olanak sağlar.
MATCH_NUMBER() bir bölümde bulunan her W'i numaralar.
> CREATE OR REPLACE TEMP VIEW stock_ticker AS
SELECT * FROM VALUES
('AAPL', TIMESTAMP '2024-01-01 09:30:00', 100.0),
('AAPL', TIMESTAMP '2024-01-01 09:31:00', 96.0),
('AAPL', TIMESTAMP '2024-01-01 09:32:00', 92.0),
('AAPL', TIMESTAMP '2024-01-01 09:33:00', 98.0),
('AAPL', TIMESTAMP '2024-01-01 09:34:00', 101.0),
('AAPL', TIMESTAMP '2024-01-01 09:35:00', 95.0),
('AAPL', TIMESTAMP '2024-01-01 09:36:00', 90.0),
('AAPL', TIMESTAMP '2024-01-01 09:37:00', 99.0),
('AAPL', TIMESTAMP '2024-01-01 09:38:00', 104.0)
AS t(symbol, tstamp, price);
> SELECT symbol, start_tstamp, end_tstamp, w_no
FROM stock_ticker
MATCH_RECOGNIZE (
PARTITION BY symbol
ORDER BY tstamp
MEASURES FIRST(tstamp) AS start_tstamp,
LAST(tstamp) AS end_tstamp,
MATCH_NUMBER() AS w_no
ONE ROW PER MATCH
AFTER MATCH SKIP PAST LAST ROW
PATTERN ( strt down1+ up1+ down2+ up2+ )
DEFINE down1 AS price < PREV(price),
up1 AS price > PREV(price),
down2 AS price < PREV(price),
up2 AS price > PREV(price) ) AS T;
symbol start_tstamp end_tstamp w_no
AAPL 2024-01-01 09:30:00 2024-01-01 09:38:00 1
Örnek 4: Oturum açma
Kullanıcının olay akışını, ardışık olaylar arasındaki 30 dakikadan uzun bir boşluğun yeni bir oturum başlattığı oturumlara daraltın.
strt herhangi bir satırda oturum açar.
same_session* öncekinden sonraki 30 dakika içinde gerçekleşen aşağıdaki her olayı emer. Bir boşluk eşiği aştığında eşleşme sona erer, AFTER MATCH SKIP PAST LAST ROW sonraki olayda devam eder ve yeni bir oturum (yeni MATCH_NUMBER()) başlar. Niceleyici, * yalnız bir olayı geçerli bir tek satırlı oturum yapar.
> CREATE OR REPLACE TEMP VIEW page_views AS
SELECT * FROM VALUES
(1, TIMESTAMP '2024-01-01 09:00:00'),
(1, TIMESTAMP '2024-01-01 09:15:00'),
(1, TIMESTAMP '2024-01-01 10:00:00'),
(1, TIMESTAMP '2024-01-01 10:10:00')
AS t(user_id, event_time);
> SELECT user_id, session_no, session_start, session_end, event_count
FROM page_views
MATCH_RECOGNIZE (
PARTITION BY user_id
ORDER BY event_time
MEASURES MATCH_NUMBER() AS session_no,
FIRST(event_time) AS session_start,
LAST(event_time) AS session_end,
COUNT(*) AS event_count
ONE ROW PER MATCH
AFTER MATCH SKIP PAST LAST ROW
PATTERN ( strt same_session* )
DEFINE same_session AS event_time <= PREV(event_time) + INTERVAL 30 MINUTE ) AS T;
user_id session_no session_start session_end event_count
1 1 2024-01-01 09:00:00 2024-01-01 09:15:00 2
1 2 2024-01-01 10:00:00 2024-01-01 10:10:00 2