ClickHouse使用之二 ——整合mysql,实现数据库创建查询导出

发布时间 2023-09-11 11:59:58作者: 若-飞

1. mysql创建一个用于clickhouse的账号mysql_clickhouse并且授权

CREATE USER 'mysql_clickhouse'@'%' IDENTIFIED BY 'Password123!';
GRANT ALL PRIVILEGES ON *.* TO ‘mysql_clickhouse’@‘%';

2. 使用mysql引擎创建一个click house的外部表

存在一个mysql的数据库:host: host.docker.internal, db: gva, table: tx_hashes, 该数据库有3389条记录:

在click house客户端创建tx_hashes外部表:

CREATE TABLE `tx_hashes` (

  `id` bigint(20),

  `game_name` varchar(255),

  `tx_hash` varchar(255),

  `block_number` bigint(20),

  `Address` varchar(42),

  `tx_type` varchar(30)

)

ENGINE = MySQL('host.docker.internal','gva','tx_hashes','mysql_clickhouse','Password123!')

实例跑一下:

jay@JayMacBook-Pro ~ % sudo docker run -it --rm --link some-clickhouse-server:clickhouse-server --entrypoint clickhouse-client clickhouse/clickhouse-server --host clickhouse-server
ClickHouse client version 23.8.2.7 (official build).
Connecting to clickhouse-server:9000 as user default.
Password for user (default):
Connecting to clickhouse-server:9000 as user default.
Connected to ClickHouse server version 23.8.2 revision 54465.

2b449bc22d87 :) CREATE TABLE `tx_hashes` (

  `id` bigint(20),

  `game_name` varchar(255),

  `tx_hash` varchar(255),

  `block_number` bigint(20),

  `Address` varchar(42),

  `tx_type` varchar(30)

)

ENGINE = MySQL('host.docker.internal','gva','tx_hashes','mysql_clickhouse','Password123!')

CREATE TABLE tx_hashes
(
    `id` bigint,
    `game_name` varchar(255),
    `tx_hash` varchar(255),
    `block_number` bigint,
    `Address` varchar(42),
    `tx_type` varchar(30)
)
ENGINE = MySQL('host.docker.internal', 'gva', 'tx_hashes', 'mysql_clickhouse', 'Password123!')

Query id: 375a7620-9697-4444-8e6d-082e220b4509

Ok.

0 rows in set. Elapsed: 0.029 sec.

这样以后,clickhouse就可以使用这个表了。但是需要注意,这个是外部表,是clickhouse使用mysql的表。

当使用 ClickHouse 的 MySQL 外部表时,ClickHouse 不会将所有的数据复制到自己的存储引擎中,而是在查询时通过连接到 MySQL 数据库来获取数据。这意味着 ClickHouse 不会充分利用其列式存储和高性能查询引擎的优势。

使用 ClickHouse 的外部表功能主要是为了方便在 ClickHouse 中访问和查询 MySQL 数据库中的数据,以便进行联合分析或跨数据库查询。这种方式适用于需要在 ClickHouse 中对 MySQL 数据进行查询和分析的场景,但不适用于将所有数据加载到 ClickHouse 进行大规模数据处理和分析的场景。

如果您希望充分利用 ClickHouse 的优势,包括高性能的列式存储、并行查询和聚合功能,最好的方式是将数据直接加载到 ClickHouse 的本地表中。这样可以充分发挥 ClickHouse 在大规模数据分析和查询方面的优势,并获得更好的性能。

因此,如果您的目标是利用 ClickHouse 的优势进行大规模数据处理和分析,建议考虑将数据从 MySQL 导入到 ClickHouse 的本地表中,而不是仅仅使用 MySQL 外部表。这样可以确保充分发挥 ClickHouse 的性能优势,并获得更好的查询性能和分析能力。

 

3. 使用外部表进行查询

 

select count(*) from tx_hashes
 2b449bc22d87 :) select count(*) from tx_hashes;

SELECT count(*)
FROM tx_hashes

Query id: 7bff9d32-7811-4407-b232-bb95d34ce3f3

┌─count()─┐
│    3389 │
└─────────┘

1 row in set. Elapsed: 0.047 sec. Processed 3.39 thousand rows, 27.11 KB (71.76 thousand rows/s., 574.08 KB/s.)
Peak memory usage: 69.23 KiB.

 

select game_name, Address, tx_type, count(*) as cnt from tx_hashes group by game_name, Address, tx_type order by cnt desc limit
 2b449bc22d87 :) select game_name, Address, tx_type,  count(*) as cnt from tx_hashes group by game_name, Address, tx_type order by cnt desc limit 10;

SELECT
    game_name,
    Address,
    tx_type,
    count(*) AS cnt
FROM tx_hashes
GROUP BY
    game_name,
    Address,
    tx_type
ORDER BY cnt DESC
LIMIT 10

Query id: fb476113-6794-41b5-b0fb-d605457b0c18

┌─game_name─────────┬─Address────────────────────────────────────┬─tx_type──┬─cnt─┐
│ MOBOX: NFT Farmer │ 0xE6A7dcC20A50fB40F24926060bE2c2445D59ea6E │          │ 172 │
│ MOBOX: NFT Farmer │ 0xdb58059ac84b301aa34adea330f562669e5b6661 │ transfer │ 161 │
│ MOBOX: NFT Farmer │ 0x1846c0ab8d09007154066cbb114315e11d94d4e8 │ transfer │  82 │
│ MOBOX: NFT Farmer │ 0xae5f14a9aed2b56121fb964a84a9dff114296563 │ transfer │  64 │
│ MOBOX: NFT Farmer │ 0x54A21909B4630137867c14EF28c2184eea1960B5 │          │  60 │
│ MOBOX: NFT Farmer │ 0x99BA46987b4916d21dd72eD4d360a49ad74fcBAD │          │  48 │
│ MOBOX: NFT Farmer │ 0x329909f26b6ac2e868398f401f84336226c58fcd │ transfer │  47 │
│ MOBOX: NFT Farmer │ 0x9cfa26eb210446fffd248e6c048f11b51ba61507 │ transfer │  42 │
│ MOBOX: NFT Farmer │ 0x3Fc9a65E0CfdF58e391D58B58AB495fcC3583f71 │          │  36 │
│ MOBOX: NFT Farmer │ 0x2eE6d358b22Da776E9C1B4b368Fb59FAaB768AAE │          │  35 │
└───────────────────┴────────────────────────────────────────────┴──────────┴─────┘

10 rows in set. Elapsed: 0.084 sec. Processed 3.39 thousand rows, 289.54 KB (40.48 thousand rows/s., 3.46 MB/s.)
Peak memory usage: 444.21 KiB.

 ch的高性能统计分析非常的快,后面会举例看下N亿条记录的表group查询需要多久。