hive -e "xxx"
可以运行引号内sql语句;
hive -f xxx
可以运行文件内sql语句;
with as
后可以写一个select的sql,可以用来构建一个临时表,表中的数据是自己写的sql生成的,然后可以用这个临时表的数据对其它表进行操作。
//with...as...需要定义一个sql片段,会将这个片段产生的结果集保存在内存中,后续的sql均可以访问这个结果集,作用与视图或临时表类似.
下方是 hive -e with as 用法样例,先用sql构建了一个临时表与数据,然后把临时表中的数据 插入/更新 到另一张表:
样例文件名:sync_data.sh
#实际执行的方法
function exe_sync(){
hive -e "
set hive.auto.convert.join = false;
with tmp_user as (
select
if(a.company || a.branch <> 'A70', a.comcode, '-') company,
(case when a.branchtype = '1' then
(case when a.agentgradekind = '' or a.agentgradekind is null then ''
else substr(a.agentgradekind, 2, 4) end
) else a.F7 end
) roleFlag,
a.agentname username,
a.agentid id,
null status
from test.agentinfo a
)
INSERT overwrite table test.user partition (import_date='$1')
select
$1,
t.company,
t.roleFlag,
t.username,
t.id,
t.status,
'001'
from temp_user t
"
}
#执行,传一个参数,$1用
exec_sync 20211019
其它笔记:
1.hive的 insert into 与 insert overwrite 的区别:
insert into是普通的插入,insert overwrite会先清空表
,再插入数据。
2.关于function,以下2种写法是正确的:
function exe_sync {}
function exe_sync(){}
以下1种写法会报错:
function exe_sync{}
function 方法名 , 后边必须加空格或括号,不加会报错。