【问题标题】:Clickhouse return array of records?Clickhouse返回记录数组?
【发布时间】:2021-10-19 23:48:50
【问题描述】:

是否可以在 click house 中让一列返回一个对象数组?

我知道 groupArray 可以返回特定列,但是我想返回所有列。

【问题讨论】:

    标签: clickhouse


    【解决方案1】:

    是的,ClickHouse 可以返回数据数组。

    CREATE TABLE mytable (
        dt DateTime,
        ...
        arr Array(String)
    ) Engine=Memory()
    

    如果要将表中的所有列作为数组返回,则所有列必须具有相同类型,因为数组需要具有相同类型的元素。因此,以下内容将是有效的:

    CREATE TABLE array_of_all_columns(
        a String, 
        b String
    ) Engine=Memory
    

    然后就可以将所有列作为一个数组获取:

    SELECT array(*) as arr FROM array_of_all_columns;
    
    ┌─arr───────┐
    │ ['A','B'] │
    └───────────┘
    ┌─arr───────┐
    │ ['C','D'] │
    └───────────┘
    

    在上面的例子中,如果你的第三列不是String的类型,那么你会得到这个错误:

    DB::Exception: There is no supertype for types String, String, Int32 because some of them are String/FixedString and some of them are not: While processing [a, b, c].

    【讨论】:

    • 谢谢!所以它们都需要是同一类型?
    • @YayoUK,是的,所有列都需要具有相同的类型。
    猜你喜欢
    • 2019-07-15
    • 2011-07-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多