作者:念中怡名哲盈_452 | 来源:互联网 | 2023-05-31 11:50
image.pnghive其实说实话灭有太多高深的内容,它就是健在HDFS上的分析性数据仓库而已,仓库和数据库的区别在于,仓库只能新增和查询,连更改和删除都没有,仓库的数据文件是散
image.png
hive其实说实话 灭有 太多高深的内容,它就是健在 HDFS上的分析性数据仓库而已,仓库和数据库的区别在于,仓库只能新增 和 查询,连更改和删除都没有,仓库的数据文件是散落在文件系统上的,但是可以被索引到,相比数据库文件,仓库与数据文件之间的关联会更弱些。另外 仓库 一般的使用场景是 离线 批次性 数据 ,可以相比 hive就是适合搞批发的 在仓库理货的,晚点 慢点 都不会出大问题,mysql 就是在超市 负责和 大量实时客户做交易的,一丝不苟,正是基于此 hive 的功能时而强大 时而又让你感觉力不从心。
hive 呢 主要常用的就那些 ,
一 是hql ,其实是sql 的变种 不算难
二是 hive的一些函数 ,不难 ,
三 hive自定义 函数 udf ,不难,
四 hive 和 hadoop hbase flume spark kafka beeline sqoop mysql kylin 的搭配,这个熟悉就不难
五 hive 本身的功能
hive 虽然不支持删除,但是可以绕路实现,一 暴力点的就是 drop table ,但是这样整个表就没了,之前的数据也就没有了,不适合,
二 就是建分区表 , 我们为 每次 批次添加的数据 当做其中的一个分区,这样没一批次数据都是单独的,这样 我们可以单独删除某个分区,数据入库出错 就删除这个分区,重新尝试入库,而不会影响到其他批次的
hive 的建表 ,你还是需要指定 filed字段的分隔符和 行列分隔符,否则是无法识别 新的数据,新的数据也一定要按照这个格式来
create table tab_um_model (gid string,mobile string ,apply_time string,um_score float ) partitioned by (client_nmbr string, batch string)row format delimited fields terminated by '\t' lines terminated by '\n' stored as textfile;
有时候我们拿到的数据并不符合我们的入库标准,我们需要反复的需要 清洗处理等等,我们的格式 有 excel csv txt ,我们拿到的数据 首先要整理成数据仓库 表相应的字段 顺序 数据类型,然后检查 空值等等,有时入库 的文件 带header,需要把header 拿掉,有时在mac上 经常excel txt就是出现中文字符乱码,就需要 先在excel 上把 数据另存为 Unicode16 的txt 文件,然后再在 sublime上打开,保存 utf-8格式 一遍,这还没完,有时候你需要在 服务器端有脚本 ,python加 shell 脚本一起在最后处理加载入到数据库,python脚本 ,比如使用pandas 做空值判断 填充 ,异常值检查 ,md5 值生成,然后 shell脚本在去执行python脚本,然后执行hive加载命令 ,把数据就加载进入。
加载到库中 别没有结束,你还需要 去验证 一这次加载的数据的行数 是否与源数据文件统一,head 5行和tail 5行是否一致,字段列的对应是否统一,等等,这些完后,如果需要群组 知道 ,还要发邮件给群组 ,告知大家 你这次入库的内容
数据源 库 表 分区 查询语句 条数 等等信息。
未来 hive的竞争对手越来越多,但是hive作为数据仓库的思想基石 会被保留和延续 并发展