HDFSディレクトリ内のパーティションでこれを処理できます。これを実現する方法の1つは、以下のとおりです。
あなたの内部テーブル/メインテーブルは、HDFSの上部とディレクトリの上に座っされることはhdfs:namenonde/user/hive/warehouse/schema.db/site_visitors/visit_date=2017-01-01 hdfs:namenonde/user/hive/warehouse/schema.db/site_visitors/visit_date=2017-01-02 hdfs:namenonde/user/hive/warehouse/schema.db/site_visitors/visit_date=2017-01-03
以下のようになります。あなたは、HDFSの上またはあなただけのデータをアーカイブするために探している場合、アーカイブ表を作成することができますHDFSの他の場所にパーティションをダンプできます。いずれにせよ、HDFSの場所は以下のようになります。
hdfs:namenonde/hdfs_location/site_visitors/visit_date=2017-01-01 hdfs:namenonde/hdfs_location/site_visitors/visit_date=2017-01-02 hdfs:namenonde/hdfs_location/site_visitors/visit_date=2017-01-03
あなたは、UNIXスクリプトやJavaScriptまたはパーティションの日付に基づいて、他のアーカイブHDFSの場所に1つのHDFSの場所からファイルを移動するために、ご使用の環境で使用されている他の言語で実行することができます。
また、アーカイブテーブルにデータをロードして元のテーブルにデータをドロップすることもできます。
#!bin/bash
ARCHIVE=$1
now=$(date +%Y-%m-%d)
StartDate=$now
#archive_dt will give a date based on the ARCHIVE date and that be will used for alterations and loading
archive_dt=$(date --date="${now} - ${ARCHIVE} day" +%Y-%m-%d)
EndDate=$archive_dt
#You can use hive or beeline or impala to insert the data into archive table, i'm using beeline for my example
beeline -u ${CONN_URL} -e "insert into table ${SCHEMA}.archive_table partition (visit_date) select * from ${SCHEMA}.${TABLE_NAME} where visit_date < ${archive_dt}"
#After the data been loaded to the archive table i can drop the partitions in original table
beeline -u ${CONN_URL} -e "ALTER TABLE ${SCHEMA}.main_table DROP PARTITION(visit_date < ${archive_dt})"
#Repair the tables to sync the metadata after alterations
beeline -u ${CONN_URL} -e "MSCK REPAIR TABLE ${SCHEMA}.main_table; MSCK REPAIR TABLE archiveSchema.archive_table"
出典
2017-12-11 16:42:49
roh
ご提案をありがとう奪うを。これは良いアプローチです。 HBaseテーブルから古いデータをアーカイブしたい場合はどうすればよいですか? – RahulN
私の答えがあなたのために働いたと思うなら、私の答えにチェックを入れてください。 – roh
HBaseの質問に別の質問をしてください。その場合、私以外の多くの回答を聞くことができます。私の提案が欲しいと思います。 – roh