首先我们介绍下Hive中的数据类型
- 数值型类型
- 字符串类型
- 日期类型
- 复杂类型
数值型类型
- TINY INT
- SMALL INT
- INT
- BIG INT
- FLOAT
- DOUBLE
- DECIMAL
字符串类型
- CHAR
- VARCHAR
- STRING
日期类型
- Timestamp
- Date
复杂类型
- Arrays
- Maps
- Structs
- Union
在Hive上的操作
创建数据库
hive> show databases; OK default test Time taken: 1.268 seconds, Fetched: 2 row(s) hive> create database yandufeng_test; OK Time taken: 2.467 seconds hive> show databases; OK default test yandufeng_test Time taken: 0.042 seconds, Fetched: 3 row(s)
删除数据库
hive> show databases; OK default test yandufeng_test Time taken: 1.223 seconds, Fetched: 3 row(s) hive> drop database yandufeng_test; OK Time taken: 2.531 seconds hive> show databases; OK default test Time taken: 0.033 seconds, Fetched: 2 row(s)
创建,修改,删除表
hive> create table test_table(empid int, empname string); OK Time taken: 1.478 seconds hive> show tables; OK orcusers test_table users Time taken: 0.279 seconds, Fetched: 3 row(s) hive> alter table test_table rename to test1_table; OK Time taken: 1.264 seconds hive> show tables; OK orcusers test1_table users Time taken: 0.243 seconds, Fetched: 3 row(s) hive> drop table test1_table; OK Time taken: 2.005 seconds hive> show tables; OK orcusers users Time taken: 0.248 seconds, Fetched: 2 row(s)
表的类型以及使用情况
Hive分为内部表和外部表。
内部表
内部表类似于通常的数据库表,当删除这些表时,存储在上面的数据也会一并删除。所以当在内部表执行drop操作时一定要小心。
hive> > > create table weather(wban int,temp int) > row format delimited > fields terminated by ',' > location '/yandufeng/weather'; OK Time taken: 1.464 seconds [hdfs@bd2 ~]$ hdfs dfs -copyFromLocal /home/hdfs/yandufeng_interval_table.txt /yandufeng/weather hive> select * from weather; OK 1 3 2 4 Time taken: 0.102 seconds, Fetched: 2 row(s)
或者你也可以加载数据到表里
hive> load data inpath '/yandufeng/weather/yandufeng_interval_table.txt' into table weather;
什么时候使用内部表?
我们想要Hive管理数据的整个过程,包括删除
创建内部表的例子
外部表
如果删除这种表的话,只会删除schema,数据仍然可用
hive> create external table external_weather(wban int, temp int) > row format delimited > fields terminated by ',' > location '/yandufeng/external_weather'; OK Time taken: 0.214 seconds hive> > > select * from external_weather; OK Time taken: 0.112 seconds hive> load data inpath '/yandufeng/weather/yandufeng_interval_table.txt' into table external_weather; Loading data to table default.external_weather chmod: changing permissions of 'hdfs://bd4:8020/yandufeng/external_weather/yandufeng_interval_table.txt': Permission denied. user=hive is not the owner of inode=yandufeng_interval_table.txt Table default.external_weather stats: [numFiles=1, totalSize=8] OK Time taken: 0.847 seconds hive> select * from external_weather; OK 1 3 2 4 Time taken: 0.084 seconds, Fetched: 2 row(s)
什么时候使用外部表?
数据不被Hive管控
内部表和外部表的对比
特性 | 内部表 | 外部表 |
Schema | Data on Schema | Schema on Data |
存储位置 | /usr/hive/warehouse | HDFS location |
数据可用性 | 本地文件系统 | HDFS |
分区
Hive以分区的形式构建表,基于partition keys拆分数据到不同的分区。partition keys决定数据怎么进行存储。
hive> create table partition_table(id int, name string,dept string, yoj int) > row format delimited > fields terminated by ',' > location '/yandufeng/partition_table'; OK Time taken: 0.226 seconds hdfs dfs -copyFromLocal partition_table.txt /yandufeng/partition_table hive> > create table date_partition(id int, dept string) partitioned by(yoj int) > row format delimited > fields terminated by ',' > location '/yandufeng/date_partition'; OK Time taken: 0.217 seconds hive> load data inpath '/yandufeng/partition_table/partion_table.txt' into table parition_table; hive> set hive.exec.dynamic.partition.mode=nostrict hive> insert overwrite table date_parition partition(yoj) select id, dept, yoj from parition_table;
Buckets
Buckets主要用来有效进行查询,Buckets用来分割表的数据到不同的文件和目录
Views and Indexs
视图类似于表
- 我们可以保存结果到视图
- 类似于SLQ中的视图
- 在视图上可以进行所有DML操作
hive> create view view_data as select * from weather where wban = 1; OK Time taken: 0.66 seconds hive> select * from view_data; OK 1 3 Time taken: 0.671 seconds, Fetched: 1 row(s)
Index
索引是指向表中的特定列的指针
- 用户必须手动定义索引
- 当我们创建索引的时候,我们就是在创建指向表的特定列的指针
hive> Create INDEX wban_index ON TABLE weather(temp) as 'COMPACT' with deferred rebuild; OK Time taken: 0.853 seconds hive> show index on weather; OK wban_index weather temp default__weather_wban_index__ compact Time taken: 0.236 seconds, Fetched: 1 row(s) hive>