# 使用Aura SQL开发的流程
选择SQL开发方式后，可按照以下流程使用Aura开发作业。
#### 步骤一：选择表存储格式
创建表前，需先确定表的存储格式。Aura支持ORC、PARQUET、ICEBERG、LANCE等存储格式，其中**Iceberg** 与**Lance**是重点能力：
| 表类型           | 定位         | 关键能力                                   |
|:---|:---|:---|
| ORC          | 默认通用格式   | 列式存储、分区。                                |
| PARQUET     | 通用列式格式      | 列式存储、分区。                                |
| ICEBERG    | 开放表格式（湖仓一体） | 海量数据（PB级）、ACID事务、快照、时间旅行、表达式分区、表级ALTER。 |
| LANCE       | 面向AI的列式格式  | 高性能列式存储、向量索引、在线查询、AI/embedding场景。         |
| TEXT / CSV | 数据导入导出      | 仅基础导入导出，不支持分区、ANALYZE等高级功能，不建议作为存储介质。    |
   
Apache Iceberg是一种面向海量分析数据集的开放表格式。它通过高性能表格式为计算引擎添加表功能，使用方式与SQL表完全一致。
Iceberg专为超大规模表而构建，已在实际业务环境中得到应用，单个表可容纳数十PB数据，且即使如此庞大的表也无需分布式SQL引擎即可读取。
关于SQL on Iceberg的更多信息，请参见[Iceberg功能介绍](https://support.huaweicloud.com/devg-aidatalake/aidatalake_05_0002.html)。
Lance是一种基于Apache Arrow生态构建的高性能列式数据存储格式，由LanceDB团队主导开发，旨在实现接近Arrow内存格式的数据访问性能，同时支持事务管理、索引和增量更新。
Lance不仅适用于离线批处理分析，还重点支持在线查询、向量检索和人工智能应用，是一种面向AI与数据湖融合场景的新型存储格式。
关于SQL on Lance的更多信息，请参见[Lance功能介绍](https://support.huaweicloud.com/devg-aidatalake/aidatalake_05_0034.html)。
#### 步骤二：设计数据库对象
创建对象前，建议先完成数据库对象的设计规划：
- **了解Aura数据库对象**：熟悉Aura支持的数据库对象类型及相互关系。
- **规划Schema**：Schema用于从逻辑上组织数据库中的对象和数据，允许多个用户使用同一数据库而不相互干扰。
- **设计表结构**：确定表的列、类型、约束。
- **设计分区策略**：针对大表规划分区方式，提升查询性能。
详细内容，请参考[设计数据库对象](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0068.html)。
#### 步骤三：配置权限
在创建和访问对象前，需完成用户、角色与对象权限的配置，确保用户具有相应操作权限：
- 了解Aura权限模型。
- 创建和管理用户。
- 对象授权、取消授权、角色管理
权限管理通常由管理员执行；开发人员可通过pg_show_\* 系列函数查询权限状态。
详细内容，请参考[用户及权限管理](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0138.html)。
#### 步骤四：创建数据库对象
完成设计与授权后，通过DDL语句创建所需的数据库对象：
- 创建Schema ：[CREATE SCHEMA](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0217.html)。
- 创建表，包括指定表格式、分区、表属性：[CREATE TABLE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0219.html)。
- 创建视图、函数、模型、索引：[CREATE VIEW](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0220.html)、[CREATE FUNCTION](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0221.html)、[CREATE MODEL](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0222.html)、[CREATE INDEX](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0231.html)。
- 创建角色：[CREATE ROLE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0235.html)。
详细内容，请参考[DDL语法](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0213.html)。
#### 步骤五：操作数据
通过DML语句对表中的数据进行增、删、改、合并与优化：
- 插入数据：[INSERT](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0243.html)。
- 更新数据：[UPDATE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0248.html)。
- 删除数据：[DELETE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0245.html)。
- 合并数据（Iceberg表）：[MERGE INTO](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0246.html)。
- 小文件优化（Iceberg表）：[OPTIMIZE](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0247.html)。
详细内容，请参考[DML语法](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0240.html)。
#### 步骤六：查询数据
通过DQL语句查询数据：
- 单表查询：SELECT、WHERE筛选、ORDER BY排序、LIMIT限制、GROUP BY聚合。
- 多表连接查询：内连接（INNER/CROSS/NATURAL）、外连接（LEFT/RIGHT/FULL）。
- 复杂查询：WITH表达式。
详细内容，请参考[DQL语法](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0253.html)。
#### 步骤七：使用函数与数据类型
开发中需要理解Aura的数据类型体系与可用的函数能力：
- 了解数据类型及与 LakeFormation 的映射关系：请参考[数据类型](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0149.html)。
- 类型之间的转换规则 ：请参考[类型转换](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0207.html)。
- 表达式编写：请参考[表达式](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0201.html)。
- 各类函数与操作符（字符/数字/时间日期/JSON/聚集/窗口/Iceberg表服务/大模型推理等：请参考[函数和操作符](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0159.html)。
- 命名时避开关键字：请参考[关键字](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0148.html)。
 
#### 步骤八：性能调优
当查询性能不满足预期时，参考性能调优章节分析执行计划、定位瓶颈，并通过 GUC 参数调整引擎行为：
- 调优流程、执行监控、执行计划分析、Plan Hint、调优案例：请参考[性能调优](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0037.html)。
- 各参数的取值与作用：请参考[GUC参数](https://support.huaweicloud.com/sqlref-aura-aidatalake/aidatalake_061_0256.html)。
 
#### 语法文本格式约定
为了方便对语法使用的理解，在文档中对语法文本按如下格式进行表述。
开发过程中，建议优先采用大小写不敏感的形式进行开发，推荐统一使用小写字母书写数据库对象名称（如表名、列名、函数名、字段名等），避免同一对象在不同位置出现大小写不一致的写法，以防因标识符大小写导致"对象不存在"等错误。
| 格式                             | 意义                                  |
|:---|:---|
| 大写                            | 语法关键字（语句中保持不变、必须照输的部分）采用大写表示。        |
| 小写                             | 参数（语句中必须由实际值进行替代的部分）采用小写表示。          |
| \[ \]                          | 表示用"\[ \]"括起来的部分是可选的。                 |
| ...                             | 表示前面的元素可重复出现。                       |
| \[ x \| y \| ... \]            | 表示从两个或多个选项中选取一个或者不选。                |
| { x \| y \| ... }             | 表示从两个或多个选项中选取一个。                    |
| \[x \| y \| ... \] \[ ... \]   | 表示可选多个参数或者不选，如果选择多个参数，则参数之间用空格分隔。     |
| \[ x \| y \| ... \] \[ ,... \] | 表示可选多个参数或者不选，如果选择多个参数，则参数之间用逗号分隔。   |
| { x \| y \| ... } \[ ... \]    | 表示可选多个参数，至少选一个，如果选择多个参数，则参数之间以空格分隔。   |
| { x \| y \| ... } \[ ,... \]    | 表示可选多个参数，至少选一个，如果选择多个参数，则参数之间用逗号分隔。 |
   
