在AWS Redshift中查询JSON字符串

时间:2016-05-16 14:18:39

标签: json amazon-web-services amazon-redshift

我的AWS Redshift数据库中有一个字段varchar(65000)列,用于存储JSON字符串。 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;

1 个答案:

答案 0 :(得分:3)

使用纯SQL,无法使用当前架构执行所需操作。

如果在创建SQL查询时可以使用应用程序逻辑,则可以动态创建SELECT语句。

选项A

在您的应用中加载整个JSON,解析它并以这种方式获取所需信息。

选项B

在数据库中存储值时,解析JSON对象并将发现的键添加到另一个表中。查询Redshift集群时,请加载此值列表并使用此信息生成相应的SQL语句。

希望这些变通办法适用于您的情况。