当前位置:   article > 正文

Doris (HOLAP),实时数据仓库的王者。_doris优缺点

doris优缺点

前文:

               Uniq 模型拳打KUDU、HUDI,Aggregate 模型脚踢Kylin、ClickHouse,Duplicate 模型跟Hive 势不两立。Doris+Flink将会是实时数据仓库的重要基石。

目录

一、架构及优缺点

二、建模

三、查询

 3.1 常用命令

四、实时数据仓库

五、真实需求

六、相关心得

1、Agg模型的缺点:

2、优化

3、导入BUG

4、应用场景心得

5、性能

6、相关推荐


一、架构及优缺点

优缺点明显,使用一个新的技术,就得知道他的局限性,没错,指标列排序过滤慢得离谱

二、建模

必须清楚需求和模型的关系!划清维度表(筛选条件/获取属性)和事实表(出指标)。

三、查询

 3.1 常用命令

  1. -- 常用命令
  2. -- 性能调优
  3. -- 设置比并发数 每个 BE 节点上执行实例的个数
  4. set parallel_fragment_exec_instance_num = 5;
  5. -- 数据包扫描行数
  6. set batch_size = 4096;
  7. -- 设置为20G,只针对当前session 有效,默认值为2G
  8. set exec_mem_limit=21474836480;
  9. -- 开启缓存
  10. set enable_sql_cache = true;
  11. set enable_partition_cache=true;
  12. -- 聚合节点数,针对场景适用
  13. set parallel_exchange_instance_num = -1;
  14. -- 查询资源
  15. -- 查询BE
  16. SHOW BACKENDS;
  17. -- 查询BROKER
  18. SHOW BROKER;
  19. -- 查询资源
  20. SHOW RESOURCES;
  21. -- 查询导入
  22. show load;
  23. -- 查询构建物化视图
  24. SHOW ALTER TABLE ROLLUP FROM dw;
  25. -- 取消构建物化视图
  26. cancel alter table rollup from dw.dwa_tg_sku_1d_detail_w (134548);
  27. -- 查询分区
  28. show partitions from dwa_tg_sku_1d_detail_w;
  29. -- 查询数据分布
  30. show data from dw.dwa_tg_sku_1d_detail_w;
  31. -- 查询物化视图
  32. desc dwa_tg_sku_1d_detail_w all;
  33. -- 查询计划
  34. show query profile "/";
  35. -- 查询变量
  36. show variables like '%exec_mem_limit%';
  37. -- 构建bitmap索引
  38. CREATE INDEX zone_index ON xxx(zone) USING BITMAP COMMENT'balabala';
  39. -- 构建
  40. create materialized view products_summary as
  41. -- 修改配置
  42. ALTER TABLE dw.dwa_tg_sku_1d_detail_w_detail set ("colocate_with" = "products_id");
  43. -- 建表及导入
  44. CREATE TABLE dw.xxx(
  45. `dctime` date,
  46. `domain` int,
  47. `products_id` bigint,
  48. `sku` varchar(500)
  49. `record_cnt` int )
  50. ENGINE=olap
  51. DUPLICATE KEY(
  52. dctime,
  53. domain,
  54. products_id
  55. )
  56. PARTITION BY RANGE (`dctime`) (
  57. PARTITION p20210401 VALUES LESS THAN ("20210402"),
  58. PARTITION p20210401 VALUES LESS THAN ("20210403")
  59. )
  60. DISTRIBUTED BY HASH (products_id)
  61. PROPERTIES (
  62. "replication_num" = "2",
  63. "dynamic_partition.enable" = "true",
  64. "dynamic_partition.time_unit" = "DAY",
  65. "dynamic_partition.end" = "3",
  66. "dynamic_partition.prefix" = "p",
  67. "dynamic_partition.buckets" = "6",
  68. "colocate_with" = "products_id"
  69. );
  70. LOAD LABEL dw.xxyyzz
  71. (
  72. DATA FROM TABLE xx_hive_ex
  73. INTO TABLE xx
  74. SET
  75. (
  76. dctime=cast(dctime as date)
  77. )
  78. WHERE(
  79. dctime BETWEEN '2021-04-21' AND '2021-04-30'
  80. )
  81. )
  82. WITH RESOURCE 'my_spark'
  83. (
  84. "spark.executor.cores" = "4",
  85. "spark.dynamicAllocation.maxExecutors" = "4",
  86. "spark.executor.memory" = "16g",
  87. "spark.yarn.executor.memoryOverhead" = "32368",
  88. "spark.network.timeout" = "1200000"
  89. )
  90. PROPERTIES
  91. (
  92. "timeout" = "28800"
  93. ,"exec_mem_limit"="64424509440"
  94. );
  95. -- 构建rollup
  96. create materialized view r1 as
  97. SELECT dctime
  98. ,domain
  99. ,products_id
  100. ,SUM(pv) pv
  101. ,HLL_UNION(hll_hash(A)) --HLL_UNION
  102. ,bitmap_union(to_bitmap(B)) --BITMAP_UNION
  103. FROM xxx
  104. GROUP BY dctime
  105. ,domain
  106. ,products_id
  107. 查询时使用 APPROX_COUNT_DISTINCT(A) / HLL_UNION_AGG(HLL_HASH(A)) / BITMAP_UNION_COUNT(TO_BITMAP(B))

记得把SQL几个参数调优下!SQL慢去看explain+webui!

 

四、实时数据仓库

敲重点,实时数据仓库可以把聚合逻辑丢到OLAP系统中处理了,我们要做的只需要拼接好明细,就可以复用啦!

五、真实需求

六、相关心得

1、Agg模型的缺点:

Agg模型应该是使用最多的模型,但有个致命的缺陷,即使完全命中Rollup也会把SQL逻辑执行一遍(在Rollup表查询),目的是为了将历史与未compaction的数据合并,这就导致了只要是group by的数据集不小的话,速度就很慢。

2、优化

HLL节省bitmap 40%计算时间,且误差在1%

用Rollup是真香,记得查询前加些查询参数。

3、BUG

3.1   0.14 版本Bitmap在 SparkLoad 那 null 会被转为 0,导致订单uv全是错的

3.2   明细层建完rollup 不能 SparkLoad

3.3   s3的 broker load 7000万数据40分钟太慢

3.4   insert into 后的数据不能建rollup

4、应用场景心得

不要想着一个聚合模型解决所有查询,但是需求离谱到所有维度都想要(六七千万个组合,接近明细数据),聚合不起来。。。目前没有办法,用Kylin吧?

5、性能

BITMAP/HLL计算贼慢,SUM指标还好,SQL的查询工作量在那,多一个指标,工作量越多,加一倍机器,速度提升一倍(MPP原因),3台30秒不够,那就扩到9台10秒,充钱就能解决。

6、相关推荐

https://blog.csdn.net/wypblog/article/details/103590812

https://blog.csdn.net/CZ_yjsy_data/article/details/114292958

7、调优

doris非常适合于星型模型,不需要把所有筛选条件冗余到事实表,只要事实表和维度表通过Broadcast/Bucket Shuffle Join/Colocation Join时,就join两边的表,就像单表一样处理,也可以命中rollup。

  1. -- 因为走的时Bucket Shuffle Join,所以可以sj_id就像在事实表中处理,包括t1的rollup为 (dctime,domain,products_id)也可命中
  2. SELECT t1.dctime
  3. ,t1.domain
  4. ,t1.products_id
  5. ,t2.sj_id
  6. ,SUM(A) pv
  7. ,APPROX_COUNT_DISTINCT(B)
  8. ,BITMAP_UNION_COUNT(TO_BITMAP(C))
  9. FROM xxx t1
  10. join yyy t2
  11. on t1.`domain` = t2.`domain` and t1.products_id = t2.products_id
  12. WHERE t1.dctime BETWEEN '2021-04-07' AND '2021-04-07'
  13. and t2.domain =1
  14. GROUP BY t1.dctime
  15. ,t1.domain
  16. ,t1.products_id
  17. ,t2.sj_id
  18. order by pv desc
  19. LIMIT 400

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/372977
推荐阅读
相关标签
  

闽ICP备14008679号