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 方法名 , 后边必须加空格或括号,不加会报错。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)