AWS开源可跨关系型与NoSQL数据库的查询语言PartiQL

AWS推出了与SQL兼容的查询语言PartiQL,只要数据库查询引擎提供PartiQL支持,用户就能以PartiQL单一查询关系型数据库的结构化数据,以及开放数据格式中的嵌套数据或是半结构化数据,甚至还能用来查询NoSQL或是文件数据库中无固定结构(Schema-less)的数据。除了AWS自家的数据库服务,NoSQL数据库Couchbase Server也承诺将会支持PartiQL。

 

企业数据分散在关系型数据库、非关系型数据库以及数据湖中。高度结构化的数据,存储在SQL数据库或是数据存储;无固定结构的数据则由键值存储、图形数据库(Graph Database)、分类帐数据库或是时间串行数据库等NoSQL数据库处理;而在数据湖泊中的数据,可能也有部分缺乏结构,或是可能为嵌套或是多值结构。不同的数据类型适用于不同的使用案例,而每种类型的数据,可能都有自己的查询语言。

不同的数据存储对应不同的查询语言,当企业更换数据格式或是数据库引擎时,可能还需要跟着改变应用程序和查询语法,AWS提到,这对于数据的应用,特别是使用数据湖泊的灵活性与效率,有着很大的阻碍。为了统一不同类型数据库访问方法,AWS发布了查询语言PartiQL,这是个与SQL兼容的查询语言,可以用来查询以各种格式存储在各地的数据。

 

用户可以使用PartiQL来查询关系型数据库,像是在Redshift实例交易或是数据分析等应用,或对于Amazon S3数据湖泊的开放数据格式,同样能使用PartiQL对嵌套数据与半结构化数据例如Amazon Ion格式进行查询,另外,PartiQL也可用于文件数据库等NoSQL数据库,查询无固定结构的数据。

AWS表示,PartiQL的出现,是为了满足自家查询和转换大量数据的需求,其提供严格的SQL兼容性,可与标准SQL混合使用,执行连接(Join)、过滤(Filtering)与聚合(Aggregation)操作,并以最小扩展支持嵌套和半结构化数据,让开发者以简单且一致的方法,不需要更改查询语言,就能查询各种格式和服务的数据。

PartiQL具格式独立性与存储独立性,PartiQL语法和语义不依赖任何数据格式,无论用户是要查询JSON、Parquet、ORC、CSV还是Ion等格式,查询语句的写法都相同,PartiQL的查询在综合逻辑类型系统上运行,才对应到不同底层的格式。而PartiQL也不相依于特定数据存储,因此适用于不同的底层数据存储。

虽然过去针对跨不同类型数据库查询的问题,已有不少解决方案,AWS指出,像是Postgres JSON同样也兼容于SQL,但是却无法良好地处理JSON嵌套数据;而半结构化查询语言,虽然能良好处理嵌套数据,但却无法与SQL语言兼容。AWS提到,PartiQL是第一个能够完全解决这些问题的查询语言。

目前AWS已在自家多项服务支持PartiQL,包括Amazon S3 Select、Amazon Glacier Select、Amazon Redshift Spectrum、Amazon QLDB,接下来几个月将会有更多的AWS服务支持PartiQL,Couchbase也公布将加入支持PartiQL的行列。现在PartiQL以Apache2.0授权许可开源,公开教学、规范以及参考实例,所有社群都能使用并参与贡献。