我对Clickhouse还是很陌生,我的第一次尝试似乎总是为SELECT生成这种输出:
:) select * from test
SELECT *
FROM test
┌─s───┬───i─┐
│ foo │ 123 │
└─────┴─────┘
┌─s───┬───i─┐
│ bar │ 567 │
└─────┴─────┘
我希望这样:
┌─s───┬───i─┐
│ foo │ 123 │
│ bar │ 567 │
└─────┴─────┘
为什么我要分开行?是由表结构引起的吗?这是test
表的结构:
CREATE TABLE test
(
s String,
i UInt64
) ENGINE = Memory
答案 0 :(得分:1)
ClickHouse具有矢量化查询执行引擎,这意味着在解释查询时,它会成批使用数据。批处理的定义与基础存储引擎密切相关。由于您使用的是 Memory 引擎,因此它会为每次插入制定批次(或使用 max_insert_block_size 设置将大插入分成单独的批次)。
在查询输出中获得单独的表行的原因如下:
您已经在 test 表中插入了两个块(两个 INSERT 语句),因此从其中进行扫描将生成两个块。
您正在使用的查询不包含任何合并块的阻塞运算符(分组依据,排序依据等)。因此,生成的块将一一返回。
命令行客户端在接收到块后立即打印它们。
答案 1 :(得分:1)
默认情况下,clickhouse-client 使用 PrettyCompact 输出格式:
<块引用>非常紧凑
与 Pretty 的不同之处在于网格是在行和行之间绘制的 结果更紧凑。默认情况下使用此格式 交互模式下的命令行客户端。
如果你想加入所有的输出块,你可以使用稍微不同的输出格式PrettyCompactMonoBlock:
<块引用>PrettyCompactMonoBlock
与 PrettyCompact 的不同之处在于最多可缓冲 10,000 行, 然后输出为单个表,而不是按块输出。