Skip to content
Last updated

TD Toolbelt を使用してクエリ結果を出力する

オンデマンドジョブの場合

オンデマンドジョブの場合は、td query コマンドに --result / -r オプションを追加するだけです。ジョブが完了すると、結果がコレクションに書き込まれます。

$ td query --result 'mongodb://user:password@host:1234/database/collection' \
-w -d testdb "SELECT code, COUNT(1) FROM www_access GROUP BY code"

スケジュールされたジョブの場合

スケジュールされたジョブの場合は、ジョブをスケジュールする際に --result / -r オプションを追加します。ジョブが実行されるたびに、結果が mytbl に書き込まれます。

$ td result:create mydb 'mongodb://user:password@host:1234/database'
$ td sched:create hourly_count_example "0 * * * *" \
-d testdb "select count(*) from www_access" --result mydb:mycollection

フォーマット

結果出力先は、次の形式の URL で表されます:

mongodb://username:password@host/database/collection
mongodb://username:password@host:port/database/collection

各項目の説明:

  • mongodb は MongoDB への結果出力を識別します。
  • usernamepassword は MongoDB インスタンスへの認証情報です。
  • hostname は MongoDB インスタンスのホスト名です。
  • port は MongoDB インスタンスにアクセスするためのポート番号です。これはオプションです。
  • database は宛先データベースの名前です。
  • collection は宛先コレクションの名前です。

モード

次のモードを使用して、データを追加または削除できます:

mongodb://user:password@host:1234/database/collection # append
mongodb://user:password@host:1234/database/collection?mode=append # append
mongodb://user:password@host:1234/database/collection?mode=replace # replace
mongodb://user:password@host:1234/database/collection?mode=truncate # truncate
mongodb://user:password@host:1234/database/collection?mode=update&unique=key1 # update

mode=append (デフォルト)

これはデフォルトのモードです。クエリ結果はコレクションに追加されます。コレクションがまだ存在しない場合は、新しいコレクションが作成されます。

この方法はアトミックです。

mode=replace

コレクションが既に存在する場合、既存のコレクションの行はクエリ結果で置き換えられます。コレクションがまだ存在しない場合は、新しいコレクションが作成されます。

単一のトランザクションで次の3つのステップを実行することにより、アトミック性(コレクションのコンシューマーが常に一貫性のあるデータを持つようにする)を実現します。

  1. 一時コレクションを作成します。
  2. 一時コレクションに書き込みます。
  3. RENAME コマンドを使用して、既存のコレクションを一時コレクションで置き換えます。

この方法はアトミックです。

mode=truncate

システムはまず既存のコレクションを切り捨て、次にクエリ結果を挿入します。コレクションがまだ存在しない場合は、新しいコレクションが作成されます。

REPLACE とは異なり、TRUNCATE はコレクションのインデックスを保持します。

この方法はアトミックです。

mode=update

このモードは、MongoDB の find と「upsert」メソッドを使用します(MongoDB のドキュメントを参照)。簡単に言うと、ユニークインデックスまたは主キーで重複値が発生する場合を除き、行が挿入され、重複する場合は更新が実行されます。引数で指定したフィールドに既にユニークインデックスを作成していることを確認してください。このモードを使用する場合、unique オプションが必須です。

MongoDB はトランザクションをサポートしていないため、このモードではトランザクションのアトミック性を保証できません。

Unique

このオプションは update モードでのみ関連し、必須です。MongoDB コレクションを更新するために使用するユニークキーまたはキー(カンマ区切り)のカラム名を指定します。

mongodb://user:password@host:1234/database/collection?mode=update&unique=key1
mongodb://user:password@host:1234/database/collection?mode=update&unique=key1,key2,key3