如何高效访问DB转储对象首个字段并查看首行数据?
无需指定字段名,高效访问JSON对象首个字段的最优jq方案
DBeaver导出的数据库转储JSON格式示例如下(注:标准JSON不允许重复键,示例中重复的select应为笔误):
{ "select": [ {"<row1>"}, {"<row2>"} ], "select": {} }
处理大体积转储文件时,我们需要高效查看第一个字段的前几行,现有几种jq写法都存在问题:
jq 'keys[0] as $k|.[$k]|limit(1;.[])' dump:必须先遍历所有键才能取到第一个,大文件下性能拉胯jq '.[0]|limit(1;.[])' dump:语法错误,JSON对象不能用数字索引直接访问jq 'first(.[])|limit(1;.[])' dump:新版jq中first(.[])会拿到第一个字段值后停止遍历,但要追求极致高效,推荐用更直接的终止写法
最优写法:
jq 'foreach .[] as $val (false; if not then ($val | limit(1; .[]); true) else empty end)' dump
这个写法的核心是一旦找到第一个字段值,就立即处理并终止遍历,完全不会扫描文件中后续的字段,完美适配超大型转储文件的场景,不需要提前获取所有键,性能拉满。
如果只是需要第一个字段的完整内容(而非前几行),可以简化成:
jq 'foreach .[] as $val (false; if not then $val | break else empty end)' dump
内容的提问来源于stack exchange,提问作者Martin Mucha
相关产品推荐
相关产品推荐

