
Questetra BPM Suite では、ワークフロー図の中に[CSV データ更新]という自動処理工程を配置することができます。この工程を使うと、ワークフローの中で取り扱う CSV / TSV 形式のテキストデータを、まるでエクセルで表計算をするように、自動的に集計したり、必要な形に加工したりすることができます。例えば、テーブル(表)から特定の列のみを抜き出したり、条件を満たす行のみを抽出したりすることができます。慣れてくれば、2つのテーブルを結合することも可能です。
この処理を行うには「SQL」という専門的な言語を使うのですが、「難しそう」「エンジニアしか使えない」と思われがちです。しかし、実は基本的なルールを少し覚えれば、エンジニアではない方でも十分に使うことができます。さらに最近では、「生成 AI」(ChatGPT など)を活用すれば、やりたいことを伝えるだけで SQL を作ってもらうこともできます。
この記事では、これから[CSV データ更新]工程を使ってみたい方、特に SQL をあまり使ったことがない方に向けて、基本的な設定方法やクエリの例、よくあるエラーの解決方法などを、わかりやすく説明します。
1. [CSV データ更新]工程とは
1-1. 工程の概要
[CSV データ更新]は、以下のような特徴を持った(ビルドイン)自動処理工程です。Advanced / Professional でご契約のワークフロー基盤で利用できます。
- CSV / TSV データをデータベースのテーブルとして扱う
文字型(複数行)に保存された CSV / TSV データを内部でデータベーステーブル化し、SQL を発行します- H2 Database のテーブルとして扱われる
- 利用者は H2 Database 向けの SQL を準備する
- 入力と出力あわせ、最大 3 つのデータ項目を指定
- C1, C2: 処理対象となる CSV / TSV データ項目(複数指定すると JOIN などで結合も可能)
- C3: SQL 実行結果を保存するデータ項目(C1 と同じ項目を上書きすることも可)
- C4: 実行する SQL クエリを記述する(最大 2000 文字)
- CSV / TSV データの 1 行目はカラム名として扱われる
例えば 1 行目が商品ID,商品名,価格なら、テーブルには"商品ID","商品名","価格"のカラムが定義されます- カラム名が空だったり、64文字を超えるとエラー
- 重複するカラム名があるとエラー
- 列数が足りない/多い場合、自動で補完される

1-2. この工程が便利な理由
- 手動で CSV を加工しなくてもよい
Excel 等で並べ替えや集計を行う手間を省き、自動工程で処理できます - JOIN で複数の CSV / TSV を突合可能
複数のデータ項目(C1, C2)を指定すれば、JOIN 句を利用してテーブル同士を結合したり、さらに加工や集計も可能となります - 非エンジニアでも取り組みやすい
SQL といっても、基本的な SELECT / WHERE / JOIN 程度を理解すれば十分使いこなせます。最近では生成 AI が SQL を提案してくれるため、文法を最初から暗記する必要はありません。

2. 基本的な設定
2-1. 処理対象のデータ項目(C1, C2)
- C1 に読み込むデータ項目
- 文字型(複数行)で保存されている CSV / TSV データを指定します
- テーブル名を指定することもできます(例:
"商品") - カラム行(1 行目)でエラーを起こさないよう、カラム名を整理しましょう
- C2 を追加で指定する場合
- 2 つめの CSV / TSV データを扱うときに指定します
- C1 と同じデータ項目や同じテーブル名は使えません(重複エラー)
2-2. クエリ結果を保存するデータ項目(C3)
- C1 と同じ項目を選択すると「上書き保存」
処理結果が同じ項目に上書きされるので、元データが不要な場合に便利です - 別項目を指定すると、元データと結果を両方残せる
- 出力形式(CSV or TSV)を選択
2-3. クエリ(SQL)の入力欄(C4)
- テーブル名・カラム名の指定
ダブルクォート(")で囲む必要があります。例:select * from "商品" - 最大 2000 文字
長大なクエリを記述する際は、分割やシンプル化を検討してください - 禁止語に注意
ファイルシステムに関連した関数やコマンドなどの名前は利用できません
3. 簡単なクエリ例
ここでは、ごく基本的な SQL クエリをいくつか紹介します。エンジニアではない方も、この程度の記法ならすぐに試せると思いますのでトライしてみてください。
3-0. サンプルデータ
商品
商品ID 商品名 価格
a-01 リンゴ 200
a-02 オレンジ 150
a-03 バナナ 100
a-04 いちご 500
b-01 トマト 150
b-02 キャベツ 300
b-03 大根 250
b-04 ピーマン 200売上
日付 商品ID 数量 売上
2025-02-20 a-01 3 600
2025-02-20 a-02 5 750
2025-02-20 a-03 2 200
2025-02-20 a-04 4 2000
2025-02-20 b-01 2 300
2025-02-20 b-02 1 300
2025-02-20 b-03 3 750
2025-02-20 b-04 6 1200
2025-02-21 a-01 5 1000
2025-02-21 a-02 4 600
2025-02-21 a-03 4 400
2025-02-21 a-04 3 1500
2025-02-21 b-01 2 300
2025-02-21 b-02 3 900
2025-02-21 b-03 4 1000
2025-02-21 b-04 2 4003-1. 全データを取得する(SELECT 文)
クエリ(SQL)
select * from "商品"- 「商品」テーブルからすべてのカラム(列)を取り出す
- カラム名を指定しなくても OK なので、試しに実行して結果を確認する
- カラム名を指定すれば、特定カラムだけ取得することも可能
- 例:
select "商品ID", "商品名" from "商品"
- 例:
クエリ結果
"商品ID" "商品名" "価格"
"a-01" "リンゴ" "200"
"a-02" "オレンジ" "150"
"a-03" "バナナ" "100"
"a-04" "いちご" "500"
"b-01" "トマト" "150"
"b-02" "キャベツ" "300"
"b-03" "大根" "250"
"b-04" "ピーマン" "200"3-2. 条件付きで取得する(WHERE 句)
クエリ(SQL)
select * from "商品" where "商品ID" like 'a-%'- 「商品ID」が “a-” で始まるデータだけを取り出す
%: 任意の文字列、_: 任意の一文字
クエリ結果
"商品ID" "商品名" "価格"
"a-01" "リンゴ" "200"
"a-02" "オレンジ" "150"
"a-03" "バナナ" "100"
"a-04" "いちご" "500"3-3. 複数テーブルを結合する(JOIN 句)
複数の CSV / TSV を指定した場合(C1 = 商品, C2 = 売上など)、JOIN 句で突合が可能です。
クエリ(SQL)
select p.*, s.* except(s."商品ID")
from "商品" as p
join "売上" as s
on p."商品ID" = s."商品ID"- 「商品」と「売上」を「商品ID」で突合し、両方の情報をまとめて取得する
- s.”商品ID” を除外しているのは、重複して不要な場合があるため
クエリ結果
"商品ID" "商品名" "価格" "日付" "数量" "売上"
"a-01" "リンゴ" "200" "2025-02-20" "3" "600"
"a-02" "オレンジ" "150" "2025-02-20" "5" "750"
"a-03" "バナナ" "100" "2025-02-20" "2" "200"
"a-04" "いちご" "500" "2025-02-20" "4" "2000"
"b-01" "トマト" "150" "2025-02-20" "2" "300"
"b-02" "キャベツ" "300" "2025-02-20" "1" "300"
"b-03" "大根" "250" "2025-02-20" "3" "750"
"b-04" "ピーマン" "200" "2025-02-20" "6" "1200"
"a-01" "リンゴ" "200" "2025-02-21" "5" "1000"
"a-02" "オレンジ" "150" "2025-02-21" "4" "600"
"a-03" "バナナ" "100" "2025-02-21" "4" "400"
"a-04" "いちご" "500" "2025-02-21" "3" "1500"
"b-01" "トマト" "150" "2025-02-21" "2" "300"
"b-02" "キャベツ" "300" "2025-02-21" "3" "900"
"b-03" "大根" "250" "2025-02-21" "4" "1000"
"b-04" "ピーマン" "200" "2025-02-21" "2" "400"4. 生成 AI を使ったクエリ作成とトラブルシュート
4-1. ChatGPT 等でのクエリ作成
「商品マスタと売上データを商品IDで結合して、金額が 1000 円以上の商品だけ取り出したい」などと生成 AI に伝えると、大まかな SQL を作成してくれます。
- エンジニアでなくても、「こうしたい」という処理内容を伝えるだけなので簡単に利用できる
- 提案された SQL は、そのまま貼り付ける前にテーブル名やカラム名をワークフローアプリに合わせて修正するなど、必要に応じて加工しましょう
実際に ChatGPT(o1)に SQL を生成してもらった例を提示します。Prompt は少し工夫して、上記の文章から少し改良しています。今回の場合、”商品ID” は数値ではなく文字列なので型変換(CAST)は不要でしたが、この部分のみの修正で正常に動作し、期待通りの結果が得られました。

4-2. 典型的なエラーと対処
工程の処理が失敗(エラー)した場合、[エラー通知メール]か[プロセスログ]でエラー内容を確認して対処してください。例えば、プロセス詳細画面にて「管理者モード」を有効にして、[プロセスログ]を表示します(プロセスログなどでエラー内容を確認するには対象アプリにて[コントロール権限]が必要となります)。
- カラム名の不備
- 空白や 64 文字超、重複がある場合はエラー
- カラム行(1 行目)のスペル等も確認しましょう
- クエリ文法エラー
- ダブルクォートの付け忘れ、where と from の順序違いなど
- AI が出力した SQL を使う際も文法を再確認してください
- 禁止語の使用
- ファイルシステム系の関数名など、セキュリティ上NGなキーワードは弾かれます
- 禁止語はカラム名として利用することもできません
- クエリが長すぎる(最大 2000 文字超過)
- 冗長なサブクエリや複雑な結合は整理・分割して実行を検討してください

5. まとめ
- [CSV データ更新]工程は、エンジニアでなくても使える表形式データの加工処理
- 最低限の SQL (SELECT, WHERE, JOIN など) を理解し、サンプルを真似るだけでも十分に実用的です
- 生成 AI の活用
- SQL の細かい記法に慣れていない場合も、やりたいことを自然言語で伝えて作成してもらうことでハードルが下がります
- 次のステップ
- 集計関数(SUM, COUNT, GROUP BY など)や条件分岐 (CASE WHEN …) を使えば、さらに高度な分析が可能になります。必要に応じて少しずつ SQL の知識を広げてみましょう。
- 前処理と後処理、ワークフローへの組み込み
- CSV / TSV データを人が入力するのではなく、例えば次のような形で取得してセットすることで、活用の幅が広がります
- テーブル型データ項目やファイル型データ項目に添付されたテキストファイルを変換(コンバータ系のビルトイン自動工程)
- 外部サービスから取得したデータをセット(ビルトイン自動工程、オリジナルの API リクエスト、など)
- 前処理と同様、クエリ結果のデータを活用することで業務改善に寄与します
- レポートとして整形し、メール等で報告(定期的なレポーティング)
- 集計データを元に生成 AI に分析してもらい後工程に処理を流す
- 外部サービスが必要とする形式に加工し、外部サービスへデータ連携
- CSV / TSV データを人が入力するのではなく、例えば次のような形で取得してセットすることで、活用の幅が広がります
これまで手動で処理していた CSV / TSV データの加工を自動化し、より効率的かつミスの少ないワークフローを実現するために、ぜひ[CSV データ更新]工程の活用を検討してみてください。
