Create_Process を利用した PDT を単純増分する方法

本トピックは、How to: Simple incremental PDTs using create_process にて記載されていた内容を、翻訳・加筆したものになります。

テーブルのDROP and CREATE を毎晩実施するよりも、PDTに対してデータを増分追加したくなることがあるでしょう。

Lookerには、crate_process を利用して上記を達成することが可能です。以下に例を記載しますので、皆さんの参考になれば幸いです。

私が増分追加しようとしているテーブルは非常にシンプルなものです。1つのテーブル(基準に適合する)から行を引き出し、それらを少し修正してから別のテーブルに挿入しますが、より複雑なプロセスにおいても、同じソリューションを適用できると思います。

  1. まず最初に、増分追加させたいテーブルをDWH上(PDTを作成するのと同じスキーマ・データセット)に作成する必要があります。ここでは、DDL文については言及しません。
  2. また、Lookerが利用しているデータベースのコネクションに対して、SELECTINSERT 権限が対象テーブルに対して必要になります。
  3. LookML上で、以下のようなviewを作成します。
view: incremental_table {
  derived_table: {
    create_process: {
      sql_step:
      CREATE TABLE ${SQL_TABLE_NAME} AS (
      SELECT DISTINCT
      col1,
      col2,
      col3,
      tstamp
      FROM existing_table AS e
      -- Only select new rows 
      WHERE e.tstamp > (SELECT MAX(tstamp) FROM schema.incremental_table_name);;
      
        sql_step:
        INSERT INTO schema.incremental_table_name
        SELECT * FROM ${SQL_TABLE_NAME}
        -- Optional filtering, assuming Col1 is unique
        WHERE ${SQL_TABLE_NAME}.col1 NOT IN (SELECT col1 FROM schema.incremental_table_name);;
      }}}
  1. sql_trigger_valueを利用して、テーブルの内容が変更されたことを検知できるようにします。例えば、sql_trigger_value: SELECT MAX(tstamp) FROM schema.incremental_table_name;;
  2. もしかすると、このPDTの実行を開始する前の日付にさかのぼってデータを増分したいかもしれません。

基本的には、looker_scratchテーブルに新しい行のみを保存し、その後、別のsql_stepがこれらの新しい行をlooker_scratchスキーマ外の既存のテーブルに挿入します。

前述したように、これは非常に単純な例であり、単純な抽出と行の処理を行い、それらを別のテーブルにロードする場合にのみ実際に機能します。

2 0 357