hive中的数据类型

hive中的数据类型:
下表列举了Hive所支持的基本数据类型:
在这里插入图片描述数据类型:
基本数类型:
tinyint/smallint/int/bigint: 整数类型
float/double: 浮点数类型
boolean:布尔类型
string:字符串类型
复杂数据类型:
Array:数组类型,由一系列相同数据类型的元素组成Map:集合类型,包含key->value键值对,可以通过key来访问元素Struct:结构类型,可以包含不同数据类型的元。这些元素可以通过"点语法"的方式来得到所需要的元素
时间类型:
Date:从Hive0.12.0开始支持
Timestamp:从Hive0.8.0开始支持
注意:
要求:
1、字段的类型和顺序要和结构化文件保持一致 hive会尝试转换,不保证转换成功,如果成功会显示出来,如果不成功就会显示null。
2、hive除了支持sql类型,还支持java类型,大小写不敏感。
3、hive除了支持基本类型,还支持复合类型(map array )针对复合类型要跟分隔符指定有关。
Hive的数据模型-数据库
1、类似传统数据库的DataBase
2、默认数据库"default"
3、使用#hive命令后,不使用hive>use <数据库名>,系统默认的数据库。可以显式使用hive> use default
创建一个新库:
hive > create database test_dw;
Hive的数据模型-表
Table 内部表
Partition 分区表
External Table 外部表
Bucket Table 桶表
Hive的数据模型-内部表
与数据库中的 Table 在概念上是类似
每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个test表,它在 HDFS 中的路径为:/ warehouse/test。 warehouse是在 hive-site.xml 中由 $ 指定的数据仓库的目录
所有的 Table 数据(不包括 External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除
内部表的使用
hive>create table inner_table (key string);
加载数据
hive>load data local inpath ‘/root/inner_table.dat’ into table inner_table;
查看数据
select * from inner_tableselect count() from inner_table
删除表
drop table inner_table
Hive的数据模型-分区表
Partition 对应于数据库的 Partition 列的密集索引
在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中
例如:test表中包含date 和 city 俩个partition则对应
date=20180729,city=bj的 hdfs子目录为:/warehou/test/date=20130201/city=20180729,city = sh 的hdfs的子目录为:/warehouse/test/date=20180729/city=sh
分区表
CREATE TABLE tmp_table #表名(
title string, # 字段名称 字段类型
minimum_bid double,
quantity bigint,
have_invoice bigint)
COMMENT ‘注释:XXX’ #表注释
PARTITIONED BY(pt STRING) #分区表字段(如果你文件非常之大的话, 采用分区表可以快过滤出按分区字段划分的数据)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘’# 字段是用什么 分割开的
STORED AS SEQUENCEFILE; #用哪种方式存储数据,
SEQUENCEFILE是hadoop自带的文件压缩格式
一些相关命令
SHOW TABLES; # 查看所有的表
SHOW TABLES ‘TMP’; #支持模糊查询
SHOW PARTITIONS TMP_TABLE; #查看表有哪些分区
DESCRIBE TMP_TABLE; #查看表结构
分区表的使用
创建数据文件partition_table.dat
创建表
create table partition_table(rectime string,msisdn string) partitioned by(daytime string,city string)row format delimited fields terminated by ’ ’ stored as TEXTFILE;
加载数据到分区
load data local inpath ‘/home/partition_table.dat’ into table partition_table partition(daytime=‘2013-02-01’,city=‘bj’);
查看数据
select * from partition_tableselect count(
) from partition_table
删除表
drop table partition_table
通过load data 加载数据
alter table partition_table add partition (daytime=‘2018-07-29’,city=‘bj’);
元数据,数据文件删除,但目录daytime=2013-02-04还在
alter table partition_table drop partition (daytime=‘2018-07-29’,city=‘bj’)
Hive的数据模型—桶表
桶表是对数据进行哈希取值,然后放到不同文件中存储。
创建表
create table bucket_table(id string) clustered by(id) into 4 buckets;
加载数据
set hive.enforce.bucketing = true;insert into table bucket_table select name from stu;insert overwrite table bucket_table select name from stu;
数据加载到桶表时,会对字段取hash值,然后与桶的数量取模。把数据放到对应的文件中。
抽样查询
select * from bucket_table tablesample(bucket 1 out of 4 on id);
Hive的数据模型-外部表
指向已经在 HDFS 中存在的数据,可以创建 Partition
它和 内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异
内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除
外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个 外部表 时,仅删除该链接
外部表
CREATE EXTERNAL TABLE page_view(
viewTime INT,
userid BIGINT,
page_url STRING,
referrer_url STRING,
ip STRING COMMENT ‘IP Address of the User’,
country STRING COMMENT 'country of origination‘)
COMMENT ‘This is the staging page view table’
ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘44’
LINES TERMINATED BY ‘12’
STORED AS TEXTFILE
LOCATION
‘hdfs://centos:9000/user/data/staging/page_view’;
外部表的使用
创建数据文件external_table.dat
创建表
1、hive>create external table external_table1 (key string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ’ ’ location ‘/home/external’;
2、在HDFS创建目录/home/external#hadoop fs -put
/home/external_table.dat /home/external
加载数据
LOAD DATA INPATH ‘/home/external_table1.dat’ INTO TABLE external_table1;
查看数据
select * from external_tableselect count(*) from external_table
删除表
drop table external_table
总结:
Hive中所有的数据都存储在HDFS中,没有专门的数据存储格式在创建表时指定数据中的分隔符,Hive 就可以映射成功,解析数据。
Hive中包含以下数据模型:
db:在hdfs中表现为hive.metastore.warehouse.dir目录下一个文件夹
table:在hdfs中表现所属db目录下一个文件夹
external table:数据存放位置可以在HDFS任意指定路径
partition:在hdfs中表现为table目录下的子目录
bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值