Hadoop 使用变量替换(-d |--define)的配置单元参数因字符串参数而失败
当我使用命令运行配置单元脚本时 配置单元-d arg_partition1=“p1”-f test.hql 它返回错误 失败:SemanticException[错误10004]:行3:36无效的表别名或列引用“p1”:(可能的列名为:行,分区1) 名为test.hql的脚本Hadoop 使用变量替换(-d |--define)的配置单元参数因字符串参数而失败,hadoop,hql,hive,Hadoop,Hql,Hive,当我使用命令运行配置单元脚本时 配置单元-d arg_partition1=“p1”-f test.hql 它返回错误 失败:SemanticException[错误10004]:行3:36无效的表别名或列引用“p1”:(可能的列名为:行,分区1) 名为test.hql的脚本 DROP TABLE IF EXISTS test; CREATE EXTERNAL TABLE IF NOT EXISTS test (Line STRING) PARTITIONED BY (partition
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};
如果我将分区修改为整数,那么它工作正常并返回正确的结果
如何使用字符串参数运行配置单元脚本?在调用配置单元时,必须对引号进行转义,例如
-d arg\u partition1=\“p1\”
,这样才能工作
但是,我不明白为什么在任何情况下都必须在替换字符串中添加引号。在编写查询时,您可能知道字段的数据类型,因此如果partition1
是字符串,则在查询中包括引号,例如WHERE partition1=“${arg\u partition1}”如果它是一个整数,就把它们全部去掉