Question

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

  • 23 December 2019
  • 0 replies
  • 250 views

Userlevel 2

本トピックは、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スキーマ外の既存のテーブルに挿入します。


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


0 replies

Be the first to reply!

Reply