Hive を使用しており、次のようなデータ フローがあります。
SOURCE -> Flume -> S3 Buckets -> Script -> Hive Table
簡潔にするために切り捨てられた、次のような表があります。
CREATE TABLE core_table (
unique_id string
update bigint
other_data string
)
これで、更新テーブルも作成されました。core_update
このテーブルには重複したデータが含まれている可能性があります (たとえば、unique_id が重複していますが、bigint が増加しており、後でファイル内で順序付けられます)。
新しいunique_idをテーブルに追加し、ベースデータを更新しながらcore_update
、更新されたものを適用する良い方法はありますか?core_table
-- 注: MERGE -> DEDUP のようなことは避けようとしています。そのプロセスは小さなデータセットで約 3 時間かかり、非常に巨大なデータセットが 1 つあるからです。したがって、挿入ソートに似た何かを行うことは素晴らしいことです。
更新: IBM による次のブログ投稿を見つけましたhttp://ibm.co/15bMSxkそして、次のように述べています。
アルゴリズム 2: 分割されていないテーブルに更新する
ステップ-1 マージ結合クエリを実行します入力: mainTable、マージされたレコードを保持するステージング テーブル名 (stagingTable3 として呼び出し)、分割されていないステージング テーブル名 (stagingTable2 として呼び出し)、テーブルの主キー、テーブル フィールド マージ結合クエリを作成します。
insert overwrite table stagingTable3 「List tableFields」の各列を選択 エイリアス A の mainTable からエイリアス A のフィールド名を追加 エイリアス B の stagingTable2 との左外部結合を適用 A.primaryKey = B.primaryKey と B.primaryKey の場所を確認ヌル
次に、stagingTable2 から選択したデータと結合します
ステップ 2: 以下のロード クエリを使用して stagingTable3 から mainTable に上書きすることにより、データをロードします。
load data inpath stagingTable3 overwrite into mainTable
ただし、これはまだ意味がありません (または私の解釈では機能しません)。