解决Hive视图View数据乱码的问题

这篇具有很好参考价值的文章主要介绍了解决Hive视图View数据乱码的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、场景描述

在Hive中,基于某个表创建视图,直接引用表的字段是不会有问题的;但如果增加一个不存在表中的字段,且字段值为中文,就会出现乱码的问题。

create table t_unicode_test as select '中国' as country;

create view v_unicode_test as select country, '中国' as country2 from t_unicode_test;

select * from test.v_unicode_test;

+-------------------------+--------------------------+
| v_unicode_test.country  | v_unicode_test.country2  |
+-------------------------+--------------------------+
| 中国                    | ??                       |
+-------------------------+--------------------------+

2、解决过程

        在网上找了一圈,原因是Hive的元数据库默认编码是 Latin1(ISO-8859-1),解决方案基本都是去Hive元数据库修改编码。

        等等,Excuse me???谁家的开发权限这么大,还可以改元数据库?没有权限访问Hive的元数据库,看来只能 “曲线救国” 了。

        思来想去,最后发现使用 Unicode码 就可以了。

3、解决方案

        问题来了,如何将字符串转换为Unicode码。我在网上抄了一段java代码:

public static String strToUnicode(String str) {
	char[] chars = str.toCharArray();
	StringBuilder returnStr = new StringBuilder();
	for (char aChar : chars) {
		returnStr.append("\\u").append(Integer.toString(aChar, 16));
	}
	return returnStr.toString();
}


public static void main(String[] args) {
	String str = "中国";

	System.out.println(strToUnicode(str));
}

结果:\u4e2d\u56fd

再修改一下创建视图的语句

alter view v_unicode_test as select country, '\u4e2d\u56fd' as country2 from t_unicode_test;

select * from test.v_unicode_test;

+-------------------------+--------------------------+
| v_unicode_test.country  | v_unicode_test.country2  |
+-------------------------+--------------------------+
| 中国                     | 中国                     |
+-------------------------+--------------------------+

完美解决

后话:

        如果本地没有java环境,可以借助一下Hive文章来源地址https://www.toymoban.com/news/detail-580706.html

select java_method('java.net.URLEncoder', 'encode', '中国', 'UTF-16BE');

+---------------+
|      _c0      |
+---------------+
| %4E%2D%56%FD  |
+---------------+

到了这里,关于解决Hive视图View数据乱码的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web-view往h5传参及传参乱码问题

    1、微信端的操作 往wxml中配置web-view 并在对应js中动态设置路径的参数 在需要的地方修改其路径参数 2、h5端(接受上面传进来的参数) 注:这里建议如果h5是vue项目的话,可以本地映射一个地址出去。在vue.config.js下配置devServer--host设置为本机ip地址,接着小程序接入该地址用

    2024年02月09日
    浏览(23)
  • [微信小程序] movable-view 可移动视图容器 - 范围问题

    movable-view 可移动视图容器 可移动视图容器,在页面中可以拖拽滑动。movable-view必须在 movable-area 组件中,并且必须是直接子节点 运行效果: 发现文字超出了移动区域的问题,去查阅了文档,发现这个默认是不允许超出的 问题原因:没有给 movable-view设置宽高,所以它自动

    2024年02月16日
    浏览(35)
  • MySQL数据库——MySQL创建视图(CREATE VIEW)

    创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。 可以使用 CREATE VIEW 语句来创建视图。 语法格式如下: 语法说明如下。 视图名 : 指定视图的名称。该名称在数据库中必须是唯一的,不能与其他表或视图同名。 SEL

    2024年02月02日
    浏览(43)
  • 数据备份与还原,(mysqldump,source)索引(index),创建视图(view)

    一、备份与还原 1、使用mysqldump命令备份数据库中的所有表 2、备份booksDB数据库中的books表 3、使用mysqldump备份booksDB和test数据库 4、使用mysqldump备份服务器中的所有数据库 5、使用mysql命令还原第二题导出的book表 6、进入数据库使用source命令还原第二题导出的book表 索引 1、建立

    2024年02月15日
    浏览(24)
  • HttpURLConnection发起请求中文数据乱码问题解决

    HttpURLConnection发送POST请求时,请求参数中有中文,且请求成功后,后端显示出现乱码 POST的form没有转码的问题,服务器数据将byte转成utf8,utf8编码是3个字节对应一个字符,但如果只读了一个字节或者不为3的倍数这样强转编码就会导致乱码出现 在POST方法初始化StringEntity时指定

    2024年02月11日
    浏览(31)
  • hive lateral view 实践记录(Array和Map数据类型)

    目录 一、Array 1.建表并插入数据  2.lateral view explode 二、Map 1、建表并插入数据 2、lateral view explode() 3、查询数据 正确插入数据: 原数据 结果:  --------最开始错误的插入数据法-------  原数据  step1: step2: 备注: 比原表数据少了 双引号 综上,以上的插入数据是不对的!!

    2024年02月11日
    浏览(28)
  • 解决前端传给Spring Boot的中文数据乱码问题

    解决前端传给Spring Boot的中文数据乱码问题,可以按照以下几个方法进行操作: 在前端的请求头(Request Header)中设置字符集编码为UTF-8: Content-Type: application/x-www-form-urlencoded; charset=UTF-8 1.在Spring Boot的后端接收中文数据的Controller中,添加注解@RequestBody,并设置编码为UTF-8:

    2024年03月25日
    浏览(45)
  • 视图View和视图组ViewGroup

    布局和GUI组件有很多共同点,所有类型的布局有一些共同的组件。这是因为所有布局和GUI组件都是Android View类的子类。 GUI组件就是View类型 布局是一种名为ViewGroup的View类型 ,布局是一种特殊类型的视图,称为视图组。所有布局都是android.view.ViewGroup类的子类,称为视图组。所

    2024年02月08日
    浏览(59)
  • 成功解决DataX从Hive导出Oracle的数据乱码问题!

    大数据与 RDBMS 之间的数据导入和导出都是企业日常数据处理中常见的一环,该环节一般称为 e-t-l 即 extract-transform-load 。市面上可用的 etl 工具和框架很多,如来自于传统数仓和 BI 圈的 kettle/informatica/datastage , 来自于 hadoop 生态圈的 sqoop/datax ,抑或使用计算引擎 spark/presto/fli

    2024年02月13日
    浏览(28)
  • 关于黑马hive课程案例FineBI中文乱码的解决

    情况1:FineBI导入表名中文乱码,字段内容正常 情况2:FineBI导入表字段中文乱码,表名内容正常 使用navcat等工具连接node1 mysql数据库,执行下列代码,修改相关字符集格式 执行的时机 准备数据表阶段和清洗数据阶段都可,需在完成需求生成结果表之前 如果出现字段中文乱码

    2024年02月09日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包