hive按表达式或模板划分

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

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

  1. ALTER TABLE dwd.o_p_data_reports
  2. DROP IF EXISTS PARTITION (partition_dt='${#date(0,0,-1):yyyyMMdd#}');
  3. insert overwrite table dwd.o_p_data_reports partition (partition_dt = '${#date(0,0,-1):yyyyMMdd#}')
  4. -- no changed
  5. select
  6. dwd.id
  7. ,dwd.title
  8. ,dwd.desc
  9. ,dwd.source
  10. ,dwd.source_url
  11. ,dwd.download_url
  12. ,dwd.cloud_url
  13. ,dwd.publish_date
  14. ,dwd.created_at
  15. ,dwd.updated_at
  16. ,dwd.last_fetched_at
  17. ,dwd.size
  18. ,dwd.cate
  19. ,dwd.author
  20. ,dwd.site
  21. ,dwd.page_num
  22. ,dwd.sectors
  23. from
  24. (select * from dwd.o_p_data_reports where partition_dt = '${#date(0,0,-2):yyyyMMdd#}') dwd
  25. left join
  26. (select * from ods.o_p_data_reports where partition_dt = '${#date(0,0,-1):yyyyMMdd#}') ods
  27. on dwd.id = ods.id
  28. 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#}' ?

暂无答案!

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

相关问题