kudu快速造测试数据

为了测试kudu的数据迁移,需要往kudu表中大量造数,怎么快速造1亿的数据呢。比如我有一张Employees_China表(见图),假设表中开始有100条数据。

在impala中执行的语句如下:

with temptable as 
(
    select 1 union all
    select 2 union all 
    select 3 union all
    select 4 union all
    select 5 union all 
    select 6 union all
    select 7 union all
    select 8 union all 
    select 9 
)
insert into table Employees_China
select 
uuid() as E_ID,t1.Ename
from Employees_China as t1
join temptable on 1=1

那么只需要运行6次就有1亿的数据量

运行第1次:100*9=900+100

运行第2次:1000*9=9000+1000

运行第3次:1W*9=9W+1W

运行第4次:10W*9=90W+10W

运行第5次:100W*9=900W+100W

运行第6次: 1000W*9=9000W+1000W=1亿

 

这里面有几个知识点:

1.union和union all

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

例子:

Employees_China:

Employees_USA:

SELECT E_Name FROM Employees_China UNION SELECT E_Name FROM Employees_USA

union会列出所有的雇员名,不重复

返回:

Zhang, Hua

Wang, Wei

Gates, Bill

 

SELECT E_Name FROM Employees_China UNION ALL SELECT E_Name FROM Employees_USA

union all 会列出所有的雇员名,会重复

Zhang, Hua

Wang, Wei

Zhang, Hua

Gates, Bill

 

2.笛卡尔积

两个集合A,B

A = {0,1}     B = {2,3,4}

A*B={(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)}

对应sql是join

select * from Employees_China join Employees_USA

同select * from Employees_China,Employees_USA

返回结果:

join on语句

select * from Employees_China join Employees_USA on Employees_China.E_ID = Employees_USA.E_ID

同 select * from Employees_China,Employees_USA where Employees_China.E_ID = Employees_USA.E_ID

返回结果:

INNER JOIN:等同于join

LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行

RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行

FULL JOIN: 结合了LEFT JOIN和RIGHT JOIN的结果

 

3.with as

例子:

with
a as (select * from a_table),
b as (select * from b_table)
select * from a, b where a.id = b.id;

相当于建了a、b临时表,把一大堆重复用到的sql语句放在with as里面,取一个别名,后面的查询就可以用它,这样对于大批量的sql语句起到一个优化的作用,而且清楚明了

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章