由于同事误操作, 将原先由hive中导至hbase中的原数据的表全被删除了, 现需要使用hive中的数据. 我将采取以下方式进行.
注意: 由hive导至hbase中的数据是通过程序导的, 它们的主键并不一致, 所以在紧急需要使用的情况下, 共11张表, 我选择了先建立hbase的外部表, 然后再建立hive内部表, 再将数据清洗至Hive的内部表中.
虽然hive的表都被删除了, 但原先的表结构还是备份的.
CREATE TABLE bigdata_graph_cmb_dev.tv_address (
object_key string COMMENT '主键',
standardized_addr string COMMENT '标准化地址(即7级整合成一条)',
address string COMMENT '标准化前的地址',
standardized_1 string COMMENT '标准化-省',
standardized_2 string COMMENT '标准化-市',
standardized_3 string COMMENT '标准化-区',
standardized_4 string COMMENT '标准化-乡',
standardized_5 string COMMENT '标准化-村',
standardized_6 string COMMENT '标准化-道路',
standardized_7 string COMMENT '标准化-门牌号',
update_date string COMMENT '更新时间'
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS textfile;
根据上面表结构创建外部表
create external table tv_address_external(
object_key string COMMENT '主键',
standardized_addr string COMMENT '标准化地址(即7级整合成一条)',
address string COMMENT '标准化前的地址',
standardized_1 string COMMENT '标准化-省',
standardized_2 string COMMENT '标准化-市',
standardized_3 string COMMENT '标准化-区',
standardized_4 string COMMENT '标准化-乡',
standardized_5 string COMMENT '标准化-村',
standardized_6 string COMMENT '标准化-道路',
standardized_7 string COMMENT '标准化-门牌号',
update_date string COMMENT '更新时间'
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping"=":key,objects:standardized_addr,objects:address,objects:standardized_1,objects:standardized_2,objects:standardized_3,objects:standardized_4,objects:standardized_5,objects:standardized_6,objects:standardized_7,objects:update_date")
TBLPROPERTIES("hbase.table.name"="bigdata_graph_cmb_dev:tv_address");
需要注意上语句中, "hbase.columns.mapping"=":key,......."
中的hbase.columns.mapping"=":key,
固定格式不变, key
表示hbase的主键, 且语句中不能有空格, 否则会报错.
"hbase.table.name"="bigdata_graph_cmb_dev:tv_address"
中的bigdata_graph_cmb_dev
为hbase的空间名,如果没有,则不需要填.并且语句中也不能有空格, 否则也会报错。
因为外部表关联hbase表后, 主键的row_key的格式是${hash分区}#${object_key}
所以需要split一下。
insert overwrite table tv_address
select
split(object_key, '#')[1],
standardized_addr,
address,
standardized_1,
standardized_2,
standardized_3,
standardized_4,
standardized_5,
standardized_6,
standardized_7,
update_date
from tv_address_external;