关于hive常用命令

什么是hive

hive是Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。可以快速简单实现MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

hive为什么依赖mysql

hive只是个工具,包括它的数据分析,依赖于mapreduce,它的数据管理,依赖于外部系统
这一步其实不是必须的,因为Hive默认的metadata(元数据)是存储在Derby里面的,但是有一个弊端就是同一时间只能有一个Hive实例访问,这适合做开发程序时做本地测试。
Hive提供了增强配置,可将数据库替换成mysql等关系型数据库,将存储数据独立出来在多个服务示例之间共享。
由此可见,你在哪路径下,执行hive指令,就在哪路径下生成metastore_db。建一套数据库文件,这样是极其不合适的,公司里每个人若不一样,则会显得非常混杂。导致员工之间无法公用交流。
为此需要公用的mysql,所以在安装hive时候要装一个公共的mysql。

hive的几种命令

  1. 将本地的数据导入hive中
    load data local inpath ‘本地文件目录’ into table 数据库.表

  2. 从hdfs集群导入数据
    load data inpath ‘hdfs://主机名:9000/Hdfs上文件路径’ into table 数据库.表

  3. 创建内部表
    create table 表名

  4. 创建外部表
    create external table 表名

  5. 查看表描述
    desc 表名
    DESCRIBE [EXTENDED|FORMATTED] table_name

  6. 添加数据
    insert into 是添加
    insert overwrite是覆盖

  7. 加载数据
    insert into table 表名 select * from 表名

使用load导入数据时候需要设置分隔

create table psnbucket(
id int,
name string,
age int
)
row format delimited 行格式分隔
fields terminated by ‘,’ 字段之间使用逗号分隔
collection ltems terminated by ‘,’ 集合使用逗号分隔
map kets terminated by ‘;’ 键值对使用冒号分隔
lines terminated by ‘\n’ 记录之间使用换行符分隔

创建表时一定要提前进行设置,不然数据传入全是null值!!

静态分区

  1. 创建单分区
    create table 表名 (字段名 字段类型…) partitioned by (分区字段名 字段类型)

  2. 把数据上传到分区
    load data local inpath ‘本地数据地址’ into table 数据库.表名 partition (分区字段名=int类型数值)

  3. 创建多级分区上传数据 前提要有对应的字段 会创建为子目录
    load data local inpath ‘本地数据地址’ into table 数据库.表名 partition (分区字段名=int类型数值,分区字段名=int类型数值,…)

  4. 创建双分区 双分区会以第一个分区名为文件夹,第二个为子文件夹
    create table 表名 (字段名 字段类型…) partitioned by (分区字段名=int类型数值,分区字段名=int类型数值)

  5. 增加分区 添加分区时需要将原来的分区包含完成排序排序
    alter table 表名 add partition (分区字段名=int类型数值,分区字段名=int类型数值)

  6. 删除分区 删除分区的时候会把所有存在的分区都删除
    alter table 表名 drop partition (字段名=‘值’)

动态分区

动态分区创建表语法不变

创建动态分区需要修改权限
首先输入:set hive.exec.dynamic.partition; 查看状态是否是true,然后输入set hive.exec.dynamic.partition.mode;如果mode=strict的话,我们需要输入set hive.exec.dynamic.partition.mode=nostrict; 更改它的状态就可以了

  1. 动态分区的语法 select的表必须存在且一定要有数据,insert的表构造要和select表相同才能写入数据!
    insert overwrite table 表名 partition(dt)
    select * from 表名;

分桶

查看分桶权限 set hive.enforce.bucketing;
结果是false的话要修改修改成true,才会支持分桶
set hive.enforce.bucketing=true;

  1. 分桶的创建
    首先和之前一样正常创表,创建桶要根据某一个字段取余,这个字段一定是int类型并且已经存在,如下:
    create table psnbucket(
    id int,
    name string,
    age int
    )
    clustered by (id) into 4 buckets;

    (这里的意思是根据id字段进行分桶,分四个桶)

  2. 抽样

select * from 表名 tablesample (bucket 1 out of 4 on age);
从第一个分区开始每隔四个分区进行抽样

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值