Hive array欄位 查詢過濾

2021-07-04 08:06:46 字數 1275 閱讀 8676

如果乙個hive 表的乙個字段 a  是array型別,裡面存在多個值,如果要對其中的某個值進行過濾,那麼可以用lateral view 結合udtf (user-defined table-generating functions) 來進行過濾

lateral view語法

lateralview: lateral view udtf(expression) tablealias as columnalias (',' columnalias)* fromclause: from basetable (lateralview)*

例如:real_id是乙個arr型別

select

count(1) from 表名 lateral view explode(real_id) rtable as realid where realid ='7057'

and statdate ='2015080221'

二、 udtf介紹

udtf(user-defined table-generating functions) 用來解決 輸入一行輸出多行(on-to-many maping) 的需求。

udtf 使用

udtf有兩種使用方法,一種直接放到select後面,一種和lateral view一起使用。

1:直接select中使用:select explode_map(properties) as (col1,col2) from src;

不可以新增其他字段使用:select a, explode_map(properties) as (col1,col2) from src

不可以巢狀呼叫:select explode_map(explode_map(properties)) from src

不可以和group

by/cluster by/distribute by/sort by一起使用:select explode_map(properties) as (col1,col2) from src group

by col1, col2

2:和lateral view一起使用:select src.id, mytable.col1, mytable.col2 from src lateral view explode_map(properties) mytable as col1, col2;

此方法更為方便日常使用。執行過程相當於單獨執行了兩次抽取,然後union到乙個表裡。

參考:

BOS查詢過濾總集

驗證客戶名稱是否唯一 throws bo ception throws sqlexception private void isuniquename throws bo ception,sqlexception if prmtcustomernumber.getvalue null if custo...

C Linq 查詢過濾 where()

參考部落格。要點 where 有兩個原型。把滑鼠點到where,按下f12就可以轉到原型處 1 public static ienumerablewhere this ienumerablesource,funcpredicate 2 public static ienumerablewhere t...

ElasticSearch 常用的查詢過濾語句

query 和 filter 的區別請看 term主要用於精確匹配哪些值,比如數字,日期,布林值或 not analyzed 的字串 未經分析的文字資料型別 完整的例子,hostname 字段完全匹配成 saaap.wangpos.com 的資料 terms 跟 term 有點類似,但 terms ...