1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Workato:ループ処理で実行タスク数が多くなりがちなレシピをRubyコネクターを利用して解決する

Last updated at Posted at 2021-09-27

はじめに

Workatoで件数の多いデータをループで処理しようとすると、実行タスク数が多くなってしまうという問題があります。例えば、タスクベースのプランを契約されている場合や、タスクベースではないがFair use limitに抵触するほど実行タスク数が多い状態である場合は、実行タスク数が減るようにレシピの改善が必要となります。しかし、処理や運用を工夫しても、処理対象のデータ件数が減らないということもあろうと思います。

例えば、以下のようなAというLookup Tableと、BというLookup tableが存在するとします。
image.png

image.png

これらのテーブルを比較するためのレシピを作成すると、次の通りとなります。

image.png

本レシピを実行し、上に示したテーブル同士の比較処理を行った場合、タスク使用量は19となります。タスク使用量は、テーブルのレコード数が増えれば、その件数に合わせて増加します。つまり、データ件数が多ければ多いほどタスク使用量において不利なレシピとなります。
image.png

対応方法

もしノーコードに拘らなければ、Rubyコネクターを利用することで、タスク使用量を減らすことができます。
Rubyコネクターでレシピを実装した場合、次の通りとなります。
image.png

このレシピを実行して、同様にテーブル同士の比較処理を行った場合、タスク使用量は3となります。また、このレシピの場合はデータ量にかかわらずタスク使用量は一定となります。

image.png

このレシピでは、ループ処理は4ステップ目のRubyコネクター内で行われます。Rubyコネクターは、コネクター内に定義されたコードにかかわらず、実行タスク数は1タスクで済みます。これにより、使い方次第で実行タスク数を大幅に削減することが可能です。Workatoのタスク実行数にお悩みの方は是非Rubyコネクターの利用をご検討ください。

コード例は以下を参考ください。

コード例

diff_a = parse_json(input['diff_a'])
diff_b = parse_json(input['diff_b'])

result = []

# AテーブルとBテーブルを比較する
diff_a.each { |value|
  is_exists = false
  diff_b.each { |value2|
    if value['entry']['col1'] == value2['entry']['col1'] && value['entry']['col2'] == value2['entry']['col2']
      is_exists = true
    end
  }
  
  if ! is_exists
    # Bテーブルに存在しないレコードを出力する
    result.push({
      'email': value['entry']['col1'],
      'group': value['entry']['col2'],
      'exist_table': 'diff_a'
    })
  end
}

# BテーブルとAテーブルを比較する
diff_b.each { |value|
  is_exists = false
  diff_a.each { |value2|
    if value['entry']['col1'] == value2['entry']['col1'] && value['entry']['col2'] == value2['entry']['col2']
      is_exists = true
    end
  }
  
  if ! is_exists
    # Aテーブルに存在しないレコードを出力する
    result.push({
      'email': value['entry']['col1'],
      'group': value['entry']['col2'],
      'exist_table': 'diff_b'
    })
  end
}


{
  result: result
}
1
0
1

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?