hadoop - 使用变量替换 (-d|--define) 的 Hive 参数因字符串参数而失败

标签 hadoop hql hive

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

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

返回错误

FAILED: SemanticException [Error 10004]: Line 3:36 Invalid table alias or column reference 'p1': (possible column names are: 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 脚本?

最佳答案

调用 hive 时,您必须转义引号,例如 -d arg_partition1=\"p1\" 才能正常工作。

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

关于hadoop - 使用变量替换 (-d|--define) 的 Hive 参数因字符串参数而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17728836/

相关文章:

hadoop - 无法使用 Mapreduce 将数据加载到 Htable

csv - 在 Hue 中上传/导入 .csv - 指定正确的分隔符等

hadoop - 用于从 Netezza 到 HDFS 的数据传输的 Sqoop 作业

hibernate - HQL 按多对多集合属性排序

hibernate - 仅比较 HQL 中的日期组件

amazon-web-services - 将数据从 Hive 写入 Amazon S3,同时保持表分区目录结构

apache-spark - Spark SQL 插入选择问题

hadoop - 无法启动 sqoop : jobtracker not found

Hive 分区恢复

hive - Hive 中的 bool 列加载为 NULL