我在将变量的值与字符串连接起来时遇到了问题。我的脚本包含以下内容
set hivevar:tab_dt= substr(date_sub(current_date,1),1,10);
CREATE TABLE default.udr_lt_bc_${hivevar:tab_dt}
(
trans_id double
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";
在上面的例子中,变量tab_dt以yyyymmdd格式正确地分配了昨天的日期。但是,当我尝试用静态字符串连接表名中的这个变量时,脚本失败了。它没有进行连接。请提供解决方案。
注意:我也尝试了下面的,这是错误的
set hivevar:tab_dt= substr(date_sub(current_date,1),1,10);
set hivevar:tab_nm1= default.udr_lt_bc_;
set hivevar:tab_name= concat(${hivevar:tab_dt},${hivevar:tab_nm1})
CREATE TABLE ${hivevar:tab_name}
(
trans_id double
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";
这也返回了一个错误。
2条答案
按热度按时间dly7yett1#
Hive中的另一种方式:
在这里,我们可以在变量中使用上面的内容,并根据需要使用它。
mdfafbf12#
hive不计算变量中的表达式,而是按原样替换它们。create table表达式的结果如下:
第二个表达式的结果如下:
不幸的是,hive在ddl中不支持这样的表达式。
我建议在shell中计算这个变量,并将其作为--hivevar传递给配置单元脚本。
例如,在sell脚本中:
然后在您的脚本中可以使用变量:
请注意
'-'
表名中不允许使用,这就是我使用'_'
相反。要更好地了解配置单元如何替换变量,请尝试以下操作:
请注意,在第一个select语句中,变量被替换为执行前的状态,然后在sql中进行计算。第二个select语句阻止计算,因为变量被引用并保持原样:
substr(date_sub(current_date,1),1,10)
.