使用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功能介绍。
Lance是一种基于Apache Arrow生态构建的高性能列式数据存储格式,由LanceDB团队主导开发,旨在实现接近Arrow内存格式的数据访问性能,同时支持事务管理、索引和增量更新。
Lance不仅适用于离线批处理分析,还重点支持在线查询、向量检索和人工智能应用,是一种面向AI与数据湖融合场景的新型存储格式。
关于SQL on Lance的更多信息,请参见Lance功能介绍。
步骤二:设计数据库对象
创建对象前,建议先完成数据库对象的设计规划:
- 了解Aura数据库对象:熟悉Aura支持的数据库对象类型及相互关系。
- 规划Schema:Schema用于从逻辑上组织数据库中的对象和数据,允许多个用户使用同一数据库而不相互干扰。
- 设计表结构:确定表的列、类型、约束。
- 设计分区策略:针对大表规划分区方式,提升查询性能。
详细内容,请参考设计数据库对象。
步骤三:配置权限
在创建和访问对象前,需完成用户、角色与对象权限的配置,确保用户具有相应操作权限:
- 了解Aura权限模型。
- 创建和管理用户。
- 对象授权、取消授权、角色管理
权限管理通常由管理员执行;开发人员可通过pg_show_* 系列函数查询权限状态。
详细内容,请参考用户及权限管理。
步骤四:创建数据库对象
完成设计与授权后,通过DDL语句创建所需的数据库对象:
- 创建Schema :CREATE SCHEMA。
- 创建表,包括指定表格式、分区、表属性:CREATE TABLE。
- 创建视图、函数、模型、索引:CREATE VIEW、CREATE FUNCTION、CREATE MODEL、CREATE INDEX。
- 创建角色:CREATE ROLE。
详细内容,请参考DDL语法。
步骤五:操作数据
通过DML语句对表中的数据进行增、删、改、合并与优化:
- 插入数据:INSERT。
- 更新数据:UPDATE。
- 删除数据:DELETE。
- 合并数据(Iceberg表):MERGE INTO。
- 小文件优化(Iceberg表):OPTIMIZE。
详细内容,请参考DML语法。
步骤六:查询数据
通过DQL语句查询数据:
- 单表查询:SELECT、WHERE筛选、ORDER BY排序、LIMIT限制、GROUP BY聚合。
- 多表连接查询:内连接(INNER/CROSS/NATURAL)、外连接(LEFT/RIGHT/FULL)。
- 复杂查询:WITH表达式。
详细内容,请参考DQL语法。
步骤七:使用函数与数据类型
开发中需要理解Aura的数据类型体系与可用的函数能力:
步骤八:性能调优
当查询性能不满足预期时,参考性能调优章节分析执行计划、定位瓶颈,并通过 GUC 参数调整引擎行为:
语法文本格式约定
为了方便对语法使用的理解,在文档中对语法文本按如下格式进行表述。
开发过程中,建议优先采用大小写不敏感的形式进行开发,推荐统一使用小写字母书写数据库对象名称(如表名、列名、函数名、字段名等),避免同一对象在不同位置出现大小写不一致的写法,以防因标识符大小写导致"对象不存在"等错误。
| 格式 | 意义 |
|---|---|
| 大写 | 语法关键字(语句中保持不变、必须照输的部分)采用大写表示。 |
| 小写 | 参数(语句中必须由实际值进行替代的部分)采用小写表示。 |
| [ ] | 表示用“[ ]”括起来的部分是可选的。 |
| ... | 表示前面的元素可重复出现。 |
| [ x | y | ... ] | 表示从两个或多个选项中选取一个或者不选。 |
| { x | y | ... } | 表示从两个或多个选项中选取一个。 |
| [x | y | ... ] [ ... ] | 表示可选多个参数或者不选,如果选择多个参数,则参数之间用空格分隔。 |
| [ x | y | ... ] [ ,... ] | 表示可选多个参数或者不选,如果选择多个参数,则参数之间用逗号分隔。 |
| { x | y | ... } [ ... ] | 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间以空格分隔。 |
| { x | y | ... } [ ,... ] | 表示可选多个参数,至少选一个,如果选择多个参数,则参数之间用逗号分隔。 |