1.本文主要说一下怎么把hbase中的表映射到hive中,说之前我们先简单说一下hive的内部表和外部表的区别;

(1),被external关键字修饰的表是外部表,没有被external关键字修饰的表是内部表.

(2),内部表数据由Hive自身管理,外部表数据由HDFS管理.

(3),内部表数据存储的位置是hive.metastore.warehouse.dir.外部表数据的存储位置由自己确定.

(4),删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除; 

2.建表语句

(1)内部表:

CREATE TABLE `spark_error_info`(
  `data` string COMMENT '报错的数据',
  `error_time` string COMMENT '报错的时间',
  `error_info` string COMMENT '报错信息'
 )
ROW FORMAT DELIMITED 
  FIELDS TERMINATED BY ' ' 
  LINES TERMINATED BY '\n';

加载数据:  load data local inpath '/home/hdfs/data' overwrite into table spark_error_info;

(2),外部表:

create external table test2(id int,name string,age int,tel string)
     ROW FORMAT DELIMITED
     FIELDS TERMINATED BY ','
     STORED AS TEXTFILE
     location '/user/hive/external/test';

加载数据:  load data local inpath '/home/hdfs/data' overwrite into table test2;

(3)外部表(hbase表映射到hive中)

CREATE EXTERNAL TABLE cbd_cds.jason_test(
key string,
shop string,
future_end_time string
)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'   
WITH SERDEPROPERTIES ("hbase.columns.mapping" =":key,f1:shop,f1:future_end_time")   
TBLPROPERTIES("hbase.table.name" = "cbd:test"); 

 注意点:

    1、hbase中的空cell在hive中会补null

    2、hive和hbase中不匹配的字段会补null

    3、Bytes类型的数据,建hive表示加#b

    4、其中:key代表的是hbase中的rowkey,hive中也要有一个key与之对应,不然会报错,f1指的是hbase的列族.创建完后,会自动把hbase表里的数据同步到hive中,

(4)分区表

CREATE TABLE `test_partition`(
`data` string COMMENT 'json数据',
`enter_time` string COMMENT '入库时间'
 )
partitioned by (day_time string)
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY ' ' 
LINES TERMINATED BY '\n';

加载数据:load data local inpath '/root/test/jason' into table test_partition partition(day_time='2018-08-03');指定数据具体导入哪个分区中.

注意:

----fields terminated by '\t'  通过'\t'分割字段
----lines terminated by '\n'   通过'\n'结束一行字段