このトピックでは、ジョブの重複排除クエリを変更した後に、ジョブとジョブの開始に使用される状態データ間の互換性について説明します。
互換性のある変更
完全な互換性: proctime フィールドの昇順に基づく重複排除クエリの選択フィールドにあるパーティションキー以外の変更。
-- 元の SQL ステートメント: SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 完全な互換性: 選択フィールドに d を追加します。 SELECT a, b, c, d FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 完全な互換性: 選択フィールドから b を削除します。 SELECT a, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 完全な互換性: 選択フィールドを c から substring(c, 1, 5) に変更します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk FROM (SELECT a, b, SUBSTRING(c,1,5) as c, proctime FROM MyTable)) WHERE rk = 1;
完全な互換性: パーティションキーの順序を変更します。
-- 元の SQL ステートメント: SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a, b, c ORDER BY proctime ASC) as rk FROM MyTable) WHERE rk = 1; -- 完全な互換性: パーティションキーの順序を変更します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY c, a, b ORDER BY proctime ASC) as rk FROM MyTable) WHERE rk = 1;
完全な互換性: rowtime フィールドまたは proctime フィールドの降順に基づく重複排除クエリで、スキーマを変更せずにフィールドを変更します。
-- 元の SQL ステートメント: SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM MyTable) WHERE rk = 1 AND c > 10; -- 完全な互換性: スキーマを変更しないフィールドを削除します。 SELECT a, b FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM MyTable) WHERE rk = 1 AND c > 10;
互換性のない変更
パーティションキーを追加、削除、または変更するか、パーティションキーに含まれるフィールドの計算ロジックを変更します。
-- 元の SQL ステートメント: SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: パーティションキーとして d を追加します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a,d ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: パーティションキーから a を削除します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: パーティションキーを a から a + 1 に変更します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY proctime ASC) AS rk FROM (SELECT a + 1 AS a, b, c, proctime FROM MyTable)) WHERE rk = 1;
ORDER BY 句で指定されたフィールドまたは順序を変更します。
-- 元の SQL ステートメント: SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime ASC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: 並べ替えに使用するフィールドを proctime から ts に変更します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY ts ASC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: 並べ替え順序を昇順から降順に変更します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM MyTable) WHERE rk = 1;
rowtime フィールドまたは proctime フィールドの降順に基づく重複排除クエリで、スキーマを変更するフィールドを追加、削除、または変更します。
-- 元の SQL ステートメント: SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: 選択フィールドに d を追加します。 SELECT a, b, c, d FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: 選択フィールドから c を削除します。 SELECT a, b FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM MyTable) WHERE rk = 1; -- 互換性なし: 選択フィールドを c から substring(c, 1, 5) に変更します。 SELECT a, b, c FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY a ORDER BY proctime DESC) AS rk FROM (select a, b, substring(c, 1, 5) as c, ts from MyTable)) WHERE rk = 1;