項目需求:判斷標(biāo)簽值是否符合某一正則規(guī)律而涉,不符合則篩選出來
例如:標(biāo)簽值為:文字類型,需要用文字正則去匹配啼县;手機(jī)號類型:正則去匹配谭羔;自定義類型:根據(jù)實際情況去匹配麦向;
rlike(a.tag_value,a.check_rule)=false;
注意:a.check_rule應(yīng)該是正則表達(dá)式,而不是字段名诵竭。但想從hive表中字段的值中去獲取的正則表達(dá)式,則需要注意什么地方呢沙郭?從字段值中獲取正則表達(dá)式裳朋,可以更靈活的校驗不同的標(biāo)簽值。
java的正則在hive也可使用,只是需要轉(zhuǎn)義绑莺,因此惕耕,這里有特別需要注意的細(xì)節(jié),就是特殊字符轉(zhuǎn)義加單斜線還是雙斜線司澎,全網(wǎng)沒人說明白這個問題,而且rlike正則寫錯谚殊,hive也不報錯漱受,經(jīng)實踐得出如下結(jié)論:
1.a.check_rule這里直接用字符串寫死,則用雙斜線轉(zhuǎn)義絮记;
2.a.check_rule這里的正則如果是從hive表中獲取虐先,則用單斜杠轉(zhuǎn)義;hive在翻譯sql表達(dá)式時蛹批,可明確看出:hive表中的單斜杠轉(zhuǎn)義,會被自動轉(zhuǎn)化為雙斜杠進(jìn)行匹配差导,也就是說hive表中單斜杠轉(zhuǎn)義提取的時候變成雙斜杠猪勇,大家注意下。