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'を使用します。
ありがとうございました。ええ、私は、行のうち文字列の値が "null"であり、明示的にフィルタリングしなければならないことに気づきました..しかし、私がまだ理解していないことは、どこの句ではない。正確には、私がwhere句で持っている条件は、この列の文字列 "null"を持つ行をフィルタリングする必要があります。 – Hercules
@Hercules私は同じ混乱と不満を抱いていました。 AWS Redshiftフォーラムに続行できますが、まだ回答はありません:https://forums.aws.amazon.com/thread.jspa?threadID=232468 – nofinator