パーティション化された Hive テーブルから特定の行を削除する必要があります。これらの削除行は特定の条件に一致するため、パーティション全体を削除することはできません。テーブルに 、 、 の3Table
つの列があり、 と で分割されているとします。partner
date
source_key
date
source_key
ハイブ内の特定のレコード セットの削除または更新に対してサポートされている操作がないことがわかっています(ハイブ内のレコードを削除および更新する方法を参照してください)。
このソリューションに続いて、特定の条件に一致するレコードのみを保持するために、次のクエリを正常に実行しましdate
た。source_key='heaven'
partner<>'angel'
テーブルの一時的な空のコピーを作成しますTable
。
CREATE TABLE IF NOT EXISTS tmpTable LIKE Table;
現在の行を入力します。
INSERT OVERWRITE TABLE tmpTable
PARTITION (date,source_key)
SELECT * FROM Table
WHERE
date >= '2020-05-01' AND date < '2020-11-30' AND
source_key = 'heaven';
対象のパーティションを削除します。
ALTER TABLE Table DROP IF EXISTS
PARTITION (source_key = 'heaven' , date >= '2020-05-01' , date < '2020-11-30' );
編集したパーティションをターゲット テーブルに挿入します。(構文エラーのため、OVERWRITE を挿入できませんでした)
INSERT INTO Table
PARTITION (source_key,date)
SELECT * FROM tmpTable
WHERE
partner <> 'angel';
一時テーブルをドロップします。
DROP TABLE IF EXISTS tmpTable;
クエリは正常に実行されます。テーブルTable
が管理されているため、パーティションが削除されたときに hdfs ファイルを削除する必要がありますが、これらすべてのクエリの実行後、ターゲット テーブルTable
はすべてのレコードをpartner = 'angel'
指定されたテーブルに保持するため、何かが間違っています (おそらく最後の INSERT INTO ステートメントで)。日付の範囲と 、基本的に同じままです。
障害はどこにありますか?何が欠けている?そのようなHiveテーブルの特定の条件に一致する特定の行を正確に削除するにはどうすればよいですか?