
# Datasource表优化
#### 操作场景
将datasource表的分区消息存储到Metastore中，并在Metastore中对分区消息进行处理。
- 优化datasource表，支持对表中分区执行增加、删除和修改等语法，从而增加与Hive的兼容性。
- 支持在查询语句中，把分区裁剪并下压到Metastore上，从而过滤掉不匹配的分区。
  示例如下：
  ```
  select count(*) from table where partCol=1;    //partCol列为分区列
  ```
  此时，在物理计划中执行TableScan操作时，只处理分区(partCol=1)对应的数据。
  
 
#### 操作步骤
要启动Datasource表优化，在Spark客户端的"spark-defaults.conf"配置文件中进行设置。
表1参数介绍 
| **参数**                                          | **描述**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | **默认值**             |
|:---|:---|:---|
| spark.sql.hive.manageFilesourcePartitions       | 是否启用Metastore分区管理（包括数据源表和转换的Hive表）。 - true：启用Metastore分区管理，即数据源表存储分区在Hive中，并在查询语句中使用Metastore修剪分区。    - false：不启用Metastore分区管理。   | true                |
| spark.sql.hive.metastorePartitionPruning        | 是否支持将predicate下压到Hive Metastore中。 - true：支持，目前仅支持Hive表的predicate下压。    - false：不支持                                                | true                |
| spark.sql.hive.filesourcePartitionFileCacheSize | 启用内存中分区文件元数据的缓存大小。 所有表共享一个可以使用指定的num字节进行文件元数据的缓存。 只有当"spark.sql.hive.manageFilesourcePartitions"配置为"true"时，该配置项才会生效。                                                                                                                                                                                                                                                                           | 250 \* 1024 \* 1024 |
| spark.sql.hive.convertMetastoreOrc              | 设置ORC表的处理方式： - false：Spark SQL使用Hive SerDe处理ORC表。  - true：Spark SQL使用Spark内置的机制处理ORC表。                                                                                                     | true                |
   
