如何替换表名中的连字符(破折号)?

时间:2017-05-26 13:44:34

标签: sql hive hql

我有一个hive表,我想用下划线('_')替换连字符(' - ')。 示例查询如下:

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

'yearAndMonth'包含的值如下:2017-05;所以,我希望将表值名称设为test_2017_05;但是,'yearAndMonth'必须包含连字符值。

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

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

然而,我收到的错误是:
无法识别'test_''附近的输入''''''在表na me

请提出任何建议。

更新 尝试这样做是:

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

我收到此错误: 在'''''test_regexp_replace'

附近缺少EOF

1 个答案:

答案 0 :(得分:0)

更改配置单元中的变量格式不是一个好主意,尝试在传递之前更改格式。执行类似于下面的操作(将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}"