問題
您試圖在您的表中使用日本字符,但不斷得到錯誤。
使用OPTIONS關鍵字創建一個表
選項為表提供額外的元數據。您嚐試創建一個表選項並指定字符集作為utf8mb4.
創建默認表。JPN_COLUMN_NAMES('作成年月'字符串,'計上年月'字符串,'所屬コド'字符串,'生保代理店コド_8桁'字符串,'所屬名'字符串)使用csv OPTIONS(路徑"/mnt/tabledata/testdata/",頭“真”,分隔符“,”,inferSchema“假”,ignoreLeadingWhiteSpace "假",ignoreTrailingWhiteSpace "假",multiLine "真",轉義"\",字符集"utf8mb4");
結果是一個錯誤。
SQL語句錯誤:AnalysisException: org.apache.hadoop.hive.ql.metadata.HiveException: MetaException(message:javax.jdo. hadoop. metadata. hiveexception: MetaException)JDODataStoreException: Put request failed: INSERT INTO TABLE_PARAMS (PARAM_VALUE,TBL_ID,PARAM_KEY) VALUES (?,?,?)
創建一個沒有OPTIONS關鍵字的表
您嚐試創建一個不使用的表選項.
創建表測試。JPN_COLUMN_NAMES('作成年月'字符串,'計上年月'字符串)
表似乎已創建,但列名顯示為? ?而不是使用指定的日文字符。
用Hive表表達式創建一個表
您嚐試創建一個Hive格式表並指定字符集為utf8mb4.
創建表測試。JPN_COLUMN_NAMES('作成年月'字符串,'計上年月'字符串)LazySimpleSerDe" WITH SERDEPROPERTIES ("separatorChar" = ",", "quoteChar" = "\"", "escapeChar" = "\\", "serialization.encoding"='utf8mb4') TBLPROPERTIES('存儲。字符集”=“utf8mb4”、“retrieve.charset ' = ' utf8mb4 ');
結果是一個錯誤。
錯誤的字符串值:'\xE4\xBD\x9C\xE6\x88\x90…'為列'COLUMN_NAME'在第1行查詢是:INSERT INTO COLUMNS_V2 (CD_ID,COMMENT, 'COLUMN_NAME',TYPE_NAME,INTEGER_IDX) VALUES (6544,,'作成年月','string',0)
導致
當一個表被創建時,Hive metastore中的一個條目被更新。Hive metastore通常是一個MySQL數據庫。
創建新表時,將列的名稱插入到TABLE_PARAMS亞轉移瘤。
的字符集整理PARAM_VALUE從TABLE_PARAMS是latin1_bin作為整理和字符集是latin1.
從信息schema中選擇TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME。列table_name = ' table_params ' """)
解決方案
latin1不支持日文字符,但是utf - 8所做的事。
你需要使用外部亞穩態UTF-8_bin作為整理和字符集作為utf - 8.
任何5.6或以上的MySQL數據庫都可以用作Hive metastore。
在這個例子中,我們使用的是MySQL 8.0.13-4。
- 創建外部Apache Hive metastore (AWS|Azure|GCP).
- 創建一個數據庫,用默認表實例化新的metastore。
%sql創建數據庫
- 可以在外部數據庫對象瀏覽器或使用show tables命令查看新創建的表。
%sql——在metastore數據庫中運行。顯示
中的表 - 在表級檢查MySQL中的排序信息。
從INFORMATION_SCHEMA中選擇TABLE_COLLATION,TABLE_NAME,TABLE_TYPE,TABLE_COLLATIONTABLE_TYPE為'BASE%'的表
- 在列級檢查MySQL中的排序信息。
從INFORMATION_SCHEMA中選擇TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME。列
- 改變字符集從latin1來utf - 8.
%sql——在metastore數據庫中運行。所有查詢都與MySQL兼容。改變數據庫的排序和字符集。ALTER DATABASE
CHARACTER SET utf8 COLLATE utf8_bin;-更改每個表格的整理和字符集。ALTER TABLE CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;—在列級別更改排序規則和字符集。ALTER TABLE MODIFY CHARACTER SET utf8 COLLATE utf8_bin; - 您現在可以在顯示表格時正確地查看日文字符。