sparkSQL常用用法
1)、----CAST和CONVERT的用法
SQL中的cast和convert都是用來將一種數據類型的表達式轉換為另一種數據類型的表達式。
CAST和CONVERT提供相似的功能,只是語法不同。
在時間轉化中一般用到convert,因為它比cast多加了一個style,可以轉化成不同時間的格式。
使用 CAST:
CAST ( expression AS data_type )
使用 CONVERT:
CONVERT (data_type[(length)], expression [, style])
2)、-----修改表test的字段 a 為 a1 類型為 int
ALTER TABLE test_change CHANGE a a1 INT;
ALTER TABLE dm_pquser_exception_detail_d CHANGE id id string;
3)、-----hive sql增加字段
alter table dm_highrail_sector_lte_new_d add columns(kqi_httpwebrspdelay bigint,kqi_httpwebcmpltdelay bigint,kqi_thrput bigint,kqi_stallfrequ bigint,kqi_imsentrate bigint)
4)、-----gbase sql增加字段
alter table dm_poor_ne_1800_index_d add app_score double
5)、----查看分區
show partitions lte_netmaxl_nbi_covergrid;
6)、----刪除表分區
alter table cfg_sector_c drop partition(p_provincecode=510000,p_date=‘2017-05-01‘)
7)、----排序
order by
按clttime降序排序
order by clttime desc
按msisdn分組,在分組內按clttime降序排序 ,別名給num
row_number() over(partition by msisdn order by clttime desc) as num
row_number() over(partition by msisdn order by clttime desc) as num
8)、---rand()取隨機數
select rand()*10 AS flag_rand from aggr_pl_abnormal_day limit 10;
floor是把rand()取隨機數取整(向下取整)
select cast(floor(rand()*10) AS int) AS flag_rand from aggr_pl_abnormal_day limit 10;
ceil是把rand()隨機數向上取整
9)、----按天刪除表的數據
delete dm_base_sector_c_d where day=‘2017-12-05‘;
10)、---字符串截取函數,截取imsi從第一位到最後一位
substr(imsi,1,5),
例如:截取月份:2017-10-10
select substr(‘2017-10-10‘,6,2); 返回10
11)、---coalesce取第一個不為空的值
select coalesce(null,8,9);
12)、---day函數,計算天數
比如:select day(‘2017-09-27‘),結果為:27
13)、---在sql中獲取系統實時的時間
select from_unixtime(unix_timestamp(), ‘yyyy-MM-dd HH:mm:ss‘) as insert_time
14)、---修改mysql數據庫(gbae數據庫)的表的字段值
update data_board set state=1 where tablename=‘dm_mob_inter_app_video_ci_4g_stat_d‘ and day=‘2017-09-20‘;
15)、---修復表分區
msck repair table dm_mdn_imsi_ternimal
16)、----UDF註冊的使用:
-- 柵格id及x,y偏移量轉經緯度
create temporary function MultiGridToLonLat as ‘com.gstools.impala.MultiGridToLonLat‘;
MultiGridToLonLat(RegionID,X_Offset,Y_Offset,100)//100為柵格的大小
-- 標準經緯度轉高德經緯度
create temporary function GDLonlat as ‘com.gstools.impala.GDLonlat‘;
GDLonlat(longitude_left_up, latitude_left_up) as left_up,
GDLonlat(longitude_right_down, latitude_right_down) as right_down,
cast(split(left_up,‘,‘)[0] as float) as longitude_left_up,
cast(split(left_up,‘,‘)[1] as float) as latitude_left_up,
cast(split(right_down,‘,‘)[0] as float) as longitude_right_down,
cast(split(right_down,‘,‘)[1] as float) as latitude_right_down,
-- 經緯度轉柵格id及x,y偏移量
create temporary function MultiLonLatToGrid as ‘com.gstools.impala.MultiLonLatToGrid‘;
-- 計算兩點距離
create temporary function LonLatDistance as ‘com.gstools.impala.LonLatDistance‘;
17)、----柵格超過20米的判斷
abs(left_up_longitude-right_down_longitude)>0.0005
select
count(1)
from dm_plan_grid_agps_d where p_date=‘2017-04-28‘ and abs(left_up_longitude-right_down_longitude)>0.0005;
18)、----排查數據重復出自那個表, 檢查主鍵是否唯一,執行改sql,顯示0條,則表示主鍵唯一,否則主鍵不唯一
video_ci_lte是小區的表 :
select
enodebid,
cellid,
count(1)
from video_ci_lte where p_provincecode=510000 and reportdate=‘2017-10-31‘
group by enodebid,cellid
having count(1)>1
sparkSQL常用用法