本トピックは、How to: Simple incremental PDTs using create_process にて記載されていた内容を、翻訳・加筆したものになります。
テーブルのDROP
and CREATE
を毎晩実施するよりも、PDTに対してデータを増分追加したくなることがあるでしょう。
Lookerには、crate_process
を利用して上記を達成することが可能です。以下に例を記載しますので、皆さんの参考になれば幸いです。
私が増分追加しようとしているテーブルは非常にシンプルなものです。1つのテーブル(基準に適合する)から行を引き出し、それらを少し修正してから別のテーブルに挿入しますが、より複雑なプロセスにおいても、同じソリューションを適用できると思います。
SELECT
と INSERT
権限が対象テーブルに対して必要になります。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);;
}}}
sql_trigger_value
を利用して、テーブルの内容が変更されたことを検知できるようにします。例えば、sql_trigger_value: SELECT MAX(tstamp) FROM schema.incremental_table_name;;
基本的には、looker_scratchテーブルに新しい行のみを保存し、その後、別のsql_stepがこれらの新しい行をlooker_scratchスキーマ外の既存のテーブルに挿入します。
前述したように、これは非常に単純な例であり、単純な抽出と行の処理を行い、それらを別のテーブルにロードする場合にのみ実際に機能します。