ClickHouse使用之二 ——整合mysql,實現數據庫創建查詢導出

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查詢需要多久。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章