Hadoop 试图用HQL中的变量替换配置单元字符串文字

Hadoop 试图用HQL中的变量替换配置单元字符串文字,hadoop,hive,hdfs,hiveql,Hadoop,Hive,Hdfs,Hiveql,嗨,我有一个简单的CREATETABLE语句 set location_stage=${env:HDFS_STAGING_DIR}; CREATE EXTERNAL TABLE IF NOT EXISTS stage.test( TEST_ID INT, TEST_NAME STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar"

嗨,我有一个简单的CREATETABLE语句

set location_stage=${env:HDFS_STAGING_DIR};
CREATE EXTERNAL TABLE IF NOT EXISTS stage.test(
TEST_ID INT,
TEST_NAME STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "quoteChar"     = "\"",
   "escapeChar"    = "\\")
STORED AS TEXTFILE
LOCATION "${hivevar:location_stage}";
我不需要“hivevar:location\u stage”-我只需要“env:HDFS\u STAGING\u DIR”。然而,两者都不起作用。我在“LOCATION”子句中使用了这两个词。我用命令行运行这两个命令

hive -f test_hive_variable.sql
但我得到以下错误

FAILED: IllegalArgumentException java.net.URISyntaxException: Relative path in absolute URI: ${hivevar:location_stage%7D
配置单元版本为配置单元1.2.1000.2.4.2.0-258

您的脚本可以是:

CREATE EXTERNAL TABLE IF NOT EXISTS stage.test(
TEST_ID INT,
TEST_NAME STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
   "separatorChar" = ",",
   "quoteChar"     = "\"",
   "escapeChar"    = "\\")
STORED AS TEXTFILE
LOCATION "${HDFS_STAGING_DIR}";
然后要传递
HDFS\u STAGING\u DIR
,您可以使用:

hive -f test_hive_variable.hql --hivevar HDFS_STAGING_DIR="/user/hive/warehouse/staging_dir"

我欠你一杯啤酒sir@Mike我不能拒绝。干杯。