说明
与JSONEachRow/JSONStringsEachRow 不同的是,ClickHouse 会将每个事件作为单独的 JSON 对象以流式方式输出,并且还会返回进度信息。
相关的 JSONStringsEachRowWithProgress 格式使用相同的顶层对象类型,但字段值会被序列化为字符串。
紧凑格式的同类变体 JSONCompactEachRowWithProgress 和 JSONCompactStringsEachRowWithProgress 具有相同的流对象类型,在进度、LIMIT 和异常方面的注意事项也相同;不同之处在于,它们的 row / totals / min / max 载荷是值数组,而非具名对象。
流对象
响应中的每一行都是一个 JSON 对象。客户端应根据顶层键进行分派处理:
只要查询包含
LIMIT,即使该限制并未丢弃任何行,也会输出 rows_before_limit_at_least 对象。它表示不使用 LIMIT 时本应返回的行数的下限估计 (含义与 JSON 格式中相同) ;客户端不得将其视为有行被丢弃的依据。
meta 会在第一个 row 之前输出一次,但 progress 对象可能先于 meta 到达。仅当在 HTTP 路径上设置了 http_write_exception_in_output_format=1 时,才会输出顶层 exception 对象;否则错误将通过传输层报告。该对象输出时是一个独立的顶层对象,而非嵌套在 row 下。
使用示例
progress 对象仍可能在 meta 之前输出。在 HTTP 路径下,若设置了 http_write_exception_in_output_format=1,失败的查询会以一个独立的顶层对象结尾 (不嵌套在 row 中) :