PartiQL 适合所有数据的一种查询语言 推出 (partial)

PartiQL 适合所有数据的一种查询语言 推出 (partial)

如今,收集和创建数据的速度已达到前所未有的水平。这些数据的目的大多在于推动业务成果,但据哈佛商业评论称,“…平均来看,组织中只有不到一半的结构化数据被积极用于决策…”

问题的根源在于,数据通常分布于关系数据库、非关系数据存储和数据湖的组合中。一些数据可能被高度结构化并存储在 SQL 数据库或数据仓库中。另一些数据可能存储在 NoSQL 引擎中,包括键值存储、图形数据库、分类账数据库或时间序列数据库中。数据还可能驻留在数据湖中,以可能缺乏架构的格式存储,或者可能涉及嵌套或多个值(例如 Parquet、JSON)。每种不同类型和风格的数据存储可能适合某个特定的使用按钮,但每种数据存储也都具有自己的查询语言。产生的结果是,查询语言与存储数据的格式紧密耦合。因此,如果您要将数据更改为另一种格式,或者要将使用的数据库引擎更改为访问/处理该数据(这在数据湖领域中并不罕见),或更改数据的位置,您可能还需要更改您的应用程序和查询。这极大的阻碍了有效使用数据湖所需的敏捷性和灵活性。

今天,我们很高兴地推出 PartiQL,它是一种兼容 SQL 的查询语言,可用于轻松高效地查询数据,无论数据存储的位置或格式如何。只要您的查询引擎支持 PartiQL,您就可以处理关系数据库(包括事务数据库和分析数据库)中的结构化数据、开源数据格式的半结构化和嵌套数据(如 Amazon S3 数据湖),甚至于 NoSQL 或文档数据库中允许对不同行使用不同属性的无架构数据。我们在 Apache2.0 许可证下对语言的 PartiQL 教程、规范和参考实现进行开源,这样每个人都可以参与、贡献和使用它来推动这种统一查询语言的广泛采用。

显示 PartiQL 与其他数据源匹配位置的图表。

PartiQL 开源将使开发人员能够轻松解析和将 PartiQL 嵌入自己的应用程序中。实现支持用户将 PartiQL 查询解析为其应用程序可分析或处理的抽象语法树,并支持直接解释 PartiQL 查询。

PartiQL 可解决我们在 Amazon 中遇到的问题。它已被 Amazon S3 Select、Amazon Glacier Select、Amazon Redshift Spectrum、Amazon Quantum Ledger>

我们期待数据处理引擎的创建者会深入研究 PartiQL,并与我们一起来解决影响各行业各个数据用户的问题。

我们为什么构建 PartiQL

为了响应 Amazon 自己查询和转换海量多样化数据(不仅仅是 SQL 表格数据,还包括嵌套和半结构化数据,可见于各种格式和存储引擎中)的需求,我们开发了 PartiQL。Amazon 的零售业务已经拥有大量的半结构化数据集,通常以 Ion 格式。 由 Chris Suver 领导的 Amazon 零售业务一直在追求一种类似 SQL 的查询语言。QLDB 等多个 AWS 服务看到了架构可选、面向文档的数据模型所带来的益处,但同时也想利用现有的 SQL 知识和工具。最后,Redshift 等 AWS 关系数据库服务及很多现有的 SQL 客户端需要扩展到访问数据湖的非关系数据,同时维持与 SQL 的严格的后向兼容性。同时,使用 UCSD 的 SQL++ 之类的查询语言的数据库研究社区显示,可以设计出非常接近 SQL 的干净、基础良好的查询语言,同时拥有处理嵌套和半结构化数据所需的能力。

因此,我们开始创建一种语言,它将提供严格的 SQL 兼容性、以最低扩展实现嵌套和半结构化处理、将嵌套数据视为视为一类需求、允许可选架构,并且独立于物理格式和数据存储。

结果便是 PartiQL,它提供一种简单且一致的方法来查询各种不同格式和服务的数据。这样一来,您可以在各个数据源间自由移动数据,无需更改您的查询。它与 SQL 反向兼容,为多值数据、嵌套数据和无架构数据提供扩展,从而与标准 SQL 的加入、过滤和聚合功能无缝结合在一起。

PartiQL 设计原则

以下设计原则体现了我们的设计目标,是 PartiQL 的基础:

正如它的设计原则带给您的期望结果一样,PartiQL 对于 SQL 用户来说既简单又熟悉。自 2018 年以来,它已被 Amazon Redshift Spectrum 的多位客户使用:

与传统 SQL 不同的是,PartiQL 查询语言同时还满足 NoSQL 和非关系数据库的需求。Amazon Quantum Ledger>

Couchbase Server 利用的是基于 JSON 的面向文档的数据模型,也期待采用 PartiQL:

PartiQL 参考引擎

PartiQL 参考实现架构。

此图表在较高的级别上显示了 PartiQL 参考实现。我们对 PartiQL 查询表达式的词句分析器、解析器和编译器进行了开源。我们提供了一个可嵌入或用作独立工具以运行查询的库。用户可以使用这个库来验证 PartiQL 查询,或嵌入 PartiQL 评估器以在其系统内处理数据。该库提供数据接口以绑定到应用程序可能具有的任何数据后端,并为 Ion 和 JSON 提供开箱即用的支持。

入门

PartiQL 开源实现提供交互式 shell(或 Read Evaluate Print Loop (REPL)),可使用户写入和评估 PartiQL 查询。

先决条件

PartiQL 需要在您的机器上安装 Java Runtime (JVM)。您可以从 OpenJDK、OpenJDK for Windows 或 Oracle 中获取最新版本的 Java Runtime。

遵照安装 JDK 软件并将 JAVA_HOME 设置到您的 Java Runtime 安装所在路径的说明。

下载 PartiQL REPL

每个 PartiQL 版本都随附一个存档,其中包含压缩文件格式的 PartiQL REPL。

您可能必须要点击资产才能查看 zip 和 tgz 存档。下载最新的 partiql-cli zip 存档到您的机器中。该文件会将 PartiQL 的发行版本附加到存档中,即 partiql-cli-0.1.0.zip。

在您的机器上扩展(解压缩)存档,以生成以下文件夹结构(其中 … 代表省略的文件/目录):

├── partiql-cli│├── partiql│└── partiql.bat├── README.md└── Tutorial├── tutorial.html└── tutorial.pdf
复制代码

根文件夹 partiql-cli 包含文件和三个子文件夹:

运行 PartiQL REPL

运行(双击)particl.bat。此操作应该会打开命令行提示符并且会启动 PartiQL REPL,屏幕将显示:

欢迎使用 PartiQL REPL!
复制代码

macOS (Mac) 和 Unix

欢迎使用 PartiQL REPL!
复制代码

测试 PartiQL REPL

写入简单的查询以验证您的 PartiQL REPL 是否在运行。在 PartiQL> 提示符类型:

PartiQL> SELECT * FROM [1,2,3]
复制代码

将按两次。输出应与以下内容类似:

PartiQL> SELECT * FROM [1,2,3]
复制代码

祝贺您! 您已成功安装并运行 PartiQL REPL。PartiQL REPL 正在等待更多的输入。

要退出 PartiQL REPL,请按:

从文件中加载数据

将所需的数据加载到 REPL 中的一个简单方法是在启动 REPL 时使用 -e 开关及提供包含您数据的文件的名称:

./bin/partiql-e Tutorial/code/q1.env
复制代码

然后,您可以使用特殊的 REPL 命令 !global_env 查看加载到 REPL 全球环境中的内容,即,

欢迎使用 PartiQL REPL!PartiQL> !global_env'employees': <<'name': 'Bob Smith','title': NULL'name': 'Susan Smith','title': 'Dev Mgr''name': 'Jane Smith','title': 'Software Eng 2'
复制代码

如何参与 PartiQL

PartiQL 是在 Apache2.0 许可下完全开源的语言。我们欢迎您在进一步扩展规范、构建技术以及提高其在用户社区中的应用和认知度方面做出的贡献。了解关于 PartiQL 的更多信息。

您可以通过为 good first issue 发送 Pull 请求来对项目作出贡献。在存在漏洞或缺少功能时提出问题。通读教程以了解 PartiQL 语法、它扩展 SQL 的方法,并逐步进行演练。想要了解 PartiQL 的每个细节? 请通读规范。

原文链接:

声明:本文来自用户分享和网络收集,仅供学习与参考,测试请备份。