使用变量替换(-d | --define)的Hive参数失败并带有字符串参数

时间:2013-07-18 16:15:25

标签: hadoop hql hive

当我使用命令

运行hive脚本时
  

hive -d arg_partition1 =" p1" -f test.hql

它返回错误

  

FAILED:SemanticException [错误10004]:第3行:36无效的表别名或列引用' p1' :(可能的列名是:line,partition1)

名为test.hql的脚本

DROP TABLE IF EXISTS test;
CREATE EXTERNAL TABLE IF NOT EXISTS test (Line STRING)
    PARTITIONED BY (partition1 STRING);
ALTER TABLE test ADD PARTITION (partition1="p1") LOCATION '/user/test/hive_test_data';
SELECT * FROM test WHERE partition1=${arg_partition1};

如果我将分区修改为整数,那么它可以正常工作并返回正确的结果。

如何使用字符串参数运行Hive脚本?

1 个答案:

答案 0 :(得分:2)

在调用配置单元时,您必须转义引号,例如-d arg_partition1=\"p1\"才能使其生效。

但是,我不明白为什么在任何情况下你都必须在替换字符串中添加引号。据推测,在编写查询时,您知道字段的数据类型,因此如果partition1是字符串,则在查询中包含引号,例如WHERE partition1="${arg_partition1}";,如果它是整数,则完全将它们排除在外。