sybn sybn-util 项目说明文档 - 基于java的跨数据库联合查询

关于数组型字段的查询

2020-04-14
sybn

简介

数仓中经常有数组型的字段需求, 比如: 影片类型=[“科幻”,”悬疑”]

在传统关系型数据库中, 这类信息一般用分隔符存储为: 影片类型=科幻,悬疑

以下讨论数仓业务中的处理方法.

查询对比 (使用 sybn jdbc driver 访问以下数据库)

项目 字段类型 存储 普通查询 in查询
mysql 文本 type=”科幻,悬疑” type like ‘科幻’ #不严谨 不支持
mongo 数组 type=[“科幻”,”悬疑”] type = “科幻” type in (“科幻”,”悬疑”)
elastic search 数组 type=[“科幻”,”悬疑”] type = “科幻” type in (“科幻”,”悬疑”)
solr 数组 type=[“科幻”,”悬疑”] type = “科幻” type in (“科幻”,”悬疑”)
hive 文本 type=”科幻,悬疑” ARRAY_CONTAINS(split(type, ‘/’), ‘科幻’) = true 不支持
hive 数组 type=[“科幻”,”悬疑”] ARRAY_CONTAINS(type, ‘科幻’) = true 不支持
presto 文本 type=”科幻,悬疑” CONTAINS(split(type, ‘/’), ‘科幻’) = true 不支持
presto 数组 type=[“科幻”,”悬疑”] CONTAINS(type, ‘科幻’) = true 不支持

聚合

假定数据库只有一条记录 {id:1,type:[“科幻”,”悬疑”]}

  • 此时 mongo 原生支持 unwind
select type, count(*) from mongo_table group by unwind(type) as type

返回: {“科幻”:1,”悬疑”:1}

  • sybn jdbc driver 支持任意数据源模拟 unwind
-- 直接对 json 执行 unwind
select type, count(*) from [{id:1,type:["科幻","悬疑"]}] group by unwind(type) as type

返回: {“科幻”:1,”悬疑”:1}


Similar Posts

Comments

暂不开放评论! 可微信联系