我们计划很快开始使用Redshift,我们的一个字段(列)是一个JSON值.它是一个扁平的JSON(即根据定义没有嵌套级别),我们必须使用JSON的原因是每个记录具有不同数量的不同键值元素,可能从0到10或更多(所以我不能使用每对或其他领域).
例如,这样的字段可以是{"key1":"value1","key2":"value2",...,"key5":"value5"}
我想查询并计算具有某些特定键的所有记录,并可能按值对它们进行分组.在上面的示例中,我想要"select count(*),其中字段具有键'key1'组的值".
Redshift是否支持通过JSON中的值进行查询?如何实现这一目标?
Mas*_*aki 16
是的,Amazon Redshift支持使用"JSON_EXTRACT_PATH_TEXT"函数解析列中的JSON字符串,即使在where子句或group by子句中也可以调用此函数.最好看下面的例子来了解它是如何工作的.
db=> create table json_test (id int primary key, json text);
db=> insert into json_test values (1, '{"key1":1, "key2":"a"}');
db=> insert into json_test values (2, '{"key1":2, "key2":"b"}');
db=> insert into json_test values (3, '{"key1":3, "key2":"a"}');
db=> insert into json_test values (4, '{"key3":0}');
db=> select * from json_test order by id;
id | json
----+------------------------
1 | {"key1":1, "key2":"a"}
2 | {"key1":2, "key2":"b"}
3 | {"key1":3, "key2":"a"}
4 | {"key3":0}
(4 rows)
-- In select list
db=> select json_extract_path_text(json, 'key2') as key2 from json_test where id = 1;
key2
------
a
(1 row)
-- Where clause
db=> select * from json_test where json_extract_path_text(json, 'key1') = 1;
id | json
----+------------------------
1 | {"key1":1, "key2":"a"}
(1 row)
-- Group by
db=> select min(id) as min_id from json_test group by json_extract_path_text(json, 'key2') order by min_id;
min_id
--------
1
2
4
(3 rows)
Run Code Online (Sandbox Code Playgroud)
有关"JSON_EXTRACT_PATH_TEXT"函数的详细信息,请参阅Redshift Dev Guide - JSON_EXTRACT_PATH_TEXT函数.您还可以在Redshift Dev Guide - JSON Functions中查看其他JSON函数.
| 归档时间: |
|
| 查看次数: |
19110 次 |
| 最近记录: |