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

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

时间:2023-09-11 12:00:32浏览次数:50  
标签:varchar tx 之二 ClickHouse mysql hashes clickhouse

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

标签:varchar,tx,之二,ClickHouse,mysql,hashes,clickhouse
From: https://www.cnblogs.com/zhanchenjin/p/17693174.html

相关文章

  • Strimzi从入门到精通系列之二:部署Kafka
    Strimzi从入门到精通系列之二:部署Kafka一、认识Strimzi二、Strimzi的核心知识点三、Kafka集群、TopicOperator、UserOperator四、部署Kafka集群五、使用ClusterOperator部署TopicOperator六、使用ClusterOperator部署UserOperator一、认识StrimziStrimzi是一款用于在......
  • Mysql数据库系列之:深入理解tinyint(n)
    Mysql数据库系列之:深入理解tinyintn一、深入理解tinyint(n)二、创建包含tinyint类型字段的表三、扩展一、深入理解tinyint(n)对于MySQL中的tinyint列,"(n)"没有任何实际意义。在MySQL中,tinyint的宽度始终为1字节,所以在定义表时指定tinyint(n)与tinyint相同。在MySQL中,tinyint字段......
  • mysql查看最近执行的sql语句
    mysql查看最近执行的sql语句,默认情况下mysql是不会记录最近执行sql语句的,需要手动开启才能记录。另外最近执行sql语句有两种方式输出,要么是table,要么是文件。查看mysql是否开启sql记录以及输出方式的脚本如下:showvariableslike'%log_output%';--查看输出方式showvariables......
  • MySQL基础篇:掌握MySQL数据排序,让你的数据分析事半功倍
    单一字段排序排序采用orderby子句,orderby后面跟上排序字段,排序字段可以放多个,多个采用逗号间隔,orderby默认采用升序,如果存在where子句那么orderby必须放到where语句的后面按照薪水由小到大排序(系统默认由小到大)mysql>select*fromEMPorderbySAL;+-------+--------+---......
  • MySQL入门系列7-多表查询
    在我们日常开发中,表与表之间的关系通常分为以下几种:一对多(多对一)、’多对多、一对一。一、一对多(多对一)我们之前的部门和员工表就是一个一对多的关系,一个部门有多个员工,部门就是一方,员工就是多方。员工表的外键关联了部门表二、多对多学生和课程的关系可以理解为多对多的关系,......
  • ClickHouse的Join算法
    ClickHouse的Join算法ClickHouse是一款开源的列式分析型数据库(OLAP),专为需要超低延迟分析查询大量数据的场景而生。为了实现分析应用可能达到的最佳性能,分析型数据库(OLAP)通常将表组合在一起形成一个大宽表,这个过程称为数据反规范化(datadenormalization)。大宽表通过避免JOIN连接来......
  • MYSQL基础上
    MYSQL基础确保MySQL已经安装完成启动windows下进入cmd的管理运行模式启动netstartmysql80停止netstopmysql80连接客户端连接注意这里使用的命令行既然在所有目录下都可行,那么必然要改环境变量数据模型SQLDDLDDL-数据库操作查询查询所有数据库SHOWDATAB......
  • MySQL数据库进阶 自定义函数
    自定义函数在MySQL中,您可以使用自定义函数来扩展数据库管理系统的功能。自定义函数允许您封装一段可重用的代码,并在查询和其他操作中调用它。以下是在MySQL中创建和使用自定义函数的一般步骤:1、创建自定义函数语法:CREATEFUNCTIONfunction_name(parameters)RETURNSreturn_t......
  • Navicat连接Docker创建的MySQL运行实例
    一步步教你在Docker中安装MySQL(qq.com)Docker部署MySql应用-魔鬼YU天使-博客园(cnblogs.com)拉取MySQL镜像我们可以通过Docker提供的命令,直接从DockerHub上拉取MySQL的官方镜像。打开终端,输入如下命令:dockerpullmysql:8.0其中,:8.0表示我们需要下载的MySQL版本,你也......
  • linux7.X二进制方式安装MySQL5.7.X
    概述系统环境服务器型号VMwareVirtualPlatform操作系统版本RHEL7.6x86_64主机名linuxpg51PubIP192.168.115.51数据库安装版本mysqlVer14.14Distrib5.7.30,forlinux-glibc2.12(x86_64)usingEditLinewrapper安装路径规划[mysql@linuxpg51/]$tree-L1/mysql/mysq......