hive按表达式或模板划分

iqxoj9l9  于 2021-05-27  发布在  Hadoop
关注(0)|答案(0)|浏览(404)

我发现一个hive ql的脚本如下:

ALTER TABLE dwd.o_p_data_reports
DROP IF EXISTS PARTITION (partition_dt='${#date(0,0,-1):yyyyMMdd#}');

insert overwrite table dwd.o_p_data_reports partition (partition_dt = '${#date(0,0,-1):yyyyMMdd#}')
-- no changed
select 
 dwd.id
,dwd.title
,dwd.desc
,dwd.source
,dwd.source_url
,dwd.download_url
,dwd.cloud_url
,dwd.publish_date
,dwd.created_at
,dwd.updated_at
,dwd.last_fetched_at
,dwd.size
,dwd.cate
,dwd.author
,dwd.site
,dwd.page_num
,dwd.sectors
from 
(select * from dwd.o_p_data_reports where partition_dt = '${#date(0,0,-2):yyyyMMdd#}') dwd 
left join 
(select * from ods.o_p_data_reports where partition_dt = '${#date(0,0,-1):yyyyMMdd#}') ods  
on dwd.id = ods.id  
where ods.id is null

有些不寻常的事, '${#date(0,0,-1):yyyyMMdd#}' 看起来像是一个表达式,在执行整个查询脚本之前,它会产生一些特定的值。
这个脚本在服务器上运行良好,而且 partition_dt 就像 20200115 . 然而,它将失败在我自己的计算机上直接执行在Hive壳,因为 partition_dt 只会产生 $ 在这种情况下。
据我所知, partition_dt = '${#date(0,0,-1):yyyyMMdd#}' 是:
不是配置单元函数调用,因为
不是配置单元变量,因为第一行没有设置变量,并且格式错误(这是错误的) ${foobar} ,不是 ${#foobar#} )
不是自定义项,因为没有自定义项导入
不是动态分区,因为动态分区会失败(使用hive datetime函数,如 date_add() )但这次成功了。
那是什么 '${#date(0,0,-1):yyyyMMdd#}' ?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题