【Hive总结】4. Hive的外部表与内部表

在Hive总结的第二篇中讲述了HBase与Hive的总结!

一、内部表

1. 准备测试数据

创建测试文件course.csv

hive,90
hbase,85
hadoop,78
flume,89
sqoop,99
storm,80
spark,78
kafka,70

第一列为课程名称,第二列为课程分数

2. 数据加载到HDFS上

在hdfs文件系统中创建hive-hbase目录,并加载测试数据。

(1)查看hdfs文件目录   

hdfs dfs -ls /

(2)创建/hive-hbase/course目录

hdfs dfs -mkdir -p /hive-hbase/course

(3)将course.csv文件上传至/hive-hbase/course目录下

hdfs dfs -put course.csv的路径 /hive-hbase/course/

3. 创建Hive数据库

进入Hive Shell 客户端创建库course

create database course;

4. 创建Hive外部表

 进入Hive Shell 客户端创建外部表

create  external table if not exists course.testcourse
(cname string,score int) 
row format delimited fieldsterminated by ','
stored as textfile location '/hive-hbase/course';

5. 查询数据

6. 创建内部表

create table course.hbase_testcourse 创建Hive内部表

(key string,cname string,score int) hive表的字段

 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITH SERDEPROPERTIES

("hbase.columns.mapping" = ":key,cf:cname,cf:score")  hive与hbase的映射字段

 
TBLPROPERTIES("hbase.table.name" = "hbase_testcourse"); hive与hbase的映射表

【提示】创建成功后,hive与hbase中同时都有这个表

7. 加载数据

insert overwrite table course.hbase_testcourse 
select score,cname,score from course.testcourse;

8. hive中执行查询

【提示】在hive中删除内部表时,hbase中的表也会被删除!

二、外部表

创建外部表适用于该表在HBase中已经存在,但在Hive中并没有相关信息。此时可以通过创建外部表的方式,为HBase现有表提供SQL查询条件。而内部表适用于Hive和HBase都没有相关表的情况。

(1)创建HBase表

进入HBase Shell客户端执行建表命令

create 'hbase_test',{ NAME =>'cf'}

(2)插入数据

执行以下命令插入数据

put 'hbase_test','hadoop','cf:score', '95'

put 'hbase_test','storm','cf:score', '96'

put 'hbase_test','spark','cf:score', '97'

 

(3)创建Hive外部表

create external table course.hbase_test(cname string,score int) 

STORED BY  'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES

("hbase.columns.mapping" =":key,cf:score") 

TBLPROPERTIES("hbase.table.name" ="hbase_test");


(4)在hive中查询hbase表中的数据

 

通过创建外部表可以成功从Hive 查询HBase表中的数据。

猜你喜欢

转载自blog.csdn.net/FullStackDeveloper0/article/details/89438830