
# 基于Unique表的单表检索查询和聚合查询
#### 应用场景
本场景通过基于Unique模型表查询符合条件的数据，基于Unique模型表聚合查询，支持MIN，MAX，SUM，REPLACE四种聚合算法。
#### 方案架构
Doris支持海量数据的亚秒级查询，支持单表数据的聚合查询和多表关联查询。
Doris不同的表引擎，适合不同的业务场景，可以根据业务特点选择不同的表格式。
图1实时OLAP数据查询   
![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002378930378.png "点击放大")
- 表模型选择：
  - Aggregate模型可以通过预聚合，极大地降低聚合查询时所需扫描的数据量和查询的计算量，适合有固定模式的报表类查询场景，但是该模型不适用于count(\*)查询。同时因为固定了Value列上的聚合方式，在进行其他类型的聚合查询时，需要考虑语意正确性。
  
  - Unique模型针对需要唯一主键约束的场景，可以保证主键唯一性约束。但是无法利用ROLLUP等预聚合带来的查询优势。适合数据有大量更新的场景。对于聚合查询有较高性能需求的用户，推荐使用写时合并实现。
  
  - Duplicate适合任意维度的Ad-hoc查询。虽然无法利用预聚合的特性，但是不受聚合模型的约束，可以发挥列存模型的优势。适合不要求数据更新的通用查询场景。
   
- 查询模式：
  - 单表检索查询，按索引进行单表检索查询，可进行高并发，低延迟的数据查询访问。
  
  - 单表聚合查询，不同维度进行聚合查询，可提供低延迟的数据聚合查询能力。
  
  - 多表关联查询，通常用于事实表和维度表的多表关联查询场景。
   
 
#### 操作流程
- [步骤1：通过StreamLoad将本地CSV文件导入Doris]
- [步骤2：基于Unique表的单表查询]
 
 #### 步骤1：通过StreamLoad将本地CSV文件导入Doris
参考[通过StreamLoad将本地CSV文件导入Doris](https://support.huaweicloud.com/bestpractice-mrs/mrs_05_0148.html#mrs_05_0148)章节，将数据实时同步到Doris的unique模型表。
 #### 步骤2：基于Unique表的单表查询
1. 登录Doris集群中已安装好MySQL客户端的节点，执行如下命令进入Doris数据库。 
   ```
   export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1 //若集群已启用Kerberos认证（安全模式）需执行该命令。
   ```
   ```
   mysql -u数据库登录用户 -p数据库登录用户密码 -P数据库连接端口 -hDoris FE实例IP地址
   ```
   ![](https://support.huaweicloud.com/bestpractice-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - 数据库连接端口为Doris FE的查询连接端口，可通过登录MRS Doris集群的Manager界面，选择"集群 \> 服务 \> Doris \> 实例"，查看任一FE实例的业务IP地址获取。
   
   - Doris FE实例IP地址可通过登录MRS Doris集群的Manager界面，选择"集群 \> 服务 \> Doris \> 配置 \> 全部配置"，搜索并查看"query_port"参数值获取。
    
   
   
2. 执行以下命令对Doris数据表（Unique模型）进行查询。 
   ```
   use 数据库名;
   ```
   - 单表检索查询：
     ```
     select LO_REVENUE,LO_SUPPLYCOST,LO_TAX from lineorder_stream_u where LO_ORDERKEY <= 10 and LO_ORDERKEY >= 5 and LO_DISCOUNT BETWEEN 0 AND 9 AND LO_QUANTITY < 10;
     ```
     例如，执行结果如下，表示查询成功：
     ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002079557642.png "点击放大")
     
   
   - 单表聚合查询：
     ```
     SELECT LO_CUSTKEY,sum(LO_REVENUE) as LO_REVENUE,max(LO_SUPPLYCOST) as LO_SUPPLYCOST,min(LO_TAX) as LO_TAX  FROM lineorder_stream_u GROUP BY LO_CUSTKEY having LO_CUSTKEY<= 10  and  LO_CUSTKEY>= 5;
     ```
     例如，执行结果如下，表示查询成功：
     ![](https://support.huaweicloud.com/bestpractice-mrs/zh-cn_image_0000002115196705.png "点击放大")
     
   
   
   
   
 
