web-dev-qa-db-ja.com

Presto:array <struct <key:string、value:array <string >>>を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>>

prestoを使用します。有る lateral view inlineしかし、prestoでは実際には機能しません。これどうやってするの?

7

提供された情報に基づいて、基本的に2つのものが必要です。

  1. より最近の何かにアップグレードします-Maven Central/Githubからの最新版、または https://www.starburstdata.com/starburst-presto-sql/ からのStarburstがサポートする(そして無料の)ディストリビューション。 :私はスターバースト出身です)。 0.175は本当に少し時代遅れです。
  2. map_from_entries(one_key_value)を使用(docs: https://prestosql.io/docs/current/functions/map.html#map_from_entries
2
Piotr Findeisen

私は思考をテストしていませんが、以下の表現が役立つはずです:

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))

AS Presto 0.175 docs

map(array、array)→map指定されたキー/値配列を使用して作成されたマップを返します。

SELECT map(ARRAY [1,3]、ARRAY [2,4]); -{1-> 2、3-> 4}

array transform function を使用して、入力フィールドからキーと値の配列を作成できます(array<struct<key:string,value:array<string>>

transform(array、function)→ARRAY関数を配列の各要素に適用する配列を返します

1
skadya