ToB企服应用市场:ToB评测及商务社交产业平台

标题: 大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scal [打印本页]

作者: 光之使者    时间: 2024-10-24 02:12
标题: 大数据-163 Apache Kylin 全量增量Cube的构建 手动触发合并 JDBC 操作 Scal
点一下关注吧!!!非常感谢!!连续更新!!!

目前已经更新到了:


章节内容

上节我们完成了如下的内容:


基本流程

在 Apache Kylin 中,手动触发 Segment 合并的步调如下:

须要注意的是,手动合并的操作大概会占用大量资源,因此在高负载时须要谨慎操作,并在合适的时间段执行合并任务。
手动触发合并Segment

Kylin提供了一种简单的机制用于控制Cube中Segment的数量:合并Segment,在WebGUI中选中须要进行Segments合并的Cube。
单击Action => Merge

我们刚才分阶段进行了任务的Build操作,
01-01、01-02、01-03、01-04 的任务,我们可以使用 Merge 来进行合并:

选中须要合并的Segment,可以同时合并多个Segment,但这些Segment必须是连续的,单击提交体系会提交一个范例为 MERGE 的构建任务,这里可以选择时间阶段,我选择的是 01-03到01-04:

提交任务,可以看到是一个 Merge任务,看名字:【MERGE】,等待合并完毕:

合并完毕的效果如下图:

注意事项


删除Segment

使用WebUI删除Cube的Segment,
这里选择 Disable 就可以删除Segment了:

Disable之后,可以看到下面的:DeleteSegment操作,就可以删除指定的Segment了:

自动合并

手动维护Segment很繁琐,人工本钱高,Kylin中是可以支持自动合并Segment。
在Cube Designer的 Refresh Settings的页面中有:

Refresh Settings的页面:

两个设置项可以用来资助管理Segment碎片,这两项设置搭配使用这两项设置可以大大减少对Segment进行管理的麻烦。
Auto Merge Thresholds


合并战略


案例1 理解Kylin自动合并战略


自动合并的战略为:

案例2 设置自动合并4天的Segment

选中Model,选择Edit进行编辑:

直接到Refresh Setting选项卡,将选项修改为,4天:

后续将自动进行Segment的构建。
设置保留的Segment

自动合并是将多个Segment合并为一个Segment,以到达清理碎片的目的,保留Segment则是及时清理不再使用的Segment。
在很多场景中,只会对已往一段时间内的数据进行查询,比方:

可以将Retention Threshold设置为365,每当有新的Segment状态变为READY的时间,体系会查抄每一个Segment。如果它的结束时间隔断最晚的一个Segment的结束时间已经大于即是RetentionThreshold,那么这个Segment将视为无需保留,体系会自动从Cube中删除这个Segment。
保留战略示意图如下所示:

使用JDBC毗连操作Kylin

简单介绍


业务需求

通过JDBC的方式,查询按照日期、区域、产品维度统计订单总额/总数量效果
开发步调

添加依赖

  1. <dependency>
  2.   <groupId>org.apache.kylin</groupId>
  3.   <artifactId>kylin-jdbc</artifactId>
  4.   <version>3.1.1</version>
  5. </dependency>
复制代码
实现规划


编写代码

我这里用Scala实现了,Java也差不多
  1. package icu.wzk.kylin
  2. import java.sql.DriverManager
  3. object KylinJdbcTest {
  4.   def main(args: Array[String]): Unit = {
  5.     // 创建连接对象
  6.     val connection = DriverManager.getConnection("jdbc:kylin://h122.wzk.icu:7070/wzk_test_kylin", "ADMIN", "KYLIN")
  7.     // 创建Statement
  8.     val statement = connection.createStatement();
  9.     // 构建SQL语句
  10.     var sql =
  11.       """
  12.         |select
  13.         | t1.dt,
  14.         | t2.regionid,
  15.         | t2.regionname,
  16.         | t3.productid,
  17.         | t3.productname,
  18.         | sum(t1.price) as total_money,
  19.         | sum(t1.amount) as total_amount
  20.         |from
  21.         | dw_sales1 t1
  22.         |inner join dim_region t2
  23.         |on t1.regionid = t2.regionid
  24.         |inner join dim_product t3
  25.         |on t1.productid = t3.productid
  26.         |group by
  27.         | t1.dt,
  28.         | t2.regionid,
  29.         | t2.regionname,
  30.         | t3.productid,
  31.         | t3.productname
  32.         |order by
  33.         | t1.dt,
  34.         | t2.regionname,
  35.         | t3.productname
  36.         |""".stripMargin
  37.     val resultSet = statement.executeQuery(sql)
  38.     println("dt region product_name total_money total_amount")
  39.     while (resultSet.next()) {
  40.       // 获取时间
  41.       val dt = resultSet.getString("dt")
  42.       // 获取区域名称
  43.       val regionName = resultSet.getString("regionname")
  44.       // 获取产品名称
  45.       val productName = resultSet.getString("productname")
  46.       // 获取累计金额
  47.       val totalMoney = resultSet.getDouble("total_money")
  48.       // 获取累计数量
  49.       val totalAmount = resultSet.getDouble("total_amount")
  50.       println(f"$dt $regionName $productName $totalMoney $totalAmount")
  51.     }
  52.     connection.close()
  53.   }
  54. }
复制代码
测试运行

我们运行代码,可以看到如下的运行效果:


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4