Hive数据操作

首先我们介绍下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> 
原文地址:https://www.cnblogs.com/yandufeng/p/6432070.html