Production-scale import for multi-GB CSV, JSON, and Parquet files
维护者通常 2 天内回复
还没有人认领这个 Issue。
评估
调研方向
Start by reading the existing import command and its parsing and write paths; the issue does not name specific files or tests. Compare the current streaming and serial-write behavior with the acceptance criteria, then identify the existing test entry points for import formats and error handling. Done means the documented formats, bounded concurrency, checkpoint/resume, progress, and failure output meet the criteria while existing JSON and CSV behavior remains compatible.
由索引模型根据 Issue 内容生成。
描述
Customer scenario
Importing a large local dataset (for example, a 10 GB CSV, JSON/JSONL, or Parquet file) into Azure Cosmos DB currently often pushes customers toward Spark or Databricks. That adds significant setup, learning, governance, and pricing overhead for what should be a straightforward data-loading workflow.
The shell should provide a production-ready experience comparable in simplicity to mongoimport: point the command at a file, connection/container, and relevant options, then let it safely and efficiently load the data.
Current behavior
The existing import command provides a useful foundation:
- JSON Lines, JSON array, and CSV input
- Streaming parsing rather than loading the entire file into memory
- Insert and upsert modes
--dry-runvalidation--continue-on-error- Partition-key mapping for CSV
- Imported/failed counts and total RU charge
However, imports currently issue item writes serially. The command does not support Parquet, checkpoint/resume, configurable concurrency, durable failure output, or detailed progress reporting. As a result, it should not yet be positioned as an optimized or resilient multi-GB migration tool.
Proposed behavior
Extend import into a production-scale data loader while preserving its simple defaults.
Suggested capabilities:
- Add Parquet input support.
- Use bounded, configurable parallelism and Cosmos DB bulk execution where appropriate.
- Respect throttling and retry guidance while allowing an optional RU or throughput budget.
- Show periodic progress: records processed, succeeded, failed, elapsed time, throughput, RU consumed, and estimated completion when available.
- Support checkpoints and resuming an interrupted import without starting from the beginning.
- Write rejected records and structured error details to a user-selected file.
- Support common field mapping and type-conversion needs, especially for CSV and Parquet.
- Preserve streaming behavior and bounded memory usage for all formats.
- Retain insert/upsert, dry-run, and continue-on-error behavior.
- Produce both human-readable and structured summaries suitable for automation.
Possible usage:
import ./items.jsonl --mode=upsert --max-concurrency=16 --checkpoint=./items.checkpoint
import ./items.csv --partition-key=/tenantId --errors=./rejected.jsonl
import ./items.parquet --format=parquet --max-ru=50000
The exact option names are illustrative and should follow existing shell conventions.
Acceptance criteria
- A multi-GB input file is processed with bounded memory usage.
- JSONL, JSON array, and CSV behavior remains backward compatible.
- Parquet files can be imported with documented type-mapping behavior.
- Users can configure bounded write concurrency.
- The importer handles service throttling without losing or silently skipping records.
- An interrupted import can resume from a durable checkpoint.
- Progress and final summaries include processed/succeeded/failed counts and observed RU charge.
- Failed records can be written to a machine-readable file with actionable error details.
- Cancellation leaves a valid checkpoint and does not report success.
- Documentation clearly explains performance, consistency, idempotency, partition-key, and resume semantics.
Notes
This is intended for scalable client-side ingestion, not a transactional import. Writes across logical partitions cannot be made atomic as a single operation.
- 主要语言
- C#
- 星标
- 4
- 派生
- 7
- 平均合并
- 2 天 11 分钟
- 30 天内合并 PR
- 28
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
Azure/CosmosDBShell 的其他 Issue
-
bug P0
难度 4/5 3-5 天 新手友好度 30/100
Azure/CosmosDBShell#244 ·
维护者通常 2 天内回复
-
automation P1
难度 5/5 一周以上 新手友好度 45/100
Azure/CosmosDBShell#178 · 1 条评论 ·
维护者通常 2 天内回复
-
Lightweight headless CI distribution (no MCP, LSP, interactive UI)可能重新可做 关联的 PR 已关闭且未合并。 未关闭automation P1
难度 5/5 一周以上 新手友好度 35/100
Azure/CosmosDBShell#175 · 1 条评论 ·
维护者通常 2 天内回复
-
agentic enhancement P0
难度 4/5 3-5 天 新手友好度 55/100
Azure/CosmosDBShell#153 · 1 条评论 ·
维护者通常 2 天内回复
-
enhancement
难度 5/5 一周以上 新手友好度 45/100
Azure/CosmosDBShell#107 · 4 条评论 ·
维护者通常 2 天内回复
查看 Azure/CosmosDBShell 的全部 Issue
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 62/100
PCL-Community/PCL-CE#3658 ·
维护者通常 1 天内回复
-
Deploy & Patch-issues opprettes ikke: create-pnd-issues.yml har feilet hver uke siden 2025-09-08未关闭
难度 2/5 1-3 小时 新手友好度 62/100
Altinn/altinn-auth#4359 ·
维护者通常 1 天内回复
-
アプリ: チャット 優先: 中 提案
难度 2/5 1-3 小时 新手友好度 70/100
yksr-melt/Meltype#243 · 1 条评论 ·
维护者通常 1 天内回复
-
bug core
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
type/automation type/tech-debt
难度 1/5 1 小时以内 新手友好度 72/100
维护者通常 1 天内回复