【Impala SQL 造数(一)】

news/2024/9/17 7:38:35/ 标签: sql, 数据库, impala

前言

SQL 造数即生成测试数据,一般是编码完成之后的测试阶段所需,测试数据可以用于多种目的,包括测试应用程序的功能、业务场景测试、性能测试、数据恢复测试等。在测试阶段特别是数据类需求,需要很多造数场景,像 Hive、Impala 这些大数据组件又不能像一般的关系型数据库如 MySQL 这样可以方便的对数据进行增删改,开发人员该如何生成有效准确的测试数据进行单元自测,测试人员该如何造数、埋数,进行上下游一整条数据链路的测试并符合业务场景需要呢?以下是一些常见的SQL造数思路:

1. INSERT INTO … SELECT …

INSERT INTO … SELECT… 造数格式是最常用的,也经常用来备份数据;

如果使用 DBeaver 数据库管理工具还可以使用它的快速生成SQL语句功能。

例:

sql">INSERT INTO world.test
(id, cust_name, city, addr, update_time, cust_id)
SELECT id, cust_name, city, addr, update_time, cust_id
FROM world.test
;

基于数据库中已有的数据记录,通过修改部分字段值来生成新的数据。

这时候如果只是希望某个值发生变化,可以直接在 SELECT 语句对应的列自定义或使用随机函数进行造数。

以 INSERT INTO … SELECT … 为例:

sql">INSERT INTO world.test
(id, cust_name, city, addr, update_time, cust_id, data_dt)
SELECT 
CAST( RAND() * 100 + 1 )  AS STRING ) AS id
, cust_name
, city, addr
, update_time
, cust_id
, CAST( '2024-08-08' AS VARCHAR(10) ) AS data_dt
FROM world.test
WHERE data_dt = '2024-09-08'
;

RAND() 或 RANDOM():生成随机数。

上面的SQL语句实现用 ‘2024-09-08’ 日期的数据生成一份 ‘2024-08-08’ 日期的数据,并且使用 rand() 函数生成1到100之间的随机整数作为 id 字段的值。

2. INSERT INTO … VALUES (…)

可以使用 INSERT INTO … VALUES 语句批量插入单行或多行数据。

插入单行:

sql">INSERT INTO world.test
(id, cust_name, city, addr, update_time, cust_id)
VALUES('', '', '', '', CURRENT_TIMESTAMP, '')
;

插入多行:

sql">INSERT INTO table_name VALUES
(value1_col1, value1_col2, ..., value1_colN),
(value2_col1, value2_col2, ..., value2_colN),
...,
(valueM_col1, valueM_col2, ..., valueM_colN)
;

示例 1:插入具有相同列的多行数据
假设你有一个名为 employees 的表,它有三列:id, name, salary。

sql">INSERT INTO employees VALUES
(1, 'John Doe', 50000),
(2, 'Jane Smith', 60000),
(3, 'Jim Brown', 55000)
;

示例 2:插入具有不同列的多行数据
如果你只想插入某些列的值,可以省略其他列,但必须确保省略的列允许NULL值或者有默认值。

sql">INSERT INTO employees (id, name) VALUES
(4, 'Alice Johnson'),
(5, 'Bob Wilson')
;

在这个例子中,我们没有为 salary 列提供值,所以它将被设置为NULL,像 MySQL 数据库有设置默认值则使用默认值。

3. 复制表备份数据

在 Impala 中,你可以使用 CREATE TABLE 语句结合 LIKE 子句来创建一个新表,其结构(包括列和数据类型)与现有表相同。这通常用于快速复制表结构,但不包括数据。

sql">CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

如果你想创建一个新表并复制现有表的数据,可以使用 SELECT 语句与 CREATE TABLE 语句结合使用。

示例 1:使用 LIKE 子句创建表
假设你有一个名为 test 的现有表,你想创建一个具有相同结构但没有数据的新表 test_copy:

sql">CREATE TABLE IF NOT EXISTS test_copy LIKE test;

示例 2:使用 AS SELECT 创建表并复制数据
如果你想创建一个新表 test_new 并复制 test 表的数据:

sql">CREATE TABLE IF NOT EXISTS test_new AS SELECT * FROM test;

最后

在需求开发中,测试阶段是开发质量把关的重要一步,以上只是简单的介绍常用的生成测试数据的几种方法,具体还是要根据业务场景,数据链路优化生成测试数据流程,更好的管控程序质量、数据质量。


欢迎微信搜索并关注我的公众号: 键道码屋
这里分享工作、生活、见闻、思考,我们一起阅读、思考、写作、行动,共同进步。


http://www.ppmy.cn/news/1522600.html

相关文章

尚品汇-支付宝支付同步异步回调实现(四十七)

目录: (1)订单支付码有效时间 (2)支付后回调—同步回调 (3)支付宝回调—异步回调 (1)订单支付码有效时间 (2)支付后回调—同步回调 static修饰…

【Jupyter Notebook】安装与使用

打开Anaconda Navigator点击"Install"(Launch安装前是Install)点击"Launch"点击"File"-"New"-"Notebook"​ 5.点击"Select"选择Python版本 6.输入测试代码并按"Enter+Shift"运行代码: 代码如下: …

考研系列-408真题数据结构篇(18-23)

写在前面 此文章是本人在备考过程中408真题数据结构部分(2018年-2023年)的易错题及相应的知识点整理,后期复习也尝尝用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2018年 1.堆的建立(从后往前进行调整) 2.算法(正整数和数组之间关系的建立)

k8s API资源对象ingress

有了Service之后,我们可以访问这个Service的IP(clusterIP)来请求对应的Pod,但是这只能是在集群内部访问。 要想让外部用户访问此资源,可以使用NodePort,即在node节点上暴漏一个端口出来,但是这…

pytorch+深度学习实现图像的神经风格迁移

本文的完整代码和部署教程已上传至本人的GitHub仓库,欢迎各位朋友批评指正! 1.各代码文件详解 1.1 train.py train.py 文件负责训练神经风格迁移模型。 加载内容和风格图片:使用 utils.load_image 函数加载并预处理内容和风格图片。初始化…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688,功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算,可支持 16 路高清视频实时分析,灵活应对图像、语音、自…

Java中等题-摆动序列(力扣)

如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为 摆动序列 。第一个差(如果存在的话)可能是正数或负数。仅有一个元素或者含两个不等元素的序列也视作摆动序列。 例如, [1, 7, 4, 9, 2, 5] 是一个 摆动序列 &…

数据库锁之行级锁、记录锁、间隙锁和临键锁

1. 行级锁 InnoDB 引擎支持行级锁,而MyISAM 引擎不支持行级锁,只支持表级锁。行级锁是基于索引实现的。 对于普通的select语句,是不会加记录锁的,因为它属于快照读,通过在MVCC中的undo log版本链实现。如果要在查询时对…

Python 安装selenium的办法

之前一直安装python以为要进入python的菜单进行输入 如下 老是提示错误,原来是我搞错了,安装这个直接进入cmd即可 如下 pip install selenium 再用pip list查看一下是否安装成功

git 提交代码由原先账号密码调整为ssh

如果你希望将 Git 提交代码的身份验证方式从用户名和密码切换到 SSH,你需要进行以下几个步骤: 1. 生成 SSH 密钥对 如果你还没有 SSH 密钥对,可以使用以下命令生成一个新的密钥对: ssh-keygen -t rsa -b 4096 -C "your_em…

基于SpringBoot校园快递代取系统

基于springbootvue实现的校园快递代取系统(源码L文ppt)4-049 3系统设计 3.1.1系统结构图 系统结构图可以把杂乱无章的模块按照设计者的思维方式进行调整排序,可以让设计者在之后的添加,修改程序内容…

C++设计模式——Chain of Responsibility职责链模式

一,职责链模式的定义 职责链模式,又被称为责任链模式,是一种行为型设计模式,它让多个对象依次处理收到的请求,直到处理完成为止。 职责链模式需要使用多个对象,其中的每个对象要么处理请求,要…

iPhone手机清理软件:照片清理功能全解析

在数字化生活中,智能手机成为我们记录生活点滴的主要工具,尤其是iPhone,以其卓越的相机功能备受用户青睐。然而,成千上万的照片迅速堆积,不仅占用了大量存储空间,还使得设备运行缓慢。在众多解决方案中&…

数据传输安全——混合加解密(国密)

国密SM2与SM4混合加密解密工具类详解及其与其他加密算法的对比分析 在当今互联网时代,信息安全变得尤为重要。随着国家密码局发布的商用密码算法(即国密算法)逐渐普及,SM2和SM4等算法因其高效性和安全性成为了国内应用中的重要组成部分。本文不仅将详细介绍一个基于Java的…

如何本地搭建Whisper语音识别模型

要在本地搭建Whisper语音识别模型,你需要遵循以下步骤,注意Whisper模型是由OpenAI发布的,但基于你的要求,这里将尽可能提供详细的指导: 环境准备: 首先,确保你的计算机安装了Python,…

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架…

Mac(M2)系统手动安装ADB

ADB压缩包下载地址 下载解压后运行命令 zsh命令 // /Desktop/android为解压后文件夹的路径 ~ 符号表示跟目录1. echo export PATH$PATH:~/Desktop/android/platform-tools/ >> ~/.zshrc// 使第一步配置生效 2. source ~/.zshrc shell命令 // /Desktop/android为解…

计算机组成原理:总线技术深度解析

目录 1. 总线技术概述 1.1 什么是总线? 1.2 总线的基本功能 2. 总线的类型 2.1 内部总线 2.2 外部总线 3. 总线的标准与协议 3.1 常见的总线标准 3.2 总线协议 4. 总线的性能考量 4.1 带宽 4.2 延迟 4.3 可扩展性 5. 总线的未来趋势 6. 结语 在计算机…

VMware中共享文件夹没了怎么办?

1.进入root su root 需要提前设置密码 sudo passwd root 2.创建一个hgfs文件夹,share就在这里面 sudo mkdir /mnt/hgfs/ 3.输入下面的命令 sudo mount -t fuse.vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 4.然后就能找到share文件夹了,注意每…

PDF读取表格写入EXCEL

声明&#xff1a;只记录&#xff0c;不推荐&#xff0c;因为e-iceblue的spire.pdf是收费的&#xff0c;要licence。 pom引入 <repositories><repository><id>com.e-iceblue</id><name>e-iceblue</name><url>https://repo.e-iceblu…