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'结束一行字段
如果有写的不对的地方,欢迎大家指正,如果有什么疑问,可以加QQ群:340297350,更多的Flink和spark的干货可以加入下面的星球