如何在ClickHouse中子查询选择多类型命名元组/JSON/Map
解决ClickHouse中生成命名元组数组的问题
要让ordersHistory成为带键名的命名元组数组,只需在构造元组时为每个字段指定别名,替换子查询里的groupArray(tuple(date, orders))即可。修改后的完整查询如下:
SELECT 123456 as productId, ordersHistory -- 现在会输出 [{'date': '2022-11-10', 'orders': 4}] 格式的命名元组数组 FROM products GLOBAL LEFT JOIN ( SELECT groupArray(tuple(date as date, orders as orders)) ordersHistory, 123456 as productId FROM ( SELECT date, orders FROM orders WHERE productId = 123456 AND date BETWEEN '2022-10-10' AND '2022-11-10' ) GROUP BY productId ) orders ON products.productId = orders.productId
补充说明
- ClickHouse中,通过在
tuple函数内用as为元素指定键名,就能生成命名元组,聚合后的数组会保留这些键名信息。 - 如果需要严格约束元组的字段类型,可以显式声明元组类型,示例:
这种写法能避免自动类型推断可能出现的偏差。groupArray( (date, orders)::Tuple(date Date, orders UInt32) )
内容的提问来源于stack exchange,提问作者bladedancer
相关产品推荐
相关产品推荐

