increment_key

使用状況

ビュー: my_view {
derived_table: {
increment_key: ["created_date"]
...
}
}
階層
increment_key

または

increment_key
デフォルト値
なし

許可
時間ベースの LookML ディメンションの名前

特別なルール
increment_key は、永続テーブル特定の言語でのみサポートされます。

定義

言語がサポートされている場合、プロジェクトに増分 PDT を作成できます。インクリメンタル PDT は、テーブル全体を再ビルドするのではなく、最新のデータをテーブルに追加して Looker が構築する永続的な派生テーブル(PDT)です。詳細については、増分 PDT のドキュメントをご覧ください。

increment_key は、PDT に新しいデータをクエリして PDT に追加する時間の増分を指定して、PDT を増分 PDT にするパラメータです。increment_key に加えて、必要に応じて increment_offset を指定して、遅延データを考慮して再作成する過去の期間の数(インクリメント キーの粒度)を指定できます。

PDT の increment_key は、PDT の永続トリガーとは無関係です。increment_keyincrement_offset、永続性戦略の相互作用を示すいくつかのシナリオについては、増分 PDT のドキュメント ページをご覧ください。

increment_key パラメータはサポートされている言語、および PDT や集計表(PDT の一種)などの永続性戦略のあるテーブルでのみ機能します。

increment_key では、時間ベースの LookML ディメンションを指定する必要があります。

また、increment_key は次の条件を満たす必要があります。

  • 日、月、年、会計四半期などの切り捨てた絶対時間。曜日などの時間枠はサポートされていません。
  • 注文作成日など、新しいデータとともに予測可能な増加するタイムスタンプ。つまり、タイムスタンプは、テーブルに追加された最新のデータにも最新のタイムスタンプがある場合にのみ、インクリメント キーとして使用する必要があります。ユーザーの誕生日などのタイムスタンプは、インクリメント キーとしては機能しません。誕生日のタイムスタンプは、表に新しいユーザーを追加しても確実に増加しないからです。

増分 LookML ベースの PDT の作成

LookML ベース(ネイティブ)の PDT を増分 PDT にするには、increment_key パラメータを使用して、時間ベースの LookML ディメンションの名前を指定します。ディメンションは、PDT の explore_source の基になるビューで定義する必要があります。

たとえば、以下は explore_source LookML パラメータを使用した、LookML に基づく PDT のビューファイルです。PDT は flights Explore から作成されます。この例では、flights ビューに基づいています。

view: flights_lookml_incremental_pdt {
  derived_table: {
    indexes: ["id"]
    increment_key: "departure_date"
    increment_offset: 3
    datagroup_trigger: flights_default_datagroup
    distribution_style: all
    explore_source: flights {
      column: id {}
      column: carrier {}
      column: departure_date {}
    }
  }

  dimension: id {
    type: number
  }
  dimension: carrier {
    type: string
  }
  dimension: departure_date {
    type: date
  }
}

このテーブルは、クエリの初回実行時に全体が構築されます。 その後、PDT は 1 日分(increment_key: departure_date)単位で再構築され、3 日分(increment_offset: 3)に戻ります。

departure_date ディメンションは、実際には departure ディメンション グループの date 期間です。(ディメンション グループの仕組みの概要については、dimension_group パラメータのドキュメント ページをご覧ください)。ディメンション グループと期間の両方を flights ビューで定義します。これは、この PDT の explore_source です。flights ビューファイルで departure ディメンション グループを定義する方法は次のとおりです。

...
  dimension_group: departure {
    type: time
    timeframes: [
      raw,
      date,
      week,
      month,
      year
    ]
    sql: ${TABLE}.dep_time ;;
  }
...

増分 SQL ベースの PDT の作成

Looker では、SQL ベースの派生テーブルではなく、増分 PDT のベースとして LookML ベース(ネイティブ)の派生テーブルを使用することをおすすめします。ネイティブ派生テーブルは、増分 PDT に必要な複雑なロジックを本質的に処理します。SQL ベースの PDT は手動で作成されたロジックに依存しており、非常に複雑な機能で使用するとエラーが発生しやすくなります。

増分 SQL ベースの PDT を定義するには、LookML ベースの PDT の場合と同様に、increment_key と(省略可)increment_offset を使用します。ただし、SQL ベースの PDT は LookML ビューファイルに基づいていないため、SQL ベースの PDT を増分 PDT にするための追加の要件があります。

  • インクリメント キーは、PDT のビューファイルで定義した時間ベースの LookML ディメンションをベースとする必要があります。
  • インクリメント キーをベースとするデータベース時間列にインクリメント キーを接続するには、PDT に {% incrementcondition %} Liquid フィルタを指定する必要があります。{% incrementcondition %} フィルタは、SQL エイリアスや、列に基づくディメンションの名前ではなく、データベース内の列名を指定する必要があります(次の例を参照)。

Liquid フィルタの基本形式は次のとおりです。

   WHERE {% incrementcondition %} database_table_name.database_time_column {% endincrementcondition %}

たとえば、次のようにして 1 日単位で再ビルドされる SQL ベースの PDT のビューファイルは次のようになります(increment_key: "dep_date")。過去 3 日間のデータが再ビルド時にテーブルに追加されます(increment_offset: 3)。

view: sql_based_incremental_date_pdt {
  derived_table: {
    datagroup_trigger: flights_default_datagroup
    increment_key: "dep_date"
    increment_offset: 3
    distribution_style: all
    sql: SELECT
        flights.id2  AS "id",
        flights.origin  AS "origin",
        DATE(flights.leaving_time )  AS "departure"
      FROM public.flights  AS flights
      WHERE {% incrementcondition %} flights.leaving_time {%  endincrementcondition %}
          ;;
  }

  dimension_group: dep {
    type: time
    timeframes: [raw, date, week, month, year]
    datatype: timestamp
    sql:  ${TABLE}.departure
    ;;
  }
  dimension: id {
      type: number
    }
    dimension: origin {
      type: string
  }
}

この例には、次の点に注意してください。

  • 派生テーブルは SQL ステートメントに基づいています。SQL ステートメントは、派生テーブル内に、データベースの flights.leaving_time 列に基づく列を作成します。この列にはエイリアス departure が付与されます。
  • PDT のビューファイルは、dep というディメンション グループを定義します。
    • ディメンション グループの sql パラメータは、ディメンション グループが派生テーブルの departure 列に基づいていることを示します。
    • ディメンション グループの timeframes パラメータには、date が期間として含まれています。
  • 派生テーブルの increment_keydep_date ディメンションを使用します。これは、dep ディメンション グループの date の期間に基づくディメンションです。(ディメンション グループの仕組みの概要については、dimension_group パラメータのドキュメント ページをご覧ください)。
  • {% incrementcondition %} Liquid フィルタは、increment キーをデータベースの flights.leaving_time 列に接続するために使用されます。
    • {% incrementcondition %} は、データベースの TIMESTAMP 列の名前を指定する必要があります(または、データベースの TIMESTAMP 列に評価される必要があります)。
    • {% incrementcondition %} は、PDT を定義する FROM 句で使用可能なもの(FROM 句で指定されたテーブルの列など)に対して評価する必要があります。{% incrementcondition %}SELECT ステートメントの結果を参照できません(SQL ステートメントの列に割り当てられたエイリアス、列に基づくディメンションの名前など)。上記の例では、{% incrementcondition %}flights.leaving_time です。FROM 句は flights テーブルを指定するため、{% incrementcondition %}flights テーブルの列を参照できます。
    • インクリメント キーで使用されているのと同じデータベース列を {% incrementcondition %} が指している必要があります。この例の場合、インクリメント キーは dep_date です。これは PDT の departure 列で定義されるディメンションで、データベースの flights.leaving_time 列のエイリアスです。したがって、フィルタは flights.leaving_time を参照します。
WHERE {% incrementcondition %} flights.leaving_time {%  endincrementcondition %}

WHERE 句に追加すると、他のフィルタを作成できます。たとえば、データベース テーブルが何年も前のものである場合は、PDT の初期ビルドが特定の日付より後のデータのみを使用するようにフィルタを作成できます。この WHERE は、2020 年 1 月 1 日以降のデータを使用して PDT を作成します。

WHERE {% incrementcondition %} flights.leaving_time {%  endincrementcondition %}
  AND flights.leaving_time > '2020-01-01'

また、WHERE 句を使用して、SQL のデータをタイムスタンプに解析してからエイリアスを指定することもできます。たとえば、次の増分 PDT では、タイムスタンプ データに解析された文字列データである text_column に基づく 15 分単位が使用されます。

view: sql_based_incremental_15min_pdt {
  derived_table: {
    datagroup_trigger: flights_default_datagroup
    increment_key: "event_minute15"
    increment_offset: 1
    sql: SELECT PARSE_TIMESTAMP("%c", flights.text_column) as parsed_timestamp_column,
        flights.id2  AS "id",
        flights.origin  AS "origin",
      FROM public.flights  AS flights
      WHERE {% incrementcondition %} PARSE_TIMESTAMP("%c", flights.text_column)
          {% endincrementcondition %} ;;
  }

  dimension_group: event {
    type: time
    timeframes: [raw, minute15, hour, date, week, month, year]
    datatype: timestamp
    sql:  ${TABLE}.parsed_timestamp_column ;;
  }
  dimension: id {
    type: number
  }
  dimension: origin {
    type: string
  }
}

ディメンション グループ sql の定義で SQL のエイリアスを使用できますが、WHERE 句で SQL 式を使用する必要があります。次に、minute15event ディメンション グループで期間として設定されているため、event_minute15 をインクリメント キーとして使用して PDT の 15 分の増分を取得できます。

増分集約テーブルを作成する

インクリメンタル テーブルを作成するには、aggregate_table パラメータの materialization パラメータに increment_key と(省略可)increment_offset を追加します。increment_key パラメータを使用して、時間ベースの LookML ディメンションの名前を指定します。ディメンションは、集約テーブルの Explore の基になるビューで定義する必要があります。

たとえば、この集計テーブルは accidents Explore に基づいていますが、この場合は accidents ビューに基づいています。集約テーブルは 1 週間ごとに再ビルドされます(increment_key: event_week)。2 週間前のものになりますincrement_offset: 2:

explore: accidents {
  . . .
  aggregate_table: accidents_daily {
    query: {
      dimensions: [event_date, id, weather_condition]
      measures: [count]
    }
    materialization: {
      datagroup_trigger: flights_default_datagroup
      increment_key: "event_week"
      increment_offset: 2
    }
  }
}

increment キーでは event_week ディメンションを使用します。これは、event ディメンション グループの week 期間に基づいています。(ディメンション グループの仕組みの概要については、dimension_group パラメータのドキュメント ページをご覧ください)。ディメンション グループと期間の両方を accidents ビューで定義します。

. . .
view: accidents {
  . . .
  dimension_group: event {
      type: time
      timeframes: [
        raw,
        date,
        week,
        year
      ]
      sql: ${TABLE}.event_date ;;
  }
  . . .
}

注意点

時間ベースのクエリ向けにソーステーブルを最適化する

増分 PDT のソーステーブルが時間ベースのクエリ用に最適化されていることを確認します。具体的には、インクリメント キーに使用される時間ベースの列には、パーティショニング並べ替えキーインデックスなど、使用している言語でサポートされている最適化戦略が必要です。増分テーブルが更新されるたびに Looker がソーステーブルにクエリを実行し、インクリメント キーに使用される時間ベースの列の最新値を確認するため、ソーステーブルの最適化を行うことを強くおすすめします。それらのクエリ用にソーステーブルが最適化されていない場合、Looker が最新値をクエリする処理は遅くなってコストがかかる可能性があります。

増分PDT対応のデータベースダイアレクト

Looker プロジェクトで増分 PDT に対応するためには、データベースダイアレクトが、行の削除と挿入を有効にするデータ定義言語(DDL)のコマンドに対応している必要があります。

次の表は、Looker の最新リリースで増分 PDT をサポートしている言語を示しています。