2017-12-11 10 views
0

内部テーブルと外部テーブルを含み、パーティション化されていてもパーティション化されていないハイブテーブルに対しても、アーカイブとパージのメカニズムを適用したいと考えています。ハイブテーブルのアーカイブ

私はsite_visitorsテーブルを持っており、visit_dateでパーティション化されています。 そして、私は過去1年間に自分のサイトにアクセスしなかったsite_visitorsテーブルのデータをアーカイブしたかったのです。同時に、私はこのアーカイブされたデータを同じテーブルディレクトリに保存したくありません。私はいくつかの特定の場所のデータをアーカイブすることができます。

答えて

1

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"

+0

ご提案をありがとう奪うを。これは良いアプローチです。 HBaseテーブルから古いデータをアーカイブしたい場合はどうすればよいですか? – RahulN

+0

私の答えがあなたのために働いたと思うなら、私の答えにチェックを入れてください。 – roh

+0

HBaseの質問に別の質問をしてください。その場合、私以外の多くの回答を聞くことができます。私の提案が欲しいと思います。 – roh

関連する問題