
# 表类型说明
#### External Table与Managed Table对比
AI DataLake Spark SQL端点支持两种表类型：External Table（外部表）和Managed Table（管理表）。
| 特性         | External Table                                  | Managed Table       |
|:---|:---|:---|
| 数据存储位置     | OBS外部路径（通过LOCATION指定）                           | 平台内部存储              |
| 删除表行为      | 仅删除元数据，数据保留在OBS中                                | 删除元数据和数据            |
| 建表关键字      | 不使用EXTERNAL关键字，通过指定LOCATION标识                   | 不指定LOCATION         |
| 数据生命周期     | 由用户管理OBS数据                                      | 由平台管理               |
| 适用场景       | 数据已存在于OBS、需跨服务共享数据                              | 临时数据、中间结果、平台托管数据    |
| 与开源Spark差异 | 开源Spark使用CREATE EXTERNAL TABLE，平台不使用EXTERNAL关键字 | 与开源Spark一致          |
| 支持的建表语法    | DataSource语法、Hive语法                             | DataSource语法、Hive语法 |
   
![](https://support.huaweicloud.com/sqlref-spark-aidatalake/public_sys-resources/note_3.0-zh-cn.png)
AI DataLake的External Table（OBS表）与开源Spark的External Table概念一致，但建表语法**不使用EXTERNAL关键字**，这是与开源的主要差异点。通过指定LOCATION 'obs://...'路径来创建外部表。
#### CREATE TABLE默认存储引擎变更
Spark 3.x中，CREATE TABLE不指定USING子句时默认使用Hive存储格式。
Spark 4.0中，默认存储格式由spark.sql.sources.default配置决定，通常为parquet。
表1行为变更对比 
| **场景**                                    | **Spark 3.x** | **Spark 4.0**   |
|:---|:---|:---|
| **CREATE TABLE t (id INT)**               | 默认Hive格式      | 默认parquet格式     |
| **CREATE TABLE t (id INT) USING hive**    | Hive格式        | Hive格式（显式指定）    |
| **CREATE TABLE t (id INT) USING parquet** | parquet格式     | parquet格式（显式指定） |
   
- **使用建议：**
  - 所有建表语句明确指定存储格式，避免依赖默认值。未指定USING的建表语句需确认预期格式
  
  - AI DataLake建议所有建表语句显式指定USING子句
  
  - AI DataLake的Managed Table推荐使用USING parquet或USING orc
  
  - 依赖Hive格式特性的表需显式指定USING hive
   
- **推荐写法：显式指定格式**
  ```
  -- 创建Managed Table，使用parquet格式
  CREATE TABLE t1 (id INT, name STRING) USING parquet;
  -- 创建Managed Table，使用hive格式
  CREATE TABLE t2 (id INT, name STRING) USING hive;
  -- 创建OBS表，使用parquet格式
  CREATE TABLE t3 (id INT, name STRING) USING parquet 
  LOCATION 'obs://bucket/path';
  ```
  
 
