Hive传递日期字符串参数遭数学运算,如何获取原字符串?
解决Hive变量传递日期被解析为算术运算的问题
问题根源是Hive在替换${hivevar:prev_year_sixmnth_date}后,2023-01-01会被当作2023 - 01 - 01的算术运算执行,最终得到2021。要获取原始日期字符串,必须让Hive把变量值识别为字符串常量,而不是表达式,具体可以用以下几种方式:
- 用双引号包裹查询语句:这样查询内的单引号不需要转义,直接给变量值套单引号即可
hive --hivevar prev_year_sixmnth_date='2023-01-01' -e "select '${hivevar:prev_year_sixmnth_date}' as prev_year_sixmnth_date"
- 转义查询内的单引号:如果坚持用单引号包裹查询,需要用反斜杠转义内部的单引号,将变量值包裹成字符串
hive --hivevar prev_year_sixmnth_date='2023-01-01' -e 'select '\''${hivevar:prev_year_sixmnth_date}'\'' as prev_year_sixmnth_date'
- 定义变量时直接带上单引号:给变量值外层再加一对单引号(注意外层用双引号包裹变量定义),替换后SQL里会直接是带单引号的字符串
hive --hivevar prev_year_sixmnth_date="'2023-01-01'" -e 'select ${hivevar:prev_year_sixmnth_date} as prev_year_sixmnth_date'
注意:之前尝试的cast或to_date无效,是因为Hive的变量替换发生在SQL语法解析之前,替换后SQL已经变成了select 2023-01-01 ...,此时再做类型转换已经无法还原原始日期字符串了。
内容的提问来源于stack exchange,提问作者user3437212
相关产品推荐
相关产品推荐

