J'ai une table comme
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>>
et voulez le convertir en
name string
address string
timezone string
one_key_value map<string,array<string>>
two_key_value map<string,array<string>>
en utilisant presto. Il existe lateral view inline
mais cela ne fonctionne pas vraiment dans presto. Comment puis-je faire ceci?
Sur la base des informations fournies, vous avez essentiellement besoin de deux choses:
map_from_entries(one_key_value)
(docs: https://prestosql.io/docs/current/functions/map.html#map_from_entries )Je n'ai pas testé la pensée, mais l'expression ci-dessous devrait aider:
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 par Presto 0,175 docs :
map (tableau, tableau) → map Retourne une carte créée à l'aide du fichier des tableaux clé/valeur donnés.
Carte SELECT (ARRAY [1,3], ARRAY [2,4]); - {1 -> 2, 3 -> 4}
Nous pouvons utiliser fonction de transformation de tableau pour construire le tableau de clés et de valeurs à partir du champ de saisie (array<struct<key:string,value:array<string>>
)
transform (tableau, fonction) → ARRAY Renvoie un tableau qui applique la fonction à chaque élément du tableau