标签计算完成后保存在hive虽然可以查询但是性能非常糟糕。而标签的使用往往是即时的。最常见的场景就是“用户分群”,也称“人群圈选”、“圈人”等等。
分群操作就是根据多个标签组合,产生一个用户集合,供营销、广告等部门使用。而这些操作计算量大,产生结果需要时效性高。
选择方案最重要的依据就是数据量和时效性要求。
时效性 | 数据量 | 分群方案 |
---|---|---|
能接受隔天 | 无所谓 | HIVE宽表 |
即时产生 | 千万以下,标签百级 | OLAP宽表(Elasticsearch,Clickhouse,Tidb…) |
即时产生 | 亿级,标签千级 | Bitmap方式(Clickhouse,doris) |
适合的才是最好的,此任务选择用Clickhouse实现Bitmap方式存储。
把hive中标签宽表数据,写入至Clickhouse的宽表。
读取hive的宽表,在clickhouse中建立对应的宽表。
因为并不是hive表到hive表,所以并不能够直接用insert select 解决。
先通过把数据查询成为Dataframe ,再通过行动算子写入至Clickhouse的宽表。
搭建模块 – task-export-ck
在poml文件中添加配置
<dependencies>
<dependency>
<groupId>com.hzy.userprofilegroupId>
<artifactId>task-commonartifactId>
<version>1.0-SNAPSHOTversion>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>net.alchim31.mavengroupId>
<artifactId>scala-maven-pluginartifactId>
<version>3.4.6version>
<executions>
<execution>
<goals>
<goal>compilegoal>
<goal>testCompilegoal>
goals>
execution>
executions>
plugin>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-assembly-pluginartifactId>
<version>3.0.0version>
<configuration>