簡體   English   中英

Presto:投射數組<struct<key:string,value:array<string> &gt;&gt;進入地圖<string,array<string> &gt;

[英]Presto: cast array<struct<key:string,value:array<string>>> into map<string,array<string>>

我有一張像

name            string                                      
address         string                                      
timezone        string                                      
one_key_value   array<struct<key:string,value:array<string>>                    
two_key_value   array<struct<key:string,value:array<string>>

並想將其轉換為

name            string                                      
address         string                                      
timezone        string                                      
one_key_value   map<string,array<string>>                       
two_key_value   map<string,array<string>>

使用快速。 lateral view inline但它在 presto 中並沒有真正起作用。 我怎樣才能做到這一點?

根據提供的信息,您基本上需要兩件事:

  1. 升級到更新的東西——來自 Maven Central/Github 的最新版本,或者來自https://www.starburstdata.com/starburst-presto-sql/的 Starburst 支持(和免費)發行版(免責聲明:我來自 Starburst)。 0.175 確實有點過時了。
  2. 使用map_from_entries(one_key_value) (文檔: https : map_from_entries(one_key_value)

我沒有測試過想法,但下面的表達應該會有所幫助:

map( transform(one_key_value, e -> e.key), transform(one_key_value, e -> e.value))
map( transform(two_key_value, e -> e.key), transform(two_key_value, e -> e.value))

根據Presto 0.175 文檔

map(array, array) → map 返回使用給定鍵/值數組創建的映射。

選擇地圖(數組[1,3],數組[2,4]); -- {1 -> 2, 3 -> 4}

我們可以使用 數組轉換函數從輸入字段( array<struct<key:string,value:array<string>> )構建鍵和值的array<struct<key:string,value:array<string>>

transform(array, function) → ARRAY 返回一個數組,該數組將函數應用於數組的每個元素

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM