json - 在 AWS Redshift 中查询 JSON 字符串

标签 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;

最佳答案

使用当前模式和普通 SQL 不可能做你想做的事。

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

选项A

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

选项B

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

希望这些解决方法可以适用于您的情况。

关于json - 在 AWS Redshift 中查询 JSON 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37256144/

相关文章:

javascript - 为什么 JSON 是 JavaScript 的子集?

amazon-web-services - AWS CloudFormation 模板在导入/导出值之间具有循环依赖关系

mysql - 将类似 sql 查询的结果按百分位数分组 : In Redshift/postgresql

linux - Mongo 报告 AWS 上空间不足

amazon-redshift - 实现 Redshift 的高可用性?

sql - 将已排序表中的所有数据插入到另一个表中

json - 使用 restkit 映射到复杂对象

ios - 如何使用 NSURLConnection 委托(delegate)方法处理多个请求?

wcf - 如何在没有 ASP.NET 的情况下从 json 客户端调用 .NET AuthenticationService

node.js - ffprobe 无法读取 AWS 上 Node JS createWriteStream() 生成的文件