2017-05-31 15 views
0

嗨變量我有一個簡單的create table語句...試圖取代HIVE字符串字面與HQL

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_stage」 - 我需要的只是「ENV: HDFS_STAGING_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

回答

1

您的腳本可以是:

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_STAGING_DIR,你可以使用:

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

我欠你一杯啤酒先生 –

+0

@Mike不能說不。乾杯。 – philantrovert