欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > 【Impala SQL 造数(一)】

【Impala SQL 造数(一)】

2024/10/26 8:15:00 来源:https://blog.csdn.net/m0_47163275/article/details/142029332  浏览:    关键词:【Impala SQL 造数(一)】

前言

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

1. INSERT INTO … SELECT …

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

如果使用 DBeaver 数据库管理工具还可以使用它的快速生成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 … 为例:

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 语句批量插入单行或多行数据。

插入单行:

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

插入多行:

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。

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

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

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

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

3. 复制表备份数据

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

CREATE TABLE IF NOT EXISTS new_table LIKE existing_table;

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

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

CREATE TABLE IF NOT EXISTS test_copy LIKE test;

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

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

最后

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


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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com