ClickHouse 按列输出,而不是按行输出(实际上没有转置的转置?)

Posted

技术标签:

【中文标题】ClickHouse 按列输出,而不是按行输出(实际上没有转置的转置?)【英文标题】:ClickHouse output by columns, not by rows (transpose without transpose actually?) 【发布时间】:2021-06-02 08:58:43 【问题描述】:

有没有办法不按行而是按列从 ClickHouse 返回数据?

因此,ab 列的结果不是以下形式

a b
1 2
3 4
5 6

我会得到一个转置的结果

- - -
1 3 5
2 4 6

关键是我想访问每列的数据,例如。遍历列 a 中的所有内容。

我正在检查可用的输出格式 - Arrow 可以,但我的平台目前不支持它。

我正在寻找一种最有效的方法。例如。考虑到 ClickHouse 已经将数据存储在列中,它不必将其处理成行,因此我可以在之后使用数组函数将其传输回列。我不太熟悉内部结构,但我想知道如果数据已经在列中,我可以以某种方式跳过转置行。

【问题讨论】:

【参考方案1】:

显然没有简单的方法可以做到这一点。 还有一个更大的问题是它违背了 SQL 概念。


您可以使用本机协议,尽管您将获得 65k 行的块中的列。

col_a 65k values, col_b 65k values, col_a next 65k values, col_b next 65k values

【讨论】:

嗯谢谢回复!对。您在这里所说的 SQL 概念到底是什么意思?我偶然发现了Native,它起初看起来很有希望:The most efficient format.,然后最后是“嗯”:You can use this format to quickly generate dumps that can only be read by the ClickHouse DBMS. It does not make sense to work with this format yourself. 投票赞成。 在查询执行之前知道列数、名称和类型的概念。并且每一行都有相同的列集。

以上是关于ClickHouse 按列输出,而不是按行输出(实际上没有转置的转置?)的主要内容,如果未能解决你的问题,请参考以下文章

按列而不是行存储矩阵[重复]

如何逐行读取 Matlab mex 函数的输入矩阵?

如何逐行读取 Matlab mex 函数的输入矩阵?

按列而不是轴对Numpy数组进行排序[重复]

如何将多个csv按行合并?(不是首尾相接的按列合并)

使用 Bash 按列拆分命令输出?