1

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
    

ただし、これはまだ意味がありません (または私の解釈では機能しません)。

4

0 に答える 0