记一次clickhouse查询问题Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = ‘deny‘)
最近在工作中使用到了clickhouse,在查询数据统计的时候遇到了一点问题,后来解决了,记录一下
ClickHouse是一个用于联机分析(OLAP)的列式数据库管理系统–DBMS ( 来自不同列的值被单独存储,来自同一列的数据被存储在一起 )
适用于大多数是读请求,数据较少更新或者没有更新的场景。clickhouse的一大优点是支持SQL, 在查询的学习成本上低于es.
SQL格式如下:
[WITH expr_list|(subquery)]
SELECT [DISTINCT] expr_list
[FROM [db.]table | (subquery) | table_function] [FINAL]
[SAMPLE sample_coeff]
[ARRAY JOIN ...]
[GLOBAL] [ANY|ALL|ASOF] [INNER|LEFT|RIGHT|FULL|CROSS] [OUTER|SEMI|ANTI] JOIN (subquery)|table (ON <expr_list>)|(USING <column_list>)
[PREWHERE expr]
[WHERE expr]
[GROUP BY expr_list] [WITH TOTALS]
[HAVING expr]
[ORDER BY expr_list] [WITH FILL] [FROM expr] [TO expr] [STEP expr]
[LIMIT [offset_value, ]n BY columns]
[LIMIT [n, ]m] [WITH TIES]
[UNION ALL ...]
[INTO OUTFILE filename]
[FORMAT format]
业务场景:
一批数据周期调用某个接口,每次调用的结果都会记录下来,想按照周期来统计该数据的调用结果。
每个周期内数据的唯一id是businessId,在同一周期内相同businessId的数据保留最新的一条作为统计数据源
SQL:对指定周期内的数据,统计其最新的business信息
SELECT * FROM db.t_data t1 inner join
(SELECT businessId , max(lastchangetime) lasttime FROM db.t_data where
lastchangetime >= toDateTime('?') and lastchangetime <= toDateTime('?')
and businessId >= ? and businessId <=? group by businessId) t2
on t1.businessId = t2.businessId and t1.lastchangetime = t2.lasttime
这个sql在MySQL执行是OK的,但是在clickhouse执行会报如下错误:"syntax error, expect {, actual error, pos 1, line 1, column 2Code: 288, e.displayText() = DB::Exception: Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = 'deny'). You may rewrite query to use local tables in subqueries, or use GLOBAL keyword, or set distributed_product_mode to suitable value. (version 20.1.4.14 (official build))\n"
根据报错信息,因为不支持分布式子查询而发生如上报错,建议是在子查询里使用本地表或者使用GLOBAL, 我将inner join
改为global join
就没有报错了
那么clickhouse的分布式查询又是怎么一回事呢?
带子查询的IN-s有两个选项(类似于连接):normal IN / JOIN 和 GLOBAL IN / GLOBAL JOIN. 它们在分布式查询处理的运行方式上有所不同。
当使用常规IN时,查询被发送到远程服务器,并且它们中的每个服务器都在运行子查询 IN 或JOIN 条款
使用 GLOBAL IN / GLOBAL JOINs时,首先所有的子查询都运行 GLOBAL IN / GLOBAL
JOINs,并将结果收集在临时表中。 然后将临时表发送到每个远程服务器,其中使用此临时数据运行查询。
分布式子查询主要是用于在连接查询时,如果关联的数据分散在不同的集群中,那么子查询就需要先在所有集群节点上查询,然后以其并集作为子查询的结果集,否则查询出来的结果不准确。为了提高效率,官方是推荐使用global join
(将 GLOBAL 修饰的子句,单独进行了一次分布式查询, 子查询的结果合并后存储在临时表
中)代替普通的join。
参考资料:
ClickHouse概述
ClickHouse分布式IN & JOIN 查询的避坑指南
house.tech/docs/zh/sql-reference/operators/in/
记一次clickhouse查询问题Double-distributed IN/JOIN subqueries is denied (distributed_product_mode = ‘deny‘)相关推荐
- ClickHouse查询语句详解
ClickHouse查询语句兼容大部分SQL语法,并且进行了更加丰富的扩展,查询语句模板如下: [WITH expr_list|(subquery)] SELECT [DISTINCT [ON (c ...
- 【clickhouse】clickhouse 利用Grafana与系统表监控ClickHouse查询
文章目录 1.概述 1.概述 转载:利用Grafana与系统表监控ClickHouse查询 收藏从未停止,写在这里以防万一
- 【clickhouse】Clickhouse 查询之 Array JOIN
文章目录 1.概述 1.概述 转载:Clickhouse 查询之 Array JOIN Array JOIN 子句允许在数据表的内部,与数组或者嵌套的字段进行JOIN操作,从而将一行数据变多行.适用于 ...
- 【clickhouse】clickhouse查询语句之simple
文章目录 1. 概述 1. 概述 转载:Clickhouse查询语句 sample 注意: sample子句只能用于MergeTree系列引擎的数据表,并且在create table的时候就声明sam ...
- TPCH ClickHouse查询语句修改
TPC-H 压CK的时候,22条query语句需要进行修改,使语法满足CK:在此记录,供参考 clickhouse查询语句-- query-1select l_returnflag, l_linest ...
- SQL 多表查询之 where和INNER JOIN
SQL多表查询之 where和INNER JOIN[基础查询和效率分析] 转载Michaelwubo 最后发布于2018-07-05 10:40:47 阅读数 18057 收藏 https://bl ...
- SQL关联查询详解,SQL JOIN详解
关联查询,也称为多表查询,指两个或更多个表一起完成查询操作. 前提条件:这些一起查询的表之间是有关系的(一对一.一对多),它们之间一定是有关联字段,这个关联字段可能建立了外键,也可能没有建立外键. 一 ...
- Clickhouse 查询分布式表子查询 (Distributed Subqueries )
官方文档:https://clickhouse.tech/docs/en/sql-reference/operators/in/#select-distributed-subqueries 在分布式表 ...
- ClickHouse 分布式原理:Distributed引擎
文章目录 Distributed引擎 分布式写入流程 数据写入分片 副本复制数据 分布式查询流程 多副本的路由规则 多分片查询的流程 使用Global优化分布式子查询 Distributed引擎 Di ...
最新文章
- 不应该在ToString()方法中修改引用类型
- 2.06_Python网络爬虫_正则表达式
- python中文转拼音
- 【328天】每日项目总结系列066(2017.12.30)
- 苹果将明年上半年iPhone出货量目标提高 30%
- CodeFores 665D Simple Subset(贪心)
- MyCat分片规则之取模范围分片
- matlab 模拟滤波器,基于MATLAB的模拟滤波器设计
- Ubuntu 网易云音乐 Linux 官方版本下载安装
- android 免root 安装xposed,xposed框架免root安装|VAExposed(xposed框架免root版本)1.97最新版 - 维维软件园...
- VB简易绘图板的实现
- 正版软件 - AxMath 专业的数学公式编辑器带计算功能 数学公式编辑器首选工具
- 3. 项目立项三板斧-建议书-可行性研究-评估论证
- 2020届最新面试经验(腾讯and华为and百度)
- 在百度地图中叠加CAD图及GIS数据展示踩坑记
- 外星人 Alienware x15 R2 评测
- Linux 系统设置 : hwclock 命令详解
- 基于人工兔优化算法的函数寻优和工程优化
- Dubbo经典之作(Dubbo使用详解)
- 如何安装和配置Mantis
热门文章
- Redisson分布式锁实战-2:解决wait_time之坑
- 深入理解Kafka(4)-主题与分区
- java课后习题_【整理】java私塾教程课后习题
- win7安装oracle9i 补丁_最详细图解Windows7x64更新安装教程
- VMware Workstation 入门使用
- 什么是Session分布式共享
- VS2010+WinXP+MFC程序 无法定位程序输入点于动态链接库
- 扩展GridView控件——为内容项添加拖放及分组功能
- Jquery插件使用 焦点图插件 MyFocus ,另外记录一款插件 KinMaxShow大背景图插件。...
- Linux终端乱码的解决办法