文章目錄
- 1.背景
- 2.Hive 變量命名空間
- 查看變量
- 設置變量
- 引用變量
- 參考文獻
1.背景
在書寫 Hive SQL 時,有時需要將重復出現的值從 SQL 分離出來,以變量的方式表示和引用。
設置變量和引用變量可以帶來以下幾個好處:
-
簡化查詢語句:在 SQL 查詢中,經常需要使用一些常量或固定值,例如日期、路徑等。如果直接在查詢語句中寫死這些值,會導致查詢語句變得冗長且難以維護。通過定義變量并在查詢中引用變量,可以使查詢語句更加簡潔和易讀。
-
提高可維護性:通過定義變量,可以將常量和固定值抽象出來,使得查詢語句更加易于維護和修改。如果需要修改常量或固定值,只需要修改變量的值即可,而不需要修改所有引用該常量或固定值的查詢語句。
-
提高可重用性:通過定義變量,可以將常量和固定值封裝為一個可重用的模塊。例如,可以將一些常用的查詢條件或參數定義為變量,并在多個查詢中引用這些變量,從而避免重復編寫相同的查詢語句。
-
增強靈活性:通過使用變量,可以使查詢語句更加靈活和可配置。例如,可以將一些參數定義為變量,并在運行時動態修改這些參數的值,從而使查詢語句具有更高的適應性和可配置性。
總之,自定義變量和引用變量是一種良好的編程習慣,可以使查詢語句更加簡潔、易讀、易于維護和重用,并提高查詢語句的靈活性和可配置性。
2.Hive 變量命名空間
Hive 變量有四個命名空間 —— hiveconf、system、 env 和 hivevar。
命名空間 | 權限 | 描述 |
---|---|---|
hiveconf | 讀寫 | Hive 相關配置屬性 |
system | 讀寫 | Java 定義的配置屬性 |
env | 只讀 | Shell 環境定義的環境變量 |
hivevar | 讀寫 | 用戶自定義臨時變量(Hive v0.8.0 及之后版本) |
查看變量
(1)查看所有變量。
SET;-- 加上 -v 可以查看 HDFS 和 MapReduce 的環境變量信息
SET -v;
(2)查看指定變量。
SET varname;-- 查看自定義變量
-- 名字空間 hivevar 可加可不加
SET myvar;
SET hivevar:myvar;-- 查看 Hive 配置參數:用于限制每個節點上允許創建的動態分區的數量
-- 名字空間 hiveconf 可加可不加
SET hive.exec.max.dynamic.partitions.pernode;
SET hiveconf:hive.exec.max.dynamic.partitions.pernode;-- 查看 system 變量,必須指定名字空間
SET sytem:user.name;
-- 結果示例
sytem:user.name=hadoop-- 查看 env 變量,必須指定名字空間
SET env:HADOOP_HOME
-- 結果示例
env:HADOOP_HOME=/usr/local/service/hadoop
設置變量
設置變量時,如果不指定命名空間,缺省為 hiveconf。
(1)修改 Hive 配置參數。
-- 名字空間 hiveconf 可加可不加
SET hive.exec.max.dynamic.partitions.pernode=1000;
SET hiveconf:hive.exec.max.dynamic.partitions.pernode=1000;
(2)自定義變量。
Hive 中的自定義變量是會話級別的,即它們在會話結束后會被重置。
-- 必須加上 hivevar
SET hivevar:myvar='hello';
引用變量
(1)SQL 中引用自定義變量。
-- 可加可不加名字空間 hivevar
SELECT ${myvar};
SELECT ${hivevar:myvar};
SQL 中引用其他名字空間下的變量,好像會報錯,比如 env 下的 Shell 環境變量,感興趣的同學可以試一下。
參考文獻
LanguageManual VariableSubstitution - Apache Hive