presto 中的數組函數用法

具體用法參考於presto官方文檔

Array Functions and Operators

注:下文所描述的數組函數都是作用於數組類型的數據庫表字段,如果字段不是數組類型,就不能用這些數組函數。

[]操作符

該操作符用於獲取數組中的某個元素,索引從1開始(不是從0開始)。例如:

select full_name[1] as first_name from dim_user; 

||操作符

該操作符用於連接兩個數組,或數組與一個元素,例如:

select array1 || array2 as new_array from fact_user_login;
select 1 || array1 as new_array from fact_user_login;
select array 1 || 1 as new_array form fact_user_login;
select 1 || 2 as new_array from fact_user_login;

array functions

array_distinct(x) -> array
如果你想將數組元素去重,那麼可以用這個內置函數,返回去重後的數組

array_union(x, y) -> array
將兩個數組類型的字段合併成一個新數組,結果去重

array_intersect(x, y) -> array
獲取兩個數組類型的字段中相同的元素,並返回這些元素組成的數組,結果去重

array_join(x, delimiter, null_value_replacement) -> varchar
將數組中的所有元素以delimiter指定的分隔符連接起來,null值用null_value_replacement代替,返回一個字符串

array_max(array<E>) -> E
返回數組中最大的元素

array_min(array<E>) -> E
返回數組中最小的元素

array_position(x, element) -> bigint
返回element在數組中的位置

element_at(array<E>, index) -> E
返回數組中索引index對應的元素

array_remove(x, element) -> x
移除數組x中的所有element元素

array_sort(x) -> x
將數組重新排序。 注:元素本身支持比較操作

cardinality(x) -> bigint
返回數組的元素個數

concat(x, y) -> array
同||操作符,將兩個數組連接起來

contains(x, element) -> boolean
判斷element是否在數組x中

filter(array, function) -> array
array中的每一個元素經過function過濾,返回都爲true的元素數組

flatten(x) -> array
將數組的數組類型元素都連接在一起,形成一個打數組。

reduce(array, initialState, inputFunction, outputFunction) -> x
See reduce().

reverse(x) → array
返回元素順序顛倒的一個數組

sequence(start, stop) -> array<bigint>
生成一個數組序列,從start開始,結束於stop, 步長爲1。如果start大於stop,則生成一個步長爲-1的逐漸遞減的一個數組序列。

sequence(start, stop, step) -> array<bigint>
生成一個步長爲指定長度的一個數組序列。

sequence(start, stop, step) → array<timestamp>
生成一個時間戳序列,從start開始,stop結束,step類型可以是year, month, day, hour, minute, second等類型。

shuffle(x)-> array
生成數組的一個全排列

slice(x, start, length) -> array
生成一個子數組,從start開始長度爲length的數組。

transform(array, function)-> array
將一個數組轉換成另一個數組,元素類型有可能不同。

zip(array1, array2[, ...])-> array<row>
將多個數組同一個index的元素合併成一個元組,該元組作爲新數組index處的元素。如果某個數組元素不夠,用null填充。例如:

SELECT zip(ARRAY[1, 2], ARRAY['1b', null, '3b']); -- [ROW(1, '1b'), ROW(2, null), ROW(null, '3b')]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章