すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:重複排除

最終更新日:Jan 08, 2025

このトピックでは、ジョブの重複排除クエリを変更した後に、ジョブとジョブの開始に使用される状態データ間の互換性について説明します。

互換性のある変更

  • 完全な互換性: 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;