巧妙利用表函数将MySQL数据导入到ClickHouse

如果在已有的MySql中已经有了表和数据,那么怎么能快速将其导入到ClickHouse中呢?

其实可以利用一下建表语句方便快速的来生成ClickHouse的表和数据

CREATE TABLE ${表名} ENGINE = MergeTree ORDER BY ${主键名} AS 
SELECT * FROM mysql('${MySql的IP:PORT}', 'MySql的数据库名', 'MySql的表名', 'MySql的用户名', 'MySql的密码');

🔔重要: 1: MySQL的必需有主键且不能为空

2: ORDER BY 后的字段大小写要和MySQL的大小写一样

3: 需要注意的是建表的时候需要注意两边的字段类型,特别是MySql的Decimal的类型,ClickHouse建表需要注意更改为 Float64 类型。

MySql里有Decimal列的解决方案

注意ClickHouse创建的表映射,经过操作发现对于MySQL的Deciaml类型的不能映射到ClickHouse中,ClickHouse映射的类型是String类型了.下面告诉你一种快捷方法:

1: 创建Mysql到CLickhouse的映射表并插入1条数据:

CREATE TABLE bfs_fsn ENGINE = MergeTree ORDER BY id AS 
SELECT * FROM mysql('10.42.134.136:4000', 'dw', 'bfs_fsn', 'root', 'xyz') 
limit 0;

📝注意: 最后的 limit 0

2: 查询创建的表结构复制下来

show create table bfs_fsn;

#输出:
CREATE TABLE default.bfs_fsn
(
    `id` UInt64,
    `fsn_filename` String,
    `record_num` UInt32,
    `fsn_datetime` DateTime,
    `tf_flag` UInt32,
    `error_code` String,
    `money_flag` String,
    `ver` UInt32,
    `valuta` UInt32,
    `charnum` String,
    `sno` String,
    `machinesno` String,
    `reserve1` UInt32,
    `machinesno_length` UInt32,
    `machine_length` UInt32,
    `machine_type` UInt32,
    `money_type` UInt32,
    `reserve2` UInt32,
    `img_str` String,
    `accno` String,
    `create_time` DateTime
)
ENGINE = MergeTree
ORDER BY id
SETTINGS index_granularity = 8192

3: 将第2步输出的表结构里的所有在MySql里是 Decimal 的类型的列圈闭进行变更成 ClickHouse里的Float64 类型

4: 从MySql插入数据

insert into bfs_fsn SELECT * FROM mysql('10.42.134.136:4000', 'dw', 'bfs_fsn', 'root', 'xyz');

字段映射表

ClickHouseMySQLComment
UInt8, UInt16, UInt32, UInt64TINYINT UNSIGNED, SMALLINT UNSIGNED, INT UNSIGNED, BIGINT UNSIGNED
Int8, Int16, Int32, Int64TINYINT SIGNED, SMALLINT SIGNED, INT SIGNED, BIGINT SIGNED
Float32, Float64FLOAT, DOUBLESupports inf, -inf, nan, recommended NOT to use by ClickHouse!
StringBLOB, TEXT, VARCHAR, VARBINARYNo encoding. Recommended to use UTF-8. In fact behaves like a BLOB.
FixedString(n)CHAR, BINARY\0 padded. Less functions available than String, in fact it behaves like BINARY.
DateDATEUNIX epoch date up to 2038.
DateTimeDATETIME, TIMESTAMPUNIX epoch timestamp up to 2038.
EnumENUMSimilar to MySQL ENUM. Behaves like Int8/16.
Array(type)n.a.Array of type. Closest equivalent in MySQL is JSON? Not well supported.
Tuple()n.a.
Nested()n.a.Closest equivalent in MySQL is JSON?
AggregateFunction()n.a.
Setn.a.
Expressionn.a.

<<<<<<<<<<<< [完] >>>>>>>>>>>>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱游泳的老白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值