Redshift JSON 性能

Posted

技术标签:

【中文标题】Redshift JSON 性能【英文标题】:Redshift JSON Performance 【发布时间】:2015-05-01 18:22:05 【问题描述】:

Redshift 提供了一组 JSON 函数,允许执行 JSON 操作,但有没有人测试过 JSON 与普通表列相比的性能?我想使用 Redshift 的主要原因是它的列性质,因为我想对存储在 Redshift 中的分析数据执行复杂的聚合。

根据 Redshift 文档中的 JSON 函数页面,Redshift 似乎没有以列格式存储 JSON 数据类型的数据。 (link) 但是我知道一些基于 Redshift 的分析服务以 JSON 格式存储数据。有人在 Redshift 中对 JSON 格式进行基准测试吗?即使它失去了 Redshift 的主要好处,它真的值得使用吗?

【问题讨论】:

JSON 列的性能不如打开 SORT 键的列。 JSON 解析也有一些开销,但如果您的数据不是很大,它仍然可以很好。 @Guy,似乎 Redshift JSON 支持类似于 Postgresql 的 JSON 支持。由于 JSON 数据存储为文本,因此数据应该占用更多空间,并且压缩不会很有效。它还解析文本并在查询时提取所需的字段,这与 Postgresql 所做的相同,因此除非数据太稀疏,否则使用 JSON 数据类型没有意义。 你是对的,但这是简单的问题。如果您没有那么多数据并且不想从 JSON 中提取值,则可以使用这些函数。它会工作并且会很好地工作。但如果您有大量数据,那么提取这些字段并使用 SORT 和 ANALYZE 等 Redshift 高级功能以获得更好的性能当然是值得的。 我不确定 redshift 如何在后台处理 json,但您可以实际上将索引添加到 postgresql json 列(与 mysql 相同,即使没有人问哈哈) 在此处查看有关 jsonb 索引的文档:postgresql.org/docs/9.6/static/datatype-json.html 【参考方案1】:

一个数据点:

集群:24xdc1.large 表:2.4B 行

select count(*) from table where json_extract_path_text(what_extra_json, 'is_logged_in') is not null
   count
------------
 1364239102

24.7 秒

select count(*) from table where plan is not null
   count
------------
 1370337529

6.1 秒

【讨论】:

以上是关于Redshift JSON 性能的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 数据从 dynamoDB 复制到 redshift

从 Redshift 表中获取 JSON 数据

Spark Streaming Redshift 性能问题

Redshift:从 s3 复制命令 Json 数据

在 Redshift 中复制 JSON 列

如何在redshift上取消嵌套json字符串数组[重复]