2016-05-16 17 views
3

AWS Redshiftデータベースにフィールドvarchar(65000)があります。これはJSON文字列を格納するために使用されます。 JSONのキーと値のペアは頻繁に変更され、カラムからすべてのキー/値のデータを取得するために日次レポートを実行できる必要があります。例えばAWS RedshiftでのJSON文字列のクエリ

:新しい属性が明日追加された場合は、上記のデータと

create table test.json(json varchar(65000)); 
insert into test.json 
select '{"animal_id": 1, "name": "harry", "animal_type": "cat", "age": 2, "location": "oakland"}' union 
select '{"animal_id": 2, "name": "louie","animal_type": "dog", "age": 4}' union 
select '{"animal_id": 3, "gender": "female"}' union 
select '{"animal_id": 4, "size": "large"}' ; 

私は私がそこにいることを知っている属性を取得するには、以下のクエリを書くことができますがしかし、私のレポートクエリは、新しいことをピックアップしません。キーと値のペア。このテーブルでSELECT *タイプのクエリを実行する方法はありますか?

SELECT 
     json_extract_path_text(JSON,'animal_id') animal_id, 
     json_extract_path_text(JSON,'name') name, 
     json_extract_path_text(JSON,'animal_type') animal_type, 
     json_extract_path_text(JSON,'location') location, 
     json_extract_path_text(JSON,'age') age, 
     json_extract_path_text(JSON,'gender') gender, 
     json_extract_path_text(JSON,'size') size 
    FROM test.json 
    ORDER BY animal_id; 

答えて

3

あなたが、プレーンSQLを使用して、現在のスキーマを使ってやりたいことはできません。

SQLクエリを作成するときにアプリケーションロジックを使用できる場合は、SELECTステートメントを動的に作成できます。

オプションのアプリ内

ロード全体JSON、それを解析し、必要な情報をこのように得ます。

オプションB

、データベース内の値を格納すると、JSONオブジェクトを解析し、別のテーブルに発見されたキーを追加します。 Redshiftクラスタを照会するときは、この値のリストをロードし、この情報を使用して適切なSQL文を生成します。

ここでは、これらの回避策をあなたの状況に適用できることを期待しています。

+0

GuiSimにお返事ありがとうございます。これは知っておくと良いことです。オプションBは私が必要とするもののために働くでしょう:) – fez