近づい以下試してみてください。
をランダムセッションIDを使用して:
create external table staging (a string, b string, c string) location 'xyz';
- 各行に一意のIDを割り当てる:
セッションIDとしてシーケンス番号を使用して
insert into table destination as select reflect("java.util.UUID", "randomUUID") AS session_id, s.* from staging;
:
create external table staging (a string, b string, c string) location 'xyz';
CREATE TABLE IF NOT EXISTS max_session_id (session_id int);
insert into table destination select cast(coalesce(t.session_id,0) + row_number() over() as INT) as session_id, t1.* from max_session_id t join destination t1 on 1=1;
DROP TABLE IF EXISTS tmp_max_session_id; CREATE TABLE tmp_max_session_id AS SELECT COALESCE(MAX(session_id), 0) AS session_id FROM destination;
INSERT OVERWRITE TABLE max_session_id SELECT * FROM tmp_max_session_id;
あなたは、パーティションとして各ファイルを追加するファイルごとに同じセッションIDをタグ付けしたい場合は、(「java.util.UUID」、「randomUUID」)を反映して保存することができますかパーティションを追加する際に別のテーブルのmax_session_idを新しく生成したsession_idをパーティションIDとして使用します。
追加の列なしでテーブルを作成できますか?どのようにIDは何であるべきか、コンピュータはどのように知っていますか?ファイルを読み込むときにタグファイルフラグを使用することを検討しましたか(つまり、IDを追加するのではなく、ファイル名を列として追加します) –
これは良い提案です。 id。しかし、私は自分のHQLクエリを書くとき、私は複数のテーブルからいくつかの値を選びます。その場合、INPUT__FILE__NAMEが複数のテーブルに存在するというエラーが表示されます。ここで回避策はありますか? – Bala
私はそれを修正しました。私の質問では単純な間違いでした。私は質問でDISTINCTを見逃しました。ありがとう。私はまだどのセッションが処理され、どのセッションが処理されないのかを追跡するために、セッションを別のテーブルに格納する必要があります。私は別のテーブルの助けを借りてそれを行います。 – Bala