Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 使用变量替换(-d |--define)的配置单元参数因字符串参数而失败_Hadoop_Hql_Hive - Fatal编程技术网

Hadoop 使用变量替换(-d |--define)的配置单元参数因字符串参数而失败

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

当我使用命令运行配置单元脚本时

配置单元-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 (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}”