用外部Hive亞metastore創建表時出錯

由於字符集,MySQL 8.0在外部Hive metastore中創建表錯誤。

寫的jordan.hicks

最後發布日期:2022年5月16日

問題

您正在連接到一個外部MySQL metastore,並試圖在遇到錯誤時創建一個表。

AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(消息:在添加/驗證類(es)時拋出異常:(conn=21)列長度太大,列'PARAM_VALUE' (max = 16383);使用BLOB或TEXT代替。

導致

當默認字符集為時,這是MySQL 8.0的一個已知問題utfmb4

可以通過在有錯誤的數據庫上運行查詢來確認這一點。

%sql SELECT default_character_set_name FROM information_schemaSCHEMATA S WHERE schema_name = ""

解決方案

您需要更新或重新創建數據庫,並將字符集設置為latin1

選項1

  1. 在Hive數據庫中手動運行create語句默認字符集= latin1在每個結尾創建表聲明。
    %sql CREATE TABLE ' TABLE_PARAMS ' (' TBL_ID ' BIGINT NOT NULL, ' PARAM_KEY ' VARCHAR(256) BINARY NOT NULL, ' PARAM_VALUE ' VARCHAR(4000) BINARY NOT NULL, CONSTRAINT ' TABLE_PARAMS_PK '主鍵(' TBL_ID ', ' PARAM_KEY '))
  2. 重新啟動Hive metastore並重複操作,直到所有創建錯誤都得到解決。

選項2

  1. 設置數據庫和用戶帳戶。
  2. 創建數據庫並運行修改數據庫hive字符集latin1在啟動亞穩態之前。

該命令設置默認值字符集對於數據庫。當metastore創建表時應用它。