我試圖在我的配置單元表的列中檢測到一個序列。我有3列 (ID,標籤,索引)。每個ID具有標籤的序列和索引標籤的排序,像帶引導函數的hive列中檢測序列
id label index
a x 1
a y 2
a x 3
a y 4
b x 1
b y 2
b y 3
b y 4
b x 5
b y 6
我想,如果X,Y,X的標籤序列,Y發生辨認。
我想嘗試鉛函數來完成此類似:
select id, index, label,
lead(label, 1) over (partition by id order by index) as l1_fac,
lead(label, 2) over (partition by id order by index) as l2_fac,
lead(label, 3) over (partition by id order by index) as l3_fac
from mytable
產量:
id index label l1_fac l2_fac l3_fac
a 1 x y x y
a 2 y x y NULL
a 3 x y NULL NULL
a 4 y NULL NULL NULL
b 1 x y y y
b 2 y y y x
b 3 y y x y
b 4 y x y NULL
b 5 x y NULL NULL
其中L1(2,3)是下一個標籤值。然後,我可以檢查的模式與
where label = l2_fac and l1_fac = l3_fac
這將爲ID =工作一個,但不是ID = b,其中標籤序列爲:X,Y,Y,Y,Y,X。我不在乎,這是連續3年,我只是感興趣,它從x到y到x到y。
我不確定這是否可能,我嘗試了group by和partition的組合,但沒有成功。
當*序列'xyxy'發生時,你關心*嗎?即在什麼'索引'它發生?或者你只是想知道它發生在某個特定的id的某處? – gobrewers14
不,我不在乎索引是什麼,只是它發生。 – boxl