searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

【Doris源码阅读】3. 建表

2023-07-27 05:51:48
10
0
| KW_CREATE opt_external:isExternal KW_TABLE opt_if_not_exists:ifNotExists table_name:name
            LPAREN column_definition_list:columns COMMA index_definition_list:indexes RPAREN opt_engine:engineName
            opt_keys:keys
            opt_comment:tableComment
            opt_partition:partition
            opt_distribution:distribution
            opt_rollup:index
            opt_properties:tblProperties
            opt_ext_properties:extProperties
    {:
        RESULT = new CreateTableStmt(ifNotExists, isExternal, name, columns, indexes, engineName, keys, partition,
        distribution, tblProperties, extProperties, tableComment, index);
    :}
CreateTableStmt最终解析出的属性如下所示:
protected TableName tableName;                                              // 表名
    protected List<ColumnDef> columnDefs;                                 // 列定义
    private List<IndexDef> indexDefs;                                            // 索引定义
  protected PartitionDesc partitionDesc;               // 分区信息
  protected DistributionDesc distributionDesc;         // 分桶方式
    protected KeysDesc keysDesc;                                                          // 数据模型
    protected Map<String, String> properties;                                                     // 属性
    private String comment;                                                                                   // 评论
    private List<AlterClause> rollupAlterClauseList = Lists.newArrayList();     // rollup
 

建表执行

总体视角

 
创建时序图 - createOlapTable
 

细化过程

排序key选择逻辑Env.calcShortKeyColumnCount

默认最多3个排序字段,遍历每个key字段

● 如果加上此字段,key长度超过36个字节

● 如果是char家族,这个字段算

● 如果不是char家族,这个字段不算

● 如果加上此字段,key长度没有36个字节

● 如果是varchar:这个字段算,退出

● 否则这个字段算

 

表结构细化

 

每个分区下都存在相同索引

每个索引下都存在相同数量Tablet

Tablet总数为:分区数*索引数*分桶数

Replica总数为:

 

BE选择逻辑

每个(Partition, Rollup, Tablet)组合根据副本数去选择BE存放副本

 

RPC逻辑

每个(Partition, Rollup)把下面累积的CreateReplicaTask组装到AgentBatchTask中并通过AgentTaskExecutor发送

 

 

0条评论
0 / 1000
x****m
5文章数
0粉丝数
x****m
5 文章 | 0 粉丝
原创

【Doris源码阅读】3. 建表

2023-07-27 05:51:48
10
0
| KW_CREATE opt_external:isExternal KW_TABLE opt_if_not_exists:ifNotExists table_name:name
            LPAREN column_definition_list:columns COMMA index_definition_list:indexes RPAREN opt_engine:engineName
            opt_keys:keys
            opt_comment:tableComment
            opt_partition:partition
            opt_distribution:distribution
            opt_rollup:index
            opt_properties:tblProperties
            opt_ext_properties:extProperties
    {:
        RESULT = new CreateTableStmt(ifNotExists, isExternal, name, columns, indexes, engineName, keys, partition,
        distribution, tblProperties, extProperties, tableComment, index);
    :}
CreateTableStmt最终解析出的属性如下所示:
protected TableName tableName;                                              // 表名
    protected List<ColumnDef> columnDefs;                                 // 列定义
    private List<IndexDef> indexDefs;                                            // 索引定义
  protected PartitionDesc partitionDesc;               // 分区信息
  protected DistributionDesc distributionDesc;         // 分桶方式
    protected KeysDesc keysDesc;                                                          // 数据模型
    protected Map<String, String> properties;                                                     // 属性
    private String comment;                                                                                   // 评论
    private List<AlterClause> rollupAlterClauseList = Lists.newArrayList();     // rollup
 

建表执行

总体视角

 
创建时序图 - createOlapTable
 

细化过程

排序key选择逻辑Env.calcShortKeyColumnCount

默认最多3个排序字段,遍历每个key字段

● 如果加上此字段,key长度超过36个字节

● 如果是char家族,这个字段算

● 如果不是char家族,这个字段不算

● 如果加上此字段,key长度没有36个字节

● 如果是varchar:这个字段算,退出

● 否则这个字段算

 

表结构细化

 

每个分区下都存在相同索引

每个索引下都存在相同数量Tablet

Tablet总数为:分区数*索引数*分桶数

Replica总数为:

 

BE选择逻辑

每个(Partition, Rollup, Tablet)组合根据副本数去选择BE存放副本

 

RPC逻辑

每个(Partition, Rollup)把下面累积的CreateReplicaTask组装到AgentBatchTask中并通过AgentTaskExecutor发送

 

 

文章来自个人专栏
Doris
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0