Share this article:
1 min read

数据工程师为何使用 NDJSON — 以及如何在不编写代码的情况下将其可视化

如果您最近使用过事件流、日志聚合或 API 导出,那么您就会遇到过 NDJSON。它出现在 Kafka 消费者输出、Elasticsearch 转储文件、Segment 事件日志以及数据工程师每天处理的十几个其他数据管道输出中。

NDJSON 是一种非常适合机器的格式。对于需要真正理解数据含义的人类来说,这是可怕的。

本文解释了为什么 NDJSON 在现代数据基础设施中如此普遍,是什么导致手动分析变得困难,以及数据工程师和分析师如何使用浏览器本机工具从原始 NDJSON 文件转换为交互式仪表板 - 而无需编写单个 Python 脚本。

什么是 NDJSON,为什么管道会生成它?

NDJSON — 换行符分隔 JSON,也称为 JSON 行或 JSONL — 是一种文本格式,其中每行都是一个独立的有效 JSON 对象:

{“事件”:“page_view”,“user_id”:“u_104”,“页面”:“/定价”,“ts”:“2025-05-14T09:21:00Z”,“会话”:“s_88”}
{“事件”:“button_click”,“user_id”:“u_104”,“元素”:“cta_hero”,“ts”:“2025-05-14T09:21:15Z”,“会话”:“s_88”}
{“事件”:“form_submit”,“user_id”:“u_104”,“表单”:“候补名单”,“ts”:“2025-05-14T09:21:44Z”,“会话”:“s_88”}

该格式在流上下文中大量使用,因为它是可附加的:多个生产者可以同时将新事件写入文件的末尾,而不会破坏文档的结构。如果不重写右括号,则无法附加标准 JSON 数组。

NDJSON 是以下内容的默认输出格式:

  • Kafka消费者将事件流写入对象存储
  • Elasticsearch 批量导出 API
  • SegmentMixpanel 数据导出
  • 云日志记录服务(AWS CloudWatch、GCP 云日志记录)
  • 网络分析平台导出原始事件表 结果是,几乎每个现代数据堆栈都会在某个时刻生成 NDJSON 文件 - 并且必须有人理解它们。

问题:NDJSON 在没有工具的情况下是不透明的

使用文本编辑器检查小型 NDJSON 文件是可以管理的。但生产 NDJSON 文件通常很大(数百万行)、架构不一致(并非每个事件类型都具有相同的字段)并且嵌套很深。

用于探索 NDJSON 的传统工具包如下所示:

# 按类型统计事件
猫事件.ndjson | jq -r '.event' | jq -r '.event' |排序|优衣库-c

# 提取子集
猫事件.ndjson | jq 'select(.event == "form_submit")'

# 使用Python聚合
导入 json
从集合导入计数器

将 open('events.ndjson') 作为 f:
    events = [json.loads(line) for line in f]

Counter(e['event'] for e in events)

这有效。但它需要: 1.数据工程师环境中的jq或Python 2. 为每个查询编写并运行代码 3.没有视觉输出——只有终端输出或笔记本单元 4. 无法与非技术利益相关者分享结果

对于探索和验证任务 - “此文件中有哪些事件?”,“会话如何随时间分布?”,“此日志中是否有任何异常峰值?” ——编写代码往往是矫枉过正的。

使用 Datastripes 直观地探索 NDJSON

Datastripes 在浏览器中本地解析 NDJSON 文件。将 .ndjson.jsonl 文件拖放到界面和平台中:

  1. 自动检测所有行的架构,包括不一致或部分填充的字段
  2. **将嵌套对象展平为类型化的列网格(嵌套键的点表示法)
  3. 分组和聚合自动使用=GROUP_BY()=COUNT_BY()等公式函数
  4. 根据检测到的数据类型(时间戳 → 时间序列、分类 → 条形图)生成图表建议 立即输出是一个可导航、可过滤的网格,您可以在其中查看文件中的每个事件 - 以及最具分析相关性维度的自动图表。

这对数据工程师来说有什么变化

浏览器原生 NDJSON 探索的价值并不在于它取代了 Python 来进行复杂的分析 — 它不会也不应该取代。其价值在于,它使 80% 不需要代码的探索任务 显着加快。

受益的常见工作流程:

验证新的管道输出:“这个 Kafka 消费者输出看起来正确吗?”这个问题在 Datastripes 中需要 30 秒才能回答,而在 jq 中需要 5 分钟才能回答。

调试架构漂移: 当某个字段出现在某些记录中而不是其他记录中时,Datastripes 网格会使其立即可见,而无需编写自定义架构推理脚本。

移交给非技术团队成员: 需要了解在入职流程中触发哪些事件的产品经理无法读取 jq 输出。他们可以阅读条形图。

快速异常检测: 日志文件中的时间序列图表可以在几秒钟内显示峰值、下降和间隙 - 无需编写自定义聚合查询。

更深入的见解:可视化是数据工程的一流步骤

传统的数据工程思维将可视化视为最后一步——“BI 团队”在管道构建完毕且数据干净后处理的事情。

现实情况是,可视化在管道生命周期的早期、验证和探索期间最有价值。在探索阶段发现架构问题、丢失的事件类型或意外的数据分布比在故障管道上构建仪表板之后要便宜得多。

使 NDJSON 在原始文件级别上进行可视化探索的工具可以弥补这一差距,并让数据工程师能够更快地工作,而无需添加基础设施。


在 Datastripes 中探索您的 NDJSON 文件 - 无需安装、无需代码、完整的数据隐私。

Welcome to Datastripes

Be one of the first early-birds! Join the early access