日本在外部metastore字符支持

在外部metastore使用日本字符表。

写的亚当Pavlacka

去年发表在:2022年5月16日

问题

你想在你的表中使用日文字符,但越来越错误。

创建一个表的选项关键字

选项提供额外的元数据表。你试着创建一个表选项并指定字符集作为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_VALUETABLE_PARAMSlatin1_bin排序和字符集latin1

% scala executeQuery(“”选择TABLE_SCHEMA、TABLE_NAME COLUMN_NAME, COLLATION_NAME INFORMATION_SCHEMA。列在TABLE_NAME = TABLE_PARAMS”“”)

Latin1_bin整理形象。

解决方案

latin1没有支持日本字符,但utf - 8所做的事。

你需要使用外部metastoreUTF-8_bin排序和字符集作为utf - 8

可以使用任何MySQL数据库5.6或以上作为蜂巢metastore。

对于本例,我们使用MySQL 8.0.13-4。

  1. 创建一个外部Apache蜂巢metastore (AWS|Azure|GCP)。
  2. 创建一个数据库实例化新的metastore默认表。
    % sql创建数据库< database_name >
  3. 新创建的表可以探索在外部数据库对象浏览器或者使用命令显示表。
    % sql——metastore数据库中运行。在< database_name >显示表
  4. 检查在MySQL在表级别排序信息。
    % sql SELECT TABLE_COLLATION, TABLE_NAME、TABLE_TYPE TABLE_COLLATION INFORMATION_SCHEMA。表,TABLE_TYPE像“基地%”
  5. 检查在MySQL在列级别排序信息。
    % sql SELECT TABLE_SCHEMA, TABLE_NAME、COLUMN_NAME COLLATION_NAME INFORMATION_SCHEMA.COLUMNS
  6. 改变字符集latin1utf - 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;
  7. 你现在可以正确认识日本字符显示表时。
    在列名日语字符。


这篇文章有用吗?