問題
你想在你的表中使用日文字符,但越來越錯誤。
創建一個表的選項關鍵字
選項提供額外的元數據表。你試著創建一個表選項並指定字符集作為utf8mb4。
% sql創建表默認。JPN_COLUMN_NAMES(“作成年月”字符串,“計上年月”字符串,“所屬コード”字符串,“生保代理店コード_8桁的字符串,“所屬名的字符串)使用csv選項(路徑“/ mnt / tabledata / testdata /”,標題“真實”,分隔符“,”,inferSchema“false”, ignoreLeadingWhiteSpace“false”, ignoreTrailingWhiteSpace“false”,多行“真實”,擺脫“\”“字符集”utf8mb4”);
結果是一個錯誤。
在SQL語句錯誤:AnalysisException: org.apache.hadoop.hive.ql.metadata。HiveException: MetaException(信息:javax.jdo。JDODataStoreException: Put請求失敗:插入TABLE_PARAMS (PARAM_VALUE, TBL_ID PARAM_KEY)值(?,?,?)
沒有選項關鍵字創建一個表
你想創建一個表不使用選項。
% sql創建表測試。JPN_COLUMN_NAMES(“作成年月”字符串,“計上年月的字符串)使用csv描述擴展test.JPN_COLUMN_NAMES;
表似乎是創建,但列名稱顯示為? ? ? ?而不是使用日本指定的字符。
創建一個表與表表達式
你試著創建一個蜂巢格式表和指定字符集utf8mb4。
% sql創建表測試。JPN_COLUMN_NAMES(“作成年月”字符串,“計上年月的字符串)行格式org.apache.hadoop.hive.serde2.lazy SERDE”。與SERDEPROPERTIES LazySimpleSerDe”(“separatorChar”=“,”,“quoteChar”=“\””、“escapeChar " = " \ \ ", " serialization.encoding”=“utf8mb4”) TBLPROPERTIES(“商店。字符集”=“utf8mb4”、“retrieve.charset ' = ' utf8mb4 ');
結果是一個錯誤。
引起的:java.sql。SQLException異常:錯誤的字符串值:“\ xE4 \ xBD \ x9C \ xE6 \ x88 \ x90……在第1行“列”COLUMN_NAME”查詢的方法是:插入COLUMNS_V2 (CD_ID,評論,COLUMN_NAME, TYPE_NAME, INTEGER_IDX)值(6544年,《零》,“作成年月”,“弦”,0)
導致
當創建一個表,一個條目在蜂巢metastore更新。蜂巢metastore通常是一個MySQL數據庫。
創建一個新表時,插入的列的名稱TABLE_PARAMSmetastore。
的字符集整理PARAM_VALUE從TABLE_PARAMS是latin1_bin排序和字符集是latin1。
% scala executeQuery(“”選擇TABLE_SCHEMA、TABLE_NAME COLUMN_NAME, COLLATION_NAME INFORMATION_SCHEMA。列在TABLE_NAME = TABLE_PARAMS”“”)
解決方案
latin1沒有支持日本字符,但utf - 8所做的事。
你需要使用外部metastoreUTF-8_bin排序和字符集作為utf - 8。
可以使用任何MySQL數據庫5.6或以上作為蜂巢metastore。
對於本例,我們使用MySQL 8.0.13-4。
- 創建一個外部Apache蜂巢metastore (AWS|Azure|GCP)。
- 創建一個數據庫實例化新的metastore默認表。
% sql創建數據庫< database_name >
- 新創建的表可以探索在外部數據庫對象瀏覽器或者使用命令顯示表。
% sql——metastore數據庫中運行。在< database_name >顯示表
- 檢查在MySQL在表級別排序信息。
% sql SELECT TABLE_COLLATION, TABLE_NAME、TABLE_TYPE TABLE_COLLATION INFORMATION_SCHEMA。表,TABLE_TYPE像“基地%”
- 檢查在MySQL在列級別排序信息。
% sql SELECT TABLE_SCHEMA, TABLE_NAME、COLUMN_NAME COLLATION_NAME INFORMATION_SCHEMA.COLUMNS
- 改變字符集從latin1來utf - 8。
% sql——metastore數據庫中運行。所有的查詢都是兼容的MySQL。——改變排序和跨數據庫的字符集。改變數據庫< database_name >字符集utf8核對utf8_bin;——修改表排序和字符集。ALTER TABLE < table_name >轉換為字符集utf8核對utf8_bin;——修改排序和字符集列水平。ALTER TABLE < table_name >修改< column_name > <數據類型>字符集utf8核對utf8_bin;
- 你現在可以正確認識日本字符顯示表時。