面向OLAP的列式存储DBMS-16-[ClickHouse]python操作ClickHouse

news2025/1/30 5:48:13

clickhouse查询表容量方法

1 clickhouse常用命令

#clickhouse-client进入客户端
在这里插入图片描述
pda1:)show databases;
pda1:)create database test;
pda1:)use system;
pda1:)show tables;
pda1:) exit;
其余的就是常规的一些sql语句。

2 python操作clickhouse

2.1 clickhouse-driver(9000)

pip install clickhouse_driver

from clickhouse_driver import Client
#可以再加个连接超时时间send_receive_timeout=send_receive_timeout
host = "127.0.0.1"
port = 29000
user = "default"
password = "bigdata"
database = "default"
client = Client(host=host, port=port, user=user, password=password,database=database)
print(client.execute("show databases"))

2.2 sqlalchemy_clickhouse(8123)

还可以通过 sqlalchemy 去连接,但是默认情况下 sqlalchemy 找不到对应的 dialect,我们需要再安装一个模块:pip install sqlalchemy_clickhouse==0.2.2,安装之后就可以使用了。
指定用户名和密码的形式

from sqlalchemy import create_engine

host = "127.0.0.1"
user = "default"
password = "bigdata"
db = "default"
port = 28123  # http连接端口

engine = create_engine('clickhouse://{user}:{password}@{host}:{port}/{db}'
                .format(user=user,
                        host=host,
                        password=password,
                        db=db,
                        port=port))
re = engine.execute("show databases").fetchall()
print(re)

用户口令中含有特殊字符@的情况下,如何正确链接数据库。

from urllib.parse import quote_plus as urlquote
password = urlquote("ClickhouseTest@190")

2.3 clickhouse-connect

python版本要求3.7及以上。
pip install clickhouse-connect

import clickhouse_connect
host = "127.0.0.1"
port = 28123
user = "default"
password = "bigdata"
database = "default"
client = clickhouse_connect.get_client(host=host, port=port, username=user, password=password)
# 要使用 ClickHouse SQL 检索数据,请使用客户端query方法:
result = client.query('show databases')
re = result.result_set
print(re)

操作命令

# 要运行 ClickHouse SQL 命令,请使用客户端command方法:
client.command('CREATE TABLE new_table (key UInt32, value String, metric Float64) ENGINE MergeTree ORDER BY key')

# 要插入批处理数据,请使用insert带有二维行和值数组的客户端方法:
row1 = [1000, 'String Value 1000', 5.233]
row2 = [2000, 'String Value 2000', -107.04]
data = [row1, row2]
client.insert('new_table', data, column_names=['key', 'value', 'metric'])

3 批量写入

使用clickhouser_driver

# -*- coding: utf-8 -*-
from clickhouse_driver import Client
#可以再加个连接超时时间send_receive_timeout=send_receive_timeout
host = "127.0.0.1"
port = 29000
user = "default"
password = "bigdata"
database = "test"
client = Client(host=host, port=port, user=user, password=password,database=database)
# (1)创建表
# str_sql = 'CREATE TABLE IF NOT EXISTS test (id Int32, value String) ENGINE = Memory'
# client.execute(str_sql)

# # (2)生成测试数据
# data = [(i, f'value_{i}') for i in range(1000)]
#
# # (3)批量写入ClickHouse
# client.execute('INSERT INTO test (id, value) VALUES', data)

# (4)查询数据
str_query = 'select * from test limit 10'
re = client.execute(str_query)
print(re)

4 压力测试

clickhouse 适合批量写入数据,而不适合一条一条写入数据。
批量写入的数据最好都是同一个表的同一个分区下的。

(1)创建数据库test
create database test;
(2)创建表batch
CREATE TABLE test.batch
(
    `eday` Date,
    `edaytime` DateTime,
    `groupname` String,
    `pdaaddr` String,
    `starttime` DateTime64(3),
    `step` Float32,
    `data` String,
    `db_time` DateTime64(3),
    INDEX pdaaddr_idx pdaaddr TYPE minmax GRANULARITY 8192,
    INDEX starttime_idx starttime TYPE minmax GRANULARITY 8192
)
ENGINE = MergeTree
PARTITION BY eday
PRIMARY KEY (pdaaddr,starttime)
ORDER BY (pdaaddr,starttime)
TTL edaytime + toIntervalHour(6)
SETTINGS index_granularity = 8192,
min_rows_for_compact_part = 3;

4.1 模拟写入一条数据

# -*- coding: utf-8 -*-
from datetime import datetime
from clickhouse_driver import Client
#可以再加个连接超时时间send_receive_timeout=send_receive_timeout
host = "127.0.0.1"
port = 29000
user = "default"
password = "bigdata"
database = "test"
client = Client(host=host, port=port, user=user, password=password,database=database)

str1 = "2023-06-16 15:30:25.952"
st1 = datetime.strptime(str1, '%Y-%m-%d %H:%M:%S.%f')

# clickhouse根据字段类型会自动将时间戳转换

# (2)生成测试数据
eday = st1  # 2023-06-16
edaytime = st1  # "2023-06-16 15:30:25"
groupname = "testgroup"
pdaaddr = "device1*01*data1"
starttime = st1  # "2023-06-16 15:30:25.952"
step = 778899
data = "78.6742"
db_time = st1  # "2023-06-16 15:30:25.952"

data_list = [eday,edaytime,groupname,pdaaddr,starttime,step,data,db_time]
data_list_batch = [data_list]

# (3)批量写入ClickHouse
client.execute('INSERT INTO batch VALUES', data_list_batch)

4.2 模拟写入一批数据

-- 查看表大小
SELECT
    table AS table_name,
    sum(rows) AS row_num,
    formatReadableSize(sum(data_uncompressed_bytes)) AS org_size,
    formatReadableSize(sum(data_compressed_bytes)) AS compress_size,
    round((sum(data_compressed_bytes) / sum(data_uncompressed_bytes)) * 100, 0) AS compress_ratio
FROM system.parts
WHERE database='test'
GROUP BY table order by sum(rows) desc;

查询表大小的结果如下

table_name	row_num		org_size		compress_size	compress_ratio
1万数据项
batch		10000		614.15 KiB		101.95 KiB		17.0
batch		20000		1.20 MiB		203.87 KiB		17.0
batch		30000		1.80 MiB		306.16 KiB		17.0
batch		40000		2.40 MiB		408.11 KiB		17.0
10万数据项
batch		100000		6.08 MiB		1.04 MiB	17.0
batch		200000		12.17 MiB		2.08 MiB	17.0
batch		300000		18.25 MiB		3.11 MiB	17.0
batch		400000		24.33 MiB		4.15 MiB	17.0
100万数据项
batch		1000000		61.78 MiB		10.75 MiB	17.0
batch		2000000		123.56 MiB		21.50 MiB	17.0
batch		3000000		185.33 MiB		32.25 MiB	17.0

10万数据项,1秒钟,占据1M。

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

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

相关文章

Windows下python,psycopg2使用sm3连接HGDB

瀚高数据库 目录 环境 文档用途 详细信息 环境 系统平台:N/A 版本:4.5 文档用途 本文介绍在HGDB使用sm3认证时,python使用psycopg2连接HGDB的方法。 详细信息 Python连接HGDB可以使用psycopg2、Django,Django是依赖psycopg2的&a…

微信小程序登录问题(思路简略笔记)

配置问题 这是小程序登录问题,必要的两个配置。 流程思路 1. 微信小程序端,会返回一个code。 2. 查看需要返回给微信小程序端的数据。 3. 既然需要返回三个数据,先看openid如何拿到 WX-Login https://api.weixin.qq.com/sns/jscode2ses…

C高级 Shell脚本

一、作业:写一个shell脚本,将以下内容放到脚本中 在家目录下创建目录文件,dir在dir下创建dir1和dir2把当前目录下的所有文件拷贝到dir1中,把当前目录下的所有脚本文件拷贝到dir2中把dir2打包并压缩为dir2.tar.xz再把dir2.tar.xz移…

2023-9-10 集合-Nim游戏

题目链接&#xff1a;集合-Nim游戏 #include <iostream> #include <cstring> #include <algorithm> #include <unordered_set>using namespace std;const int N 110, M 10010;int n, m; int s[N], f[M];int sg(int x) {if(f[x] ! -1) return f[x];//…

QT实战之翻金币游戏【未完待续】

文章目录 目录 文章目录 前言 二、创建项目 三、添加资源 四、主界面实现 1、设置游戏主场景配置 2、设置背景图片 3、创建开始按钮 总结 前言 对QT的相关知识与控件进行简单的学习之后&#xff0c;通过实现“翻金币游戏”来巩固与实践所学的QT知识。在制作过程中是根据以下视…

打开游戏显示xinput1_3.dll丢失怎么办?xinput1_3.dll最全修复方法分享

一、xinput1_3.dll 文件总体介绍 xinput1_3.dll 是 Microsoft DirectX 中的一个动态链接库文件&#xff0c;它主要负责处理游戏手柄、鼠标、键盘等输入设备的操作。当运行支持 DirectX 的游戏或程序时&#xff0c;xinput1_3.dll 文件会被操作系统加载到内存中&#xff0c;以提…

想要精通算法和SQL的成长之路 - 课程表II

想要精通算法和SQL的成长之路 - 课程表 前言一. 课程表II &#xff08;拓扑排序&#xff09;1.1 拓扑排序1.2 题解 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 课程表II &#xff08;拓扑排序&#xff09; 原题链接 1.1 拓扑排序 核心知识&#xff1a; 拓扑排序是专…

Sharding-JDBC分库分表-自定义分片算法-4

默认分片算法 Sharding JDBC通过org.apache.shardingsphere.sharding.spi.ShardingAlgorithm接口定义了数据分片算法&#xff0c;5.2.1版本默认提供了如下的分片算法 配置标识自动分片算法详细说明类名MODY基于取模的分片算法ModShardingAlgorithmHASH_MODY基于哈希取模的分片…

JavaFX下载

下载地址&#xff1a; https://gluonhq.com/products/javafx/

postman和node.js的使用

一 nodejs下载 下载链接&#xff1a; nodejs官网&#xff1a; https://nodejs.org/zh-cn/download 我使用的windows .msi安装方式&#xff0c;双击一直下一步就行 当前安装完成后的版本&#xff1a;1.下载 2.安装步骤 下载完成后&#xff0c;双击安装包&#xff0c;开始安装&…

在MAC电脑上将NTFS格式移动硬盘转换为ExFAT格式

注意&#xff1a;转化之前先将移动硬盘中的内容进行备份 1、点击桌面上的【前往】&#xff0c;选择【实用工具】 2、在列表中选择【磁盘工具】 3、在左侧选中你的磁盘&#xff0c;点击右侧上方的【抹掉】,注意&#xff1a;将永久抹掉储存在上面的所有数据&#xff0c;因此需要…

计算机毕业设计 JSPM校园闲置物品交易平台的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测

分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测 目录 分类预测 | Matlab实现基于LFDA-SVM局部费歇尔判别数据降维结合支持向量机的多输入分类预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于局部费歇尔判别数据降维的L…

Ubuntu下高效Vim的搭建(离线版)

软件界面 可以看到界面下方有一些常用提示信息&#xff1a;文件路径、format、文件类型、光标所在的坐标(x,y)、进度条(百分比)、日期时间 会提示已定义的变量名词(快速补全) 搭建方法 下载资源文件 把Vim 和 .vimrc 拷贝到家目录下&#xff0c;并执行tar -xvf Vim 即可。 …

汇川PLC学习Day3:轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址

汇川PLC学习Day3&#xff1a;轴控代码编写、用户程序结构说明与任务配置示例、用户变量空间与编址 一、新建轴与轴控代码编写 1. 新建轴 (1)新建一个轴 &#xff08;2&#xff09;将轴名字更新为实际名字 可以后面实例化后再更改&#xff0c;汇川可以在更新名字时同步更新…

使用DeepSpeed加速大型模型训练(二)

使用DeepSpeed加速大型模型训练 在这篇文章中&#xff0c;我们将了解如何利用Accelerate库来训练大型模型&#xff0c;从而使用户能够利用DeeSpeed的 ZeRO 功能。 简介 尝试训练大型模型时是否厌倦了内存不足 (OOM) 错误&#xff1f;我们已经为您提供了保障。大型模型性能非…

倒⽴摆闭环控制的设计与开发

倒立摆是一种典型的多变量、高阶次、非线性、强耦合、自然不稳定系统&#xff0c;常被用来检验新的控制理论和算法的正确性及其在实际应用中的有效性。 load func_ip_comp% Locations of Poles and Zeroes of Open-Loop Compensated Transfer Function in Complex Plane figur…

查看当前所有的数据库

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 先看下服务有没有启动,看下我这个是什么意思 exit 退出MySQL环境回车后是这样的 重新进入MySQL环境 查看当前所有的数据库 show datebases; mysql&…

nrf523832 串口点LED

/* P0.06&#xff1a;串口发送TXD P0.08&#xff1a;串口接收RXD P0.05&#xff1a;串口RTS&#xff1a;发送请求&#xff0c;硬件流控开启时有效 P0.07&#xff1a;串口CTS&#xff1a;发送允许&#xff0c;硬件流控开启时有效 */ #define RX_PIN_NUMBER 8 #define TX_PIN_N…

学习Bootstrap 5的第十天

目录 卡片 基础的卡片 实例 页眉和页脚 实例 多种颜色卡片 实例 标题、文本和链接 实例 图片卡片 实例 卡片图像叠加 实例 下拉菜单 基础的下拉列表 实例 下拉列表分隔线 实例 下拉列表标题 实例 禁用的和活动的项目 实例 下拉列表位置 实例 下拉菜单…