【23.8.15】Hive SQL | 结构化文件映射为二维表

Hive SQL | 结构化文件映射为二维表

  • 【数据库之建表】
  1. 数据库在hdfs中默认存储位置是,/user/hive/warehouse/dbname.db。可以通过hdfs的file system直接找到
  • 【使用hive将结构化文件映射为数据库表】
  1. 首先使用sql语句建表,对照结构化文件的字段内容和格式,以及顺序。注意建表完成后,会在hdfs数据库的指定路径下生成该表名对应的文件夹,用于存放需要被映射的结构化文件
  2. 区别于普通sql,需要在字段指定完成后加上分隔符的指定。语法如下:
row format delimited
fields terminated by "\t"; -- 字段之间的分隔符是 制表符 tab
  1. 然后需要将结构化文件上传到hdfs该表对应的文件夹下,接下来就可以通过sql语句select看到被映射完成的表。
  • 【上传结构化文件到hdfs中】
    上面第4步是从web页面手动上传的流程,但这不够简洁,从终端上传可以这样来完成:
  1. hadoop -put 命令。其中1.txt是结构化文件的路径,后面的路径就是表所在的目录路径.
hadoop fs -put 1.txt /user/hive/warehouse/itheima.db/t_1

官方推荐的方式是使用load而不是上面手动完成。

  1. 从本地加载local。本地指的是hive所在的本地,即node1。从beeline客户端看日志可以看到 file😕/xxx表明是从本地加载。是纯复制操作
load data local inpath '/root/hivedata/students.txt' into table itheima.student_local;
  1. 从hdfs加载。把结构化文件上传到hdfs的某个路径,从beeline客户端看日志可以看到 hdfs😕/xxx表明是从hdfs加载。是移动操作,把结构化文件移动到了warehouse表目录下面
load data inpath '/students.txt' into table itheima.student_hdfs;
  • 【常用show语句】
-- 显示数据库
show databases;
show schemas;

-- 切换到某个数据库
use dbname;

-- 显示当前数据库下所有表
show tables;
show tables in dbname; -- 显示某个数据库下所有表

-- 显示表的元数据,记录了表的字段、位置、创建时间等
desc formatted tbname;
  • 【comment注释乱码解决】
    乱码原因:元数据保存在mysql中,而mysql不支持中文。
    解决:在安装了mysql的节点(我的是node1)上,连接mysql服务:
mysql -u root -p

然后切换到数据库hive3,执行下面的语句:

alter table hive3.COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
alter table hive3.TABLE_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
alter table hive3.PARTITION_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8 ;
alter table hive3.PARTITION_KEYS modify column PKEY_COMMENT varchar(4000) character set utf8;
alter table hive3.INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;

需要注意的是,这样操作之后,原本已经写死的表注释仍然是乱码,需要drop掉之前的表重新创建才能解决乱码。并且hdfs也需要重新上传结构化文件,否则是空表。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值