hbaseデータをhiveにバックアップ

7111 ワード

背景
同僚の誤操作により、hiveからhbaseに導く元のデータのテーブルがすべて削除され、hiveのデータを使用する必要がある.私は以下の方法で行います.注意:hiveからhbaseに導くデータはプログラムによって導かれ、それらの主キーが一致しないため、緊急に使用する必要がある場合、計11枚の表を選択し、hbaseの外部表を作成してからhiveの内部表を作成し、Hiveの内部表にデータを洗浄する.
hive外部テーブルの作成方法
hbase対応の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;

その他の方法(補足対象)