hive基础语句(包含创建表和插入数据)

 

 

最近在研究hive的一些基本的使用和操作,发现有些语句的使用和一般的sql还有一定的差别。网上的文章还是比较杂乱,因此我在这里进行一些总结,扩展。


在指定位置建库建表:

create database  test_db  location  ‘/dataManage/company/test_db’;

create table test_db .test2(a  int,b  int,c  int,d int,e int)  location  ‘/dataManage/company/test_db/test2’;

因为hive采用hdfs作为储存,采用pgsql作为元数据库。指定位置是hdfs目录的位置。


hive导入(插入)数据

通行的导入方法有文件导入,hdfs导入,还有mysql等数据库导入,以及一条条写入数据。其他方式导入的时候,容易在行分隔符中出现问题,最直接的办法就是一条条写入检查测试数据:

insert into test2 values(1,3,4,6,7);

导入文件插入数据,将hdfs或者路径下的文件导入hive表中,特别需要注意文件的分隔方式和hive的分隔字段方式是否相同,建表的字段分隔方式是否同导入文件相同。(我这边就遇见默认建表导入数据字段不匹配的问题。

导入分为两种,一种是加载 load  一种是重写overwrite。下面是一些demo

该行语句是从hdfs导出文件到hive

将文件放入hdfs的语句和将hdfs数据导入hive的语句:

hadoop fs -put test.txt /tmp
load data inpath 'test.txt' into table test;

将文件直接导入hive,带有local的为本地文件系统:

load data local inpath '/tmp/test.txt' into table test;

加载时候注意文件的分隔符,容易出现所有列写在第一列,或者插入为null的情况,以下为对该种情况的优化:先建立指定间隔符的临时表,导入数据到正式表:

创建临时表

create table test.datatest_his (num1 double,num2 double,num3 double,num4 double,num5 double,num6 double,num7 double,num8 double,num9 double,num10 double,num11 double) row format delimited fields terminated by '\t';

导入过程

hive -e "truncate table test.${v_name};truncate table test.${v_name}_his;load data inpath '/tmp/data/${v_name}.txt' overwrite into table test.${v_name}_his;"
hive -e "
 insert into table test.${v_name}
 select num1,num2,num3,num4,num5,num6,num7,num8,num9,num10,num11
from test.${v_name}_his a
DISTRIBUTE BY rand();" 2>&1 | tee -a /tmp/hive_info.log

hive导出数据

通常采用语句和脚本结合的方法,将数据查询出来后调整格式,输出成CSV的语句

hive -e "select code,time,value    from test.f_all_point_data where code='01' and   group by   code,time,value;"  | sed 's/\t/,/g' >2021.csv

hive的查询

同导出,计划会补充一些hive的优化


 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值