列式数据库~clickhouse(2)

一 简介:clickhouse与mysql的交互
二 前置:来聊聊如何将mysql数据导入clickhouse中
三 必要了解:
  1通过查询导入数据的方式是不用创建表结构的,表结构会自动生成
  2 ClickHouse 本身没有精度单位,遇到不识别的类型会转换为String类型.所以拥有float ,decimal 和double的mysql表要进行程序转换(这里需要验证下,存疑)
  3 ClickHouse 对于引号的编写要注意下
  4 ClickHouse日期类型是1970 - 2038年之间,也要注意
  5 ClickHouse是支持分区表的

四 导入方式
  1 通过查询数据导入
  CREATE TABLE article_clientuser_sum
  ENGINE = MergeTree ORDER BY id AS
  SELECT *
  FROM mysql('host:port', 'db', 'article_clientuser_sum', 'user', 'password')
 2 通过程序导入
 3 通过csv导入 
      1 mysql将数据导出到csv
    SELECT DATE(created_on),order_dish_id, dish_id, dish_name,dining_order_id, discount,member_discount, normal_discount INTO OUTFILE '/var/lib/mysql-files/pdish_test.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED    BY '\n' FROM pos_order_dish;
     2 csv导入到clickhouse
     cat rv_ol_fans.csv | clickhouse-client --query=INSERT INTO table FORMAT CSV

    思考 因为都是千万级别的大表,所以不推荐csv导入,太慢了,我们测试的千万级别的表大概几分钟,可以接受


五 总结:
   mysql和clickhouse的不同
   1 clickhouse的压缩比远远优于mysql,尤其是对于千万级别的表
   2 clickhouse是列存储,mysql是行存储
   3 clickhouse最多支持插入和查询,不支持事物,适用于olap业务mysql支持事物和增删查改,适用于oltp业务
   4 clickhouse是多线程查询,能利用多核心cpu,mysql是单线程查询,只能利用单核心CPU,前者比后者更加适合于大表的后台统计
   5 clickhouse极大多数情况下都是顺序IO,mysql则不一定
  mysql和clickhouse对应列
    MySQL类型 ClickHouse 类型

    tinyint          UInt8 / Int8

    smallint       UInt16 / Int16

     int              UInt32   
    bigint          UInt64 / Int64
    float            Float32
    double       Float64
    datetime    DateTime有可以表达的范围差异
    timestamp DateTime
    char           Strimg
   varchar       String
   除上述以外 String

六 附录
  1 http://www.clickhouse.com.cn/ clickhouse中文社区
  2 DBeaver 可视化工具
  3 https://tech.jikelab.com/labs-docs/zh-cn/docs/intro/quickstart.html JDP集群平台

猜你喜欢

转载自www.cnblogs.com/danhuangpai/p/9419686.html