首页 > 代码库 > hive的常用操作

hive的常用操作

1、hive的数据类型

tinyint/smallint/int/bigint
tinyint:从 0 到 255 的整型数据
smallint:从 0 到 65535 的整型数据
int:从 0 到 4294967296 的整型数据
bigint:所有数字
float/double
boolean
string
date

2、基本操作

显示所有库:show databases;
创建库:create database media_pro;
切换到指定库:use media_pro;
查看表结构:desc formatted t_pro_user_list;

创建分区表:
create table OUFEI_CHARGE_ORDERINFO_LOG
(state_date string,
create_date date,
sendtimes int) row format delimited fields terminated by ‘\t‘;

3、进阶操作

  ①、分区表

create table OUFEI_CHARGE_ORDERINFO_LOG
(state_date string,
 create_date date,
 sendtimes int)
 partitioned by (logdate string)  row format delimited fields   terminated by ‘\t‘;

  这种正常的表存放的目录就是你当前库目录的下级路径:

  技术分享

  上图中的标志的分别是:分区字段、表所在库、表所在路径、表类型

  ②、外部表

 create external table t_detail
 (state_date string,
  create_date date,
  sendtimes int)
  partitioned by (logdate string)row format delimited fields terminated by ‘\t‘ location ‘/hive_exterdir/‘;
 //如果不加location的话,其实就是个内部表

  技术分享

  上图的标红的分别是:分区字段、指定数据文件路径(后面将要导入的数据放进来就行load一下就行)、表的类型

  外部表名在hdfs上是看不见的

  ③、导数load in datapath

   内部表导入:

    load data inpath  ‘/userdata/order.txt‘ into table oufei_charge_orderinfo_log partition (logdate=‘2017-06-16‘);

    这里表示将userdata文件夹下的order.txt文件导入表中,并以‘2017-06-16‘作为分区字段的值;这里如果userdata下没有文件夹的话,可以把后面的文件名省略;

   外部表导入:

    load data inpath  ‘/hive_exterdir/detail.txt‘ into table t_detail partition (logdate=‘2017-06-16‘);

      导入成功后,你会发现之前的detail.txt文件会被移动到分区目录下

    技术分享

   ④、总结:内部表和外部表的区别:

    

1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!内部表则不一样;
2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建内部表,否则使用外部表!

  

     

    

 

hive的常用操作