如何给ClickHouse表生成随机真实测试数据

news2024/9/22 4:08:45

学习ClickHouse数据库,通常需要下载官网一些示例数据。我们也可以通过内置函数generateRandom快速生成测试数据,从而测试学习一些特性的性能及底层原理。

函数语法

generateRandom函数基于给定schema生成随机数据,用于填充测试表。不是所有类型都支持。

generateRandom('name TypeName[, name TypeName]...', [, 'random_seed'[, 'max_string_length'[, 'max_array_length']]])
  • name — 列名称.
  • TypeName — 列类型.
  • max_array_length — 所有生成arrays或maps最大元素,默认为10.
  • max_string_length — 生成字符串的最大长度,默认为10.
  • random_seed — 手动指定随机种子,为null则随机生成.

返回与schema对应的表对象。

举例:

SELECT * FROM generateRandom('a Array(Int8), d Decimal32(4), c Tuple(DateTime64(3), UUID)', 1, 10, 2) LIMIT 3;

上面示例生成三个字段schema数据,可选参数中第一个是随机种子,第二个最大字符串长度,第三个最大数组长度,执行SQL返回结果:

┌─a────────┬────────────d─┬─c──────────────────────────────────────────────────────────────────┐
│ [77]     │ -124167.6723 │ ('2061-04-17 21:59:44.573','3f72f405-ec3e-13c8-44ca-66ef335f7835') │
│ [32,110] │ -141397.7312 │ ('1979-02-09 03:43:48.526','982486d1-5a5d-a308-e525-7bd8b80ffa73') │
│ [68]     │  -67417.0770 │ ('2080-03-12 14:17:31.269','110425e5-413f-10a6-05ba-fa6b3e929f15') │
└──────────┴──────────────┴────────────────────────────────────────────────────────────────────┘

也可以先创建表,然后插入随机生成数据:

CREATE TABLE random (a Array(Int8), d Decimal32(4), c Tuple(DateTime64(3), UUID)) engine=Memory;
INSERT INTO random SELECT * FROM generateRandom() LIMIT 2;
SELECT * FROM random;

返回结果:

┌─a────────────────────────────┬────────────d─┬─c──────────────────────────────────────────────────────────────────┐
│ []                           │   68091.8197 │ ('2037-10-02 12:44:23.368','039ecab7-81c2-45ee-208c-844e5c6c5652') │
│ [8,-83,0,-22,65,9,-30,28,64] │ -186233.4909 │ ('2062-01-11 00:06:04.124','69563ea1-5ad1-f870-16d8-67061da0df25') │
└──────────────────────────────┴──────────────┴────────────────────────────────────────────────────────────────────┘

生成压力测试数据

SELECT * FROM generateRandom('a UUID, b DateTime, c Text', NULL, 2048) LIMIT 1000;

这里保持随机种子为null,字符串长度为2048,即最大长度。

下面示例利用测试数据进行压力测试,生成1亿数据量:

INSERT INTO test_stress
SELECT * FROM generateRandom('ID Int64, test_until_2k Text',1,2048) LIMIT 100000000;

随机数据分布

均匀分布

均匀分布默认数据范围为[0,1), 也可以通过参数指定数据范围:

SELECT randUniform(5,10)

如果需要整数,可以使用下面语句,生成[5,9]返回的整数:

SELECT floor(randUniform(5, 10)) AS r

非均匀分布

首先最常用的应该是正太分布:

SELECT randNormal(100, 5) -- 100 为均值,5是标准差

示例:

SELECT
    floor(randNormal(100, 5)) AS k,
    count(*) AS c,
    bar(c, 0, 50000, 100)
FROM numbers(100000) GROUP BY k ORDER BY k ASC

在这里插入图片描述

除了正太分布,还有伯努利分布、二项分布、对数分布、指数分布、卡方分布、T分布、F分布、泊松分布等。

下面是指数分布的示例,用户消费记录符合指数分布:

CREATE TABLE purchases
(
    `dt` DateTime,
    `customer_id` UInt32,
    `total_spent` Float32
)
ENGINE = MergeTree
ORDER BY dt
INSERT INTO purchases SELECT
    now() - randUniform(1, 1000000.),
    number,
    15 + round(randExponential(1 / 10), 2)
FROM numbers(1000000)

这里使用序号作为用户ID,采用均分分布随机数往前推移时间用于分散日期。消费金额采用指数分布,15是最低值。

最后进行验证:

SELECT
    floor(total_spent) AS s,
    count(*) AS n,
    bar(n, 0, 350000, 50)
FROM purchases
GROUP BY s
ORDER BY s ASC

生成图示如下:

在这里插入图片描述

总结

本文介绍了生成随机测试的函数,包括基本语法及一些数据分布函数的应用,这些函数需至少22.10版本。利用这些函数让数据更真实、更贴近实际业务场景。参考资料:https://clickhouse.com/blog/generating-random-test-distribution-data-for-clickhouse

官方文档:https://clickhouse.com/docs/en/sql-reference/functions/random-functions#randuniform

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

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

相关文章

【SSM】SpringMVC(三:SpringMVC拦截器)

文章目录 1. 登录案例2. 拦截器2.1 应用2.2 拦截器的执行原理2.3 拦截器执行的时机2.4 拦截器的实现方法2.5 拦截器的实现步骤2.6 开发拦截器 1. 登录案例 【login.jsp】 <%--Created by IntelliJ IDEA.User: BeyongDate: 2023/4/17Time: 11:43To change this template use…

【虹科】深度相机对比测评:虹科HK OAK-D Pro VS 英特尔RealSense D435i

虹科致力于为用户提供最优的机器视觉解决方案。本文将用虹科的AI深度相机与英特尔的深度相机来做图像的对比测试&#xff0c;那么它们有哪些性能差异呢&#xff1f; 虹科深度相机 HK OAK-D Pro有两个核心功能&#xff1a;红外激光点阵投影仪和红外照明LED。 红外激光点阵投影…

不能使用chatGPT?这3个平替甚至比chatGPT更强

不能使用chatGPT&#xff1f;这3个平替甚至比chatGPT更强 chatGPT&#xff0c;一款由OpenAI开发的新型AI聊天机器人&#xff0c;正在势如破竹地改变着许多人的工作和生活方式。作为一款基于大语言模型的聊天机器人&#xff0c;chatGPT能够理解自然语言并进行人机对话。与传统的…

SeeThroughNet:通过保留类概率信息来恢复辅助损失

文章目录 SeeThroughNet: Resurrection of Auxiliary Loss by Preserving Class Probability Information摘要本文方法Class Probability Preserving PoolingSeeThroughNet SeeThroughNet: Resurrection of Auxiliary Loss by Preserving Class Probability Information 摘要 …

华为OD机试真题(Java),计算最大乘积(100%通过+复盘思路)

一、题目描述 给定一个元素类型为小写字符串的数组&#xff0c;请计算两个没有相同字符的元素长度乘积的最大值&#xff0c; 如果没有符合条件的两个元素&#xff0c;返回0。 二、输入描述 输入为一个半角逗号分隔的小写字符串的数组&#xff0c;2 < 数组长度<100&am…

李志飞 All in AGI,出门问问大模型来了!

作者 | 唐小引 头图 | 由作者使用出门问问言之画生成 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 大模型进入百模大战唯快不破之时&#xff0c;矢志 Build AGI and make AGI accessible 的李志飞的产品比要组公司拉团队的王小川来得还更快些。 北京时间 4 月…

【C】Array

系列连载 【python / C / C】 参考 《C语言程序设计&#xff08;第四版&#xff09;谭浩强》【C语言】C语言视频教程《郝斌 C 语言自学教程》 文章目录 为什么需要数组数组的分类一维数组二维数组多维数组 #include<stdio.h>int main(){int a[5] { 1, 2, 3, 4, 5 };f…

自学Android开发至少要学到什么程度才可以去面试

前不久&#xff0c;有位网友私信找到我&#xff0c;说自己自学Android已经有两个月左右了&#xff0c;每天至少学习了五个小时&#xff0c;基本都是在网上找视频看跟着做笔记学的&#xff0c;然后就问我&#xff0c;说想这样学&#xff0c;至少需要学到什么程度才可以出去找工作…

Netty Jemalloc4算法-核心数据结构图示

Netty 从4.1.52版本开始&#xff0c;其内存分配算法&#xff0c;从jemalloc3 切换到了 jemalloc4。本文给出该算法涉及的核心数据结构图示&#xff1a; 想要看懂上图, 要点如下&#xff1a; 1. 小于等于16777216字节的空间&#xff0c;从chunk(一个16M的字节数组)中分配&#…

消息队列的选型

目录 消息队列的比较&#xff1a; kafka的架构&#xff1a; kafka为什么可以做到这么高的吞吐量&#xff1a; kafka分区类型&#xff1a; 请看下篇文章:生产者 ACK的配置 消息队列的比较&#xff1a; 消息队列的产品有很多中比如&#xff1a;React MQ 、Kafka等。 为什么…

一文速学数模-季节性时序预测SARIMA模型详解+Python实现

目录 前言 一、季节时间序列模型概述 二、SARIMA模型定义 三.SARIMA模型算法原理 1.季节差分&#xff1a;消除季节单位根 2.ARIMA模型 1.自回归(AR) 2.差分(I) 3.移动平均(MA) 4.ARIMA 四.SARIMA模型Python实现 1.数据预处理 季节性分析 ADF检验 序列平稳化 2.模…

C语言学习分享(第四次)------分支和循环语句

分支和循环语句 1. 前言2. 什么是语句?3. 分支语句(选择结构)3.1 if语句3.11 代码块{}的作用3.12 悬空else3.13 练习 3.2 switch语句3.21 在switch语句中的 break3.22 switch语句中的default子句3.23 练习 4. 循环语句4.1 while循环4.11 while循环中的break4.12 while循环中的…

DNS服务器配置与使用【CentOS】

从本质上说&#xff0c;DNS是一个分布数据库&#xff0c;是一个树形结构&#xff08;不是网状&#xff09;——层次结构 DNS查找过程就是 回溯的过程&#xff08;递归、迭代&#xff09; www.xxx.edu.cn&#xff08;属于四层结构&#xff09; 查询DNS&#xff1a;域名到IP地址的…

Mysql 学习(五)InnDB 存储引擎-B+树索引的使用

基础知识 了解了表索引的底层是B树结构&#xff0c;我们也要学会如何将这个结构的优势发挥出来&#xff0c;我们先来回顾上一节的重点&#xff0c;也就是总结一下B树的特点索引对应的是一棵B树&#xff0c;而B树对应的很多层&#xff0c;每一层存储的数据对应的是下一层节点的…

使用VS2022打包C#项目生成setup文件并部署

首先安装工具 新建Setup项目 先将\bin\Debug下的生成文件添加到里面 添加文件夹将我们需要的文件放入 添加项目输出 在用户桌面添加快捷方式 简单的安装 其实右键项目》生成&#xff0c;然后就在debug这个目录下 下一步下一步就可以了 安装好桌面就有了 添加卸载…

如何把较大的word文档压缩变小,3个高效处理法

在日常工作和学习中&#xff0c;我们经常使用word文档来创建和编辑文件。由于Word文档提供了创建专业和精美文档的便捷工具&#xff0c;并且能够节省用户大量的时间&#xff0c;因此是用户使用频率最高的文字处理程序之一。然而&#xff0c;一些较大的Word文档会占用大量存储空…

【JAVA程序设计】(C00129)基于Springboot+Vue前后端分离的在线考试管理系统

基于SpringbootVue前后端分离的在线考试管理系统 项目简介项目获取开发环境项目技术运行截图 项目简介 基于Springbootvue开发的前后端分离的学生考试系统为三个角色&#xff1a;系统管理员、教师、学生 管理员角色包含以下功能&#xff1a; 题库管理、试题管理、考试管理、阅…

太阳能电池IV测试软件的主要功能,太阳能电池特性测试

太阳能电池测试软件是一种专门用于测试太阳能电池的软件。太阳能电池是一种能够将太阳能转化为电能的装置&#xff0c;它的性能直接影响到太阳能电池发电系统的效率和稳定性。因此&#xff0c;太阳能电池测试软件的开发和使用对于太阳能电池行业的发展具有非常重要的意义。 一、…

[ARM+Linux] 基于全志h616外设开发笔记

修改用户密码 配置网络 nmcli dev wifi 命令扫描周围WIFI热点 nmcli dev wifi connect xxx password xxx 命令连接WiFi 查看ip地址的指令&#xff1a; ifconfig ip addr show wlan0 SSH登录 这是企业开发调试必用方式&#xff0c;比串口来说不用接线&#xff0c;前提是接入网络…

手把手带你了解《线程池》

文章目录 线程池的概念池的目的线程池的优势为什么从池子里拿线程更高效&#xff1f;构造方法参数讲解线程拒绝策略模拟实现线程池一个线程池设置多少线程合适&#xff1f; 线程池的概念 线程池&#xff1a;提前把线程准备好&#xff0c;创建线程不是直接从系统申请&#xff0…