druid native query execution-2

This commit is contained in:
liujianhuan 2020-07-01 09:59:03 +08:00
parent c6fab679e0
commit fee1d659da
1 changed files with 9 additions and 1 deletions

View File

@ -41,4 +41,12 @@ Druid的查询执行方法因查询的 [数据源类型](#数据源类型) 而
有一个例外:如果外部查询和所有子查询都是 [groupBy](groupby.md) 类型,则可以以流式方式处理子查询结果,并且 `druid.server.http.maxSubQueryRows` 限制不适用。
#### `join`
#### `join`
使用广播hash-join方法处理 [联接数据源](datasource.md#join)。
1. Broker执行输入join的任何子查询如 [`query`](#query)部分所述并用inline数据源替换它们。
2. Broker将连接树如果存在展平为"基本"数据源(最左下角的一个)和其他叶数据源(其余部分)。
3. 使用与基本数据源相同结构的查询执行将单独继续执行。如果基数据源是一个表,则像往常一样根据"interval"修剪段并通过将查询并行地转发到所有相关的数据服务器在集群上执行查询。如果基数据源是Lookup或Join数据源包括将内联子查询作为结果的内联数据源则查询将在Broker本身上执行。基查询不能是Union因为当前不支持Union作为Join的输入。
4. 在开始处理基数据源之前,将执行查询的服务器首先检查所有非基叶数据源,以确定是否需要为即将到来的哈希联接生成新的哈希表。目前,查找不需要构建新的哈希表(因为它们是预加载的),但内联数据源需要。
5. 查询执行再次使用基本数据源将自己使用的相同结构继续执行但有一个附加条件在处理基本数据源时Druid服务器将使用从其他连接输入构建的哈希表来逐行生成联接结果查询引擎将对联接的行而不是基本行进行操作。