6
1

More than 1 year has passed since last update.

Tips: Treasure workflowでの`create_table`の処理は指定するクエリエンジンによって挙動がちょっと違う

Posted at

この記事は何

QiitaではTreasure workflowを使って一部データの加工などを行っています。
Treasure workflowを使う中で、ちょっとハマるポイントがあったので記事にしました。

Treasure workflowとは

Treasure workflowとはTreasure Data上で処理をワークフローとして定義、実行したいときに使うことができる機能です。
digdagをベースに作られています。

この機能を使うことで、データの加工、保存などをワークフローとして定義することができ、必要な処理をスケジュール毎やボタンひとつで実行することができます。
使用するクエリエンジンなどもスクリプト上で定義することが可能です。

_export:
  engine: hive
  engine_version: stable
  td:
    database: test

+users:
  td>: users.sql
  create_table: users

Treasure workflowにはcreate_tableというコマンドがあります。このコマンドを利用すると、実行した処理の結果を、指定したテーブルに保存することができます。

+users:
  td>: users.sql
  create_table: users

create_tableのはまりポイント

create_tableは前項で説明した通りシンプルな処理なのですが、create_tableは、すでにテーブルが存在した時は上書きの処理が走ります。

この処理が指定するクエリエンジンによって異なるのです。

クエリエンジンがPrestoの場合

クエリエンジンにPrestoを指定した場合は、create_tableコマンドを指定しているとDROP TABLE IF EXISTSが実行されます。
つまりテーブルごと削除した後に、再度CREATE TABLEの処理が走ることで、データの上書きを行なっています。

クエリエンジンがHiveの場合

クエリエンジンにHiveを指定した場合は、create_tableコマンドを指定しているとINSERT OVERWRITEが実行されます。
つまりテーブルは残したまま、文字通りデータの上書きを行なっています。

何が困るのか

create_tableの処理がクエリエンジンごとでどのような処理になるかは前項で説明しました。
この違いで主に困るのはPrestoの方です。
Prestoは上書きではなくテーブルの作り直しをしています。
それにより、Treasure Data上でテーブルに対して何か変更(カラムの説明)を加えても、実行するたびに全て消えてしまいます。
この特性を知らないでいると、準備したものが全てパーにもなり得るので注意してください。
消えてほしくない場合はクエリエンジンにHiveを指定するようにしましょう。

参考文献

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1