大規模なハイブ テーブルを増分的に効率的に更新するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-14 19:52:02
オリジナル
760 人が閲覧しました

How to Efficiently Update a Large Hive Table Incrementally?

Hive: メイン テーブルの効率的な増分更新

定期的な更新が必要な広大な Hive テーブルを管理する場合、効率的なアプローチを見つける重要です。 Hive の最近の機能強化には、更新/挿入/削除機能が含まれていますが、最適なソリューションを選択することは依然として課題です。

増分更新に FULL OUTER JOIN を使用する

One効果的な方法には、FULL OUTER JOIN を使用して増分更新データを既存のメイン テーブルとマージすることが含まれます。主キーを結合することにより、更新されたエントリと新しいエントリの両方を識別します。以下のクエリは、このアプローチを示しています。

INSERT OVERWRITE target_data [partition()]
SELECT
  -- Select new if exists, old if not exists
  CASE WHEN i.PK IS NOT NULL THEN i.PK   ELSE t.PK   END AS PK,
  CASE WHEN i.PK IS NOT NULL THEN i.COL1 ELSE t.COL1 END AS COL1,
  ...
  CASE WHEN i.PK IS NOT NULL THEN i.COL_n ELSE t.COL_n END AS COL_n
FROM
  target_data t -- Restrict partitions if applicable
  FULL JOIN increment_data i ON (t.PK = i.PK);
ログイン後にコピー

上書きされるターゲット テーブル内のパーティションを制限するなど、最適化を適用してパフォーマンスを向上させることができます。パーティション リストをパラメータとして渡すと、プロセスを大幅に高速化できます。

列レベルの更新には UNION ALL row_number() を検討してください

増分更新が必要な場合すべての列を新しいデータで更新するには、FULL OUTER JOIN の代わりに row_number() を使用した UNION ALL 操作を使用できます。このアプローチにより、パフォーマンスが向上することがよくあります。

SELECT
  PK,
  COL1,
  ...
  COL_N
FROM
  target_data
UNION ALL
SELECT
  PK,
  COL1,
  ...
  COL_N
FROM
  increment_data;
ログイン後にコピー

row_number() ウィンドウ関数は各行に一意の番号を割り当て、クエリで更新レコードを識別して優先順位を付けることができます。

以上が大規模なハイブ テーブルを増分的に効率的に更新するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート