d |--define)的hadoop-hive参数在使用字符串参数时失败

iqxoj9l9  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(316)

当我用命令运行配置单元脚本时
配置单元-d arg\u partition1=“p1”-f test.hql
它返回错误
失败: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};

如果我将分区修改为整数,那么它工作正常并返回正确的结果。
如何使用字符串参数运行配置单元脚本?

dm7nw8vv

dm7nw8vv1#

在调用配置单元时,必须对引号进行转义,例如 -d arg_partition1=\"p1\" 为了让它起作用。
但是,我不明白为什么在任何情况下都必须在替换字符串中添加引号。假设您在编写查询时知道字段的数据类型,那么 partition1 是一个字符串,然后在查询中包含引号,例如 WHERE partition1="${arg_partition1}"; 如果是整数,就把它们完全去掉。

相关问题