【ClickHouse】从Mysql迁移到ClickHouse大全

news2024/11/25 22:52:28

从关系型的数据库(Mysql)升级到列式管理的联机分析型数据库(ClickHouse),这不亚于是小米加步枪升级为加特林机关枪的性能提升了,查询能力等确实是大大的提升了,这出现了一个问题我们之前存储在Mysql里的历史数据怎么往ClickHouse里面迁移呢,总不能不要吧那对业务来说他们可是不关心你底层数据怎么存储的,他们只希望数据准确,齐全,那下面我们就来说说都有哪些方式可以实现补全缺失的历史数据
环境:ClickHouse:21.8.12.1,Python: 3.6.8

1、Mysql Engine

      ClickHouse本身支持通过选择Engine 来远程连接Mysql来访问Mysql的数据

1.1 语法

CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
    name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
    ...
) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])
SETTINGS
    [ connection_pool_size=16, ]
    [ connection_max_tries=3, ]
    [ connection_wait_timeout=5, ]
    [ connection_auto_close=true, ]
    [ connect_timeout=10, ]
    [ read_write_timeout=300 ]
;

1.2 参数详解

host:port— MySQL 服务器地址。

database— 远程数据库名称。

table— 远程表名。

user— MySQL 用户。

password- 用户密码。

replace_query— 将INSERT INTO查询转换为REPLACE INTO. 如果replace_query=1,则查询被替换。

on_duplicate_clause—ON DUPLICATE KEY on_duplicate_clause添加到INSERT查询的表达式。

示例:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1,哪里on_duplicate_clause是UPDATE c2 = c2 + 1。请参阅MySQL 文档以查找on_duplicate_clause可以与该ON DUPLICATE KEY子句一起使用的内容。

要指定on_duplicate_clause您需要传递0给replace_query参数。如果同时传递replace_query = 1和on_duplicate_clause,ClickHouse 会生成异常。

WHERE诸如此类的简单子句=, !=, >, >=, <, <=在 MySQL 服务器上执行。

1.3 示列

1.3.1 创建Mysql Engine 表

CREATE TABLE db_adp.mysql_table
(
    `float_nullable` Nullable(Float32),
    `int_id` Int32
)
ENGINE = MySQL('localhost:3306', 'db_adp', 'mysql_table', 'reader', '123456')

1.3.2 写入历史数据到结果表中

INSERT INTO db_adp.sink_table
 SELECT 
`float_nullable`,
`int_id`,
FROM
db_adp.mysql_table

1.4 补充

更多有关于Mysql Engine 可参考官网:MySQL | ClickHouse Docs

 

2、Mysql Function 

     Mysql Function 的功能跟Engine 选择 Mysql 不太一样,ClickHouse 把桥接的方式封装成了一个Function方式,不需要再单独建立一张外表就能像使用Sum(),Max() 等函数一样直接使用

2.1、语法

mysql('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])

2.2、 参数详解

host:port— MySQL 服务器地址。

database— 远程数据库名称。

table— 远程表名。

user— MySQL 用户。

password- 用户密码。

replace_query— 将INSERT INTO查询转换为REPLACE INTO. 可能的值:

0- 查询执行为INSERT INTO.
1- 查询执行为REPLACE INTO.
on_duplicate_clause—ON DUPLICATE KEY on_duplicate_clause添加到INSERT查询的表达式。只能指定 with replace_query = 0(如果同时传递replace_query = 1and on_duplicate_clause,ClickHouse 会产生异常)。

例子:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1;

on_duplicate_clause这是UPDATE c2 = c2 + 1。请参阅 MySQL 文档以查找on_duplicate_clause可以与该ON DUPLICATE KEY子句一起使用的内容。

当前在 MySQL 服务器上执行的简单WHERE子句,例如。=, !=, >, >=, <, <=

其余条件和LIMIT采样约束只有在对 MySQL 的查询完成后才会在 ClickHouse 中执行。

支持必须由 列出的多个副本|。例如:

SELECT name FROM mysql(`mysql{1|2|3}:3306`, 'mysql_database', 'mysql_table', 'user', 'password');

或者

SELECT name FROM mysql(`mysql1:3306|mysql2:3306|mysql3:3306`, 'mysql_database', 'mysql_table', 'user', 'password');


2.3 示例

2.3.1 写入结果表中

INSERT INTO db_adp.sink_table
 SELECT 
`float_nullable`,
`int_id`,
FROM
mysql('localhost:3306', 'db_adp', 'mysql_table', 'reader', '123456')

2.4、补充

 更多有关于Mysql Function 可参考官网:mysql | ClickHouse Docs


3、Altinity/clickhouse-mysql-data-reader


      该工具是Altinity 开源的一个可以通过增量/全量将Mysql 的数据导入到ClickHouse 中的实用python工具,下面我们来实践一下(python 版本至少3.4+)

3.1 PyPi安装

3.1.1 Mysql 存储库

sudo yum install -y https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install -y epel-release

3.1.2 ClickHouse-Client

curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script.rpm.sh | sudo bash
sudo yum install -y clickhouse-client

3.1.3 依赖包

sudo yum install -y mysql-community-devel
sudo yum install -y mariadb-devel
sudo yum install -y gcc
sudo yum install -y python34-devel python34-pip

3.1.4 初始化Data Reader

sudo pip3 install clickhouse-mysql

3.1.5 检验是否安装成功

[user@localhost ~]$ which clickhouse-mysql
/usr/bin/clickhouse-mysql
/usr/bin/clickhouse-mysql --install

 3.1.6 设置Mysql 账号权限

CREATE USER 'reader'@'%' IDENTIFIED BY '123456';
CREATE USER 'reader'@'127.0.0.1' IDENTIFIED BY '123456';
CREATE USER 'reader'@'localhost' IDENTIFIED BY '123456';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE, SUPER ON *.* TO 'reader'@'%';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE, SUPER ON *.* TO 'reader'@'127.0.0.1';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE, SUPER ON *.* TO 'reader'@'localhost';
FLUSH PRIVILEGES;
[mysqld]
# mandatory
server-id        = 1
log_bin          = /var/lib/mysql/bin.log
binlog-format    = row # very important if you want to receive write, update and delete row events
# optional
expire_logs_days = 30
max_binlog_size  = 768M
# setup listen address
bind-address     = 0.0.0.0

3.2 建对应的ClickHouse表

3.2.1 查看Mysql 表结构

show create table db_adp_rt.dws_game_product_online_h;

CREATE TABLE `dws_game_product_online_h` (
  `statdate` bigint(11) NOT NULL COMMENT '统计时间,精确到小时,2020081316',
  `game_id_jf` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '经分游戏ID',
  `game_id_o2` int(11) NOT NULL COMMENT 'O2游戏ID',
  `data_type` int(11) NOT NULL COMMENT '统计口径字段 1 - 染色,2 - 渠道,3 - 染色且渠道',
  `game_name` varchar(64) COLLATE utf8mb4_bin NOT NULL COMMENT '游戏名称',
  `agent_id` int(11) NOT NULL COMMENT '代投方ID, 0 - 未知',
  `agent_name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '代投方名称',
  `media_type` int(11) NOT NULL DEFAULT '9' COMMENT '媒体类型',
  `media_resource_type` int(11) NOT NULL DEFAULT '20' COMMENT '媒体内容类型',
  `med_platform_id` int(11) NOT NULL DEFAULT '20' COMMENT 'o2的媒体类型;  --通过media_id关联',
  `media_id` int(10) NOT NULL COMMENT '媒体ID',
  `media_name` varchar(64) COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT '媒体名称',
  `plat_id` int(11) NOT NULL COMMENT '平台: 0 - IOS, 1 - 安卓, 3 - PC, 4 - 网页, 255 - 全平台, -1 - 未知',
  `plat_name` varchar(32) COLLATE utf8mb4_bin NOT NULL COMMENT '平台名称',
  `impression_num` bigint(15) DEFAULT '0' COMMENT '曝光PV',
  `click_num` bigint(15) DEFAULT '0' COMMENT '点击PV',
  `api_impression_num` bigint(15) DEFAULT '0' COMMENT 'api拉取的曝光PV',
  `api_click_num` bigint(15) DEFAULT '0' COMMENT 'api拉取的点击PV',
  `activation_num` bigint(15) DEFAULT '0' COMMENT '激活数PV',
  `activation_user_num` bigint(15) DEFAULT '0' COMMENT '激活用户数UV,按照deviceid_md5去重',
  `register_num` bigint(15) DEFAULT '0' COMMENT '新进PV',
  `register_user_num` bigint(15) DEFAULT '0' COMMENT '新进UV(按照openid去重)',
  `role_creation_num` bigint(15) DEFAULT '0' COMMENT '创角PV',
  `role_creation_user_num` bigint(15) DEFAULT '0' COMMENT '创角UV(按照openid去重)',
  `backflow_30day_num` bigint(15) DEFAULT '0' COMMENT '月回流PV',
  `backflow_30day_user_num` bigint(15) DEFAULT '0' COMMENT '月回流UV',
  `register_pay_num_today` bigint(15) DEFAULT '0' COMMENT '今日新进用户付费PV',
  `register_pay_user_num_today` bigint(15) DEFAULT '0' COMMENT '今日新进用户付费UV',
  `register_pay_amount_today` double DEFAULT '0' COMMENT '今日新进用户付费金额,单位:分',
  `register_pay_num_30day` bigint(15) DEFAULT '0' COMMENT '过去30天的新进用户在当天的付费PV',
  `register_pay_user_num_30day` bigint(15) DEFAULT '0' COMMENT '过去30天的新进用户在当天的付费UV(按照openid去重)',
  `register_pay_amount_30day` double DEFAULT '0' COMMENT '过去30天的新进用户在当天的付费金额,单位:分',
  `backflow_pay_num_today` bigint(15) DEFAULT '0' COMMENT '今日月回流用户付费PV',
  `backflow_pay_user_num_today` bigint(15) DEFAULT '0' COMMENT '今日月回流用户付费UV(按照openid去重)',
  `backflow_pay_amount_today` double DEFAULT '0' COMMENT '今日月回流用户付费金额,单位:分',
  `backflow_pay_num_30day` bigint(15) DEFAULT '0' COMMENT '过去30天的月回流用户在当天的付费PV',
  `backflow_pay_user_num_30day` bigint(15) DEFAULT '0' COMMENT '过去30天的月回流用户在当天的付费UV(按照openid去重)',
  `backflow_pay_amount_30day` double DEFAULT '0' COMMENT '过去30天的月回流用户在当天的付费金额,单位:分',
  `site_set_id` bigint(15) DEFAULT NULL COMMENT '广告版位id,腾讯广告中的site_id,头条广告中的CSITE',
  `billing_type` int(10) DEFAULT NULL COMMENT '出价结算类型:1:CPD,2:CPM,3:CPC,4:CPA',
  `update_time` varchar(100) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '更新时间',
  UNIQUE KEY `statis_hour` (`statdate`,`game_id_o2`,`data_type`,`media_id`,`plat_id`,`site_set_id`,`billing_type`),
  KEY `idx_gameid_hour` (`game_id_o2`,`statdate`)
) ENGINE=TokuDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='实时归因三口径迭代_产品(染渠+染色+渠道)'

3.2.2 转换为ClickHouse 表

MySQLClickHouse
UNSIGNED TINYINTUInt8
TINYINTInt8
UNSIGNED SMALLINTUInt16
SMALLINTInt16
UNSIGNED INT, UNSIGNED MEDIUMINTUInt32
INT, MEDIUMINTInt32
UNSIGNED BIGINTUInt64
BIGINTInt64
FLOATFloat32
DOUBLEFloat64
DATEDate
DATETIME, TIMESTAMPDateTime
BINARYFixedString

根据上面的数据类型映射关系进行转换

CREATE TABLE db_adp.dws_game_product_online_h
(
    `statdate` Int32 COMMENT '统计时间,精确到小时,2020081316',
    `game_id_jf` String COMMENT '经分游戏ID',
    `game_id_o2` Int32 COMMENT 'O2游戏ID',
    `data_type` UInt8 COMMENT '统计口径字段 0 - 统一,1 - 染色,2 - 渠道,3 - 染色且渠道',
    `game_name` String COMMENT '游戏名称',
    `agent_id` Int32 COMMENT '代投方ID, 0 - 未知',
    `agent_name` String COMMENT '代投方名称',
    `media_type` UInt16 DEFAULT 9 COMMENT '媒体类型',
    `med_platform_id` UInt16 DEFAULT 20 COMMENT 'o2的媒体类型;  --通过media_id关联',
    `media_id` Int32 COMMENT '媒体ID',
    `media_name` String COMMENT '媒体名称',
    `plat_id` UInt8 COMMENT '平台: 0 - IOS, 1 - 安卓, 3 - PC, 4 - 网页, 255 - 全平台, -1 - 未知',
    `plat_name` String COMMENT '平台名称',
    `cost` Float64 DEFAULT 0. COMMENT 'RTB 消耗单位:分',
    `impression_num` UInt64 DEFAULT 0 COMMENT '曝光PV',
    `click_num` UInt64 DEFAULT 0 COMMENT '点击PV',
    `activation_num` UInt32 DEFAULT 0 COMMENT '激活数PV',
    `activation_user_num` UInt32 DEFAULT 0 COMMENT '激活用户数UV,按照deviceid_md5去重',
    `register_num` UInt32 DEFAULT 0 COMMENT '新进PV',
    `register_user_num` UInt32 DEFAULT 0 COMMENT '新进UV(按照openid去重)',
    `role_creation_num` UInt32 DEFAULT 0 COMMENT '创角PV',
    `role_creation_user_num` UInt32 DEFAULT 0 COMMENT '创角UV(按照openid去重)',
    `backflow_30day_num` UInt32 DEFAULT 0 COMMENT '月回流PV',
    `backflow_30day_user_num` UInt32 DEFAULT 0 COMMENT '月回流UV',
    `register_pay_num_today` UInt32 DEFAULT 0 COMMENT '今日新进用户付费PV',
    `register_pay_user_num_today` UInt32 DEFAULT 0 COMMENT '今日新进用户付费UV',
    `register_pay_amount_today` Float64 DEFAULT 0. COMMENT '今日新进用户付费金额,单位:分',
    `register_pay_num_30day` UInt32 DEFAULT 0 COMMENT '过去30天的新进用户在当天的付费PV',
    `register_pay_user_num_30day` UInt32 DEFAULT 0 COMMENT '过去30天的新进用户在当天的付费UV(按照openid去重)',
    `register_pay_amount_30day` Float64 DEFAULT 0. COMMENT '过去30天的新进用户在当天的付费金额,单位:分',
    `backflow_pay_num_today` UInt32 DEFAULT 0 COMMENT '今日月回流用户付费PV',
    `backflow_pay_user_num_today` UInt32 DEFAULT 0 COMMENT '今日月回流用户付费UV(按照openid去重)',
    `backflow_pay_amount_today` Float64 DEFAULT 0. COMMENT '今日月回流用户付费金额,单位:分',
    `backflow_pay_num_30day` UInt32 DEFAULT 0 COMMENT '过去30天的月回流用户在当天的付费PV',
    `backflow_pay_user_num_30day` UInt32 DEFAULT 0 COMMENT '过去30天的月回流用户在当天的付费UV(按照openid去重)',
    `backflow_pay_amount_30day` Float64 DEFAULT 0. COMMENT '过去30天的月回流用户在当天的付费金额,单位:分',
    `update_time` DateTime COMMENT '更新时间'
)
ENGINE = TinyLog

3.3 数据导入

clickhouse-mysql \
     --src-host=127.0.0.1 \
     --src-user=reader \
     --src-password=123456 \
     --src-table=db_adp.dws_game_product_online_h
     --table-migrate \
     --dst-host=127.0.0.1 \
     --dst-table=db_adp.dws_game_product_online_h \
     --csvpool

3.3.1 更多的参数可参考下面的解释

usage: clickhouse-mysql [-h] [--config-file CONFIG_FILE] [--log-file LOG_FILE]
                        [--log-level LOG_LEVEL] [--nice-pause NICE_PAUSE]
                        [--dry] [--daemon] [--pid-file PID_FILE]
                        [--binlog-position-file BINLOG_POSITION_FILE]
                        [--mempool]
                        [--mempool-max-events-num MEMPOOL_MAX_EVENTS_NUM]
                        [--mempool-max-rows-num MEMPOOL_MAX_ROWS_NUM]
                        [--mempool-max-flush-interval MEMPOOL_MAX_FLUSH_INTERVAL]
                        [--csvpool]
                        [--csvpool-file-path-prefix CSVPOOL_FILE_PATH_PREFIX]
                        [--csvpool-keep-files] [--create-table-sql-template]
                        [--create-table-sql] [--with-create-database]
                        [--create-table-json-template] [--migrate-table]
                        [--pump-data] [--install]
                        [--src-server-id SRC_SERVER_ID] [--src-host SRC_HOST]
                        [--src-port SRC_PORT] [--src-user SRC_USER]
                        [--src-password SRC_PASSWORD]
                        [--src-schemas SRC_SCHEMAS] [--src-tables SRC_TABLES]
                        [--src-tables-where-clauses SRC_TABLES_WHERE_CLAUSES]
                        [--src-tables-prefixes SRC_TABLES_PREFIXES]
                        [--src-wait] [--src-resume]
                        [--src-binlog-file SRC_BINLOG_FILE]
                        [--src-binlog-position SRC_BINLOG_POSITION]
                        [--src-file SRC_FILE] [--dst-file DST_FILE]
                        [--dst-host DST_HOST] [--dst-port DST_PORT]
                        [--dst-user DST_USER] [--dst-password DST_PASSWORD]
                        [--dst-schema DST_SCHEMA] [--dst-distribute]
                        [--dst-cluster DST_CLUSTER] [--dst-table DST_TABLE]
                        [--dst-table-prefix DST_TABLE_PREFIX]
                        [--dst-create-table]
                        [--column-default-value [COLUMN_DEFAULT_VALUE [COLUMN_DEFAULT_VALUE ...]]]
                        [--column-skip [COLUMN_SKIP [COLUMN_SKIP ...]]]
                        [--ch-converter-file CH_CONVERTER_FILE]
                        [--ch-converter-class CH_CONVERTER_CLASS]

ClickHouse data reader

optional arguments:
  -h, --help            show this help message and exit
  --config-file CONFIG_FILE
                        Path to config file. Default - not specified
  --log-file LOG_FILE   Path to log file. Default - not specified
  --log-level LOG_LEVEL
                        Log Level. Default - NOTSET
  --nice-pause NICE_PAUSE
                        Make specified (in sec) pause between attempts to read
                        binlog stream
  --dry                 Dry mode - do not do anything that can harm. Useful
                        for debugging.
  --daemon              Daemon mode - go to background.
  --pid-file PID_FILE   Pid file to be used by the app in daemon mode
  --binlog-position-file BINLOG_POSITION_FILE
                        File to write binlog position to during bin log
                        reading and to read position from on start
  --mempool             Cache data in mem.
  --mempool-max-events-num MEMPOOL_MAX_EVENTS_NUM
                        Max events number to pool - triggering pool flush
  --mempool-max-rows-num MEMPOOL_MAX_ROWS_NUM
                        Max rows number to pool - triggering pool flush
  --mempool-max-flush-interval MEMPOOL_MAX_FLUSH_INTERVAL
                        Max seconds number between pool flushes
  --csvpool             Cache data in CSV pool files on disk. Requires memory
                        pooling, thus enables --mempool even if it is not
                        explicitly specified
  --csvpool-file-path-prefix CSVPOOL_FILE_PATH_PREFIX
                        File path prefix to CSV pool files
  --csvpool-keep-files  Keep CSV pool files. Useful for debugging
  --create-table-sql-template
                        Prepare CREATE TABLE SQL template(s).
  --create-table-sql    Prepare CREATE TABLE SQL statement(s).
  --with-create-database
                        Prepend each CREATE TABLE SQL statement(s) with CREATE
                        DATABASE statement
  --create-table-json-template
                        Prepare CREATE TABLE template(s) as JSON. Useful for
                        IPC
  --migrate-table       Migrate table(s). Copy existing data from MySQL
                        table(s) with SELECT statement. Binlog is not read
                        during this procedure - just copy data from the src
                        table(s). IMPORTANT!. Target table has to be created
                        in ClickHouse or it has to be created with --dst-
                        create-table and possibly with --with-create-database
                        options. See --create-table-sql-template and --create-
                        table-sql options for additional info.
  --pump-data           Pump data from MySQL binlog into ClickHouse. Copy rows
                        from binlog until the end of binlog reached. When end
                        of binlog reached, process ends. Use in combination
                        with --src-wait in case would like to continue and
                        wait for new rows after end of binlog reached
  --install             Install service file(s)
  --src-server-id SRC_SERVER_ID
                        Set server_id to be used when reading date from MySQL
                        src. Ex.: 1
  --src-host SRC_HOST   Host to be used when reading from src. Ex.: 127.0.0.1
  --src-port SRC_PORT   Port to be used when reading from src. Ex.: 3306
  --src-user SRC_USER   Username to be used when reading from src. Ex.: root
  --src-password SRC_PASSWORD
                        Password to be used when reading from src. Ex.: qwerty
  --src-schemas SRC_SCHEMAS
                        Comma-separated list of databases (a.k.a schemas) to
                        be used when reading from src. Ex.: db1,db2,db3
  --src-tables SRC_TABLES
                        Comma-separated list of tables to be used when reading
                        from src. Ex.: table1,table2,table3Ex.:
                        db1.table1,db2.table2,db3.table3Ex.:
                        table1,db2.table2,table3
  --src-tables-where-clauses SRC_TABLES_WHERE_CLAUSES
                        Comma-separated list of WHERE clauses for tables to be
                        migrated. Ex.: db1.t1="a=1 and b=2",db2.t2="c=3 and
                        k=4". Accepts both (comma-separated) clause (useful
                        for short clauses) or file where clause is located
                        (useful for long clauses)
  --src-tables-prefixes SRC_TABLES_PREFIXES
                        Comma-separated list of table prefixes to be used when
                        reading from src.Useful when we need to process
                        unknown-in-advance tables, say day-named log tables,
                        as log_2017_12_27Ex.: mylog_,anotherlog_,extralog_3
  --src-wait            Wait indefinitely for new records to come.
  --src-resume          Resume reading from previous position. Previous
                        position is read from `binlog-position-file`
  --src-binlog-file SRC_BINLOG_FILE
                        Binlog file to be used to read from src. Related to
                        `binlog-position-file`. Ex.: mysql-bin.000024
  --src-binlog-position SRC_BINLOG_POSITION
                        Binlog position to be used when reading from src.
                        Related to `binlog-position-file`. Ex.: 5703
  --src-file SRC_FILE   Source file to read data from. CSV
  --dst-file DST_FILE   Target file to be used when writing data. CSV
  --dst-host DST_HOST   Host to be used when writing to dst. Ex.: 127.0.0.1
  --dst-port DST_PORT   Port to be used when writing to dst. Ex.: 9000
  --dst-user DST_USER   Username to be used when writing to dst. Ex: default
  --dst-password DST_PASSWORD
                        Password to be used when writing to dst. Ex.: qwerty
  --dst-schema DST_SCHEMA
                        Database (a.k.a schema) to be used to create tables in
                        ClickHouse. It overwrites source database(s) name(s),
                        so tables in ClickHouse would be located in
                        differently named db than in MySQL. Ex.: db1
  --dst-distribute      Whether to add distribute table
  --dst-cluster DST_CLUSTER
                        Cluster to be used when writing to dst. Ex.: cluster1
  --dst-table DST_TABLE
                        Table to be used when writing to dst. Ex.: table1
  --dst-table-prefix DST_TABLE_PREFIX
                        Prefix to be used when creating dst table. Ex.:
                        copy_table_
  --dst-create-table    Prepare and run CREATE TABLE SQL statement(s).
  --column-default-value [COLUMN_DEFAULT_VALUE [COLUMN_DEFAULT_VALUE ...]]
                        Set of key=value pairs for columns default values.
                        Ex.: date_1=2000-01-01 timestamp_1=2002-01-01\
                        01:02:03
  --column-skip [COLUMN_SKIP [COLUMN_SKIP ...]]
                        Set of column names to skip. Ex.: column1 column2
  --ch-converter-file CH_CONVERTER_FILE
                        Filename where to search for CH converter class
  --ch-converter-class CH_CONVERTER_CLASS
                        Converter class name in --ch-converter-file file

3.4、补充

 官网上说使用pypy 性能上能提升10倍,大家也可以尝试下:Performance

4、CSV及TSV方式

像传统的将Source数据先生成一个CSV/TSV文件,再将数据文件导入到结果表中的方式,这里不过多赘叙,大家可参看一面的链接

Upload a CSV File
Insert Local Files


5、对比

操作难易数据大小(GB)时长(s)

支持增量

Mysql Engine比较易3.6457.261
Mysql Function3.6439.634
Altinity首次需安装,以后使用易3.6424.2

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

访问者模式Visitor

1.意图&#xff1a;表示一个作用于某对象结构中的各元素的操作。它允许在不改变各元素的类的前提下定义作用于这些元素的操作。 2.结构 Visitor&#xff08;访问者&#xff09;为该对象结构中ConcreteElement的每一个类声明一个Visit操作。该操作的名字和特征标识了发送Visit请…

本地机器 Google Colab 通过 SSH 连接远程服务器

1. 情景描述 我自己笔记本配置太垃圾&#xff0c;想要用学校的深度学习服务器在Colab上跑程序。 2. 环境描述 远程服务器 (Ubuntu)&#xff1a; 用pip安装 jupyter notebook 以及 jupyter_http_over_ws 拓展包 (前提有python环境和pip) pip install notebookpip install j…

Android设计模式详解之外观模式

前言 外观模式也称门面模式&#xff0c;在开发过程中的运用频率非常高&#xff1b; 定义&#xff1a;要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行&#xff1b;门面模式提供一个高层次的接口&#xff0c;使得子系统更易于使用&#xff1b; 使用场景&#…

6.3 Docker

目录 6.3.1 Docker概述 6.3.1.1 什么是Docker 6.3.1.2 Docker组成 6.3.2 Docker的安装 6.3.2.1 下载Docker依赖的环境 6.3.2.2 指定Docker镜像源 6.3.2.3 安装Docker 6.3.2.4 启动Docker并测试 6.3.3 Docker的中央仓库 6.3.4 Docker操作 6.3.4.1 镜像操作 6.3.4.…

从url获取参数并转为对象

const getParameters URL > JSON.parse({"${decodeURI(URL.split("?")[1]).replace(/"/g, \\").replace(/&/g, ",").replace(//g, ":")}"})getParameters("https://www.google.com.hk/search?qjsmd&neww…

【深度学习】李宏毅2021/2022春深度学习课程笔记 - Self-supervised Learning(自监督式学习)

文章目录一、芝麻街与进击的巨人二、Self-supervised Learning三、BERT3.1 Masking Input3.2 Next Sentence Prediction3.3 GLUE 任务集3.4 How to use BERT3.4.1 Case13.4.2 Case23.4.3 Case33.4.4 Case43.5 Training BERT is challenging!3.6 Pre-Training a Seq2Seq Model3.…

ERP是什么意思?

“ERP到底是一个怎么样的存在&#xff1f;为何有那么多的方面&#xff1f;如何学习&#xff1f;” 本文从ERP起源讲起&#xff0c;结合制造业离散制造与流程制造的ERP系统区别&#xff0c;详解ERP概念。 文章有点长&#xff0c;但如果你耐心看完&#xff0c;相信你会对ERP有一…

elasticsearch 基本语法(常见的RESTFUL API)

一 . ES的基本语法 文章目录一 . ES的基本语法1.Query String 语法2.Query DSL 语法3. Full-text queries 全文检索4. Phrase search 短语搜索5.Query and filter 查询和过滤6. Compound queries 查询7.HighLight search(高亮显示)测试数据内容&#xff1a;PUT /product/_doc/1…

科研试剂 Dextran-DBCO;葡聚糖-二苯并环辛烯;生物可降解高分子聚合物

DBCO修饰的葡聚糖聚 Dextran-DBCO 葡聚糖-二苯并环辛烯 名称&#xff1a;DBCO修饰葡聚糖 英文名称&#xff1a;Dextran-DBCO 外观状态&#xff1a;白色粉末 溶剂&#xff1a;DMSO等常规有机溶剂。 性状&#xff1a;基于不同的分子量&#xff0c;呈白色/类白色固体粉末&…

python爬虫(一)

一、理论 &#xff08;1&#xff09;URL管理器&#xff1a;网页之间的链接很复杂&#xff0c;a指向b&#xff0c;b指向a&#xff0c;如果不对其进行管理则可能导致重复爬取、循环爬取&#xff0c;因此单独用该模块进行管理。URL管理器有两个功能&#xff0c;分别是URL队列管理&…

神策营销云平台化应用实践

营销云是一个业务系统&#xff0c;需要贴合客户的实际业务场景&#xff0c;以平台化 分层设计撬动场景发挥价值主张。本文将详细介绍神策营销云在数字化转型浪潮中的沉淀。点击文末“阅读原文”立即观看完整版演讲回放。一、神策营销云产品理念“营销云是一个业务系统”&#…

规范有效的需求变更管理,分7步走。

1、建立需求基线 需要提前建立需求基线&#xff0c;需求基线是需求变更的依据&#xff0c;并需制定双方皆认可的需求变更流程。 需对用户需求进行明确分析&#xff0c;颗粒度越小越好。基准文件定位范围越详细&#xff0c;双方对需求越清晰&#xff0c;用户交流顺畅&#xff0c…

Go语言context包源码剖析

context包的作用 context包是在go1.7版本中引入到标准库中的 context可以用来在goroutine之间传递上下文信息&#xff0c;相同的context可以传递给运行在不同goroutine中的函数&#xff0c;上下文对于多个goroutine同时使用是安全的&#xff0c;context包定义了上下文类型&am…

两数之和【每日一题】

⭐前言⭐ ※※※大家好&#xff01;我是同学〖森〗&#xff0c;一名计算机爱好者&#xff0c;今天让我们进入刷题模式。若有错误&#xff0c;请多多指教。更多有趣的代码请移步Gitee &#x1f44d; 点赞 ⭐ 收藏 &#x1f4dd;留言 都是我创作的最大的动力&#xff01; 合抱之木…

MySQL数据库自动补全工具

MySQL数据库操作起来命令较多&#xff0c;默认无法使用tab键进行补全&#xff0c;所以可以安装一些实用的工具进行日常的操作 方式一&#xff1a;临时使用自动补全功能 mysql -u root -p --auto-rehash 方式二&#xff1a;永久使用自动补全功能 vi /etc/my.cnf [mysql] a…

Qt扫盲-QSqlDatabase理论总结

QSqlDatabase理论总结一、概述二、使用1. 连接数据库2. 数据库驱动3. 自定义数据驱动使用4. 注意事项三、常用的功能一、概述 QSqlDatabase类提供了通过连接访问数据库的接口。QSqlDatabase的一个实例表示一个数据库连接对象。该连接是通过Qt支持的数据库驱动程序来对数据库的…

再学C语言26:分支和跳转——goto语句

goto语句包括两个部分&#xff1a;goto和一个标签名称 goto point1; 为使goto语句工作&#xff0c;程序中必须包含由point1标签定位的其他语句 point1: printf("hello world! \n"); // 标签 冒号 一条语句 示例代码&#xff1a; /* test of goto */ #include &…

高一数学试题-2022年秋期末试卷

一、选择题 已知集合A{x∈N∣−2<x<52}A \{x \in \mathbf{N}| -2 < x < \frac{5}{2}\}A{x∈N∣−2<x<25​}&#xff0c;B{−2,−1,0,1,2,4}B \{-2, -1, 0, 1, 2, 4\}B{−2,−1,0,1,2,4}&#xff0c;则A∩BA \cap BA∩B A. {−1,0,1,2}\{-1, 0, 1, 2\}{−…

什么是AI预训练模型?

什么是预训练模型? 预训练 AI 模型是一种深度学习模型&#xff0c;在大型数据集上进行训练以完成特定任务&#xff0c;它可以按原样使用或定制以满足多个行业的应用需求。 想象一下&#xff0c;试图教一个蹒跚学步的孩子什么是独角兽。 一个好的起点可能是展示该生物的子图像…

[NOIP2017 提高组] 奶酪(C++,并查集)

题目背景 NOIP2017 提高组 D2T1 题目描述 现有一块大奶酪&#xff0c;它的高度为 hhh&#xff0c;它的长度和宽度我们可以认为是无限大的&#xff0c;奶酪中间有许多半径相同的球形空洞。我们可以在这块奶酪中建立空间坐标系&#xff0c;在坐标系中&#xff0c;奶酪的下表面…