2017-05-26 112 views
0

我有一个配置单元表,我想用下划线('_')替换连字符(' - ')。 示例查询是:如何替换表名中的连字符(短划线)?

CREATE TABLE test_${yearAndMonth} ...... 
INSERT OVERWRITE TABLE test_${yearAndMonth} ...... 

在 'yearAndMonth' 包含类似值:2017-05;所以,我想要表格名称为test_2017_05;然而,'年和月'必须包含连字符值。

我有尝试:正则表达式替换 例如:

CREATE TABLE test_${regexp_replace(yearAndMonth, '-', '_')} ...... 
INSERT OVERWRITE TABLE test_${regexp_replace(yearAndMonth, '-', '_')} ...... 

但是,我得到的错误是:
无法识别附近 'TEST_' 输入 '$' '{' 表呐

请任何建议。

更新: 在这种尝试是这样:

CREATE TABLE test_regexp_replace(${yearAndMonth}, "-", "_") ...... 
INSERT OVERWRITE TABLE test_regexp_replace(${yearAndMonth}, "-", "_") ...... 

我收到此错误: 疏漏之处 '(' 近 'test_regexp_replace'

+0

**(1)**您对Hive变量有什么误解。检查https://stackoverflow.com/questions/42887401/storing-result-of-query-in-hive-variable/42887453#42887453。 **(2)**您必须以正确的格式传递变量。 –

回答

0

改变变量格式EOF配置单元不是一个好主意,尝试在传递之前更改格式。做类似于下面的操作将会起作用(添加id int作为示例列,如果需要,您可以添加自己的或从另一个变量传递它们)

hive --hiveconf table_name=table_$(date '+%Y')_$(date '+%m') -e "create table \${hiveconf:table_name}(id int); insert overwrite table \${hiveconf:table_name}" 
相关问题