data

データ変換パイプライン

CSV / TSV / JSONL / Parquetの変換・結合・集計をノードで組み、Recipeとして別ファイルにも繰り返し使えます。

ローカル処理
ファイルについてこのツールで選択したファイルや入力内容は、Browser Kittyのバックエンドへアップロードせずブラウザ内で処理します。
操作デモ 実際の操作の流れを短い動画で確認できます。

このツールについて

データ変換パイプラインは、CSV / TSV / JSONL / Parquetの整形・結合・集計をノードでつなぎ、実行順を目で確認しながら組み立てるツールです。列選択、列名変更、Sort、Limit、Cast、Deduplicate、Filter Rows、Null Handlingを組み合わせ、必要に応じてJoin、Union、Group Byを追加し、最後にCSV / JSONL / Parquetへ出力できます。Nodeを選ぶと、その時点の列名・推定型・Null / 空値件数と先頭100行までのPreviewを確認できます。

作ったPipelineは、このブラウザですぐ再利用するRecipeとして保存するか、バックアップ・別端末への移動・Git管理に向いたPipeline JSONとして書き出せます。RecipeやPipeline JSONには入力File objectや出力結果を保存しないため、再利用時はInputファイルを選び直します。ファイル解析、変換、Join / Union、集計、Preview、Recipe実行、出力生成はブラウザ内で行い、選択したデータファイルをアプリから外部サーバーへ送信しません。

こんなときに便利

  • 毎回同じ列選択・列名変更・型変換・絞り込みを行い、そのデータ整形手順を別ファイルにも再利用したい
  • CSV / JSONL / Parquetを別形式へ変換し、1つの処理結果から複数形式をまとめて出力したい
  • 複数の表をJoinやUnionで結合し、Group Byで件数・合計・平均などを集計したい
  • データ変換の途中で列型やNull件数、実際の値をPreviewしながらPipelineを組みたい
  • データ変換フローをPipeline JSONとしてバックアップし、別端末やGitで管理したい

できること

このツールで利用できる主な機能です。

使い方

  1. 「ツールを開く」を押し、CSV / TSV、JSONL、ParquetのいずれかのInput Nodeを追加してローカルファイルを選択します。
  2. Paletteから必要な変換Nodeを追加し、実行したい順番で接続します。Nodeを選ぶと途中結果Previewを確認できます。
  3. 複数の入力を扱う場合はJoinまたはUnion、集計する場合はGroup Byを追加して設定します。
  4. CSV / JSONL / Parquet Outputを接続します。同じ上流データから複数Outputへ分岐できます。
  5. 「すべての出力を実行」を押し、結果一覧で生成内容を確認します。実行しただけでは自動ダウンロードされません。
  6. 必要な出力だけ保存します。
  7. 同じ処理を繰り返す場合はRecipeへ保存し、持ち運びやバックアップにはPipeline JSONを書き出します。

対応範囲

  • 入力: CSV / TSV、JSONL、フラットなParquet。テキスト形式はUTF-8を基本対応とします。
  • 基本変換: 列選択、列名変更、Sort、Limit、Cast、Deduplicate、Filter Rows、Null Handling。Nullと空文字は別の値として扱います。
  • 結合: JoinはInner / Left / Right / Full、Unionは2〜6入力を列名または列順で結合できます。
  • 集計: Group ByでCount / Sum / Average / Min / Maxを指定できます。Sum / Averageは数値以外を黙って変換せずエラーにします。
  • 出力: CSV、JSONL、フラットなSnappy圧縮Parquet。1つの上流データから複数Outputへ分岐できます。
  • Preview: 列名、推定型、Null / 空値件数、Parquet物理型と先頭100行までを表示します。Sort / Join / Group Byなどは上流全体を処理してからPreviewを切り出します。
  • 保存: Recipeは現在のブラウザプロファイルへノード構成と設定を保存し、Pipeline JSONはノード、設定、接続、配置を保持します。入力File objectと出力結果は保存しません。
  • 実行時通信: 単一HTML版はconnect-src 'none'。DuckDB-WASMやApache Arrowを実行時取得せず、選択したファイルをアプリから外部へアップロードしません。

制限・注意点

  • 入力はCSV / TSV / JSONL / Parquet、出力はCSV / JSONL / Parquetです。
  • Parquet入力はフラットなSchemaのみ対応し、ネスト / Repeated列は黙って展開せずエラーにします。
  • Parquet入力は現在の対応範囲でUncompressed / Snappy / GZIP圧縮ページを扱い、出力はフラット形式・Snappy圧縮です。
  • 文字コードはUTF-8を基本対応とします。
  • Sum / Averageの対象に数値以外が含まれる場合はエラーになります。Nullと空文字は別の値として扱います。
  • Previewは先頭100行までですが、Sort / Deduplicate / Join / Union / Group Byなどは上流データ全体を処理してからPreviewを切り出します。
  • 完全ローカル処理のため、実用的なファイルサイズはブラウザや端末のメモリに依存します。
  • Recipeは現在のブラウザプロファイル内に保存されるため、サイトデータを削除すると消える可能性があります。持ち運びやバックアップにはPipeline JSONを使用してください。

よくある質問

選択したデータファイルはサーバーへアップロードされますか?

いいえ。GitHub Pages版では最初のアプリHTML取得は発生しますが、ファイル解析、変換、Join / Union、集計、Preview、Recipe実行、出力生成はブラウザ内で行います。単一HTML版はconnect-src 'none'で実行時通信を遮断し、選択したファイルをアプリから外部へアップロードしません。

どのファイル形式に対応していますか?

入力はCSV / TSV / JSONL / Parquet、出力はCSV / JSONL / Parquetです。ParquetはフラットなSchemaを対象とし、出力はSnappy圧縮のフラット形式です。

RecipeとPipeline JSONは何が違いますか?

Recipeは同じブラウザで処理手順をすぐ再利用するための保存です。Pipeline JSONはバックアップ、別端末への移動、Git管理に向いています。どちらにも入力File objectや生成結果は保存されないため、再利用時はInputファイルを選び直します。

ネストしたParquetを読み込めますか?

対応していません。v1.0.0のParquet入力はフラットなSchemaを対象とし、ネスト / Repeated列は黙って展開せずエラーとして扱います。

大きなファイルも処理できますか?

処理は端末内で行うため、実用的なファイルサイズはブラウザや端末のメモリに依存します。Sort、Join、Union、Group ByなどはPreviewが100行でも上流データ全体を処理します。

オフライン版・ソースコード

GitHubではNode Editor Core、表データ処理、Recipe utilities、軽量Parquet Reader / Writerを内包した単一HTML版を生成しています。生成済みdist/index.htmlを直接開けば、CSV / TSV / JSONL / Parquetの読み込み、Pipeline編集、Preview、Recipe実行、CSV / JSONL / Parquet出力までネットワークへ接続しない環境でも利用できます。

GitHubでソースを見る