尝试用 HQL 中的变量替换 HIVE 字符串文字
Trying to replace HIVE string literal with variable in HQL
嗨,我有一个简单的创建 table 语句...
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
Hive版本为Hive 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_STAGING_DIR
,你可以使用:
hive -f test_hive_variable.hql --hivevar HDFS_STAGING_DIR="/user/hive/warehouse/staging_dir"
嗨,我有一个简单的创建 table 语句...
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
Hive版本为Hive 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_STAGING_DIR
,你可以使用:
hive -f test_hive_variable.hql --hivevar HDFS_STAGING_DIR="/user/hive/warehouse/staging_dir"