当我使用命令
运行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脚本?
答案 0 :(得分:2)
在调用配置单元时,您必须转义引号,例如-d arg_partition1=\"p1\"
才能使其生效。
但是,我不明白为什么在任何情况下你都必须在替换字符串中添加引号。据推测,在编写查询时,您知道字段的数据类型,因此如果partition1
是字符串,则在查询中包含引号,例如WHERE partition1="${arg_partition1}";
,如果它是整数,则完全将它们排除在外。