数仓的两种轻量级数据交换格式:json与jsonb
内容提要
本文介绍了JSON和JSONB的概念和区别,以及DWS中JSON和JSONB的使用方法和功能。JSON是一种轻量级的数据交换格式,而JSONB是对JSON数据进行解析和存储后的格式。JSON和JSONB的存储方式和性能有所不同,JSON在插入时性能较好,而JSONB在查询时性能较好。文章还介绍了JSON和JSONB的输入格式和常用函数及操作符。总结了DWS中JSON和JSONB的功能和优缺点,并提出了后续的演进路线。
延伸解读
JSON与JSONB的选型考量
JSON保留原始输入格式,插入性能好,适合写入频繁且对查询性能要求不高的场景;JSONB在写入时进行解析和二进制存储,查询性能更优,且支持索引。选择时需权衡写入和查询负载,若业务需要频繁查询JSON内部字段,JSONB是更合适的选择。
JSONB的排序与比较规则
JSONB会丢弃空格等无关细节,并对键值重新排序。其比较规则为:先比较类型(object > array > bool > num > str > null),同类型再比较内容。了解这些规则有助于正确使用JSONB的排序和比较操作,避免因默认排序导致预期外的结果。
DWS中JSON列存的优缺点
DWS支持列存JSON,其优点是天然支持Schema Evolution,上游字段变更无需修改表结构,降低了维护成本。缺点是查询时需要完整解析JSON,若JSON复杂且仅需少数字段,会造成大量IO和计算浪费,导致性能退化。
JSON性能演进方向与权衡
为提升查询性能,后续可能将JSON拍平成宽表存储,以提高写入和查询效率。但这种方式灵活性差,上游格式变更需调整ETL作业,增加运维负担,且异常数据可能导致列数膨胀。当前Hologres采用混合方案,对同质化不强的键值单独存储。
Q&A
JSON和JSONB的主要区别是什么?
JSON保留输入的空格和顺序,而JSONB则删除无关细节并对键值进行排序,查询性能更好。
在DWS中如何使用JSON和JSONB?
DWS支持创建列存JSON和JSONB,并提供多种函数和操作符用于操作这些数据类型。
JSON在插入和查询时的性能表现如何?
JSON在插入时性能较好,但查询时需要完整解析,性能较差。
JSONB的优点和缺点是什么?
JSONB的优点是查询性能好,支持索引;缺点是插入性能稍差,且存储时丢失空格等细节。
DWS中JSON的Schema Evoluation支持是什么?
JSON支持Schema Evoluation,允许在不修改表结构的情况下增删字段,降低维护成本。
后续JSON和JSONB的演进路线是什么?
后续演进将提升JSON的存储方式和查询性能,但可能增加运维和开发负担。