日本性格支持外部亞穩態

在表中使用外部亞轉移的日文字符。

寫的亞當Pavlacka

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

問題

您試圖在您的表中使用日本字符,但不斷得到錯誤。

使用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_VALUETABLE_PARAMSlatin1_bin作為整理和字符集latin1

從信息schema中選擇TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME。列table_name = ' table_params ' """)

Latin1_bin排序圖像。

解決方案

latin1不支持日文字符,但是utf - 8所做的事。

你需要使用外部亞穩態UTF-8_bin作為整理和字符集作為utf - 8

任何5.6或以上的MySQL數據庫都可以用作Hive metastore。

在這個例子中,我們使用的是MySQL 8.0.13-4。

  1. 創建外部Apache Hive metastore (AWS|Azure|GCP).
  2. 創建一個數據庫,用默認表實例化新的metastore。
    %sql創建數據庫
  3. 可以在外部數據庫對象瀏覽器或使用show tables命令查看新創建的表。
    %sql——在metastore數據庫中運行。顯示中的表
  4. 在表級檢查MySQL中的排序信息。
    從INFORMATION_SCHEMA中選擇TABLE_COLLATION,TABLE_NAME,TABLE_TYPE,TABLE_COLLATIONTABLE_TYPE為'BASE%'的表
  5. 在列級檢查MySQL中的排序信息。
    從INFORMATION_SCHEMA中選擇TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, COLLATION_NAME。列
  6. 改變字符集latin1utf - 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;
  7. 您現在可以在顯示表格時正確地查看日文字符。
    列名中的日文字符。