IterableData について
Iterable Data は、統一されたイテレーター形式で100種類以上のデータ形式を1行ずつ読み書きできる Python ライブラリです。ネストされた構造を保持したまま変換や確認を行うデータエンジニアや分析担当者向けです。iterable-mcp コマンドにより MCP サーバーとして利用できます。
主な機能
- 01統一された行単位の読み書きインターフェース
- 02形式と圧縮の自動検出
- 03ネストされたデータ構造の保持
- 04プッシュダウン最適化対応の DuckDB エンジン (任意)
- 05S3、GCS、Azure Blob へのアクセス
- 06SQL・NoSQL データベースの読み取り専用アクセス
活用シーン
- 01CSV、JSON、Parquet 間のデータ変換
- 02AI アシスタントによるデータファイルの確認
- 03圧縮ファイルやクラウド上の大容量ファイルの読み取り
MCP 対応
iterable-mcp コマンドを提供し、MCP サーバーとして動作することで、データの読み取りと確認機能を MCP クライアントに公開します。README では公開されるツールの詳細は示されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Iterable Data
Iterable Data は、一貫したイテレーター形式のインターフェースを使って、データファイルを行単位で読み書きするための Python ライブラリです。csv.DictReader に似た統一 API を提供し、CSV、JSON、Parquet、XML など、さらに多くの形式に対応しています。
このライブラリを使うと、複雑なネストされたデータ構造を保持したまま(フラット化が必要な pandas DataFrame とは異なり)、データ処理や形式間の変換を簡素化できます。
機能
- 統一 API:複数のデータ形式を読み書きするための単一のインターフェース
- 形式の自動検出:ファイル名または内容(マジックナンバーとヒューリスティック)からファイル形式と圧縮方式を検出
- 形式の機能レポート:形式の機能(読み取り/書き込み/一括処理/合計値/ストリーミング/テーブル)をプログラムから照会
- 圧縮のサポート:圧縮ファイルをシームレスに処理
- ネストされたデータを保持:複雑なネスト構造を Python の辞書として処理
- DuckDB との統合:プッシュダウン最適化による高性能なクエリを実現する、オプションの DuckDB エンジン
- パイプライン処理:データ変換のための組み込みパイプラインをサポート
- エンコーディング検出:テキストファイルのエンコーディングと区切り文字を自動検出
- 一括操作:効率的なバッチ読み取りと書き込み
- ネイティブなバッチ変換:射影、行範囲、バッチサイズの選択に対応した、列指向形式間の転送(オプトイン)
- 制限付きの列指向 I/O:共有の行/一括処理カーソルと設定可能な Parquet 行グループにより、大規模な読み書きを制限内に維持
- コーデックのパフォーマンスプロファイル:
fast、balanced、maxの圧縮設定を選択し、実効設定の診断を確認 - テーブル一覧表示:複数テーブル形式で利用可能なテーブル、シート、データセットを検出
- コンテキストマネージャーのサポート:
with文を使ってリソースを自動的にクリーンアップ - DataFrame ブリッジ:ワンライナーのメソッドで、イテレーター形式のデータを Pandas、Polars、Dask の DataFrame に変換
- クラウドストレージのサポート:URI スキームを使って S3、GCS、Azure Blob Storage に直接アクセス
- データベースエンジンのサポート:SQL および NoSQL データベース(PostgreSQL、ClickHouse、MySQL、MongoDB、Elasticsearch など)に、イテレーター形式のデータソースとして読み取り専用でアクセス
- アトミックな書き込み:一時ファイルとアトミックな名前変更を用いた、本番環境で安全なファイル書き込み
- ファイルの一括変換:glob パターンまたはディレクトリを使って複数のファイルを一度に変換
- 進捗追跡とメトリクス:組み込みのプログレスバー、コールバック、構造化メトリクスオブジェクト
- エラー処理の制御:設定可能なエラーポリシーと構造化エラーログ。形式不正な入力は、デフォルトで空のデータセットとして読み込まれるのではなく、型付きエラーを発生
- セキュリティの強化:XXE に安全な XML パーサー、AST の許可リストに基づくフィルター式、pickle の信頼に関する明示的な確認
- パフォーマンス回帰ゲート:代表的な読み取り/変換ワークロードのベースラインを CI で強制
- コンテナ形式:メンバーをディスクに展開せず、TAR アーカイブからレコードをストリーミング
- 型ヒントと型安全性:dataclass と Pydantic モデル向けの型付きヘルパー関数を含む、完全な型注釈
- レイクハウステーブル:Delta Lake、Iceberg、DuckLake の読み書き、Hudi の読み取り、Apache Paimon テーブルの実験的サポート、Row/Mosaic ファイル形式
サポート対象のファイル形式
コア形式
- JSON - 標準的な JSON ファイル
- JSONL/NDJSON - JSON Lines 形式(1 行につき 1 つの JSON オブジェクト)
- JSON-LD - データ連携のための JSON(RDF 形式)
- CSV/TSV - カンマ区切りおよびタブ区切りの値
- Annotated CSV - 型注釈とメタデータを含む CSV
- CSVW - Web 上の CSV(メタデータ付き)
- PSV/SSV - パイプ区切りおよびセミコロン区切りの値
- LTSV - ラベル付きタブ区切り値
- FWF - 固定幅形式
- XML - タグの解析方法を設定できる XML ファイル
- ZIP XML - ZIP アーカイブ内の XML ファイル
- HTML - テーブルを抽出できる HTML ファイル
バイナリ形式
- BSON - バイナリ JSON 形式
- MessagePack - 効率的なバイナリシリアライゼーション
- CBOR - 簡潔なバイナリオブジェクト表現
- UBJSON - 汎用バイナリ JSON
- SMILE - バイナリ JSON の亜種
- Bencode - BitTorrent エンコード形式
- Avro - Apache Avro バイナリ形式(読み書き)
- Pickle - Python pickle 形式(信頼できない入力は安全ではありません。了承する場合は
trust=Trueを指定してください)
列指向・分析形式
- Parquet - Apache Parquet 列指向形式
- ORC - 最適化された行列指向形式
- Arrow/Feather - Apache Arrow 列指向形式
- GeoParquet - ジオメトリと CRS の保持に対応した、メタデータ認識型の GeoParquet プロファイル
- Lance - ML とベクトル検索向けに最適化された最新の列指向形式
- Vortex - 高速なランダムアクセスに対応した最新の列指向形式
- Paimon Row - 行番号による O(1) アクセスに対応した Apache Paimon 行形式
- Paimon Mosaic - ワイドテーブル向けの Apache Paimon 列指向バケット形式
- Paimon - Apache Paimon のウェアハウス/カタログテーブル
- Delta Lake - Delta Lake 形式(読み書き)
- Iceberg - Apache Iceberg 形式(読み書き)
- DuckLake - DuckLake レイクハウステーブル(読み書き)
- Hudi - Apache Hudi 形式(読み込み。書き込みは未対応)
データベース形式
- SQLite - SQLite データベースファイル
- DBF - dBase/FoxPro データベースファイル
- MySQL Dump - MySQL ダンプファイル
- PostgreSQL Copy - PostgreSQL COPY 形式
- DuckDB - DuckDB データベースファイル
統計形式
- SAS - SAS データファイル
- Stata - Stata データファイル
- SPSS - SPSS データファイル
- R Data - R RDS および RData ファイル
- fst - R fst の列指向オンディスクフレーム(
fstextra。試験的) - PX - PC-Axis 形式
- ARFF - 属性関係ファイル形式(Weka 形式)
- LIBSVM - スパースなラベル付き特徴ベクトル(読み書き)
- NumPy -
.npy/.npz配列の行(読み書き。npyextra)
科学形式
- NetCDF - 科学データ向け Network Common Data Form
- CDF - NASA Common Data Format(宇宙科学)
- HDF5 - 階層データ形式
- Zarr - チャンク化配列ストア(
zarrextra。試験的) - XYZ - 分子/点座標テーブル
- CIF - 結晶構造情報ファイル(
atom_siteループ。試験的) - PDB - Protein Data Bank の ATOM/HETATM レコード
- MATLAB MAT - MATLAB
.mat変数(matextra。試験的) - SEG-Y - 地震波トレース(
geophysicalextra。試験的) - GRIB2 - 気象メッセージ(
geophysicalextra。試験的) - miniSEED - 地震波形ウィンドウ(
geophysicalextra。試験的)
地理空間形式
- GeoJSON - 地理情報 JSON 形式
- GeoJSON Text Sequence - RFC 8142 の行区切り GeoJSON フィーチャ(
.geojsonl、.geojsons)。ストリーミングに適しています - GeoPackage - OGC GeoPackage 形式
- GML - Geography Markup Language
- KML - Keyhole Markup Language
- KMZ - KML の ZIP 圧縮形式(KML を含む ZIP アーカイブ)
- GPX - GPS Exchange Format(ウェイポイント、ルート、トラック)
- Shapefile - ESRI Shapefile 形式
- File Geodatabase - Fiona 経由の ESRI FileGDB レイヤー(
geospatialextra。試験的) - MapInfo MIF - MapInfo Interchange Format(
geospatialextra。試験的) - Esri ASCII Grid - セルまたは行レコードとしてのラスターグリッド(
.asc) - ArcInfo E00 - 交換用エクスポート(一部のみ試験的に対応)
- LAS - LiDAR 点群(
lidarextra。試験的) - BAG - Bathymetric Attributed Grid(
hdf5extra。試験的) - CZML - Cesium CZML ドキュメントパケット
- FlatGeobuf - 空間インデックスによるオプションのフィルタリングに対応した、ストリーミング可能な地理空間フィーチャ
- MVT/PBF - Mapbox ベクタータイル
- TopoJSON - トポロジーを保持する GeoJSON 拡張形式
RDF とセマンティック形式
- JSON-LD - データをリンクするための JSON
- RDF/XML - XML 形式の RDF
- Turtle - 簡潔な RDF トリプル言語
- N-Triples - 行ベースの RDF 形式
- N-Quads - コンテキスト付きの N-Triples
- TriG - RDF トリプルグラフ形式
- N3 - Notation3 RDF 形式
- TriX - XML トリプル RDF 形式
- HDT - ヘッダー・辞書・トリプルをコンパクトにした RDF(
rdfextra。実験的)
フィード形式
- Atom - Atom 配信形式
- RSS - リッチサイトサマリーのフィード形式
ネットワーク形式
- PCAP - パケットキャプチャ形式
- PCAPNG - PCAP 次世代形式
ログとイベント形式
- Apache Log - Apache のアクセスログ/エラーログ
- CEF - 共通イベント形式
- GELF - Graylog 拡張ログ形式
- WARC - Web ARChive 形式
- CDX - Web アーカイブのインデックス形式
- ILP - InfluxDB ラインプロトコル
- HTML - テーブル抽出に対応した HTML ファイル
メール形式
- EML - メールメッセージ形式
- MBOX - メールボックス形式
- MHTML - MIME HTML 形式
設定形式
- INI - INI 設定ファイル
- TOML - Tom's Obvious Minimal Language
- YAML - YAML Ain't Markup Language
- HOCON - 人間向けに最適化された設定オブジェクト表記法
- EDN - 拡張可能なデータ表記法
Office 形式
- XLS/XLSX - Microsoft Excel ファイル
- XLSB - Excel バイナリ形式
- ODS - OpenDocument スプレッドシート
- Microsoft Access - Access の
.mdb/.accdbテーブル(accessextra。実験的) - Lotus 1-2-3 - 旧式の WK1/
.123スプレッドシート(実験的)
ビジネスおよび交換形式
- EDI - X12/EDIFACT セグメントストリーム(実験的)
- IATI - 援助透明性に関するアクティビティ XML(
xmlextra。実験的)
CAD 形式
- DXF - AutoCAD Drawing Exchange 形式
グラフ形式
- GraphML - Graph Markup Language
- GEXF - Graph Exchange XML 形式
- DOT - GraphViz DOT 形式
シーケンスおよびアラインメント形式
- FASTA - シーケンス形式(タンパク質/ヌクレオチド)
- FASTQ - 品質情報付きシーケンス形式
- SAM - Sequence Alignment/Map(テキスト)
- BAM - バイナリ SAM 形式
- Genomic VCF/BCF - ゲノムデータ用 Variant Call Format(vCard
.vcfとは別形式。bioextra が必要) - CRAM - リファレンス圧縮されたシーケンスアラインメント(
alignmentextra が必要。必要に応じてリファレンスを明示的に指定) - BED - BED3〜BED12 のゲノム領域
- GFF3/GTF - 座標と属性を保持したゲノム特徴アノテーション
ストリーミングおよびビッグデータ形式
- Kafka - Apache Kafka 形式
- Pulsar - Apache Pulsar 形式
- Flink - Apache Flink 形式
- Beam - Apache Beam 形式
- RecordIO - RecordIO 形式
- SequenceFile - Hadoop SequenceFile
- TFRecord - TensorFlow Record 形式
- WebDataset - ML サンプル辞書ごとにグループ化された TAR シャード(
format="webdataset"。実験的)
プロトコルおよびシリアライゼーション形式
- Protocol Buffers - Google Protocol Buffers
- Cap'n Proto - Cap'n Proto シリアライゼーション
- FlatBuffers - FlatBuffers シリアライゼーション
- FlexBuffers - FlexBuffers 形式
- Thrift - Apache Thrift 形式
- ASN.1 - ASN.1 エンコーディング形式
- Ion - Amazon Ion 形式
- OTLP JSON/Protobuf - OpenTelemetry のトレース、ログ、メトリクスのエクスポートプロファイル(
otlpextra が必要)
その他の形式
- TAR - 複数ファイルのアーカイブコンテナー(読み取り専用。ディスクに展開せずにメンバーをストリーミング)
- vCard (VCF) - 電子名刺(RFC 6350)。ゲノム用 Variant Call Format ではありません
- iCal - iCalendar 形式
- LDIF - LDAP Data Interchange Format
- TXT - プレーンテキストファイル
形式ごとのパラメーター、レコード構造、extras については、形式のドキュメント(またはこのリポジトリ内の docs/docs/formats/)を参照してください。
対応している圧縮コーデック
- GZip (.gz)
- BZip2 (.bz2)
- LZMA (.xz, .lzma)
- LZ4 (.lz4)
- ZIP (.zip)
- Brotli (.br)
- ZStandard (.zst, .zstd)
- Snappy (.snappy, .sz) — フレーム形式のファイルをストリーミング展開します
- LZO (.lzo, .lzop) — レガシー Blob へのフォールバックに対応したストリーミング展開
- 7z (.7z;
iterabledata[compression]経由でpy7zrが必要です)
要件
Python 3.10 以上
インストール
pip install iterabledata
PyPI パッケージは iterabledata です。iterable をインポートします。
from iterable import open_iterable
または、ソースからインストールします。
git clone https://github.com/datenoio/iterabledata.git
cd iterabledata
pip install .
オプションの依存関係
IterableData は、追加機能を利用するためのオプションの追加パッケージに対応しています。
# AI-powered documentation generation
pip install iterabledata[ai]
# Database ingestion (PostgreSQL, ClickHouse, MongoDB, MySQL, Elasticsearch, etc.)
pip install iterabledata[db]
# RDF formats (TriG, N3, TriX)
pip install iterabledata[rdf]
# Excel Binary (XLSB)
pip install iterabledata[xlsb]
# Graph formats (GraphML, GEXF, DOT)
pip install iterabledata[graph]
# Alignment formats (BAM, SAM, CRAM)
pip install iterabledata[alignment]
# Genomic formats (VCF/BCF, CRAM, BED, GFF3/GTF via pysam and bio readers)
pip install iterabledata[bio]
# Zarr chunked array stores
pip install iterabledata[zarr]
# GeoParquet, FlatGeobuf, FileGDB, MapInfo MIF
pip install iterabledata[parquet,geospatial]
# LiDAR LAS point clouds
pip install iterabledata[lidar]
# MATLAB .mat files
pip install iterabledata[mat]
# SEG-Y, GRIB2, miniSEED
pip install iterabledata[geophysical]
# Microsoft Access (.mdb/.accdb)
pip install iterabledata[access]
# R fst frames (requires a suitable fst/rfst binding)
pip install iterabledata[fst]
# OpenTelemetry JSON and Protobuf export profiles
pip install iterabledata[otlp]
# Lakehouse table formats (Delta, Iceberg, Lance, Hudi, DuckLake)
pip install iterabledata[lakehouse]
# Apache Paimon (tables + Row + Mosaic file formats; separate from lakehouse)
pip install iterabledata[paimon]
# Or individually:
# pip install iterabledata[paimon-table]
# pip install iterabledata[paimon-row]
# pip install iterabledata[paimon-mosaic]
# pip install iterabledata[ducklake]
# Individual format extras (one per format family), for example:
pip install iterabledata[avro] # Apache Avro
pip install iterabledata[npy] # NumPy .npy/.npz
pip install iterabledata[ods] # OpenDocument spreadsheets
pip install iterabledata[rdata] # R RData/RDS
pip install iterabledata[ics] # iCalendar
# Also available: ubj, vcf, capnp, thrift, fbs, edn, hocon, der, bencode, ldif, hdf5, xml, rdf
# All optional dependencies
pip install iterabledata[all]
AI 機能([ai]):OpenAI、OpenRouter、Ollama、LMStudio、または Perplexity を使用した、AI によるドキュメント生成を有効にします。
データベースエンジン([db]):反復可能なデータソースとして、データベースへの読み取り専用アクセスを有効にします。PostgreSQL、ClickHouse、MySQL/MariaDB、Microsoft SQL Server、SQLite、MongoDB、Elasticsearch/OpenSearch に対応しています。便利なグループも含まれています。
[db-sql]:SQL データベースのみ(PostgreSQL、ClickHouse、MySQL、MSSQL)[db-nosql]:NoSQL データベースのみ(MongoDB、Elasticsearch)
ゲノム形式([bio]):ゲノム形式の VCF/BCF、CRAM、BED、GFF3、GTF への対応を有効にします。アラインメント形式では pysam を使用し、参照ファイルが必要になる場合があります。
地理空間/科学分野向けの追加機能:[geospatial] は FileGDB と MapInfo MIF(既存の GeoPackage/Shapefile スタックも含む)に対応します。[lidar]、[mat]、[geophysical] は、それぞれ LAS、MATLAB MAT、SEG-Y/GRIB2/miniSEED への対応を有効にします。多くの構造化形式(XYZ、CIF、PDB、ASCII Grid、CZML、EDI、WebDataset、Lotus WK1)では追加パッケージは不要です。
レイクハウス([lakehouse]):Delta Lake、Apache Iceberg、Lance、Apache Hudi、DuckLake に対応します。Delta、Iceberg、DuckLake は上限付きの書き込みに対応しています。Hudi は現在、読み取り専用です。
Paimon([paimon]):Apache Paimon のウェアハウステーブルに加え、Row と Mosaic のファイル形式に対応します。必要な機能が 1 つだけの場合は、[paimon-table]、[paimon-row]、または [paimon-mosaic] を個別にインストールしてください。DuckLake 単独の [ducklake] も利用できます。
これらの機能の詳細については、API ドキュメントをご覧ください。
AI エージェントと LLM ツールについては、llms.txt(短いインデックス)、llms-full.txt(コピー&ペースト可能なレシピ)、ポータブルスキル skills/iterabledata/SKILL.md、および CONTRIBUTING.md をご覧ください。
AI クイックスタート
LM Studio または Ollama を使って ローカル LLM でデータセットのドキュメントを生成できます(API キー不要)。または OpenAI を使用します。
from iterable.ai import doc
# Local (LM Studio on http://localhost:1234/v1)
documentation = doc.generate(
"data.csv",
provider="lmstudio",
base_url="http://localhost:1234/v1",
format="markdown",
)
# Or analyze structure + docs in one call
from iterable.ops import inspect
analysis = inspect.analyze("data.csv", autodoc=True, autodoc_provider="openai")
print(analysis["documentation"])
構造化された機械可読形式の出力が必要ですか?generate_blocks() を使うと、独立したドキュメントブロック(general、schema、quality、examples、statistics、agent_skill。さらにオプトインで codebook)と、組み立て済みの Markdown を取得できます。
from iterable.ai import doc
result = doc.generate_blocks(
"data.csv",
provider="openai",
context={"title": "Sales 2025", "description": "Monthly sales export"},
progress=lambda event: print(event.stage, event.detail),
)
print(result["blocks"]["schema"]["data"]) # structured JSON
print(result["blocks"]["agent_skill"]["markdown"]) # portable agent skill (YAML + Markdown)
print(result["full_document_markdown"]) # assembled markdown
agent_skill ブロックは、AI エージェントがデータセット固有の読み込み、クエリ、安全性に関するガイダンスを取得するための、ポータブルなスキルドキュメント(YAML のフロントマター+Markdown)を出力します。
AI サポートをインストールするには、pip install iterabledata[ai] を実行します。examples/ai/ と docs/docs/api/ai.md をご覧ください。
ネストされたスキーマと統計情報(オプトイン)
from iterable.ops import schema, stats
sch = schema.infer("nested.jsonl", flatten_nested=True)
print(sch["fields"]["capital_city.lat"]["type"])
summary = stats.compute("nested.jsonl", flatten_nested=True)
print(summary["capital_city.lat"]["mean"])
複数テーブルのワークブック/データベースでは、iterable.ai.table_profile.profile_selected_table()
を使うと、行数/時間の予算内で名前を指定したシート/テーブルのプロファイルを作成できます(ネスト構造のフラット化が有効です)。
形式カタログ(エージェント向け)
from iterable.catalog import describe_format
info = describe_format("xml")
print(info["example_args"]) # {'tagname': 'item'}
完全なエクスポート先は dev/formats.json または export_catalog(format="json") です。docs/docs/api/catalog.md をご覧ください。
クイックスタート
基本的な読み込み
from iterable import open_iterable
with open_iterable("data.csv.gz") as source:
for row in source:
print(row)
データの書き込み
from iterable import open_iterable
with open_iterable("output.jsonl.zst", mode="w") as dest:
for item in my_data:
dest.write(item)
使用例
圧縮された CSV ファイルの読み込み
from iterable import open_iterable
with open_iterable("data.csv.xz") as source:
n = 0
for row in source:
n += 1
if n % 1000 == 0:
print(f"Processed {n} rows")
さまざまな形式の読み込み
from iterable import open_iterable
with open_iterable("data.jsonl") as source:
for row in source:
print(row)
with open_iterable("data.parquet") as source:
for row in source:
print(row)
with open_iterable("data.xml", iterableargs={"tagname": "item"}) as source:
for row in source:
print(row)
with open_iterable("data.xlsx") as source:
for row in source:
print(row)
# Read GeoJSON Text Sequence (streaming, one feature per line)
with open_iterable('features.geojsonl') as source:
for feature in source:
print(feature['properties'], feature['geometry'])
# Stream records from a TAR archive (members detected by filename)
with open_iterable('dataset.tar.gz', iterableargs={'members': '*.csv'}) as source:
for row in source:
print(row['_member'], row)
# Read genomic VCF (requires pip install iterabledata[bio])
with open_iterable('variants.vcf') as source:
for variant in source:
print(variant['chrom'], variant['pos'], variant['ref'], variant['alt'])
# Read genomic intervals (BED, GFF3, or GTF)
with open_iterable('genes.gff3') as source:
for feature in source:
print(feature['seqid'], feature['type'], feature['start'], feature['end'])
# Read a Zarr array (requires pip install iterabledata[zarr])
with open_iterable('signals.zarr', iterableargs={'array': 'values'}) as source:
for row in source:
print(row['value'])
# Read GeoParquet or FlatGeobuf (requires parquet/geospatial extras)
with open_iterable('roads.geoparquet') as source:
for feature in source:
print(feature.get('geometry'), feature.get('properties'))
# Read an OTLP JSON export (requires pip install iterabledata[otlp])
with open_iterable('telemetry.otlp.json') as source:
for item in source:
print(item['signal'], item['record'])
データベースからの読み込み
from iterable import open_iterable
# Read from PostgreSQL database
with open_iterable(
'postgresql://user:password@localhost:5432/mydb',
engine='postgres',
iterableargs={'query': 'users'}
) as source:
for row in source:
print(row)
# Read specific columns with filtering
with open_iterable(
'postgresql://localhost/mydb',
engine='postgres',
iterableargs={
'query': 'users',
'columns': ['id', 'name', 'email'],
'filter': 'active = TRUE'
}
) as source:
for row in source:
print(row)
# Read from ClickHouse database
with open_iterable(
'clickhouse://user:password@localhost:9000/analytics',
engine='clickhouse',
iterableargs={'query': 'events', 'settings': {'max_threads': 4}}
) as source:
for row in source:
print(row)
# Convert database to file
from iterable.convert import convert
convert(
fromfile='postgresql://localhost/mydb',
tofile='users.parquet',
iterableargs={'engine': 'postgres', 'query': 'users'}
)
# Convert ClickHouse to Parquet
convert(
fromfile='clickhouse://localhost:9000/analytics',
tofile='events.parquet',
iterableargs={'engine': 'clickhouse', 'query': 'events'}
)
形式の検出とエンコーディング
from iterable import open_iterable
from iterable.helpers.detect import detect_file_type, detect_file_type_from_content
from iterable.helpers.utils import detect_encoding, detect_delimiter
# Detect file type and compression (uses filename extension)
result = detect_file_type('data.csv.gz')
print(f"Type: {result['datatype']}, Codec: {result['codec']}")
# Content-based detection (for files without extensions or streams)
with open('data.unknown', 'rb') as f:
detection_result = detect_file_type_from_content(f)
if detection_result:
format_id, confidence, method = detection_result
print(f"Detected format: {format_id} (confidence: {confidence:.2f}, method: {method})")
# open_iterable() automatically uses content-based detection as fallback
# Works with files without extensions, streams, or incorrect extensions
with open_iterable('data.unknown') as source: # Detects from content
for row in source:
print(row)
# Detect encoding for CSV files
encoding_info = detect_encoding('data.csv')
print(f"Encoding: {encoding_info['encoding']}, Confidence: {encoding_info['confidence']}")
# Detect delimiter for CSV files
delimiter = detect_delimiter('data.csv', encoding=encoding_info['encoding'])
# Open with detected settings
source = open_iterable('data.csv', iterableargs={
'encoding': encoding_info['encoding'],
'delimiter': delimiter
})
エラー処理
IterableData は、包括的な例外階層と設定可能なエラー処理を提供します。
from iterable import open_iterable
from iterable.exceptions import (
FormatDetectionError,
FormatNotSupportedError,
FormatParseError,
ReadError,
CodecError,
IterableDataError,
)
# Basic exception handling
try:
with open_iterable('data.unknown') as source:
for row in source:
process(row)
except FormatDetectionError as e:
print(f"Could not detect format: {e.reason}")
# Try with explicit format or check file content
except FormatNotSupportedError as e:
print(f"Format '{e.format_id}' not supported: {e.reason}")
# Install missing dependencies or use different format
except FormatParseError as e:
print(f"Failed to parse {e.format_id} format")
if e.position:
print(f"Error at position: {e.position}")
except ReadError as e:
print(f"Read failed: {e}")
except IterableDataError as e:
print(f"Library error: {e}")
except CodecError as e:
print(f"Compression error with {e.codec_name}: {e.message}")
# Check file integrity or try different codec
except Exception as e:
print(f"Unexpected error: {e}")
設定可能なエラーポリシー:不正なレコードの処理方法を制御します。
# Skip malformed records and continue processing
with open_iterable(
'data.csv',
iterableargs={'on_error': 'skip', 'error_log': 'errors.log'}
) as src:
for row in src:
process(row) # Only processes valid rows
# Warn on errors but continue processing
with open_iterable(
'data.jsonl',
iterableargs={'on_error': 'warn', 'error_log': 'errors.log'}
) as src:
for row in src:
process(row) # Warnings logged, processing continues
# Default: raise exceptions immediately (existing behavior)
with open_iterable('data.csv', iterableargs={'on_error': 'raise'}) as src:
for row in src:
process(row)
空の読み込みを黙って返しません:デフォルトのポリシー(on_error='raise')では、不正な空でないファイルを読み込むと、レコードを 0 件返すのではなく FormatParseError が発生します。不正なレコードを明示的に許容するには、on_error='skip' または 'warn' を使用してください。
Pickle の安全性:Pickle のデシリアライズでは任意のコードが実行されます。trust=True を渡さない限り、pickle ファイルの読み込み時に警告が表示されます。
with open_iterable('data.pickle', iterableargs={'trust': True}) as source:
for row in source:
process(row)
エラーロギング:コンテキスト(ファイル名、行番号、バイトオフセット、エラーメッセージ、元の行)を含む構造化 JSON ログを記録します。
例外の詳細については、例外階層のドキュメントを参照してください。
フォーマット機能の確認
from iterable.helpers.capabilities import (
get_format_capabilities,
get_capability,
list_all_capabilities
)
# Get all capabilities for a format
caps = get_format_capabilities("csv")
print(f"CSV readable: {caps['readable']}")
print(f"CSV writable: {caps['writable']}")
print(f"CSV supports totals: {caps['totals']}")
print(f"CSV supports tables: {caps['tables']}")
# Query a specific capability
is_writable = get_capability("json", "writable")
has_totals = get_capability("parquet", "totals")
supports_tables = get_capability("xlsx", "tables")
# List capabilities for all formats
all_caps = list_all_capabilities()
for format_id, capabilities in all_caps.items():
if capabilities.get("tables"):
print(f"{format_id} supports multiple tables")
フォーマット変換
from iterable import open_iterable
from iterable.convert import convert
# Simple format conversion
convert('input.jsonl.gz', 'output.parquet')
# Convert with options
convert(
'input.csv.xz',
'output.jsonl.zst',
iterableargs={'delimiter': ';', 'encoding': 'utf-8'},
batch_size=10000
)
# Convert and flatten nested structures
convert(
'input.jsonl',
'output.csv',
is_flatten=True,
batch_size=50000
)
本番環境で安全なアトミック書き込み
出力ファイルが部分的に書き込まれた状態のままにならないよう、アトミック書き込みを使用してください。
from iterable.convert import convert
from iterable.pipeline import pipeline
# Convert with atomic writes (production-safe)
result = convert('input.csv', 'output.parquet', atomic=True)
# Output file only appears when conversion completes successfully
# Atomic writes in pipelines
pipeline(
source=source,
destination=destination,
process_func=transform_func,
atomic=True # Ensures destination file is only created on success
)
メリット:クラッシュ、中断、処理途中の失敗によるデータ破損を防ぎます。失敗時も元のファイルは保持されます。
複数ファイルの一括変換
グロブパターン、ディレクトリ、またはファイルリストを使って、複数のファイルを一度に変換します。
from iterable.convert import bulk_convert
# Convert all CSV files matching glob pattern
result = bulk_convert('data/raw/*.csv.gz', 'data/processed/', to_ext='parquet')
# Convert with custom filename pattern
result = bulk_convert('data/*.csv', 'output/', pattern='{name}.parquet')
# Convert entire directory
result = bulk_convert('data/raw/', 'data/processed/', to_ext='parquet')
# Access results
print(f"Converted {result.successful_files}/{result.total_files} files")
print(f"Total rows: {result.total_rows_out}")
print(f"Throughput: {result.throughput:.0f} rows/second")
# Check individual file results
for file_result in result.file_results:
if file_result.success:
print(f"✓ {file_result.source_file}: {file_result.result.rows_out} rows")
else:
print(f"✗ {file_result.source_file}: {file_result.error}")
機能:エラー耐性(1 つのファイルで失敗しても処理を続行)、集計されたメトリクス、プレースホルダー({name}、{stem}、{ext})による柔軟な出力名指定。
進捗状況の追跡とメトリクス
コールバック、プログレスバー、構造化メトリクスを使って、変換とパイプラインの進捗状況を追跡します。
from iterable.convert import convert
from iterable.pipeline import pipeline
# Progress callback for conversions
def progress_cb(stats):
print(f"Progress: {stats['rows_read']} rows read, "
f"{stats['rows_written']} rows written, "
f"{stats.get('elapsed', 0):.2f}s elapsed")
# Convert with progress tracking
result = convert(
'input.csv',
'output.parquet',
progress=progress_cb,
show_progress=True # Also shows tqdm progress bar
)
# Access conversion metrics
print(f"Converted {result.rows_out} rows in {result.elapsed_seconds:.2f}s")
print(f"Read {result.bytes_read} bytes, wrote {result.bytes_written} bytes")
# Pipeline with progress and metrics
result = pipeline(
source=source,
destination=destination,
process_func=transform_func,
progress=progress_cb # Progress callback
)
# Access pipeline metrics (supports both attribute and dict access)
print(f"Processed {result.rows_processed} rows")
print(f"Throughput: {result.throughput:.0f} rows/second")
print(f"Exceptions: {result.exceptions}")
# Backward compatible: result['rec_count'] also works
機能:リアルタイムの進捗コールバック、tqdm によるプログレスバーの自動表示、構造化メトリクスオブジェクト(ConversionResult、PipelineResult)。
データ処理での Pipeline の使用
from iterable import open_iterable
from iterable.pipeline import pipeline
source = open_iterable('input.parquet')
destination = open_iterable('output.jsonl.xz', mode='w')
def transform_record(record, state):
"""Transform each record"""
# Add processing logic
out = {}
for key in ['name', 'email', 'age']:
if key in record:
out[key] = record[key]
return out
def progress_callback(stats, state):
"""Called every trigger_on records"""
print(f"Processed {stats['rec_count']} records, "
f"Duration: {stats.get('duration', 0):.2f}s")
def final_callback(stats, state):
"""Called when processing completes"""
print(f"Total records: {stats['rec_count']}")
print(f"Total time: {stats['duration']:.2f}s")
result = pipeline(
source=source,
destination=destination,
process_func=transform_record,
trigger_func=progress_callback,
trigger_on=1000,
final_func=final_callback,
start_state={},
atomic=True # Use atomic writes for production safety
)
# Access pipeline metrics
print(f"Throughput: {result.throughput:.0f} rows/second")
source.close()
destination.close()
フォーマットとコーデックの手動使用
from iterable.datatypes.jsonl import JSONLinesIterable
from iterable.datatypes.bsonf import BSONIterable
from iterable.codecs.gzipcodec import GZIPCodec
from iterable.codecs.lzmacodec import LZMACodec
# Read gzipped JSONL
read_codec = GZIPCodec('input.jsonl.gz', mode='r', open_it=True)
reader = JSONLinesIterable(codec=read_codec)
# Write LZMA compressed BSON
write_codec = LZMACodec('output.bson.xz', mode='wb', open_it=False)
writer = BSONIterable(codec=write_codec, mode='w')
for row in reader:
writer.write(row)
reader.close()
writer.close()
クラウドストレージのサポート
クラウドオブジェクトストレージ(S3、GCS、Azure)からデータを直接読み書きします。
from iterable import open_iterable
# Read from S3
with open_iterable('s3://my-bucket/data/events.csv') as source:
for row in source:
print(row)
# Read compressed file from GCS
with open_iterable('gs://my-bucket/data/events.jsonl.gz') as source:
for row in source:
process(row)
# Write to Azure Blob Storage
with open_iterable(
'az://my-container/output/results.jsonl',
mode='w',
iterableargs={'storage_options': {'connection_string': '...'}}
) as dest:
dest.write({'name': 'Alice', 'age': 30})
dest.write({'name': 'Bob', 'age': 25})
対応プロバイダー:
- Amazon S3:
s3://およびs3a://スキーム - Google Cloud Storage:
gs://およびgcs://スキーム - Azure Blob Storage:
az://、abfs://、およびabfss://スキーム
インストール:pip install iterabledata[cloud]
注:DuckDB エンジンはクラウドストレージの URI に対応していません。engine='internal'(デフォルト)を使用してください。
プッシュダウン最適化を使った DuckDB エンジンの使用
DuckDB エンジンは、高度な最適化による高性能なクエリ処理を提供します。
from iterable import open_iterable
# Basic DuckDB usage
source = open_iterable('data.csv.gz', engine='duckdb')
total = source.totals() # Fast counting
for row in source:
print(row)
source.close()
# Column projection pushdown (only read specified columns)
with open_iterable(
'data.csv',
engine='duckdb',
iterableargs={'columns': ['name', 'age']} # Reduces I/O and memory
) as src:
for row in src:
process(row)
# Filter pushdown (filter at database level)
with open_iterable(
'data.csv',
engine='duckdb',
iterableargs={'filter': "age > 18 AND status = 'active'"}
) as src:
for row in src:
process(row)
# Combined column projection and filtering
with open_iterable(
'data.parquet',
engine='duckdb',
iterableargs={
'columns': ['name', 'age', 'email'],
'filter': 'age > 18'
}
) as src:
for row in src:
process(row)
# Direct SQL query support
with open_iterable(
'data.parquet',
engine='duckdb',
iterableargs={
'query': 'SELECT name, age FROM read_parquet(\'data.parquet\') WHERE age > 18 ORDER BY age DESC LIMIT 100'
}
) as src:
for row in src:
process(row)
対応フォーマット:CSV、JSONL、NDJSON、JSON、Parquet
対応コーデック:GZIP、ZStandard(.zst)
メリット:データベースレベルの最適化による I/O の削減、メモリ使用量の低減、処理の高速化
一括操作
from iterable import open_iterable
source = open_iterable('input.jsonl')
destination = open_iterable('output.parquet', mode='w')
# Read and write in batches for better performance
batch = []
for row in source:
batch.append(row)
if len(batch) >= 10000:
destination.write_bulk(batch)
batch = []
# Write remaining records
if batch:
destination.write_bulk(batch)
source.close()
destination.close()
パフォーマンス重視の変換
両方のエンドポイントが Parquet または Arrow/Feather の場合は、ネイティブバッチを使用してください。対応している場合、選択条件はカラム型リーダーにプッシュダウンされます。それ以外の場合は、安全に通常の行単位/一括処理のループにフォールバックします。
from iterable.convert import BatchSelection, convert
convert(
'events.parquet',
'events-copy.parquet',
use_native_batch=True,
selection=BatchSelection(columns=('event_id', 'created_at'), batch_size=8192),
toiterableargs={'row_group_size': 32768},
)
一般的な圧縮処理には、バランスプロファイルを使用してください。CPU バウンドのパイプラインには fast を、アーカイブ出力には max を選択してください。
with open_iterable('events.jsonl.zst', mode='w', codecargs={'profile': 'fast'}) as dest:
dest.write_bulk(records)
選択条件、メモリ、行グループ、フォールバックの動作については、ネイティブバッチ、コーデックプロファイル、およびパフォーマンスガイドを参照してください。
Excel ファイルの操作
from iterable import open_iterable
from iterable.ai.fileinfo import open_table
# Read Excel file (specify sheet or page)
xls_file = open_iterable('data.xlsx', iterableargs={'page': 0})
for row in xls_file:
print(row)
xls_file.close()
# Open a named sheet (uses page index under the hood)
sheet = open_table('data.xlsx', 'Sheet2')
for row in sheet:
print(row)
sheet.close()
XML 処理
from iterable import open_iterable
# Parse XML with specific tag name
xml_file = open_iterable(
'data.xml',
iterableargs={
'tagname': 'book',
'prefix_strip': True # Strip XML namespace prefixes
}
)
for item in xml_file:
print(item)
xml_file.close()
DataFrame ブリッジ
反復可能なデータを Pandas、Polars、または Dask の DataFrame に変換します。
from iterable import open_iterable
# Convert to Pandas DataFrame
with open_iterable('data.csv.gz') as source:
df = source.to_pandas()
print(df.head())
# Chunked processing for large files
with open_iterable('large_data.csv') as source:
for df_chunk in source.to_pandas(chunksize=100_000):
# Process each chunk
result = df_chunk.groupby('category').sum()
process_chunk(result)
# Convert to Polars DataFrame
with open_iterable('data.csv.gz') as source:
df = source.to_polars()
print(df.head())
# Convert to Dask DataFrame (single file)
with open_iterable('data.csv.gz') as source:
ddf = source.to_dask()
result = ddf.groupby('category').sum().compute()
# Multi-file Dask DataFrame (automatic format detection)
from iterable.helpers.bridges import to_dask
ddf = to_dask(['file1.csv', 'file2.jsonl', 'file3.parquet'])
result = ddf.groupby('category').sum().compute()
注:DataFrame ブリッジにはオプションの依存関係が必要です。次のコマンドでインストールしてください。
pip install iterabledata[dataframes] # All DataFrame libraries
# Or individually:
pip install pandas
pip install polars
pip install "dask[dataframe]"
型ヒントと型安全性
IterableData には、最新の Python 開発に対応した完全な型注釈と、型付けされたヘルパー関数が含まれています。
from iterable import open_iterable
from iterable.helpers.typed import as_dataclasses, as_pydantic
from dataclasses import dataclass
from pydantic import BaseModel
# Type aliases for better code readability
from iterable.types import Row, IterableArgs, CodecArgs
# Convert to dataclasses for type safety
@dataclass
class Person:
name: str
age: int
email: str | None = None
with open_iterable('people.csv') as source:
for person in as_dataclasses(source, Person):
# Full IDE autocomplete and type checking
print(person.name, person.age)
# Convert to Pydantic models with validation
class PersonModel(BaseModel):
name: str
age: int
email: str | None = None
with open_iterable('people.jsonl') as source:
for person in as_pydantic(source, PersonModel, validate=True):
# Automatic schema validation
print(person.name, person.age)
# Access as Pydantic model with all features
利点:
- 公開 API 全体にわたる完全な型注釈
py.typedマーカーファイルにより、mypy、pyright などの型チェッカーを利用できます- 型付けされたヘルパーにより、IDE の自動補完と型安全性が得られます
- Pydantic による検証で、スキーマの問題を早期に検出できます
インストール: Pydantic のサポートには pip install iterabledata[pydantic] を実行します
応用編:圧縮 XML から Parquet への変換
from iterable.datatypes.xml import XMLIterable
from iterable.datatypes.parquet import ParquetIterable
from iterable.codecs.bz2codec import BZIP2Codec
# Read compressed XML
read_codec = BZIP2Codec('data.xml.bz2', mode='r')
reader = XMLIterable(codec=read_codec, tagname='page')
# Write to Parquet with schema adaptation
writer = ParquetIterable(
'output.parquet',
mode='w',
use_pandas=False,
adapt_schema=True,
batch_size=10000
)
batch = []
for row in reader:
batch.append(row)
if len(batch) >= 10000:
writer.write_bulk(batch)
batch = []
if batch:
writer.write_bulk(batch)
reader.close()
writer.close()
API リファレンス
主な関数
open_iterable(filename, mode='r', engine='internal', codecargs={}, iterableargs={})
ファイルを開き、反復可能オブジェクトを返します。
パラメーター:
filename(str): ファイルへのパス(ローカルファイルとクラウドストレージの URI(s3://、gs://、az://)に対応)mode(str): ファイルモード(読み込みは 'r'、書き込みは 'w')engine(str): 処理エンジン('internal' または 'duckdb')codecargs(dict): コーデックの初期化に使用する引数iterableargs(dict): 反復可能オブジェクトの初期化に使用する引数columns(list[str]): DuckDB エンジンの場合、指定した列のみを読み込みます(プッシュダウン最適化)filter(str | callable): DuckDB エンジンの場合、データベースレベルで行をフィルタリングします(SQL 文字列または Python 呼び出し可能オブジェクト)query(str): DuckDB エンジンの場合、カスタム SQL クエリを実行します(読み取り専用)on_error(str): エラーポリシー('raise'、'skip'、または 'warn')error_log(str | file-like): 構造化エラーログの保存先パスまたはファイルオブジェクトstorage_options(dict): クラウドストレージの認証オプション
戻り値: 検出されたファイル形式に対応する反復可能オブジェクト
detect_file_type(filename)
ファイル名からファイル形式と圧縮コーデックを検出します。
戻り値: success、datatype、codec キーを含む辞書
convert(fromfile, tofile, iterableargs={}, toiterableargs={}, scan_limit=1000, batch_size=50000, silent=True, is_flatten=False, use_totals=False, progress=None, show_progress=False, atomic=False, use_native_batch=False, selection=None, strict_native=False) -> ConversionResult
形式間でデータを変換します。
パラメーター:
fromfile(str): 入力元ファイルのパスtofile(str): 出力先ファイルのパスiterableargs(dict): 入力元ファイルの読み込みオプションtoiterableargs(dict): 出力先ファイルの書き込みオプションscan_limit(int): スキーマ検出のためにスキャンするレコード数batch_size(int): 一括処理のバッチサイズsilent(bool): 進捗の出力を抑制しますis_flatten(bool): ネストされた構造をフラット化しますuse_totals(bool): 進捗の追跡に合計数を使用します(利用可能な場合)progress(callable): 進捗統計の辞書を受け取る、任意のコールバック関数show_progress(bool): tqdm を使用して進捗バーを表示します(利用可能な場合)atomic(bool): 一時ファイルに書き込み、成功時にアトミックに名前を変更しますuse_native_batch(bool): 両方のエンドポイントが対応している場合、ネイティブな列指向バッチ転送を要求しますselection(BatchSelectionor dict): 任意の列、行範囲、スライス、テーブル、またはバックエンド述語による選択strict_native(bool): ネイティブバッチ処理または要求された選択がサポートされていない場合、フォールバックせずにエラーを発生させます
戻り値: 以下を含む ConversionResult オブジェクト:
rows_in(int): 読み込んだ行の合計数rows_out(int): 書き込んだ行の合計数elapsed_seconds(float): 変換にかかった時間bytes_read(int | None): 読み込んだバイト数(利用可能な場合)bytes_written(int | None): 書き込んだバイト数(利用可能な場合)errors(list[Exception]): 発生したエラーの一覧
bulk_convert(source, destination, pattern=None, to_ext=None, **kwargs) -> BulkConversionResult
Glob パターン、ディレクトリ、またはファイルリストを使用して、複数のファイルを一度に変換します。
パラメーター:
source(str):Glob パターン、ディレクトリパス、またはファイルパスdestination(str):出力ディレクトリまたはファイル名パターンpattern(str):プレースホルダー({name}、{stem}、{ext})を含むファイル名パターンto_ext(str):ファイル拡張子を置き換えます(例:'parquet')**kwargs:convert()関数のすべてのパラメーター
**戻り値:**以下を含む BulkConversionResult オブジェクト:
total_files(int):処理したファイルの総数successful_files(int):正常に変換したファイル数failed_files(int):変換に失敗したファイル数total_rows_in(int):すべてのファイルから読み込んだ行の総数total_rows_out(int):すべてのファイルに書き込んだ行の総数total_elapsed_seconds(float):変換にかかった合計時間file_results(list[FileConversionResult]):ファイルごとの結果errors(list[Exception]):発生したすべてのエラーthroughput(float | None):1 秒あたりの行数
pipeline(source, destination, process_func, trigger_func=None, trigger_on=1000, final_func=None, reset_iterables=True, skip_nulls=True, start_state=None, debug=False, batch_size=1000, progress=None, atomic=False) -> PipelineResult
データ処理パイプラインを実行します。
パラメーター:
source(BaseIterable):読み取り元の反復可能オブジェクトdestination(BaseIterable | None):書き込み先の反復可能オブジェクトprocess_func(callable):各レコードを処理する関数trigger_func(callable | None):処理中に定期的に呼び出される関数trigger_on(int):トリガー関数を呼び出す間隔となるレコード数final_func(callable | None):処理完了後に呼び出される関数reset_iterables(bool):処理前に反復可能オブジェクトをリセットするかどうかskip_nulls(bool):process_funcから返されたNoneをスキップするかどうかstart_state(dict | None):初期状態の辞書debug(bool):例外を捕捉せずに送出するかどうかbatch_size(int):書き込み前にまとめるレコード数progress(callable | None):進捗更新用の任意のコールバック関数atomic(bool):書き込み先がファイルの場合に、アトミック書き込みを使用するかどうか
**戻り値:**以下を含む PipelineResult オブジェクト:
rows_processed(int):処理した行の総数elapsed_seconds(float):処理時間throughput(float | None):1 秒あたりの行数exceptions(int):発生した例外の数nulls(int):null の結果の数- 下位互換性のため、属性アクセス(
result.rows_processed)と辞書アクセス(result['rec_count'])の両方をサポートします
反復可能オブジェクトのメソッド
すべての反復可能オブジェクトで、以下を使用できます。
read(skip_empty=True) -> Row- 単一のレコードを読み取りますread_bulk(num=DEFAULT_BULK_NUMBER) -> list[Row]- 複数のレコードを読み取りますwrite(record)- 単一のレコードを書き込みますwrite_bulk(records)- 複数のレコードを書き込みますreset()- イテレーターを先頭にリセットしますclose()- ファイルハンドルを閉じますto_pandas(chunksize=None)- pandas DataFrame に変換します(任意でチャンク処理に対応)to_polars(chunksize=None)- Polars DataFrame に変換します(任意でチャンク処理に対応)to_dask(chunksize=1000000)- Dask DataFrame に変換しますlist_tables(filename=None) -> list[str] | None- 利用可能なテーブル/シート/データセットを一覧表示しますhas_tables() -> bool- この形式が複数のテーブルに対応しているかどうかを確認します
ヘルパー関数
as_dataclasses(iterable, dataclass_type, skip_empty=True) -> Iterator[T]
反復可能オブジェクトから読み取った辞書形式の行を、データクラスのインスタンスに変換します。
パラメーター:
iterable(BaseIterable):行の読み取り元となる反復可能オブジェクトdataclass_type(type[T]):行の変換先となるデータクラスの型skip_empty(bool):空の行をスキップするかどうか
**戻り値:**データクラスのインスタンスのイテレーター
as_pydantic(iterable, model_type, skip_empty=True, validate=True) -> Iterator[T]
イテラブルから辞書形式の行を読み込み、Pydantic モデルのインスタンスに変換します。
パラメーター:
iterable(BaseIterable):行を読み込むイテラブルmodel_type(type[T]):行の変換先となる Pydantic モデルの型skip_empty(bool):空の行をスキップするかどうかvalidate(bool):モデルのスキーマに照らして行を検証するかどうか
戻り値: Pydantic モデルのインスタンスのイテレーター
発生する例外: pydantic がインストールされていない場合は ImportError
to_dask(files, chunksize=1000000, **iterableargs) -> DaskDataFrame
複数のファイルを、自動形式検出で統合された Dask DataFrame に変換します。
パラメーター:
files(str | list[str]):単一のファイルパス、またはファイルパスのリストchunksize(int):パーティションあたりの行数**iterableargs:各ファイルに対してopen_iterable()に渡す追加の引数
戻り値: すべてのファイルのデータを含む Dask DataFrame
発生する例外: dask または pandas がインストールされていない場合は ImportError
エンジン
内部エンジン(デフォルト)
内部エンジンは、すべての形式に対して純粋な Python 実装を使用します。すべてのファイル形式と圧縮コーデックに対応しています。
DuckDB エンジン
DuckDB エンジンは、対応する形式に対して高性能なクエリ機能を提供します。
- 形式:CSV、JSONL、NDJSON、JSON
- コーデック:GZIP、ZStandard (.zst)
- 機能:高速なクエリ、合計数のカウント、SQL に似た操作
ファイルを開く際に engine='duckdb' を使用します。
source = open_iterable('data.csv.gz', engine='duckdb')
Examples ディレクトリ
より詳しい例については、examples ディレクトリを参照してください。
simplewiki/- Wikipedia XML ダンプの処理
その他の例とテスト
包括的な使用例とテストケースについては、tests ディレクトリを参照してください。
コントリビューター:pytest --verbose でテストスイート全体を実行してください。パフォーマンスのリグレッションゲートは、オプトインで有効にできます。
pytest tests/test_performance_regression.py -m performance --no-cov
正当なパフォーマンス変更後に、意図的にベースラインを再生成します。
pytest tests/test_performance_regression.py -m performance --no-cov --update-baselines
開発規約については、AGENTS.md を参照してください。
AI 統合ガイド
IterableData は、インテリジェントなデータ処理のために AI プラットフォームやフレームワークと統合できます。
- AI フレームワーク - LangChain、CrewAI、AutoGen との統合
- データ読み込みと形式変換のためのツール作成
- スキーマ推論とデータ品質分析
- データ処理のためのマルチエージェントワークフロー
- OpenAI - OpenAI API との直接統合(GPT-4、GPT-3.5 など)
- 関数呼び出しと Assistants API
- 一貫した結果を得るための構造化出力
- 自然言語によるデータ分析と変換
- Claude - Anthropic Claude AI との統合
- ツールに対応した Claude API 統合
- インテリジェントなデータ分析とスキーマ推論
- AI のガイダンスによる形式変換
- データ品質の評価とドキュメント作成
- Gemini - Google Gemini AI との統合
- 自然言語によるデータ分析
- AI のガイダンスによるインテリジェントな形式変換
- スキーマのドキュメント作成とデータ品質の評価
- 関数呼び出しの統合
これらのガイドでは、IterableData の統合データインターフェースと AI 機能を組み合わせるためのパターン、例、ベストプラクティスを紹介します。
関連プロジェクト
このライブラリは、Dateno オープンソースプロジェクトの一部です。また、以下でも使用されています。
- undatum - コマンドラインデータ処理ツール
- datacrafter - データ処理 ETL エンジン
ライセンス
IterableData は、Dateno のオープンソースプロジェクトの一部です。
- コードはMIT Licenseの下でライセンスされています。Copyright © 2022–2026 Dateno.
- ドキュメントとデータ(この README、ドキュメントサイト、テスト用フィクスチャを含む)は、CC BY 4.0の下でライセンスされています。
クレジット表記のガイダンスについては、ライセンスページをご覧ください。
コントリビューション
コントリビューションを歓迎します!プルリクエストの送信や、イシューの作成をぜひお願いします。
変更履歴
詳細なバージョン履歴については、CHANGELOG.mdをご覧ください。
Version 1.0.23 (2026-08-18)
- MCP Registry:
server.jsonの説明を、レジストリの上限である100文字に短縮
Version 1.0.22 (2026-08-18)
- コーディングエージェント:標準の
open_iterable/convertインポート、llms-full.txt、移植可能なスキル、クックブック - ディスカバリー:MCP
server.json、/.well-known/llms.txt、プロンプト評価。タグ付きリリース時に OIDC で MCP Registry に公開 - CI:Windows のファイルロックと CSV の改行を修正。オプションの追加機能は、基本インストール時に正常にスキップ
Version 1.0.21 (2026-08-10)
- ネストされたスキーマ/統計情報:
schema.infer()/stats.compute()でオプトインのflatten_nested=Trueを指定すると、capital_city.latのようなドット区切りのパスに対応 - 上限付きテーブルプロファイリング:複数テーブルのソース向けに行数/時間の予算を設定できる
iterable.ai.table_profile.profile_selected_table() - Excel/SQLite の堅牢性向上:名前付きシートを正しく開き、空のヘッダー行をスキップし、不正な XLSX のサイズ情報を復元。SQLite は読み取り専用でのオープンを優先し、テーブル名を引用符で囲む
Version 1.0.20 (2026-08-07)
- エージェントスキルブロック(
agent_skill):デフォルトのgenerate_blocks()に、データセットの事実、ワークフロー、安全性に関するガイダンスを含む、移植可能なエージェントスキルドキュメント(YAML frontmatter + Markdown)を追加 - より安全な使用例:例/レガシーの autodoc プロンプトで
python/r/sql、テーブルdatasetに対する SQL、読み取り専用の制約を必須化 - スキーマの例:構造化出力の検証に備えて、ネストされたプロバイダーの
example値を文字列に変換
Version 1.0.18 (2026-07-22)
- オープンデータ形式(試験的):FileGDB、MapInfo MIF、ASCII Grid、E00、LAS、BAG、CZML、XYZ、CIF、PDB、MATLAB MAT、SEG-Y、GRIB2、miniSEED、EDI、Access MDB、Lotus 1-2-3、WebDataset、R fst、HDT、IATI
- 追加機能:
[lidar]、[mat]、[geophysical]、[access]、[fst](既存の[geospatial]、[hdf5]、[xml]、[rdf]に加えて) - 新しいレイクハウス形式:Apache Paimon の Row/Mosaic ファイルと Paimon カタログテーブル。DuckLake(
ducklake/lakehouse追加機能) - レイクハウスへの書き込み:Delta Lake と Iceberg で上限付きの作成/追加/上書きに対応。DuckLake と Paimon のテーブルへの書き込みに対応。Hudi への書き込みは延期
- 追加機能(レイクハウス):
[paimon]、[paimon-table]、[paimon-row]、[paimon-mosaic]、[ducklake]。DuckLake は[lakehouse]に統合 - ドキュメント:すべての形式の概要ページを拡充。形式のインデックスとサイドバーを更新。Delta/Iceberg の書き込みに関するドキュメントを修正
Version 1.0.17 (2026-07-16)
- パフォーマンス:上限付きの Parquet/Arrow/Lance バッチ処理、行/一括カーソルの共有、変換合計のキャッシュ、オプトインのネイティブ列指向バッチ変換
- 圧縮:
fast、balanced、maxのコーデックプロファイルと、有効な設定の診断機能 - 形式のサポート:Zarr、GeoParquet、FlatGeobuf、CRAM、BED、GFF3/GTF、OTLP JSON/Protobuf のプロファイル
- リポジトリの品質:バージョン管理された機能メタデータ、配布コンテンツのチェック、フィクスチャの分離、オプション機能ファミリーの CI カバレッジ、OIDC リリースのガイダンス
バージョン 1.0.16 (2026-07-15)
- 新しい形式: GeoJSON テキストシーケンス(
geojsonseq)、TAR コンテナー(tar)、ゲノム VCF/BCF(genomic_vcf、bioextra) - セキュリティ: XXE に安全な XML 解析、AST で許可リスト化されたフィルター式、pickle の
trust=Trueに関する確認 - ストリーミング: Snappy/LZO ストリーミングコーデック、Shapefile、Arrow、Lance、Delta、Iceberg 用の遅延読み込み/バッチリーダー
- エラーポリシー: 不正な入力はデフォルトで型付きエラーを発生させます。
open_iterable()はIterableDataErrorのサブクラスを通知します - 品質: CI におけるパフォーマンス回帰ゲート、コアエントリーポイントのリファクタリング、テストの耐障害性の拡充
バージョン 1.0.15 (2026-07-04)
- 最小構成でのインポート可能性:
import iterableにオプションの BSON または Pydantic 依存関係が不要になりました
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。