web-dev-qa-db-ja.com

prestoでvarcharをMAP(VARCHAR、VARCHAR)にキャストする方法

Prestoにテーブルがあり、( "mappings")という名前の1つの列にキーと値のペアが文字列として含まれています

こんにちはからマッピングを選択します。

例:{"foo": "baar"、 "foo1": "bar1"}

「マッピング」列をMAPにキャストしたい

こんにちはからCAST( "maps"をMAPとして)を選択します。

これはprestoでエラーをスローします。これをどのようにマップに変換できますか?

4

PrestoにはMAPの正規の文字列表現がないため、MAP(VARCHAR, VARCHAR)に直接キャストする方法はありません。ただし、文字列にJSONマップが含まれている場合は、 json_parse 関数は、文字列をJSONタイプの値に変換し、それをSQL MAPcast を介して変換します。

例:

WITH
data(c) AS (
    VALUES '{"foo": "baar", "foo1": "bar1"}'
),
parsed AS (
    SELECT cast(json_parse(c) as map(varchar, varchar)) AS m
    FROM data
)
SELECT m['foo'], m['foo1']
FROM parsed

生成する:

 _col0 | _col1
-------+-------
 baar  | bar1
5
Martin Traverso

hello1からcast(json_parse(mappings)as MAP(VARCHAR、VARCHAR))を選択します。

0