Hive3連接RDBMS和使用函數

JdbcStorageHandler查詢RDBMS

使用JdbcStorageHandler,可以將Hive連接到MySQL,PostgreSQL,Oracle,DB2或Derby數據源。然後,您可以創建一個表示數據的外部表,並查詢該表。

此任務假定您是CDP數據中心用戶。您創建一個使用JdbcStorageHandler連接到並讀取本地JDBC數據源的外部表。

1. 將數據載入到群集中某個節點上受支援的SQL資料庫(如MySQL)中,或使自己熟悉資料庫中的現有數據。

2. 使用JdbcStorageHandler和指定最小資訊的表屬性創建一個外部表:資料庫類型,驅動程式,資料庫連接字元串,用於查詢hive的用戶名和密碼,表名以及與Hive的活動連接數。

CREATE EXTERNAL TABLE mytable_jdbc(    col1 string,    col2 int,    col3 double  )  STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'  TBLPROPERTIES (    "hive.sql.database.type" = "MYSQL",    "hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",    "hive.sql.jdbc.url" = "jdbc:mysql://localhost/sample",    "hive.sql.dbcp.username" = "hive",    "hive.sql.dbcp.password" = "hive",    "hive.sql.table" = "MYTABLE",    "hive.sql.dbcp.maxActive" = "1"  );  

• 查詢外部表。

SELECT * FROM mytable_jdbc WHERE col2 = 19;

使用函數

您可以調用內置的Hive函數來執行多種操作之一,而不必執行多個步驟。您可以使用SHOW FUNCTIONS搜索或列出可用功能。當無法使用內置函數來執行所需的操作時,可以創建用戶定義函數(UDF)。您可能需要重新載入函數以更新在另一個會話中創建的函數的可用性。

重新載入,查看和篩選 函數 要確定可用的Hive功能和運算符,請重新載入函數,然後使用SHOW FUNCTIONS語句。語句中的可選模式將過濾語句返回的功能列表。

創建用戶定義的函數 您可以從與Hadoop和Hive兼容的Java項目中將用戶自定義函數(UDF)導出到JAR,並將JAR存儲在集群或對象存儲中。使用Hive命令,您可以基於JAR註冊UDF,然後從Hive查詢中調用UDF。

2.1. 重新載入,查看和過濾函數

若要確定可用的Hive函數和運算符,請重新載入函數,然後使用SHOW FUNCTIONS語句。語句中的可選模式將過濾語句返回的功能列表。

在此任務中,您首先需要重新載入函數以使會話開始後在Hive會話中註冊的所有用戶定義函數可用。語法為:

RELOAD (FUNCTION|FUNCTIONS);

接下來,使用SHOW FUNCTIONS語句。該語句的語法為:

SHOW FUNCTIONS [LIKE "<pattern>"];

<pattern>表示可以包含正則表達式通配符的搜索字元。

最後,您可以通過發出DESCRIBE FUNCTION語句來獲得有關使用的更多資訊。

1. 打開Hive Shell。

在群集節點的命令行上,例如:

beeline -u jdbc:hive2://mycloudhost-3.com:10000 -n <your user name> -p

2. 重新載入功能以確保您的會話中所有註冊的UDF均可用。

RELOAD FUNCTIONS;

使用命令的複數形式。RELOAD FUNCTION是為了向後兼容。

3. 生成可用的內置和用戶定義函數(UDF)的列表。

SHOW FUNCTIONS;

出現內置函數,運算符和UDF的列表。

+------------------------------+  |           tab_name           |  +------------------------------+  | !                            |  | !=                           |  | $sum0                        |  | %                            |  ...  

4. 使用正則表達式通配符生成功能過濾列表 %。

SHOW FUNCTIONS LIKE "a%";

a 出現以字元開頭的所有可用功能。

+------------------------------+  |           tab_name           |  +------------------------------+  | abs                          |  | acos                         |  | add_months                   |  ...  

5. 獲取有關特定功能的更多資訊。

DESCRIBE FUNCTION abs;  +-------------------------------------------+  |                 tab_name                  |  +-------------------------------------------+  | ABS(x) - returns the absolute value of x  |  +-------------------------------------------+  

6. 獲取有關該功能的更多資訊。

DESCRIBE FUNCTION EXTENDED abs;  +----------------------------------------------------+  |                      tab_name                      |  +----------------------------------------------------+  | ABS(x) - returns the absolute value of x           |  | Synonyms: abs                                      |  | Example:                                           |  |   > SELECT ABS(0) FROM src LIMIT 1;                |  |   0                                                |  |   > SELECT ABS(-5) FROM src LIMIT 1;               |  |   5                                                |  | Function class:org.apache.hadoop.hive.ql.udf.generic.GenericUDFAbs |  | Function type:BUILTIN                              |  +----------------------------------------------------+

創建用戶自定義函數

您可以從與Hadoop和Hive兼容的Java項目中將用戶自定義函數(UDF)導出到JAR,然後將JAR存儲在集群或對象存儲中。使用Hive命令,您可以基於JAR註冊UDF,然後從Hive查詢中調用UDF。

• 您具有將JAR上載到集群或集群或對象存儲的訪問許可權。

Cloudera Manager,最低要求角色:配置器(也由Cluster Administrator,Full Administrator提供)。

• HiveServer在群集上運行。

• 您已在要創建UDF的電腦或虛擬機上安裝了Java和Java集成開發環境(IDE)工具。

1. 設置開發環境 您可以使用IntelliJ 在開發環境 中創建Hive UDF,並使用從Cloudera集群下載的Hive和Hadoop JARS構建UDF。

2. 創建UDF類 您可以在新類中定義UDF邏輯,該類將返回表中所選列的數據類型。

3. 生成項目並上載JAR 您可以將UDF程式碼編譯成JAR,然後將JAR添加到群集上的類路徑中。您需要使用直接引用或為Hive配置群集以找到JAR。

4. 註冊UDF 在群集中,您登錄到Hive,然後從Beeline運行命令以使UDF在Hive查詢中起作用。在HiveServer重新啟動之間,UDF仍然存在。

5. 在查詢中調用UDF 註冊UDF之後,無需在查詢中使用UDF之前重新啟動Hive。在此示例中,您調用在SELECT語句中創建的UDF,Hive返回您指定的列的數據類型。

原文鏈接:https://docs.cloudera.com/runtime/7.0.3/using-hiveql/topics/hive_query_sql_using_jdbcstoragehandler.html