2017-04-07 11 views
2

データを照会するのにPresto(0.163)を使用していて、jsonからフィールドを抽出しようとしています。PrestoでJSON_EXTRACTの「文字」を含むキーの問題

私は列「style_attributes」に存在している下記のようなJSONを、持っている:

"attributes": { 
    "Brand Fit Name": "Regular Fit", 
    "Fabric": "Cotton", 
    "Fit": "Regular", 
    "Neck or Collar": "Round Neck", 
    "Occasion": "Casual", 
    "Pattern": "Striped", 
    "Sleeve Length": "Short Sleeves", 
    "Tshirt Type": "T-shirt" 
} 

私はフィールド「半袖」を抽出することができないんです。 以下は私が使用しているクエリです:

JSON_EXTRACT(style_attributes、 '$。attributes.Sleeve Length')をテーブルからの長さとして選択します。

クエリは、次のエラー - 無効なJSONパスで失敗:「$ .attributes.Sleeveの長さ」 '「(空白)なしのフィールドについて

、クエリは罰金を実行しています。

私はPrestoのドキュメントで解決策を見つけようとしましたが、成功しませんでした。 FUNC:json_extractと:FUNC:

答えて

3
presto:default> select json_extract_scalar('{"attributes":{"Sleeve Length": "Short Sleeves"}}','$.attributes["Sleeve Length"]'); 
    _col0 
--------------- 
Short Sleeves 

または

presto:default> select json_extract_scalar('{"attributes":{"Sleeve Length": "Short Sleeves"}}','$["attributes"]["Sleeve Length"]'); 
    _col0 
--------------- 
Short Sleeves 

JSON機能が

変更json_extract_scalar機能今 は角括弧構文をサポートしています。

SELECT json_extract(json, '$.store[book]'); 
SELECT json_extract(json,'$.store["book name"]'); 

この変更の一部として、括弧で囲まれていないパスセグメントで許容される文字セット は、 の英数字、アンダースコア、およびコロンに制限されています。さらに、コロンは二重引用符で囲まれていないパスセグメントでは には使用できません。特殊文字を含む要素に一致させるには、引用符付きの新しいブラケット構文 を使用してください。

https://github.com/prestodb/presto/blob/c73359fe2173e01140b7d5f102b286e81c1ae4a8/presto-docs/src/main/sphinx/release/release-0.75.rst

+0

これは助けになりました。ありがとう。 –

+0

あなたは大歓迎です。 P.S.答えを受け入れることを忘れないでください –

0

はここにあなたの正解です。 ましょうセイ:


はJSON:{ "トラベル日付": "2017年9月22日"、 "市": "シアトル"}
列名:旅程 そして私罠エキス 'トラベル日付'その後、現在のJSONを形成:

問合せ:SELECT JSON_EXTRACT(旅程、旅行日の\ " "$ \。"")表

注から:ちょうど\ を追加」開始との終わりにキー名

これはあなたが必要としていることを確かに期待しています。 :)

関連する問題