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'结束一行字段