无论才能、知识多么卓著,如果缺乏热情,则无异纸上画饼充饥,无补于事。

新手求教,这种数据适合ES处理么?

匿名 | 发布于2019年10月11日 | 阅读数:546

比如,我有10个csv文件,有着不同的字段结构,通过一个UID字段将他们关联起来,类似下面这样
test1.csv结构
UID,FieldA,FieldB,FieldC
1,AAA,BBB,CCC
 
test2.csv结构
UID,FieldD,FieldE,FieldF
1,DDD,EEE,FFF
 
不知道这种数据适合ELK处理么?现在的想法是把10个csv导入到10个索引,因为查询涉及到通过UID关联查询,ES方便做到这种关联查询么?也不知道这种做法是否正确。还是说要将10个csv的字段合并成1个索引来存?
已邀请:

doom

赞同来自: glongzh

关系型数据库转到ES,大多会涉及多表查询的问题,想做到像sql那样的联合查询,一般4种方法:
1. 多个索引库,java客户端实现查询联合,使用于数据量很小,多次去请求,客户端整合返回结果。这个局限性很大。
es没有索引库之间的关联查询,下面都是一个表,来实现联合查询;
2.宽表,所有层数据都展开;查询方便,但是维护麻烦,删除和修改有诸多不变;而且占用空间大。
3.嵌套;1对多,多对多都可以实现;但是嵌套层数不要太深;更新数据时,是整个文档都要更新索引,更新不能太频繁;关联就靠嵌套关系,没有什么关联开销
4.父子文档:父与子文档分开,join字段的关系连接,这个最像sql;关联查询也有巨大的性能开销;
 
具体到你的10的表:1. 能合并的合并,像id+name这类的小表合并到大表里面;
                              2.1对多,多对多,很少修改的做好使用嵌套,像订单与订单项这样的表,;
                              3.表关系进一步分析,没什么关联的拆分出去;
不是说10个就建10个索引,或者合起来建1个;具体还是需要看表与表的关系;做不同区分;
 

God_lockin

赞同来自:

uid 除了类似主键的作用还有啥其他作用吗?可以考虑把同一个uid的数据combine在一起,就像打宽表一样

core_wzw - 某AILab搜索技术负责人

赞同来自:

查询时用UID进行关联查询的话,必然要在一个索引里,不同索引下的数据关联不了,ES也没提供对应的DSL。
6.0以前有type存在,还可以让你同一索引区分type来存这10张表,同时10个type下共享一个UID字段,这样子也间接不同表下同一个UID的数据combine起来。但很明显这么操作没有带来其它好处啊,所以6.0后type没了。
正确的做法就是数据入库前你先combine同一个UID的多字段数据,然后丢到一个索引里。

core_wzw - 某AILab搜索技术负责人

赞同来自:

logstash里你总会对日志进行预处理的吧,那对数据做个整合问题不大,具体操作网上查查吧。
PS:我上面提到的同index不同type共享一个field说错了,field还是独立的,只是强制了field要同mapping。有点误导人了。

要回复问题请先登录注册