一文带你了解不一样的SQL,惊喜多多( 四 )


SQL 行模式识别(MATCH_RECOGNIZE)能够用于检测数据流中的复杂模式,具有处理复杂事件(CEP)的强大功能 。常见的应用包括侦测异常的安全行为、发现金融交易行为模式、欺诈检测和传感器数据分析等 。
2019 年 SQL 标准增加了第 15 部分:ISO/IEC 9075-15:2019 多维数组(SQL/MDA) 。
三.SQL 与多维数组
多维数组(Multi-Dimensional Arrays)是各种科学和工程数据的核心基础结构,包括一维传感器数据、二维卫星和显微镜扫描图像、三维图像时间序列和地球物理数据、以及四维气候和海洋数据等 。
大部分的编程语言,例如 C/C++、JAVA、Python、R 等,都提供了数组类型和相关操作的支持 。早在 1999 年,SQL 就已经对数组提供了一些非常基本的支持;最新的 SQL/MDA 允许存储、访问和处理大规模的多维数组,例如 N 通道的卫星图像 。这意味着 SQL 现在可以解码图像,并且通过像素坐标直接访问和处理图像区域 。

一文带你了解不一样的SQL,惊喜多多

文章插图
 
其中,MDA 表示在数据库之外的数组数据,支持格式包括 TIFF、netCDF、HDF5、JSON 等;SQL/MDA 表示数据库中存储的数组数据,支持的操作包括:
  • 数组数据的摄取和存储;
  • 更新存储的数组数据;
  • 导出数组;
  • 数组和关系数据的集成查询 。
以 PostgreSQL 为例,它允许将字段定义为多维数组类型,数组的元素可以是任何内置类型、自定义类型、枚举类型、复合类型等 。例如:
CREATE TABLE sal_emp (    name            text,    pay_by_quarter  integer[],    schedule        text[][]);INSERT INTO sal_emp    VALUES ('Bill',    '{10000, 10000, 10000, 10000}',    '{{"meeting", "lunch"}, {"training", "presentation"}}');INSERT INTO sal_emp    VALUES ('Carol',    ARRAY[20000, 25000, 25000, 25000],    ARRAY[['breakfast', 'consulting'], ['meeting', 'lunch']]);sal_emp 表中包含两个数组字段,pay_by_quarter 是一个一维数组,schedule 是一个二维数组 。
以下查询返回了 Bill 一周中的前两天计划里的第一项内容:
select schedule[1:2][1:1] from sal_emp where name = 'bill';name |-----|Carol|使用下标可以访问数组的元素,PostgreSQL 中的数组元素从 1 开始编号 。以下语句用于修改数组中的数据切片:
update sal_emp set pay_by_quarter[1:2] = '{27000,27000}'where name = 'carol';PostgreSQL 为数组数据提供许多函数和运算符,例如以下查询使用 && 运算符查找曾经拿过 10000 报酬的员工:
select name from sal_emp where pay_by_quarter && array[10000];name|----|Bill|unnest 函数可以将数组转换为关系表,例如:
select name, unnest(pay_by_quarter), unnest(schedule) from sal_emp;name |unnest|unnest      |-----|------|------------|Bill | 10000|meeting     |Bill | 10000|lunch       |Bill | 10000|training    |Bill | 10000|presentation|Carol| 20000|breakfast   |Carol| 25000|consulting  |Carol| 25000|meeting     |Carol| 25000|lunch       |PostgreSQL 还为数组提供了 GiST 和 GIN 类型的索引,可以优化数组数据的查询 。
除此之外,基于 PostgreSQL 的 PostGIS Raster、Oracle GeoRaster 以及 rasdaman 数组数据库则提供了更加完善的多维数组应用场景支持 。
四.SQL 与图形数据库
图形数据库(graph database)属于 NoSQL 的一种,使用节点、边和属性来表示和存储数据,使用图结构进行语义查询 。图形数据库非常适合社交网络、人工智能、欺诈检测、推荐系统等领域中的复杂关系处理 。Neo4j 是目前最著名的图形数据库 。
一文带你了解不一样的SQL,惊喜多多

文章插图
 
2019 年 9 月 17 图形查询语言(GQL)成为了继 SQL 之后另一种新的 ISO 标准数据库查询语言 。与此同时,SQL 标准将会出现一个新的第 16 部分(SQL/PGQ)(Property Graph Query),在 SQL 中直接提供一些 GQL 功能 。


推荐阅读