如何利用ClickHouse高速汇总查询MySQL数据

如何利用ClickHouse高速汇总查询MySQL数据,第1张

直连到MySQL的功能现在已被添加到ClickHouse中。所以可以直接从ClickHouse查询MySQL表中的数据。 ClickHouse是一个超高性能的海量数据快速查询的分布式实时处理平台,在数据汇总查询方面(如GROUP BY),ClickHouse的查询更快,因此通常情况下在MySQL上进行聚合。 下面是在自己的虚拟环境中做的测试记录。既然是虚拟环境非生产环境,请看参考应用级别,而不是严格的测试。 正确准备和测试大约1000万个数据项。 执行脚本以创建样本数据。这是约500 MB。在MySQL中创建一个表并导入它。 由于似乎字符串数据比数字值更容易汇总,所以内容是数字的,但它们是可变的类型。 然后执行计算 *** 作。 用BLOB类型做GROUPBY似乎很慢。 您可以在ClickHouse上使用MySQL数据,只需在下面的表格中指定它,而不是表名。 启动ClickHouse客户端并进行测试。 如果您在启动时不添加--multiline选项,则不会放置多行查询,因此请继续。SELECT      data1,      COUNT(*) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data1 ┌─data1─┬─COUNT()─┐ │    4│1999013│ │    3│1998988│ │    2│1999993│ │    5│2001553│ │    1│2000453│ └───────┴─────────┘ 5 rows in set. Elapsed: 2.685 sec. Processed 10.00 million rows,40.00 MB(3.72 million rows/s.,14.90 MB/s.)  SELECT      data2,      COUNT(*) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data2 ┌─data2─┬─COUNT()─┐ │6    │  999786│ │8    │1001805│ │9    │1001438│ │3    │1000357│ │2    │1000648│ │4    │  998349│ │5    │  998889│ │10    │  999424│ │1    │1000530│ │7    │  998774│ └───────┴─────────┘ 10 rows in set. Elapsed: 2.692 sec. Processed 10.00 million rows,101.00 MB(3.71 million rows/s.,37.52 MB/s.)  SELECT      data3,      COUNT(*) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data3 -- 结果省略 100000 rows in set. Elapsed: 5.236 sec. Processed 10.00 million rows,138.89 MB(1.91 million rows/s.,26.52 MB/s.)  SELECT      data1,      uniqExact(data5) FROM mysql('localhost','mikage','testdata','mikage','')  GROUP BY data1 ┌─data1─┬─uniqExact(data5)─┐ │    4│          1811674│ │    3│          1812072│ │    2│          1812503│ │    5│          1814106│ │    1│          1813005│ └───────┴──────────────────┘ 5 rows in set. Elapsed: 12.944 sec. Processed 10.00 million rows,198.89 MB(772.55 thousand rows/s.,15.37 MB/s.)  -- ClickHouse有一个函数来粗略计算一个唯一的数字,所以让我们来计算一下。 在MySQL中,相当耗时的查询也可以在很短的时间内处理。 重复统计时,最好将数据复制到ClickHouse一次。 如果您复制它,后续查询将更快。 建议暂时使用StripeLog引擎。 如果您有一个主键,您可能还想要使用MergeTree表。这是在ClickHouse中最常用的引擎。 有必要用ORDER BY指定数据的排序顺序(即使有重复也没有问题)。 我会尝试以前的查询。以下是StripeLog引擎的测试结果。 测试耗时总结如下: 我认为这个错误很大,因为它在VM环境下仅测试了一次 从左边开始为,(1)MySQL中的时间 (2) ClickHouse从MySQL读取和处理数据的时间 (3) 在ClickHouse上处理复制数据的时间。 执行查询 MySQL处理时间 (秒) MySQL->ClickHouse处理时间 (秒) ClickHouse处理时间 (秒) groupby(data1) 3.22 2.685 0.071 groupby(data2) 4.01 2.692 0.177 groupby(data3) 212.82 5.236 0.779 groupby(data1)+uniq(data5) 183.56 12.944 1.725 groupby(data1)+uniq(data5)概算 (无此功能) 6.026 0.285当引用MySQL数据时,如果没有对应于ClickHouse的类型,它似乎是String类型。 没有相应的类型如Decimal类型,所以它也是String类型。 如果你想把它作为一个数值,精度将会改变,但是似乎有必要在MySQL端保持Double类型。 而且,Date和DateTime类型在MySQL和ClickHouse之间的范围也是不同的。 ClickHouse日期类型是1970 - 2038年之间。 如果有超出范围的数据,可能需要使其成为字符串类型,按年份,月份,日期分列,并将其作为数值复制。 参照源码如下:https://github.com/yandex/ClickHouse/blob/9965f5e357f1be610608a51dc7a41f89c2321275/dbms/src/TableFunctions/TableFunctionMySQL.cpp#L37MySQL类型 ClickHouse 类型 参考 tinyint    UInt8 / Int8 smallint    UInt16 / Int16 int / mediumint    UInt32 / Int32 bigint    UInt64 / Int64 float    Float32 double    Float64 dateDate    有可以表达的范围差异 datetime    DateTime有可以表达的范围差异 timestamp    DateTime binaryFixed    String 除上述以外    String

select 商品名称,

sum(数量) as 总量,sum(金额) as 总金额,

sum(case 线号 when '1号线' then 数量 else 0 end) as 1号线数量,

sum(case 线号 when '2号线' then 数量 else 0 end) as 2号线数量,

sum(case 线号 when '3号线' then 数量 else 0 end) as 3号线数量,

sum(case 线号 when '4号线' then 数量 else 0 end) as 4号线数量,

sum(case 线号 when '1号线' then 金额 else 0 end) as 1号线金额,

sum(case 线号 when '2号线' then 金额 else 0 end) as 2号线金额,

sum(case 线号 when '3号线' then 金额 else 0 end) as 3号线金额,

sum(case 线号 when '4号线' then 金额 else 0 end) as 4号线金额

from

(

select 商品名称,线号,sum(数量) as 数量,sum(金额) as 金额

from Table1

group by 商品名称,线号

) T1

group by 商品名称

指定测试结果表中根据 case_id 和 sort 字段进行分组,取同一分组中的执行最小时间作为该条用例的开始执行时间,取同一分组中的执行最大时间作为该条用例的结束执行时间。

因为一个测试集可能有多条相同用例,用 sort 作为区分,case_id 和 sort 两个字段一起可以唯一确定执行的是哪一条用例,因此这里需要指定两个字段。

执行结果如下图所示:

根据 case_id 和 sort 字段进行分组,每个分组中取最大状态值作为用例的最终状态。

因为一条用例可能有多个设备执行,每个设备返回的状态值可能不同,这里取最大值作为整条用例的最终状态值。

执行结果如下图所示:


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/7319777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存