在 AWS Redshift 中查询 JSON 个字符串
Querying JSON Strings in AWS Redshift
我的 AWS Redshift 数据库中有一个字段 varchar(65000)
列,用于存储 JSON 字符串。 JSON key/value 对经常更改,我需要能够 运行 每日报告以从列中检索所有 key/value 数据。
例如:
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"}' ;
使用以上数据,我可以编写以下查询来获取我知道的属性,但是如果明天添加新属性,我的报告查询将不会选择新的 key/value 对。有什么方法可以对这个 table 进行 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 对象并将发现的键添加到另一个 table。查询您的 Redshift 集群时,加载此值列表并使用此信息生成适当的 SQL 语句。
希望这些解决方法可以适用于您的情况。
我的 AWS Redshift 数据库中有一个字段 varchar(65000)
列,用于存储 JSON 字符串。 JSON key/value 对经常更改,我需要能够 运行 每日报告以从列中检索所有 key/value 数据。
例如:
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"}' ;
使用以上数据,我可以编写以下查询来获取我知道的属性,但是如果明天添加新属性,我的报告查询将不会选择新的 key/value 对。有什么方法可以对这个 table 进行 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 对象并将发现的键添加到另一个 table。查询您的 Redshift 集群时,加载此值列表并使用此信息生成适当的 SQL 语句。
希望这些解决方法可以适用于您的情况。