我发现一个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#}'
?
暂无答案!
目前还没有任何答案,快来回答吧!