定期的な更新が必要な広大な Hive テーブルを管理する場合、効率的なアプローチを見つける重要です。 Hive の最近の機能強化には、更新/挿入/削除機能が含まれていますが、最適なソリューションを選択することは依然として課題です。
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);
上書きされるターゲット テーブル内のパーティションを制限するなど、最適化を適用してパフォーマンスを向上させることができます。パーティション リストをパラメータとして渡すと、プロセスを大幅に高速化できます。
増分更新が必要な場合すべての列を新しいデータで更新するには、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 サイトの他の関連記事を参照してください。