当前位置: 首页 > news >正文

OceanBase V4.2解析:如何用迭代器 Generator快速生成任意数据

前言

 

OceanBase 4.2 版本新增了迭代器 generator 函数。尽管这一功能在数据库领域中已属于通用能力,postgresql 也提供了类似的函数,然而,与MySQL和Oracle数据库在默认情况下是需要用户额外编写函数来实现的。OceanBase 4.2 的这一更新也是满足更多用户的需求。

迭代器具有自我多次运行的能力,通过generator函数,用户可以快速地生成任意所需数据。以下是关于generator函数在OceanBase中的具体应用案例。

随机0至99的字符

select  floor((RAND())*100)  from table(generator(10)) ;

1703044518

随机生成10到19的随机

select  floor((RAND()+1)*10)  from table(generator(10)) ;

1703044553

随机生成小数据点后2位,前面整数是0

SELECT ROUND(RAND(), 2) from table(generator(10)) ;

1703044570

随机生成小数据点后4位,前面整数是2位

SELECT ROUND(RAND()*100, 4) from table(generator(10)) ;

1703044619

生成1994年1月15日往前的日期时间,
随机增加数据

select date_add('1994-01-15' , interval floor((RAND()+1)*20) day )   from table(generator(10)) ;

1703044648

生成1994年1月15日往前的随机日期时间,
递减数据1  

select date_sub('1994-01-15' , interval floor((RAND())*10) day )   from table(generator(10)) ;

1703044729

生成时间,1994年1月15做基准,随机按月递减

select date_sub('1994-01-15' , interval floor((RAND())*10) month )   from table(generator(10)) ;

1703044797

生成时间,1994年1月15做基准,随机按年递减

select date_sub('1994-01-15' , interval floor((RAND())*10) year )   from table(generator(10)) ;

1703044822

生成时间,1994年1月15做基准,随机按年、月、日 递减

select date_sub(date_sub(date_sub('1994-01-15' , interval floor((RAND())*10) year ),interval floor((RAND())*10) month),interval floor((RAND())*10) day)   from table(generator(10)) ;

1703044847

生成顺序序列

CREATE SEQUENCE seq1 START WITH 1 INCREMENT BY 1;

select seq1.nextval  from table(generator(10)) ;

1703044881

生成长度为100的随机字符串

select  RANDSTR(100, RANDOM()) from table(generator(10)) ;

1703044951

生成定算的随机  固定数组变量

假设列表选项有MAIL、TRUCK、AIR、FOB、REG AIR,只想生成数组变量这些相关的东西。

Postgresql很简单就可以做到,它具备变量数组的表达,例如(array['MAIL', 'TRUCK', 'RAIL', 'FOB', 'SHIP', 'REG AIR'])[列表]。

我找了OceanBase的官方相关文档,目前数组变量固定输出的函数,但是达到同样的目标可以用以下较灵活的方法制造数据

select  

CASE

      WHEN concat("test",floor((RAND())*6)) ='test0' THEN 'MAIL'

      WHEN concat("test",floor((RAND())*6)) ='test1' THEN 'TRUCK'

      WHEN concat("test",floor((RAND())*6)) ='test2' THEN 'AIR' 

      WHEN concat("test",floor((RAND())*6)) ='test3' THEN 'RAIL' 

      WHEN concat("test",floor((RAND())*6)) ='test4' THEN 'FOB' 

      WHEN concat("test",floor((RAND())*6)) ='test5' THEN 'SHIP' 

      WHEN concat("test",floor((RAND())*6)) ='test0' THEN 'MAIL'

      WHEN concat("test",floor((RAND())*6)) ='test1' THEN 'TRUCK'

      WHEN concat("test",floor((RAND())*6)) ='test2' THEN 'AIR' 

      WHEN concat("test",floor((RAND())*6)) ='test3' THEN 'RAIL' 

      WHEN concat("test",floor((RAND())*6)) ='test4' THEN 'FOB' 

      WHEN concat("test",floor((RAND())*6)) ='test5' THEN 'SHIP'

ELSE 'REG AIR'

END

from table(generator(10)) ;

1703044977

案例tpc-h基准中的 lineitem表

insert /*+ ENABLE_PARALLEL_DML PARALLEL(4) */ into  lineitem   

select  seq2.nextval,

      floor((RAND()+1)*1000000),

      floor((RAND()+1)*10000),

      floor((RAND()+1)*100),

      floor((RAND()+1)*10000),

      floor((RAND()+1)*1000000),

      floor((RAND()+1)*1000),

      floor((RAND()+1)*1000),

      'F',

      'F',

      date_add('1994-01-15' , interval floor((RAND()+1)*10) day ),

      date_add('1994-09-25' , interval floor((RAND()+1)*7) day ),

      date_add('1995-05-15' , interval floor((RAND()+1)*2) year ), 

      RANDSTR(20, RANDOM()),

      CASE

      WHEN concat("test",floor((RAND())*6)) ='test0' THEN 'MAIL'

      WHEN concat("test",floor((RAND())*6)) ='test1' THEN 'TRUCK'

      WHEN concat("test",floor((RAND())*6)) ='test2' THEN 'AIR'

      WHEN concat("test",floor((RAND())*6)) ='test3' THEN 'RAIL'

      WHEN concat("test",floor((RAND())*6)) ='test4' THEN 'FOB'

      WHEN concat("test",floor((RAND())*6)) ='test5' THEN 'SHIP'

      WHEN concat("test",floor((RAND())*6)) ='test0' THEN 'MAIL'

      WHEN concat("test",floor((RAND())*6)) ='test1' THEN 'TRUCK'

      WHEN concat("test",floor((RAND())*6)) ='test2' THEN 'AIR'

      WHEN concat("test",floor((RAND())*6)) ='test3' THEN 'RAIL'

      WHEN concat("test",floor((RAND())*6)) ='test4' THEN 'FOB'

      WHEN concat("test",floor((RAND())*6)) ='test5' THEN 'SHIP'

      ELSE 'REG AIR'

      END as shipmode,

      RANDSTR(25, RANDOM()) 

from table(generator(10)) ;

1703044996

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • DS18B20温度传感器详解(STM32)
  • MySQL基础学习:MySQL主从复制如何实现
  • 在HarmonyOS中灵活运用Video组件实现视频播放
  • Golang | Leetcode Golang题解之第385题迷你语法分析器
  • Level3 — PART 4 机器学习算法 — 集成学习
  • RK3568 Android 11 蓝牙BluetoothA2dpSink 获取用于生成频谱的PCM
  • 测试 UDP 端口可达性的方法
  • 学习笔记--Docker
  • Android实现自定义方向盘-7livedata,viewmodel相关问题
  • 编译FFmpeg动态库
  • 传统CV算法——图像特征算法之角点检测算法
  • 比亚迪方程豹携手华为乾崑智驾,加速中国智驾技术向前
  • 【粒子群算法PSO】基本原理及多种改进方法
  • 32位CPU中,实现32位无符号乘法,返回64位无符号数据。原理解析。
  • rknntoolkitlite2环境搭建
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 电商搜索引擎的架构设计和性能优化
  • 关于List、List?、ListObject的区别
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 前嗅ForeSpider教程:创建模板
  • 如何解决微信端直接跳WAP端
  • 正则表达式-基础知识Review
  • ​Benvista PhotoZoom Pro 9.0.4新功能介绍
  • ​虚拟化系列介绍(十)
  • #数学建模# 线性规划问题的Matlab求解
  • (1)bark-ml
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (八)c52学习之旅-中断实验
  • (不用互三)AI绘画工具应该如何选择
  • (二)hibernate配置管理
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot金融新闻信息服务系统 毕业设计651450
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (已解决)vue+element-ui实现个人中心,仿照原神
  • .“空心村”成因分析及解决对策122344
  • .bat批处理(十一):替换字符串中包含百分号%的子串
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net 7和core版 SignalR
  • .NET 8.0 发布到 IIS
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET 线程 Thread 进程 Process、线程池 pool、Invoke、begininvoke、异步回调
  • .NET基础篇——反射的奥妙
  • @autowired注解作用_Spring Boot进阶教程——注解大全(建议收藏!)
  • @data注解_一枚 架构师 也不会用的Lombok注解,相见恨晚
  • @FeignClient注解,fallback和fallbackFactory
  • @JsonFormat 和 @DateTimeFormat 的区别
  • [ 渗透测试面试篇 ] 渗透测试面试题大集合(详解)(十)RCE (远程代码/命令执行漏洞)相关面试题
  • []error LNK2001: unresolved external symbol _m
  • [2024-06]-[大模型]-[Ollama]- WebUI
  • [AIGC] 如何建立和优化你的工作流?
  • [BT]小迪安全2023学习笔记(第29天:Web攻防-SQL注入)
  • [C#]winform基于深度学习算法MVANet部署高精度二分类图像分割onnx模型高精度图像二值化
  • [cb]UIGrid+UIStretch的自适应