2017-03-25 13 views
0

jsonオブジェクトを含む列を含むRedshiftテーブルがあります。 jsonオブジェクトの内容に特定のフィルタを適用するこのテーブルのクエリを実行しようとしているときに、jsonパーサーのエラーが発生しています。 selectステートメントでjson_extract_path_text()を使用できますが、where句で使用すると同じエラーが発生します。where節のjson_extract_path_text()関数を使用中にJson構文解析エラーが発生する

次のエラーが表示されます。 Amazon無効な操作:JSON解析エラー。

私は詳細についてはSTL_ERRORテーブルを見ると、これは私はエラーの詳細に見るものです: ERRCODE:8001 コンテキスト:JSONの構文解析エラー エラー:無効なJSONオブジェクトはnull

{"att1":"att1_val","att2":"att2_val","att3":[{"att3_sub1_1":"att3_sub1_1_val","att3_sub1_2":"att3_sub1_2_val"},{"att3_sub2_1":"att3_sub2_1_val","att3_sub2_2":"att3_sub2_2_val"}],"att4":"att4_val","att5":"att5_val"} 
0:

は、次のような一のJSON列の内容の一例です

今、私は次のクエリを実行すると、それは何の問題もなく実行されます。

select 
json_extract_path_text(col_with_json_obj,'att4') as required_val 
from table_with_json_data; 

今私は(json_extract_path_textを使用する場合)、それは上記のエラーで失敗where句で:

select 
json_extract_path_text(col_with_json_obj,'att4') as required_val 
from table_with_json_data 
where json_extract_path_text(col_with_json_obj,'att4') = 'att4_val'; 

されています私が間違って使っているものやここにないものはありますか?

P.S:同じようなスキーマを持つ別のテーブルがあり、同じクエリがうまく実行されています。 2つのテーブルの唯一の違いは、データがロードされる方法です。コピーオプションでjsonpathsファイルを使用し、もう1つはjson 'auto'を使用します。

答えて

0

table_with_json_dataの値にcol_with_json_objの値が4文字の文字列 "null"である1行であっても、これはエラーとなります。

このようなエラーを回避するには、一般的に、JSONを検証するためのRedshift UDFを作成することをおすすめします。 http://discourse.snowplowanalytics.com/t/more-robust-json-parsing-in-redshift-with-python-udfs/197で説明is_json()メソッドは、私のためによく働いています

create or replace function is_json(j varchar(max)) 
    returns boolean 
    stable as $$ 
    import json 
    try: 
     json_object = json.loads(j) 
    except ValueError, e: 
     return False 
    return True 
    $$ language plpythonu; 

を次に、あなたがあなたのクエリにand where is_json(col_with_json_obj)句を追加することができ、エラーのこのクラスは完全に回避することができます。

+0

ありがとうございました。ええ、私は、行のうち文字列の値が "null"であり、明示的にフィルタリングしなければならないことに気づきました..しかし、私がまだ理解していないことは、どこの句ではない。正確には、私がwhere句で持っている条件は、この列の文字列 "null"を持つ行をフィルタリングする必要があります。 – Hercules

+0

@Hercules私は同じ混乱と不満を抱いていました。 AWS Redshiftフォーラムに続行できますが、まだ回答はありません:https://forums.aws.amazon.com/thread.jspa?threadID=232468 – nofinator

関連する問題