初心者向け

n8n Data Tableの使い方

n8n の中に表を作って、ワークフローから検索・更新できる Data Table を、商品12件の表で動かして確かめました。条件を2つ書くと既定では「どちらか合えば」になること、大文字と小文字を区別すること、0件だと後ろのノードが動かないこと、前から2件入ると同じ検索が2回走ることを実測しています。

動作確認: — n8n 2.36.8 / Data table ノード v1.1

Data Table は、n8n の中に表(行と列のあるデータ)を作って、ワークフローから検索したり書き換えたりできる機能です。 スプレッドシートやデータベースを別に用意しなくても、在庫の一覧や予約の枠のような小さな表なら、n8n の中で持てます。

商品12件の表で動かして分かったことは、次の4つです。

  • 条件を2つ書くと、既定では「両方合う」ではなく「どちらか合う」になる
  • 文字の比較は、大文字と小文字を区別する
  • 1件も見つからないと、後ろのノードが動かない
  • 前のノードから2件入ってくると、同じ検索が2回走り、結果も2倍になる

まず1回動かす

1. 表を作る

n8n の Data tables の一覧で新しいテーブルを作ります。CSV ファイルがあれば、そこから作るのが早いです。

  1. Data table name に表の名前(例:products)を入れる
  2. Import CSV を選んで、CSV ファイルを指定する
  3. My CSV file contains a header row にチェックが入っていることを確かめて Create
  4. 次の画面で列名と型が表示されるので、そのまま Create
n8nのCreate new data tableダイアログ。Data table nameにテーブル名が入り、From scratchとImport CSVのうちImport CSVが選ばれ、shop_products.csvが指定されている。下にMy CSV file contains a header rowのチェックボックスがオン。右下にCancelとCreateのボタン
Import CSV を選ぶと、列を手で作らずに表ができる

CSV から作ったときは、列の型が自動で決まりました。数字だけの列は Number、それ以外は String です。 空のセルは「値なし(null)」として入りました。 これは後で効いてきます。

ここでは、家具店の商品12件(sku、name、category、color、width_cm、price、stock、note)の表を使います。 同じ見本データは メール対応自動化ワークフロー で配っています。

2. 検索する

  1. Manual Trigger の後ろに Data table ノードを置く
  2. Resource を Row、Operation を Get にする
  3. Data table で、作った表を選ぶ
  4. Add Condition で条件を1つ足し、Column を category、Condition を Equals、Value を Sofa にする
  5. Execute step を押す

ソファ4件が、それぞれ1件のアイテムとして出てきました。各行には、表の列のほかに id、createdAt、updatedAt が自動で付いています。

条件を2つ書くと、既定は「どちらか合えば」

「ソファ」で、かつ「色がナチュラル」のものを探すつもりで、条件を2つ書きました。

Data tableノードの Conditions。Conditions 1 は Column が category (string)、Condition が Equals、Value が Sofa。Conditions 2 は Column が color (string)、Condition が Equals、Value が Natural
条件を2つ書いた状態

結果は 8件でした。ソファ4件と、色がナチュラルのもの(テーブル、チェア、棚)4件が、どちらか一方に合えば全部出てきています。

原因は Must Match という設定です。既定値が Any Condition(どれか1つでも合えば)になっています。

Data tableノードの設定。Resource が Row、Operation が Get、Data table が指定され、Must Match のプルダウンが開いていて Any Condition と All Conditions の2つが選べる。下に Add Condition、Return All のスイッチ(オフ)、Limit Per Input Row が 50
Must Match の既定は Any Condition

All Conditions にすると、両方に合うものだけになり、結果は0件(ナチュラルのソファは無い)になりました。

比べ方の違い

Condition の比べ方によって、結果が変わりました。

条件 結果
category が Sofa と等しい(Equals) 4件
category が sofa と等しい(小文字) 0件。大文字と小文字を区別する
category に %sofa% を含む(大文字小文字を区別しない比較、内部名 ilike) 4件
stock が 2 より大きい(Value に文字で 2 と書いた) 6件。数値の列には、文字で書いても数として比べた

AIに取り出させた「商品の種類」で検索するときは要注意です。AIが sofa と小文字で返すと、表に Sofa があっても0件になります。 AIへの指示で、表に入っている言葉と同じ書き方で返すように決めておくか、大文字小文字を区別しない比べ方を使います。

大文字小文字を区別しない比較や「空かどうか」の比べ方は、Condition の一覧から選べます。一覧の表記は確かめていないので、ここでは中の名前(ilike、isEmpty)で書いています。

空に見える欄でも、2種類ある

note(備考)が空の商品を探しました。

条件 結果
空かどうか(内部名 isEmpty) 0件
空の文字 "" と等しい 8件

この表は、CSV ではなく Claude Code から1行ずつ追加して作ったもので、空の備考には空の文字 "" が入っていました。「空かどうか」では見つかりませんでした。 先に書いたとおり、CSV から作ると空のセルは値なし(null)になります。同じ「空」でも、表の作り方で中身が違います。 CSV から作った表で「空かどうか」がどう効くかは、試していません。

1件も見つからないと、後ろが止まる

存在しない Bed で検索すると、Data table ノードは何も出さず、その後ろのノードは一度も動きませんでした。エラーも出ません。

ノードの Settings で Always Output Data をオンにすると、0件のときに中身が空のアイテムを1件出すようになり、後ろも動きました。

前から2件入ると、同じ検索が2回走る

Data table ノードの前に、2件のアイテムを出すノードを置いて、同じ検索(ソファ)をしました。

結果は 8件。ソファ4件が2回分です。 Data table ノードは、入ってきたアイテム1件ごとに検索をやり直します。設定の Limit Per Input Row(入ってきた1件あたりの上限、既定50件)という名前も、この作りを表しています。

前のノードが複数件を出すときは、検索の前に1件にまとめるか、後ろで重なりを取り除く必要があります。

行を書き換える(Update)

予約が入ったら、来店枠の booked(予約済みの数)を1増やす、という更新を試しました。

  1. Get で、書き換えたい行(16時の枠)を取る
  2. 後ろに Data table ノードを置き、Operation を Update にする
  3. 条件で id が {{ $json.id }}(前で取った行の id)と等しいものを選ぶ
  4. 書き換える列 booked に {{ $json.booked + 1 }} を入れる

booked が 1 から 2 に変わり、updatedAt も更新されました。書き換えた後の行が、そのまま出力に出てきます。

同じ枠に、ほぼ同時に2件の予約が入った場合に、両方とも正しく数えられるかは試していません。

確認していないこと

  • 表の行数が多いとき(数千行以上)の速さは見ていません
  • 行の追加(Insert)、追加か更新か(Upsert)、削除(Delete)は試していません
  • 同時に書き換えたときの動きは見ていません
  • Condition の一覧の表記は確かめていません(大文字小文字を区別しない比較、空かどうか)

次に読む

次に読む