使用内置数据库功能生成示例数据

有很多方法可以为数据库生成虚拟数据。您可以创建数据生成器、使用模拟数据服务或获取生产数据的子集。此外,许多数据库提供生成合成数据的内置功能。

在本文中,您将了解如何使用特殊数据库函数、分层查询和递归公用表表达式 (CTE)在PostgreSQL、MySQL、 Oracle 和 SQL Server中生成示例数据集。

示例表

我们将使用以下示例表来演示各种内置数据生成技术:

create table sample(  id int,   val text);

id列存储记录的标识符,而val列保存一些文本值。

一旦您学会如何为具有两个列的表生成模拟数据,您就可以将这些技巧应用到具有更多不同数据类型列的表上。

PostgreSQL中的生成系列函数 

PostgreSQL提供了一个特殊的generate_series函数,它可以为指定范围产生一系列数字或日期/时间值。

例如,要生成从1到5的一系列ID,您可以使用以下函数调用:

select id from generate_series(1, 5) as id;+--+|id|+--+|5 ||4 ||3 ||2 ||1 |+--+

之后,您可以使用以下简单语句将生成的系列插入表中sample:

insert into sample(id)select id from generate_series(1, 5) as id;

此查询向表中添加 5 条记录,每条记录都有一个唯一标识符。但是,该val列仍然是null:

select * from sample order by id;+--+----+|id|val |+--+----+|1 |null||2 |null||3 |null||4 |null||5 |null|+--+----+

要使用val非空值填充列,您只需修改数据生成查询,如下所示:

-- Delete previously generated recordsdelete from sample;-- Generate 1000 records using the concat function to populate the `val` columninsert into sample(id,val)select id, concat('val', id * 10) from generate_series(1, 1000) as id;

最后,从表中检索前 5 条记录来查看示例数据:

select * from sample order by id limit 5;+--+-----+|id|val  |+--+-----+|1 |val10||2 |val20||3 |val30||4 |val40||5 |val50|+--+-----+

快速又简单。

再次生成系列...但在 SQL Server 中

SQL Server 的最新版本引入了对generate_series 函数的支持。因此,无论您使用 PostgreSQL 还是 SQL Server,生成示例数据的体验都是一致的。

要生成从 1 到 5 的一系列数字,您可以按如下方式调用该函数:

select value from generate_series(1,5);+-----+|value|+-----+|1    ||2    ||3    ||4    ||5    |+-----+

随后,执行以下命令在表中创建1000条记录sample:

insert into sample(id,val)select value,concat('val', value * 10) from generate_series(1,1000);

要检查生成的数据,查询前 5 条记录:

select * from sample order by idoffset 0 rowsfetch next 5 rows only;+--+-----+|id|val  |+--+-----+|1 |val10||2 |val20||3 |val30||4 |val40||5 |val50|+--+-----+

正如所演示的,该generate_series函数是执行数据生成任务的强大工具。然而,该函数还不是 SQL 标准的一部分,并且可能并非在所有数据库系统中都可用。

Oracle 中的分层查询

Oracle是不支持该generate_series功能的数据库之一。然而,数据库社区设计了许多替代方法来生成虚拟数据。

一种流行的方法涉及使用分层查询。例如,下面的分层查询可以生成从1到5的一系列记录:

select level from dual connect by level <= 5;+-----+|LEVEL|+-----+|1    ||2    ||3    ||4    ||5    |+-----+

在内部,查询构造一个数据树结构,其中LEVEL伪列指示树的深度,从根开始。

通过使用带有插入语句的分层查询,您可以为sample表生成 1000 条记录:

-- Oracle doesn't support the `text` data type,-- requiring you to create the table this waycreate table sample (id int, val varchar(10));-- Generate 1000 recordsinsert into sample(id,val)select level, concat('val', level * 10) from dual connect by level <= 1000;

生成的数据将类似于您在 PostgreSQL 和 SQL Server 中看到的数据:

select * from sample order by idoffset 0 rows fetch next 5 rows only;+--+-----+|ID|VAL  |+--+-----+|1 |val10||2 |val20||3 |val30||4 |val40||5 |val50|+--+-----+

MySQL 中的递归公用表表达式

与 Oracle 一样,MySQL 也不支持该generate_series功能,因此需要寻找替代方法来生成样本数据。

其中一种方法是使用递归公用表表达式(CTE)。为了说明这一点,以下递归查询生成一系列从 1 到 5 的数字:

with recursive seq as (    select 1 as id union all select id +1 from seq where id < 5)select id from seq;+--+|id|+--+|1 ||2 ||3 ||4 ||5 |+--+

接下来,您可以将此递归与以下插入语句结合使用来生成 1000 条记录:

insert into sample(id,val)with recursive seq as (    select 1 as id union all select id +1 from seq where id < 1000)select id, concat('val', id * 10) from seq;

最后,为了确保模拟数据已正确生成,请快速查看前五个记录:

select * from sample order by id limit 5;+--+-----+|id|val  |+--+-----+|1 |val10||2 |val20||3 |val30||4 |val40||5 |val50|+--+-----+

继续掌握数据库

如您所见,关系数据库不仅仅是应用程序数据的存储。它们提供了广泛的功能,允许您直接在数据库端执行各种任务。其中一项任务是样本数据生成,有时可以通过内置数据库功能来满足。

作者:Denis Magda

更多技术干货请关注公号【云原生数据库

squids.cn,云数据库RDS,迁移工具DBMotion,云备份DBTwin等数据库生态工具。

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

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

相关文章

Linux 系统管理与调优

Part I: Linux 系统概述 什么是 LinuxLinux 的历史和版本Linux 发行版介绍Linux 的优缺点 Part II: Linux 安装与配置 5. 硬件要求与准备工作 6. 安装 Linux 操作系统 7. Linux 系统初始化设置 8. Linux 系统更新与升级 9. Linux 基础配置 Part III: Linux 命令行 10. Linux…

Python参数传递,从入门到精通

Python是一种非常灵活的编程语言&#xff0c;以多种方式定义和调用函数。其中一个关键方面是参数传递的灵活性。在Python中&#xff0c;可以通过位置、关键字、默认值和可变长度参数等多种方式来传递参数。 1. 位置参数 位置参数是最常见的参数传递方式。当调用一个函数时&am…

node插件express(路由)的插件使用(二)——cookie 和 session的基本使用区别

文章目录 前言一、express 框架中的 cookie0、cookie的介绍和作用1. 设置cookie2.删除cookie3.获取cookie&#xff08;1&#xff09;安装cookie-parser&#xff08;2&#xff09;导入cookie-parser&#xff08;3&#xff09;注册中间件&#xff08;4&#xff09;获取cookie&…

苍穹外卖项目学习日记(12)

苍穹外卖项目学习日记(12) day09 历史订单查询 controller层OrderController添加历史订单查询方法OrderController.java GetMapping("/historyOrders")ApiOperation("历史订单查询")public Result<PageResult> page(OrdersPageQueryDTO ordersPage…

使用Python分析时序数据集中的缺失数据

大家好&#xff0c;时间序列数据几乎每秒都会从多种来源收集&#xff0c;因此经常会出现一些数据质量问题&#xff0c;其中之一是缺失数据。 在序列数据的背景下&#xff0c;缺失信息可能由多种原因引起&#xff0c;包括采集系统的错误&#xff08;例如传感器故障&#xff09;…

秋招面试问题总结

1.自我介绍 &#xff08;这个问题是必须问的第一个问题&#xff0c;重点讲一下自己研究生期间做的项目经历&#xff0c;这个是面试官感兴趣的&#xff0c;需要将项目经历往所投公司的业务上靠拢&#xff0c;体现自己可以为公司做什么&#xff09;。 2.项目经历 自我介绍之后…

Intel® DevCloud for oneAPI SYCL编程项目实践

问题陈述 实验所用的硬件环境和软件环境 本次实验使用oneAPI中支持SYCL编程模型的C编译器&#xff0c;使用英特尔oneAPI Developer Cloud服务&#xff0c;可以免安装额外环境&#xff0c;利用CPU作为主机&#xff08;Host&#xff09;&#xff0c;同时利用GPU作为设备&#xf…

LCA

定义 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 性质 如果 不为 的祖先并且 不为 的祖先&#xff0c;那么 分别处于 的两棵不同子树中&#…

【机试题】LazyIterator迭代器懒加载问题

将下面这个未完成的Java工具类补充完成&#xff0c;实现懒加载的功能&#xff0c;该类需要实现Iterable接口&#xff0c;能够遍历所有数据。具体要求如下&#xff1a; 工具类提供了一个ValueLoader接口&#xff0c;用于获取数据&#xff0c;其中ValueLoader的接口定义为&#x…

Paas-混合云平台

混合云融合了公有云和私有云&#xff0c;是近年来云计算的主要模式和发展方向。它将公有云和私有云进行混合和匹配&#xff0c;以获得最佳的效果&#xff0c;这种个性化的解决方案&#xff0c;达到了既省钱又安全的目的。 什么是混合云&#xff1f; 混合云&#xff08;Hybrid…

修改django开发环境runserver命令默认的端口

runserver默认8000端口 虽然python manage.py runserver 8080 可以指定端口&#xff0c;但不想每次runserver都添加8080这个参数 可以通过修改manage.py进行修改&#xff0c;只需要加三行&#xff1a; from django.core.management.commands.runserver import Command as Ru…

二十四、W5100S/W5500+RP2040树莓派Pico<PHY的状态模式控制>

文章目录 1. 前言2. 相关简介2.1 简述2.2 原理2.3 优点&应用 3. WIZnet以太网芯片4. PHY模式配置测试4.1 程序流程图4.2 测试准备4.3 连接方式4.4 相关代码4.5 测试现象 5. 注意事项6. 相关链接 1. 前言 W5100S/W5500不仅支持自动PHY自动协商&#xff0c;而且支持用户自定义…

自动生成Form表单提交在苹果浏览器中的注意事项

以下是本人在公司旧系统中看到的该段代码 function Post(URL, PARAMTERS) {//创建form表单var temp_form document.createElement("form");temp_form.action URL;//如需打开新窗口&#xff0c;form的target属性要设置为_blanktemp_form.target "_blank"…

【皮格马利翁效应】积极暗示,容易梦想成真

&#x1f680;The deepest desire of human nature is to gain the appreciation of others . &#x1f680; 人性最深切的渴望就是获得他人的赞赏——哈佛大学教授、心理学家、威廉-詹姆斯 Pygmalion effect: positive suggestion makes dreams easy to come true 皮格马利翁…

[EFI]技嘉 Z490 VISION G i5-10500 电脑 Hackintosh 黑苹果引导文件

硬件配置 硬件型号驱动情况主板技嘉 Z490 VISION G CLPC controller Z490芯片组&#xff09;处理器英特尔 Core i5-10500 3.10GHz 六核已驱动内存16GB&#xff08; 威到DDR42655MHz8GBx 2〕已驱动硬盘SSDSC2BB150G7R (150 GB/ 国态硬盘&#xff09;已驱动显卡AMD Radeon RX 58…

[论文阅读] CLRerNet: Improving Confidence of Lane Detection with LaneIoU

Abstract 车道标记检测是自动驾驶和驾驶辅助系统的重要组成部分。采用基于行的车道表示的现代深度车道检测方法在车道检测基准测试中表现出色。通过初步的Oracle实验&#xff0c;我们首先拆分了车道表示组件&#xff0c;以确定我们方法的方向。我们的研究表明&#xff0c;现有…

Python之字符串、正则表达式练习

目录 1、输出随机字符串2、货币的转换&#xff08;字符串 crr107&#xff09;3、凯撒加密&#xff08;book 实验 19&#xff09;4、字符替换5、检测字母或数字6、纠正字母7、输出英文中所有长度为3个字母的单词 1、输出随机字符串 编写程序&#xff0c;输出由英文字母大小写或…

ESP32 BLE特征值示例

键盘特征值初始化示例 void BleKeyboard::begin(void) {BLEDevice::init(deviceName);BLEServer* pServer BLEDevice::createServer();pServer->setCallbacks(this);hid new BLEHIDDevice(pServer);inputKeyboard hid->inputReport(KEYBOARD_ID); // <-- input R…

大洋钻探系列之二IODP 342航次是干什么的?(上)

本文简单介绍一下大洋钻探IODP 342航次&#xff0c;从中&#xff0c;我们一窥大洋钻探航次的风采。 IODP342的航次报告在网络上可以下载&#xff0c;英文名字叫《Integrated Ocean Drilling ProgramExpedition 342 Preliminary Report》&#xff0c;航次研究的主要内容是纽芬兰…

对熟人要装穷

《对熟人要装穷》 作者&#xff0f;罗光记 在这个繁华的世界里&#xff0c;我们每个人都在人生的舞台上扮演着不同的角色。有的人光彩照人&#xff0c;有的人默默无闻&#xff0c;但无论我们身处何种境地&#xff0c;都要学会如何在人际交往中游刃有余。尤其是面对熟人时&…