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語句起到一個優化的作用,而且清楚明瞭

 

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