
# 常用SQL介绍
![](https://support.huaweicloud.com/devg-rule-mrs/public_sys-resources/caution_3.0-zh-cn.png)
- MRS后台客户端执行Hudi相关的SQL，必须source Hudi的component_env。
- DGC执行Hudi相关的SQL，如果是API连接必须在作业的运行中参数添加"--conf spark.support.hudi=true"。
 
| 功能                  | SQL写法                                                                                                                                                                                                                                                                                                                                                                                                                      | 注意事项                                                                                                                                                                                                                                                                                                                                                                                                                                             |
|:---|:---|:---|
| 更新写                 | - insert into SinkTable values()  - insert into SinkTable select \* from SourceTable                                                                                                                                                                       | 常用于集成加工Hudi表，按照主键去更新SinkTable的数据。                                                                                                                                                                                                                                                                                                                                                                                                                |
| 覆盖写                 | - insert overwrite SinkTable values()  - insert overwrite SinkTable select \* from SourceTable                                                                                                                                                             | - SinkTable是无分区表，则是整表覆盖。  - SinkTable是分区表，则是分区级覆盖。                                                                                                                                                                                                                              |
| 覆盖写                 | - insert overwrite table SinkTable values()  - insert overwrite table SinkTable select \* from SourceTable                                                                                                                                                 | - SinkTable是无分区表，则是整表覆盖。  - SinkTable是分区表，则是分区级覆盖。                                                                                                                                                                                                                            |
| bulk_insert写入       | 参考[常用参数介绍及使用场景](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450208.html)章节.                                                                                                                                                                                                                                                                                                                                       | 仅适用Hudi表做第一次迁移。                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| 更新写                 | - update SinkTable set 字段名=值 where 字段名=值                                                                                                                                                                                                                                                                               | 常用于快速修正Hudi中的小批量数据，不适合直接用于集成加工。                                                                                                                                                                                                                                                                                                                                                                                                                  |
| merge into语法        | - merge into SinkTable as t1 using (子查询) as t2 on t1.字段 = t2.字段 when matched then                                                                                                                                                                                                                                      | 不推荐。                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| 删除行级数据              | - delete from SinkTable where 字段名=值  - delete from SinkTable where 字段名 in (子查询)                                                                                                                                                                     | delete操作会写入数据，删除的数据量越大，delete执行越慢，适合用于删除小批量数据。                                                                                                                                                                                                                                                                                                                                                                                                   |
| 查询Hudi表结构           | desc formatted SinkTable                                                                                                                                                                                                                                                                                                                                                                                                   | 查询Hudi表所有信息，推荐使用。                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 查询Hudi表结构           | show create table SinkTable                                                                                                                                                                                                                                                                                                                                                                                                | 查询Hudi表所有信息，不推荐，可读性差。                                                                                                                                                                                                                                                                                                                                                                                                                            |
| 删除分区                | - 单分区 alter table SinkTable drop partition (分区列 = 分区值)   - 多分区 alter table SinkTable drop partition (分区列1 = 分区值, 分区列2 = 分区值, 分区列3......)    | - MRS后台客户端执行该命令，必须source Hudi的component_env。  - DGC执行该命令，如果是api连接必须在作业的运行中参数添加--conf spark.support.hudi=true。                                                                                                                                                                 |
| 删除表                 | - drop table 表名  - drop table 表名 purge                                                                                                                                                                                                             | - 对内表执行"drop table 表名"会删除hive上的表以及数据存储目录。  - 对外表执行""drop table 表名""仅会删除hive上的表，不删除数据存储目录。  - 对Hudi表进行彻底清理，直接使用"drop table 表名 purge"。对COW表执行，hive上的表以及数据目录将全部被清理。对MOR表执行，hive上的3张表(主表，rt表，ro表)以及数据目录将全部被清理。   |
| 查看Hudi表compaction计划 | show compaction on SinkTable                                                                                                                                                                                                                                                                                                                                                                                               | 查看返回结果的第二列action，如果值是commit则该计划已经被运行，如果值是compaction则该计划没有被执行。                                                                                                                                                                                                                                                                                                                                                                                    |
| 变更Schema            | [Hudi Schema演进](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24492.html)                                                                                                                                                                                                                                                                                                                                      | - DGC执行该命令，如果是api连接必须在作业的运行中参数添加"--conf spark.support.hudi=true"。  - 所有的alter命令，都必须同时执行以下两条命令： **set hoodie.schema.evolution.enable=true;** **alter table SinkTable xxx;**                          |
| 执行compaction        | run compaction on SinkTable                                                                                                                                                                                                                                                                                                                                                                                                | 不能直接单条命令执行，请参考[选择合适的表服务执行方式](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450207.html)和[常用参数介绍及使用场景](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450208.html)。                                                                                                                                                                                                                                                                  |
| 执行clean             | run clean on SinkTable                                                                                                                                                                                                                                                                                                                                                                                                     | 不能直接单条命令执行，请参考[选择合适的表服务执行方式](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450207.html)和[常用参数介绍及使用场景](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450208.html)。                                                                                                                                                                                                                                                                  |
| 执行archive           | run archivelog on SinkTable                                                                                                                                                                                                                                                                                                                                                                                                | 不能直接单条命令执行，请参考[选择合适的表服务执行方式](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450207.html)和[常用参数介绍及使用场景](https://support.huaweicloud.com/devg-rule-mrs/mrs_07_450208.html)。                                                                                                                                                                                                                                                                  |
   
