关于黑马hive课程案例FineBI中文乱码的解决

这篇具有很好参考价值的文章主要介绍了关于黑马hive课程案例FineBI中文乱码的解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

  • 情况1:FineBI导入表名中文乱码,字段内容正常
  • 情况2:FineBI导入表字段中文乱码,表名内容正常

情况一的解决

  1. 使用navcat等工具连接node1 mysql数据库,执行下列代码,修改相关字符集格式
  2. 执行的时机准备数据表阶段和清洗数据阶段都可,需在完成需求生成结果表之前
-- 在Hive的MySQL元数据库中执行
use hive;
-- 1.修改字段注释字符集
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
-- 2.修改表注释字符集
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
-- 3.修改分区表参数,以支持分区键能够用中文表示
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
-- 4.修改索引注解
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

情况二的解决

  • 如果出现字段中文乱码,但是通过dataGrip等工具查看表数据中文正常显示,那么就是FineBI连接hive时设置编码utf-8导致出现的问题!
  • 设置连接信息编码为自动即可
    关于黑马hive课程案例FineBI中文乱码的解决,大数据修炼之旅,hive,hadoop,python

ETL数据清洗知识

  • ETL:
    • E,Extract,抽取
    • T,Transform,转换
    • L,Load,加载
  • 从A抽取数据(E),进行数据转换过滤(T),将结果加载到B(L),就是ETL
  • 针对大数据中的TEL数据清洗,可以利用分布式计算框架、并行处理、数据采样、数据质量检查等方法,确保数据的质量和准确性。为了满足实时需求,还可以使用流式处理框架。重要的是根据具体的需求和数据特点选择合适的方法和技术。

社交案例参考代码

-- 创建数据库
create database db_msg;
-- 选择数据库
use db_msg;
-- 如果表已存在就删除
drop table if exists db_msg.tb_msg_source ;
-- 建表
create table db_msg.tb_msg_source(
         msg_time string comment "消息发送时间",
         sender_name string comment "发送人昵称",
         sender_account string comment "发送人账号",
         sender_sex string comment "发送人性别",
         sender_ip string comment "发送人ip地址",
         sender_os string comment "发送人操作系统",
         sender_phonetype string comment "发送人手机型号",
         sender_network string comment "发送人网络类型",
         sender_gps string comment "发送人的GPS定位",
         receiver_name string comment "接收人昵称",
         receiver_ip string comment "接收人IP",
         receiver_account string comment "接收人账号",
         receiver_os string comment "接收人操作系统",
         receiver_phonetype string comment "接收人手机型号",
         receiver_network string comment "接收人网络类型",
         receiver_gps string comment "接收人的GPS定位",
         receiver_sex string comment "接收人性别",
         msg_type string comment "消息类型",
         distance string comment "双方距离",
         message string comment "消息内容"
);

-- 上传数据到HDFS(Linux命令)
--hadoop fs -mkdir -p /chatdemo/data
--hadoop fs -put chat_data-30W.csv /chatdemo/data/

-- 加载数据到表中,基于HDFS加载
load data inpath '/chatdemo/data/chat_data-30W.csv' into table tb_msg_source;

-- 验证数据加载
select * from tb_msg_source tablesample(100 rows);
-- 验证一下表的数量
select count(*) from tb_msg_source;

--问题1:当前数据中,有一些数据的字段为空,不是合法数据
select *
from tb_msg_source
where length(sender_gps)=0;
--问题2∶需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理
select msg_time from tb_msg_source limit 10;
--问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理
select sender_gps from tb_msg_source limit 10;

--需求
--需求1:对字段为空的不合法数据进行过滤 where
--需求2:通过时间字段构建天和小时字段 date hour
--需求3:从GPS的经纬度中提取经度和纬度 split()
--需求4:将ETL以后的结果保存在一张新的Hive表中

drop table if exists db_msg.tb_msg_etl;
--ETL清洗转换(Extract 抽取, Transform 转换,Load 加载)
create table db_msg.tb_msg_etl(
          msg_time string comment "消息发送时间",
          sender_name string comment "发送人昵称",
          sender_account string comment "发送人账号",
          sender_sex string comment "发送人性别",
          sender_ip string comment "发送人ip地址",
          sender_os string comment "发送人操作系统",
          sender_phonetype string comment "发送人手机型号",
          sender_network string comment "发送人网络类型",
          sender_gps string comment "发送人的GPS定位",
          receiver_name string comment "接收人昵称",
          receiver_ip string comment "接收人IP",
          receiver_account string comment "接收人账号",
          receiver_os string comment "接收人操作系统",
          receiver_phonetype string comment "接收人手机型号",
          receiver_network string comment "接收人网络类型",
          receiver_gps string comment "接收人的GPS定位",
          receiver_sex string comment "接收人性别",
          msg_type string comment "消息类型",
          distance string comment "双方距离",
          message string comment "消息内容",
          msg_day string comment "消息日",
          msg_hour string comment "消息小时",
          sender_lng double comment "经度",
          sender_lat double comment "纬度"
);

INSERT OVERWRITE TABLE db_msg.tb_msg_etl
SELECT
    *,
    DATE(msg_time) AS msg_day,
    HOUR(msg_time) AS msg_hour,
    SPLIT(sender_gps, ',')[0] AS sender_lng,
    SPLIT(sender_gps, ',')[1] AS sender_lat
FROM db_msg.tb_msg_source
WHERE LENGTH(sender_gps) > 0;

--需求
-- 1.统计今日总消息量
create table if not exists tb_rs_total_msg_cnt
    comment '每日消总量' AS
select msg_day,count(*) AS total_msg_cnt
from tb_msg_etl group by msg_day;

-- 2.统计今日每小时消息量、发送和接收用户数
create table if not exists tb_rs_hours_msg_cnt
comment "每小时消息量趋势" AS
    select
        msg_hour,
        count(*) as total_msg_cnt,
        count(DISTINCT sender_account) as sender_usr_cnt,
        count(DISTINCT receiver_account) as receiver_usr_cnt
    from tb_msg_etl group by msg_hour;

-- 3.统计今日各地区发送消息数据量
create table if not exists tb_rs_loc_cnt
comment "今日各地区发送消息总量" AS
    select
        msg_day,
        sender_lng,
        sender_lat,
        count(*) as total_msg_cnt
    from tb_msg_etl
    group by msg_day,sender_lng,sender_lat;
-- 4.统计今日发送消息和接收消息的用户数
create table if not exists tb_rs_usr_cnt
comment "今日发送消息和接收消息的用户数" AS
select
    msg_day,
    count(distinct sender_account) as sender_user_cnt,
    count(distinct receiver_account) as receiver_user_cnt
from tb_msg_etl
group by msg_day;
-- 5.统计今日发送消息最多的Top10用户
create table if not exists tb_rs_user_sender_msg_top10
    comment "今日发送消息最多的Top10用户" AS
select
    sender_name,
    count(*) as sender_msg_cnt
from tb_msg_etl
group by sender_name
order by sender_msg_cnt desc
limit 10;
-- 6.统计今日接收消息最多的Top10用户
create table if not exists tb_rs_user_receiver_msg_top10
    comment "今日接收消息最多的Top10用户" AS
select
    receiver_name,
    count(*) as receiver_msg_cnt
from tb_msg_etl
group by receiver_name
order by receiver_msg_cnt desc
limit 10;
-- 7.统计发送人的手机型号分布情况
create table if not exists tb_rs_sender_phone_type
comment '发送人手机型号' as
select
    sender_phonetype,
    count(*) as cnt
from tb_msg_etl
group by sender_phonetype;
-- 8.统计发送人的设备操作系统分布情况
create table if not exists tb_rs_sender_phone_os
    comment '发送人手机操作系统' as
select
    sender_os,
    count(*) as cnt
from tb_msg_etl
group by sender_os;

结果展示

关于黑马hive课程案例FineBI中文乱码的解决,大数据修炼之旅,hive,hadoop,python
关于黑马hive课程案例FineBI中文乱码的解决,大数据修炼之旅,hive,hadoop,python文章来源地址https://www.toymoban.com/news/detail-705715.html

到了这里,关于关于黑马hive课程案例FineBI中文乱码的解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • CDH 之 Hive 中文乱码平定通用法则

             实际上以上方式都不能解决编码问题,根本原因并不出在 hive 上,而是存储 hive 元数据的 mysql 数据库上面 2.3.1 修改hive元数据库编码 (1)查看hive元数据库编码(显示:utf8mb3) (2) 修改编码为 latin1 2.3.2 修改表编码 (1)查看hive库中有哪些表 (2)需要修改如下

    2024年02月12日
    浏览(38)
  • 【微信小程序(黑马程序课程)案例实现——本地生活的首页基本布局】

    一. 新建一个项目 二. 添加页面和删除页面 (1) 添加页面 ——app.json/pages中添加路径,并删除原有的路径 (2)删除页面——路径已经被删除,现在删除文件 三.设置导航栏效果 ——app.json/windows中更改 效果图: 代码如下: 四.设置tabBar效果 ——在app.json中创建tabBar(与win

    2024年04月16日
    浏览(44)
  • 【正在更新】【最新!黑马程序员Python自学课程笔记】课上笔记+案例源码+作业源码

    1.1字面量 1.2注释 1.3变量 debug工具的使用 1.对着某行代码 打断点 2.下方一步步 步进 1.4数据类型 1.5数据类型转换 错误示例 1.6标识符 变量的命名规范: 1.见名知意,简洁; 2.(多个单词)用下划线命名法 3.英文字母全小写 1.7运算符 1.8字符串的三种定义方式 1.9字符串的拼接

    2024年01月21日
    浏览(51)
  • 关于微信小程序与Java后台交互数据中中文乱码问题的讨论

    如果小程序端发起的请求参数中含有中文,直接发送到后台会显示乱码,需要在header中设置UTF-8编码 这样后台接收到的中文就能解析正常了 为了便于测试,后台接口简化如下: 结果小程序端显示的用户名为“寮犱笁”。 起初怀疑后台返回的编码格式不对,网上说对于Spring

    2024年02月09日
    浏览(38)
  • 中文数字对照表--课后程序(Python程序开发案例教程-黑马程序员编著-第4章-课后作业)

    阿拉伯数字因其具有简单易写、方便使用的特点成为了最流行的数字书写方式,但在使用阿拉伯数字计数时,可以对某些数字不漏痕迹的修改成其它数字,例如,将数字“1”修改为数字“7”,将数字“3”修改为数字“8”。为了避免引起不必要的麻烦,可以使用中文大写数字

    2024年02月05日
    浏览(73)
  • Hive 表注释乱码解决

    出现原因 一般 Hive 的元数据信息都存储在 MySQL 中,但 MySQL 数据库中的 character_set_server 和 character_set_database 参数,默认都为 latin1 字符集,这两个参数决定了服务器和数据库如何处理和存储数据的字符编码,而我们通常使用的字符集都是 utf8 ,所以会造成 Hive 中注释出现 ??

    2024年02月09日
    浏览(40)
  • VScode注释中文时乱码怎么办?VScode中文注释乱码问题的解决方法

    不管是在哪一种编辑器上,都会有自动默认的一种编码格式,在vscode编辑器中默认的编码格式是utf-8,但是在注释的时候,因为使用的字符会不一样,所以可能存在着默认的配置文件,有可能是其他的编码格式,所以因为编码格式不对应,导致了在注释的时候出现了乱码的情

    2024年02月11日
    浏览(59)
  • 关于git推送代码到github远程仓库中文乱码问题,visual studio保存文件默认编码格式问题

    中文乱码问题本质上的原因是:二者的编码格式不同 。当你用GB2313格式保存一个文件,用utf-8的格式打开,它必然就显示乱码。 据我所知,github上面是utf-8,而visual studio默认保存为GB2312,把代码推送到github上面看,中文部分就是乱码。 用 高级保存选项 来设置保存操作的编码

    2024年04月11日
    浏览(58)
  • GetPrivateProfileString 中文乱码解决

    如: 读取ini文件的属性值(中文)问乱码 我调用下面的接口,从ini配置文件中读取相关的属性值 CString icon_name;          GetPrivateProfileString(szTypeName,szIconName,\\\"\\\",icon_name.GetBuffer(MAX_PATH),MAX_PATH,strIniPath); 配置文件内容如下: [devtree] wendu=111111111 shidu=我爱你侃大山 获取到的shid

    2024年02月09日
    浏览(40)
  • 解决SpringBoot响应中文乱码

    创建Servlet类 解决乱码也可以直接resp.setContentType(\\\"text/html;charset=utf-8\\\"),为了演示使用字符集过滤器类这里先不设置编码格式,输出流记得刷新和关闭。 注册Servlet @Configuration声明配置类,@Bean可以将方法返回值添加到Spring容器中,可由容器调用  启动容器对象 SpringApplication.run返回值

    2024年02月14日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包