发布于: Jul 29, 2022
PartiQL,是一种兼容 SQL 的查询语言,可用于轻松高效地查询数据,无论数据存储的位置或格式如何
如今,收集和创建数据的速度已达到前所未有的水平。然而数据利用效率却不尽如人意,正如据哈佛商业评论所言,“…平均来看,组织中只有不到一半的结构化数据被积极用于决策…”
问题的根源在于,数据通常分布于关系数据库、非关系数据存储和数据湖的组合中。一些数据可能被高度结构化并存储在 SQL 数据库或数据仓库中。另一些数据可能存储在 NoSQL 引擎中,包括键值存储、图形数据库、分类账数据库或时间序列数据库中。数据还可能驻留在数据湖中,以可能缺乏架构的格式存储,或者可能涉及嵌套或多个值(例如 Parquet、JSON)。每种不同类型和风格的数据存储可能适合某个特定的使用按钮,但每种数据存储也都具有自己的查询语言。产生的结果是,查询语言与存储数据的格式紧密耦合。因此,如果您要将数据更改为另一种格式,或者要将使用的数据库引擎更改为访问/处理该数据(这在数据湖领域中并不罕见),或更改数据的位置,您可能还需要更改您的应用程序和查询。这极大的阻碍了有效使用数据湖所需的敏捷性和灵活性。
今天,我们很高兴地推出 PartiQL,它是一种兼容 SQL 的查询语言,可用于轻松高效地查询数据,无论数据存储的位置或格式如何。只要您的查询引擎支持 PartiQL,您就可以处理关系数据库(包括事务数据库和分析数据库)中的结构化数据、开源数据格式的半结构化和嵌套数据(如 Amazon S3 数据湖),甚至于 NoSQL 或文档数据库中允许对不同行使用不同属性的无架构数据。我们在 Apache2.0 许可证下对语言的 PartiQL 教程、规范和参考实现进行开源,这样每个人都可以参与、贡献和使用它来推动这种统一查询语言的广泛采用。
PartiQL 开源将使开发人员能够轻松解析和将 PartiQL 嵌入自己的应用程序中。实现支持用户将 PartiQL 查询解析为其应用程序可分析或处理的抽象语法树,并支持直接解释 PartiQL 查询。
PartiQL 可解决我们在 Amazon 中遇到的问题。它已被 Amazon S3 Select、Amazon Glacier Select、Amazon Redshift Spectrum、Amazon Quantum Ledger Database (Amazon QLDB) 和 Amazon 内部系统所使用。同时,Amazon EMR 还可将 PartiQL 查询下推到 S3 Select 中。未来几个月将推出更多的 Amazon Web Services 服务,以增加支持。在 Amazon 之外,Couchbase 还期望在 Couchbase Server 中支持 PartiQL。
我们期待数据处理引擎的创建者会深入研究 PartiQL,并与我们一起来解决影响各行业各个数据用户的问题。
为了响应 Amazon 自己查询和转换海量多样化数据(不仅仅是 SQL 表格数据,还包括嵌套和半结构化数据,可见于各种格式和存储引擎中)的需求,我们开发了 PartiQL。Amazon 的零售业务已经拥有大量的半结构化数据集,通常以 Ion 格式。 由 Chris Suver 领导的 Amazon 零售业务一直在追求一种类似 SQL 的查询语言。QLDB 等多个 Amazon Web Services 服务看到了架构可选、面向文档的数据模型所带来的益处,但同时也想利用现有的 SQL 知识和工具。最后,Redshift 等 Amazon Web Services 关系数据库服务及很多现有的 SQL 客户端需要扩展到访问数据湖的非关系数据,同时维持与 SQL 的严格的后向兼容性。同时,使用 UCSD 的 SQL++ 之类的查询语言的数据库研究社区显示,可以设计出非常接近 SQL 的干净、基础良好的查询语言,同时拥有处理嵌套和半结构化数据所需的能力。
SQL 语言规范的创造者 Don Chamberlin说:“随着 JSON 和其他嵌套和半结构化数据格式的重要性提高,这些数据格式对查询语言的需求越来越明显。为此目的调整 SQL 的方法具有的优势在于,它基于行业对 SQL 技能、工具和基础设施的投资。Yannis Papakonstantinou 博士的 SQL++ 提议及基于 PartiQL 等 SQL++ 的语言显示,查询半结构化数据所需的 SQL 扩展相当低。我希望这些小的语言扩展将有助于促进开发新一代应用程序,这些应用程序无论有无预定义架构,都将能够处理 JSON 和其他灵活格式的数据。”
因此,我们开始创建一种语言,它将提供严格的 SQL 兼容性、以最低扩展实现嵌套和半结构化处理、将嵌套数据视为视为一类需求、允许可选架构,并且独立于物理格式和数据存储。
结果便是 PartiQL,它提供一种简单且一致的方法来查询各种不同格式和服务的数据。这样一来,您可以在各个数据源间自由移动数据,无需更改您的查询。它与 SQL 反向兼容,为多值数据、嵌套数据和无架构数据提供扩展,从而与标准 SQL 的加入、过滤和聚合功能无缝结合在一起。