精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文帶你了解不一樣的SQL,驚喜多多

數(shù)據(jù)庫(kù) SQL Server
SQL 在經(jīng)歷了四十而不惑之后就像“姐姐們”一樣成熟而有魅力,同時(shí)它又敢于在不斷變化的產(chǎn)業(yè)需求和各種非關(guān)系模型的沖擊之下實(shí)現(xiàn)自我突破。因此,本文就給大家介紹一下最近幾年 SQL 如何在各個(gè)領(lǐng)域乘風(fēng)破浪!

SQL 由 IBM 于上世紀(jì) 70 年代創(chuàng)建,如今已經(jīng)成為了使用最廣泛的數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言。不過(guò),相信很多人對(duì)于 SQL 的理解就是關(guān)系數(shù)據(jù)庫(kù),就是增刪改查;實(shí)際上,SQL 在經(jīng)歷了四十而不惑之后就像“姐姐們”一樣成熟而有魅力,同時(shí)它又敢于在不斷變化的產(chǎn)業(yè)需求和各種非關(guān)系模型的沖擊之下實(shí)現(xiàn)自我突破。因此,本文就給大家介紹一下最近幾年 SQL 如何在各個(gè)領(lǐng)域乘風(fēng)破浪!

 

一文帶你了解不一樣的SQL,驚喜多多

如果你認(rèn)為 SQL 就是簡(jiǎn)單的增刪改查(INSERT、SELECT、UPDATE、DELETE),那么你了解的僅僅是 1992 年的SQL。

如果你了解通用表表達(dá)式(CTE)和遞歸查詢(xún)、用戶(hù)定義類(lèi)型或者 OLAP 功能,那么你使用的是 1999 年的 SQL。

如果你接觸過(guò)窗口函數(shù)(分析函數(shù))、MERGE(UPSERT)語(yǔ)句或者 XML 數(shù)據(jù)類(lèi)型,應(yīng)該知道這些不過(guò)是 2003 年的 SQL。

2006 年的 SQL 已經(jīng)定義了 SQL 操作 XML 的規(guī)范,支持使用 XQuery 同時(shí)訪問(wèn) SQL 數(shù)據(jù)和 XML 文檔。2008 年又增加了 TRUNCATE TABLE 語(yǔ)句、INSTEAD OF 觸發(fā)器以及 FETCH 子句等功能。

2011 年 SQL 最主要的新功能之一就是增強(qiáng)了對(duì)時(shí)態(tài)數(shù)據(jù)庫(kù)(Temporal database)的支持,可以用于記錄那些隨著時(shí)間而變化的歷史數(shù)據(jù)值,應(yīng)用領(lǐng)域包括金融、保險(xiǎn)、預(yù)訂系統(tǒng)、醫(yī)療信息管理系統(tǒng)等。目前,MariaDB、Oracle、PostgreSQL、Microsoft SQL Server 在一定程度上實(shí)現(xiàn)了某些時(shí)態(tài)表功能,國(guó)內(nèi)的騰訊 TDSQL 是一個(gè)全時(shí)態(tài)數(shù)據(jù)庫(kù)系統(tǒng)。

時(shí)間來(lái)到了 2016 年,SQL 標(biāo)準(zhǔn)又增加了幾個(gè)重要的功能,首先就是對(duì) JSON 文檔的支持。

一.SQL 與文檔數(shù)據(jù)庫(kù)

文檔數(shù)據(jù)庫(kù)屬于 NoSQL 的一種,具有模式自由的存儲(chǔ)特性,通常采用 JSON 格式進(jìn)程數(shù)據(jù)的存儲(chǔ)。常用的文檔數(shù)據(jù)庫(kù)包括 MongoDB、CouchDB 等。

實(shí)際上,2016 年 SQL 標(biāo)準(zhǔn)就已經(jīng)增加了 JSON 功能的支持,包括:

  • JSON 對(duì)象的存儲(chǔ)與檢索;
  • 將 JSON 對(duì)象表示成 SQL 數(shù)據(jù);
  • 將 SQL 數(shù)據(jù)表示成 JSON 對(duì)象。

這些功能可以表示為以下示意圖:

 

一文帶你了解不一樣的SQL,驚喜多多

如今,主流的關(guān)系數(shù)據(jù)庫(kù)也都增加了原生 JSON 數(shù)據(jù)類(lèi)型和相關(guān)函數(shù)的支持,包括 Oracle、MySQL、SQL Server、PostgreSQL 等。

 

一文帶你了解不一樣的SQL,驚喜多多

我們以 MySQL 為例,演示一下如何使用 SQL 查詢(xún) JSON 數(shù)據(jù)。

  1. select emp_id,  
  2.        emp_info,  
  3.        emp_info->'$.emp_name' emp_name,  
  4.        emp_info->'$.sex' sex,  
  5.        emp_info->>'$.income[0].salary' salary  
  6. from employee_json  
  7. limit 3;
  8.  
  9. emp_id|emp_info|emp_name|sex|salary |  
  10. ------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------|---|-------| 
  11.  
  12.      1|{"sex""男""email""liubei@shuguo.com""income": [{"salary": 33000.0}, {"bonus": 10000}], "job_id": 1, "dept_id": 1, "manager"null"emp_name""劉備""hire_date""2000-01-01"}|"劉備"    |"男"|33000.0| 
  13.  
  14.      2|{"sex""男""email""guanyu@shuguo.com""income": [{"salary": 26000}, {"bonus": 10000}], "job_id": 2, "dept_id": 1, "manager": 1, "emp_name""關(guān)羽""hire_date""2000-01-01"}     |"關(guān)羽"    |"男"|26000  | 
  15.  
  16.      3|{"sex""男""email""zhangfei@shuguo.com""income": [{"salary": 24000}, {"bonus": 10000}], "job_id": 2, "dept_id": 1, "manager": 1, "emp_name""張飛""hire_date""2000-01-01"}   |"張飛"    |"男"|24000  | 

其中,emp_info 字段類(lèi)型為 JSON;-> 操作符返回的類(lèi)型是 JSON,->> 返回的類(lèi)型是字符串,使用 SQL/JSON 路徑表達(dá)式獲取數(shù)據(jù)中的元素值;$ 代表整個(gè)文檔;$.emp_name 表示獲取 JSON 對(duì)象的 emp_name 元素;$.income[0].salary 表示獲取 income 數(shù)組中的第一個(gè)對(duì)象的 salary 元素,數(shù)組的下標(biāo)從 0 開(kāi)始。

除此之外,我們也可以將 JSON 數(shù)據(jù)轉(zhuǎn)換為關(guān)系型數(shù)據(jù)。例如:

  1. select emp_id, jt.*  
  2. from employee_json,  
  3.      json_table(emp_info, '$'  
  4.          columns (emp_name  varchar(50) path '$.emp_name' 
  5.                   sex       varchar(10) path '$.sex' 
  6.                   dept_id   integer path '$.dept_id' 
  7.                   manager   integer path '$.manager' 
  8.                   hire_date date path '$.hire_date' 
  9.                   job_id    integer path '$.job_id' 
  10.                   salary    integer path '$.income[0].salary' 
  11.                   bonus     integer path '$.income[1].bonus' 
  12.                   email     varchar(100) path '$.email' 
  13.      ) jt  
  14. limit 3;  
  15. emp_id|emp_name  |sex|dept_id|manager|hire_date |job_id|salary|bonus|email              |  
  16. ------|----------|---|-------|-------|----------|------|------|-----|-------------------|  
  17.      1|劉備      |男  |      1|       |2000-01-01|     1| 33000|10000|liubei@shuguo.com  |  
  18.      2|關(guān)羽      |男  |      1|      1|2000-01-01|     2| 26000|10000|guanyu@shuguo.com  |  
  19.      3|張飛      |男  |      1|      1|2000-01-01|     2| 24000|10000|zhangfei@shuguo.com| 

其中,$ 表示將整個(gè) emp_info 作為數(shù)據(jù)行的來(lái)源;COLUMNS 定義了字段類(lèi)型及其數(shù)據(jù)的來(lái)源,PATH 同樣使用 SQL/JSON 路徑表達(dá)式。

反之,我們也可以通過(guò) SQL 函數(shù)將關(guān)系型數(shù)據(jù)轉(zhuǎn)換為 JSON 數(shù)據(jù)。例如:

  1. select json_object('emp_name', emp_name,  
  2.                    'sex', sex,  
  3.                    'income', json_array(json_object('salary', salary), json_object('bonus', bonus))  
  4.                   ) AS jo 
  5.  
  6. from employee 
  7.  limit 3;  
  8. jo                                                                                   | 
  9.  
  10. -------------------------------------------------------------------------------------| 
  11.  
  12. {"sex""男""income": [{"salary": 30000.00}, {"bonus": 10000.00}], "emp_name""劉備" 
  13. {"sex""男""income": [{"salary": 26000.00}, {"bonus": 10000.00}], "emp_name""關(guān)羽" 
  14. {"sex""男""income": [{"salary": 24000.00}, {"bonus": 10000.00}], "emp_name""張飛"}| 

其中, JSON_OBJECT 和 JSON_ARRAY 函數(shù)可以將表中的數(shù)據(jù)構(gòu)造成 JSON 對(duì)象和數(shù)組。

不僅如此,使用 SQL 語(yǔ)句也可以對(duì) JSON 節(jié)點(diǎn)數(shù)據(jù)進(jìn)行 DML 操作,不再介紹具體案例。關(guān)于 MySQL 文檔存儲(chǔ)的詳細(xì)介紹可以參考這篇文章。

總之,關(guān)系數(shù)據(jù)庫(kù)對(duì)于 JSON 數(shù)據(jù)類(lèi)型的支持可以方便我們將 SQL 的強(qiáng)大功能與 NoSQL 的靈活性相結(jié)合;當(dāng)我們需要為應(yīng)用增加文檔數(shù)據(jù)支持的時(shí)候,除了使用專(zhuān)門(mén)的 NoSQL 數(shù)據(jù)庫(kù)之外,也可以考慮直接在現(xiàn)有的數(shù)據(jù)庫(kù)中使用 JSON 數(shù)據(jù)類(lèi)型。

2016 年 SQL 標(biāo)準(zhǔn)增加的另一個(gè)重要的功能就是行模式識(shí)別(Row Pattern Recognition)。

二.SQL 與復(fù)雜事件處理

SQL 行模式識(shí)別使用 MATCH_RECOGNIZE 子句表示,通過(guò)指定一個(gè)模式(正則表達(dá)式)查找多行數(shù)據(jù)之間的規(guī)律,并且可以對(duì)這些匹配的數(shù)據(jù)進(jìn)行過(guò)濾、分組和聚合操作。行模式識(shí)別可以用于分析各種時(shí)間序列數(shù)據(jù),例如股票行情數(shù)據(jù)分析、金融欺詐檢測(cè)或者系統(tǒng)事件日志分析等。

 

一文帶你了解不一樣的SQL,驚喜多多

目前只有 Oracle 12c 實(shí)現(xiàn)了該功能,我們可以使用以下語(yǔ)句找出股票曲線中的所有 V 型曲線:

  1. -- Oracle 12c 實(shí)現(xiàn) 
  2. SELECT * 
  3.   FROM stock MATCH_RECOGNIZE ( 
  4.          PARTITION BY scode 
  5.          ORDER BY tradedate 
  6.          MEASURES STRT.tradedate AS start_date, 
  7.                   LAST(DOWN.tradedate) AS bottom_date, 
  8.                   LAST(UP.tradedate) AS end_date 
  9.          ONE ROW PER MATCH 
  10.          AFTER MATCH SKIP TO LAST UP 
  11.          PATTERN (STRT DOWN+ UP+) 
  12.          DEFINE 
  13.            DOWN AS DOWN.price < PREV(DOWN.price), 
  14.            UP AS UP.price > PREV(UP.price) 
  15.         ) MR 
  16.   ORDER BY MR.scode, MR.start_date; 

其中,MATCH_RECOGNIZE 子句比較復(fù)雜,它的執(zhí)行過(guò)程如下:

  • PARTITION BY scode 按照股票代碼進(jìn)行分區(qū),可以同時(shí)分析多只股票的數(shù)據(jù);如果省略,所有的數(shù)據(jù)作為一個(gè)整體進(jìn)行分析,這一點(diǎn)與窗口函數(shù)類(lèi)似;
  • ORDER BY tradedate 按照交易日期進(jìn)行排序,用于分析股票價(jià)格隨著時(shí)間變化的規(guī)律;
  • MEASURES 定義了三個(gè)輸出值,分別代表 V 型曲線的起始日期、最低點(diǎn)日期以及結(jié)束日期;其中的 STRT、DOWN 和 UP 都是 DEFINE 選項(xiàng)中定義的變量;LAST(DOWN.tradedate) 表示下降曲線中的最后一個(gè)日期,也就是最低點(diǎn)日期;LAST(UP.tradedate) 表示上升曲線中的最后一個(gè)日期,也就是結(jié)束日期;
  • ONE ROW PER MATCH 表示每次匹配只輸出一個(gè)匯總結(jié)果;每個(gè) V 型曲線輸出一條記錄;如果使用 ALL ROWS PER MATCH 選項(xiàng),每個(gè) V 型曲線都會(huì)輸出構(gòu)成曲線的所有節(jié)點(diǎn),下文給出了相應(yīng)的示例;
  • AFTER MATCH SKIP TO LAST UP 表示找到匹配的數(shù)據(jù)后,從當(dāng)前 V 型曲線的最后一個(gè)上升點(diǎn)(UP)重新開(kāi)始下一次查找;
  • PATTERN (STRT DOWN+ UP+) 定義了需要查找的模式,使用正則表達(dá)式語(yǔ)法表示。從起點(diǎn)(STRT)開(kāi)始,先下降一次或多次(DOWN+),再上升一次或多次(UP+),也就是 V 型曲線;
  • DEFINE 用于定義模式變量需要滿(mǎn)足的條件。STRT 變量沒(méi)有指定任何條件,意味著所有行都可以作為 V 型曲線的開(kāi)始;DOWN 變量要求它的價(jià)格比上一行的價(jià)格更小,PREV 函數(shù)表示上一行;UP 變量要求它的價(jià)格比上一行的價(jià)格更大。

該語(yǔ)句返回的結(jié)果如下:

  1. SCODE|START_DATE         |BOTTOM_DATE        |END_DATE           |  
  2. -----|-------------------|-------------------|-------------------|  
  3. S001 |2019-01-01 00:00:00|2019-01-05 00:00:00|2019-01-06 00:00:00|  
  4. S001 |2019-01-06 00:00:00|2019-01-07 00:00:00|2019-01-08 00:00:00|  
  5. S001 |2019-01-08 00:00:00|2019-01-12 00:00:00|2019-01-13 00:00:00|  
  6. S001 |2019-01-18 00:00:00|2019-01-20 00:00:00|2019-01-21 00:00:00|  
  7. S001 |2019-01-21 00:00:00|2019-01-22 00:00:00|2019-01-27 00:00:00|  
  8. S001 |2019-01-27 00:00:00|2019-01-28 00:00:00|2019-01-30 00:00:00| 

查詢(xún)返回了 6 條記錄,分別對(duì)應(yīng)了上圖中的 6 個(gè) V 型曲線。MATCH_RECOGNIZE 支持許多選項(xiàng),尤其是通過(guò) DEFINE 變量定義和 PATTERN 正則表達(dá)式模式可以實(shí)現(xiàn)各種復(fù)雜的趨勢(shì)分析。

SQL 行模式識(shí)別(MATCH_RECOGNIZE)能夠用于檢測(cè)數(shù)據(jù)流中的復(fù)雜模式,具有處理復(fù)雜事件(CEP)的強(qiáng)大功能。常見(jiàn)的應(yīng)用包括偵測(cè)異常的安全行為、發(fā)現(xiàn)金融交易行為模式、欺詐檢測(cè)和傳感器數(shù)據(jù)分析等。

2019 年 SQL 標(biāo)準(zhǔn)增加了第 15 部分:ISO/IEC 9075-15:2019 多維數(shù)組(SQL/MDA)。

三.SQL 與多維數(shù)組

多維數(shù)組(Multi-Dimensional Arrays)是各種科學(xué)和工程數(shù)據(jù)的核心基礎(chǔ)結(jié)構(gòu),包括一維傳感器數(shù)據(jù)、二維衛(wèi)星和顯微鏡掃描圖像、三維圖像時(shí)間序列和地球物理數(shù)據(jù)、以及四維氣候和海洋數(shù)據(jù)等。

大部分的編程語(yǔ)言,例如 C/C++、Java、Python、R 等,都提供了數(shù)組類(lèi)型和相關(guān)操作的支持。早在 1999 年,SQL 就已經(jīng)對(duì)數(shù)組提供了一些非?;镜闹С?最新的 SQL/MDA 允許存儲(chǔ)、訪問(wèn)和處理大規(guī)模的多維數(shù)組,例如 N 通道的衛(wèi)星圖像。這意味著 SQL 現(xiàn)在可以解碼圖像,并且通過(guò)像素坐標(biāo)直接訪問(wèn)和處理圖像區(qū)域。

 

一文帶你了解不一樣的SQL,驚喜多多

其中,MDA 表示在數(shù)據(jù)庫(kù)之外的數(shù)組數(shù)據(jù),支持格式包括 TIFF、netCDF、HDF5、JSON 等;SQL/MDA 表示數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)組數(shù)據(jù),支持的操作包括:

  • 數(shù)組數(shù)據(jù)的攝取和存儲(chǔ);
  • 更新存儲(chǔ)的數(shù)組數(shù)據(jù);
  • 導(dǎo)出數(shù)組;
  • 數(shù)組和關(guān)系數(shù)據(jù)的集成查詢(xún)。

以 PostgreSQL 為例,它允許將字段定義為多維數(shù)組類(lèi)型,數(shù)組的元素可以是任何內(nèi)置類(lèi)型、自定義類(lèi)型、枚舉類(lèi)型、復(fù)合類(lèi)型等。例如:

  1. CREATE TABLE sal_emp ( 
  2.  
  3.     name            text, 
  4.  
  5.     pay_by_quarter  integer[], 
  6.  
  7.     schedule        text[][] 
  8.  
  9. );  
  10.  
  11. INSERT INTO sal_emp 
  12.  
  13.     VALUES ('Bill'
  14.  
  15.     '{10000, 10000, 10000, 10000}'
  16.  
  17.     '{{"meeting", "lunch"}, {"training", "presentation"}}'); 
  18.  
  19. INSERT INTO sal_emp 
  20.  
  21.     VALUES ('Carol'
  22.  
  23.     ARRAY[20000, 25000, 25000, 25000], 
  24.  
  25.     ARRAY[['breakfast''consulting'], ['meeting''lunch']]); 

sal_emp 表中包含兩個(gè)數(shù)組字段,pay_by_quarter 是一個(gè)一維數(shù)組,schedule 是一個(gè)二維數(shù)組。

以下查詢(xún)返回了 Bill 一周中的前兩天計(jì)劃里的第一項(xiàng)內(nèi)容:

  1. select schedule[1:2][1:1] from sal_emp where name = 'bill' 
  2. name |  
  3. -----|  
  4. Carol| 

使用下標(biāo)可以訪問(wèn)數(shù)組的元素,PostgreSQL 中的數(shù)組元素從 1 開(kāi)始編號(hào)。以下語(yǔ)句用于修改數(shù)組中的數(shù)據(jù)切片:

  1. update sal_emp   
  2. set pay_by_quarter[1:2] = '{27000,27000}'  
  3. where name = 'carol'

PostgreSQL 為數(shù)組數(shù)據(jù)提供許多函數(shù)和運(yùn)算符,例如以下查詢(xún)使用 && 運(yùn)算符查找曾經(jīng)拿過(guò) 10000 報(bào)酬的員工:

  1. select name from sal_emp where pay_by_quarter && array[10000]; 
  2.  
  3. name
  4.  
  5. ----| 
  6.  
  7. Bill| 

unnest 函數(shù)可以將數(shù)組轉(zhuǎn)換為關(guān)系表,例如:

  1. select name, unnest(pay_by_quarter), unnest(schedule) from sal_emp; 
  2.  
  3. name |unnest|unnest      | 
  4.  
  5. -----|------|------------| 
  6.  
  7. Bill | 10000|meeting     | 
  8.  
  9. Bill | 10000|lunch       | 
  10.  
  11. Bill | 10000|training    | 
  12.  
  13. Bill | 10000|presentation| 
  14.  
  15. Carol| 20000|breakfast   | 
  16.  
  17. Carol| 25000|consulting  | 
  18.  
  19. Carol| 25000|meeting     | 
  20.  
  21. Carol| 25000|lunch       | 

PostgreSQL 還為數(shù)組提供了 GiST 和 GIN 類(lèi)型的索引,可以?xún)?yōu)化數(shù)組數(shù)據(jù)的查詢(xún)。

除此之外,基于 PostgreSQL 的 PostGIS Raster、Oracle GeoRaster 以及 rasdaman 數(shù)組數(shù)據(jù)庫(kù)則提供了更加完善的多維數(shù)組應(yīng)用場(chǎng)景支持。

四.SQL 與圖形數(shù)據(jù)庫(kù)

圖形數(shù)據(jù)庫(kù)(graph database)屬于 NoSQL 的一種,使用節(jié)點(diǎn)、邊和屬性來(lái)表示和存儲(chǔ)數(shù)據(jù),使用圖結(jié)構(gòu)進(jìn)行語(yǔ)義查詢(xún)。圖形數(shù)據(jù)庫(kù)非常適合社交網(wǎng)絡(luò)、人工智能、欺詐檢測(cè)、推薦系統(tǒng)等領(lǐng)域中的復(fù)雜關(guān)系處理。Neo4j 是目前最著名的圖形數(shù)據(jù)庫(kù)。

 

一文帶你了解不一樣的SQL,驚喜多多

2019 年 9 月 17 圖形查詢(xún)語(yǔ)言(GQL)成為了繼 SQL 之后另一種新的 ISO 標(biāo)準(zhǔn)數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言。與此同時(shí),SQL 標(biāo)準(zhǔn)將會(huì)出現(xiàn)一個(gè)新的第 16 部分(SQL/PGQ)(Property Graph Query),在 SQL 中直接提供一些 GQL 功能。

目前,MariaDB(OQGRAPH)、Oracle、Microsoft SQL Server 等關(guān)系型數(shù)據(jù)庫(kù)都提供了圖結(jié)構(gòu)存儲(chǔ)支持。上圖是 Oracle 中一個(gè)金融交易系統(tǒng)的圖形數(shù)據(jù)庫(kù)示例,其中 Account、Person 和 Company 是頂點(diǎn),ownerOf、worksFor 和 transaction 是邊;另外,name 和 number 是頂點(diǎn)的屬性,amount 是邊的屬性。它們可以使用以下數(shù)據(jù)表進(jìn)行存儲(chǔ):

 

一文帶你了解不一樣的SQL,驚喜多多

基于這些表可以創(chuàng)建以下屬性圖形:

  1. CREATE PROPERTY GRAPH financial_transactions 
  2.  
  3.   VERTEX TABLES ( 
  4.  
  5.     Accounts LABEL Account, 
  6.  
  7.     Persons LABEL Person PROPERTIES ( name ), 
  8.  
  9.     Companies LABEL Company PROPERTIES ( name ) 
  10.  
  11.   ) 
  12.  
  13.   EDGE TABLES ( 
  14.  
  15.     Transactions 
  16.  
  17.       SOURCE KEY ( from_account ) REFERENCES Accounts 
  18.  
  19.       DESTINATION KEY ( to_account ) REFERENCES Accounts 
  20.  
  21.       LABEL ( transaction ) PROPERTIES ( amount ), 
  22.  
  23.     PersonOwnerOfAccount 
  24.  
  25.       SOURCE Persons 
  26.  
  27.       DESTINATION Accounts 
  28.  
  29.       LABEL ownerOf NO PROPERTIES, 
  30.  
  31.     CompanyOwnerOfAccount 
  32.  
  33.       SOURCE Companies 
  34.  
  35.       DESTINATION Accounts 
  36.  
  37.       LABEL ownerOf NO PROPERTIES, 
  38.  
  39.     PersonWorksForCompany 
  40.  
  41.       SOURCE Persons 
  42.  
  43.       DESTINATION Companies 
  44.  
  45.       LABEL worksFor NO PROPERTIES 
  46.  
  47.   ); 

接下來(lái)我們就可以直接使用 SQL 語(yǔ)句查詢(xún)圖結(jié)構(gòu),例如以下語(yǔ)句查找所有和名叫 Nikita 的人有過(guò)交易的人員和信息:

  1. SELECT owner.name AS account_holder, SUM(t.amount) AS total_transacted_with_Nikita 
  2.    FROM MATCH (p:Person) -[:ownerOf]-> (account1:Account) 
  3.       , MATCH (account1) -[t:transaction]- (account2) /* match both incoming and outgoing transactions */ 
  4.       , MATCH (account2:Account) <-[:ownerOf]- (owner:Person|Company) 
  5.   WHERE p.name = 'Nikita' 
  6. ROUP BY owner 

其中,MATCH 子句用于遍歷圖形結(jié)構(gòu)并返回匹配的模式,語(yǔ)法和 Neo4j 的 Cypher 查詢(xún)語(yǔ)言中的 MATCH 子句非常類(lèi)似。以上查詢(xún)返回的結(jié)果如下:

  1. +----------------+------------------------------+ 
  2.  
  3. | account_holder | total_transacted_with_Nikita | 
  4.  
  5. +----------------+------------------------------| 
  6.  
  7. | Camille        | 1000.00                      | 
  8.  
  9. | Oracle         | 4501.00                      | 
  10.  
  11. +----------------+------------------------------+ 

隨著 SQL 標(biāo)準(zhǔn)第 16 部分(SQL/PGQ)即將出現(xiàn),我們可以在關(guān)系數(shù)據(jù)庫(kù)中直接存儲(chǔ)屬性圖結(jié)構(gòu)數(shù)據(jù),并且在 SQL 中進(jìn)行屬性圖模式匹配,例如最短路徑查找和最佳路徑查找;SQL/PGQ 的另一個(gè)優(yōu)勢(shì)就是可以支持分組(GROUP BY)、聚合(AVG、SUM、COUNT 等)、排序(ORDER BY)以及許多其他的 SQL 功能。

五.SQL 與流數(shù)據(jù)處理

流數(shù)據(jù)是一組順序、大量、快速、連續(xù)到達(dá)的數(shù)據(jù)序列,一般情況下可被視為一個(gè)隨時(shí)間延續(xù)而無(wú)限增長(zhǎng)的動(dòng)態(tài)數(shù)據(jù)集合。常見(jiàn)的流數(shù)據(jù)包括應(yīng)用程序日志文件、網(wǎng)購(gòu)數(shù)據(jù)、游戲玩家互動(dòng)數(shù)據(jù)、社交網(wǎng)站信息、金融交易實(shí)時(shí)數(shù)據(jù)或地理空間服務(wù),以及來(lái)自數(shù)據(jù)中心內(nèi)所連接設(shè)備或儀器的遙測(cè)數(shù)據(jù)等。

目前,常用的大數(shù)據(jù)流處理平臺(tái) Spark Streaming、Storm、Flink、ksqlDB 等都提供了 SQL 流數(shù)據(jù)處理功能;同時(shí),一個(gè)關(guān)于流數(shù)據(jù)處理的 SQL 標(biāo)準(zhǔn)部分正在準(zhǔn)備中。

其中,ksqlDB 是一個(gè)基于 Apache Kafka 的事件流數(shù)據(jù)庫(kù),提供了輕量級(jí)的 SQL 語(yǔ)句,大大降低了構(gòu)建流處理應(yīng)用程序所需的操作復(fù)雜性。

 

一文帶你了解不一樣的SQL,驚喜多多

客戶(hù)端應(yīng)用程序可以采用拉取查詢(xún)(pull query)和推送查詢(xún)(push query)兩種方式查看和訂閱數(shù)據(jù)流變化。

在 ksqlDB 中創(chuàng)建一個(gè)數(shù)據(jù)流并運(yùn)行連續(xù)查詢(xún)的簡(jiǎn)單示例如下:

  1. CREATE STREAM riderLocations (profileId VARCHAR, latitude DOUBLE, longitude DOUBLE
  2.   WITH (kafka_topic='locations', value_format='json', partitions=1); 
  3.  
  4. -- Mountain View lat, long: 37.4133, -122.1162 
  5. SELECT * FROM riderLocations 
  6.   WHERE GEO_DISTANCE(latitude, longitude, 37.4133, -122.1162) <= 5 EMIT CHANGES; 

首先,通過(guò)一個(gè) Kafka 主題創(chuàng)建一個(gè)數(shù)據(jù)流 riderLocations(騎手位置);消息內(nèi)容采用 json 格式存儲(chǔ),例如 {“profileId”: “c2309eec”, “latitude”: 37.7877, “longitude”: -122.4205}。

然后,針對(duì) riderLocations 數(shù)據(jù)流運(yùn)行一個(gè)連續(xù)查詢(xún),返回距離 Mountain View(加州山景城)5 英里之內(nèi)的騎手。該查詢(xún)會(huì)一直運(yùn)行,直到被終止;并且隨著事件被寫(xiě)入 riderLocations,它會(huì)將結(jié)果推送到客戶(hù)端。

此時(shí),如果我們打開(kāi)另一個(gè)會(huì)話連接到 ksqlDB,生成一些數(shù)據(jù)流:

  1. INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('c2309eec', 37.7877, -122.4205); 
  2. INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('18f4ea86', 37.3903, -122.0643); 
  3. INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('4ab5cbad', 37.3952, -122.0813); 
  4. INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('8b6eae59', 37.3944, -122.0813); 
  5. INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('4a7c7b41', 37.4049, -122.0822); 
  6. INSERT INTO riderLocations (profileId, latitude, longitude) VALUES ('4ddad000', 37.7857, -122.4011); 

隨著每次事件的生成,流查詢(xún)語(yǔ)句將會(huì)在第一個(gè)會(huì)話中實(shí)時(shí)輸出匹配的數(shù)據(jù)行。

六.總結(jié)

隨著互聯(lián)網(wǎng)和大數(shù)據(jù)等新技術(shù)的發(fā)展,SQL 早已不僅僅是當(dāng)年的關(guān)系數(shù)據(jù)庫(kù)查詢(xún)語(yǔ)言了;無(wú)論是面向?qū)ο筇匦?例如自定義類(lèi)型)、文檔數(shù)據(jù)(XML、JSON)的存儲(chǔ)和處理、時(shí)態(tài)數(shù)據(jù)的存儲(chǔ)和處理、復(fù)雜事件和流數(shù)據(jù)處理、數(shù)據(jù)科學(xué)中的多維數(shù)組以及圖形數(shù)據(jù)庫(kù)等各種 NoSQL 功能已經(jīng)或者即將成為 SQL 標(biāo)準(zhǔn)中的一部分,One SQL to Rule Them All!

責(zé)任編輯:未麗燕 來(lái)源: 今日頭條
相關(guān)推薦

2012-12-20 10:17:32

IT運(yùn)維

2012-03-07 17:24:10

戴爾咨詢(xún)

2016-05-09 18:40:26

VIP客戶(hù)緝拿

2015-10-19 12:33:01

華三/新IT

2017-05-25 15:02:46

聯(lián)宇益通SD-WAN

2023-11-20 08:18:49

Netty服務(wù)器

2023-11-06 08:16:19

APM系統(tǒng)運(yùn)維

2022-11-11 19:09:13

架構(gòu)

2009-12-01 16:42:27

Gentoo Linu

2009-02-04 15:43:45

敏捷開(kāi)發(fā)PHPFleaPHP

2018-05-09 15:42:24

新零售

2009-06-12 15:26:02

2021-05-14 10:28:54

線程協(xié)程數(shù)量

2011-02-28 10:38:13

Windows 8

2016-03-24 18:51:40

2023-10-27 08:15:45

2023-11-08 08:15:48

服務(wù)監(jiān)控Zipkin

2022-02-24 07:34:10

SSL協(xié)議加密

2013-01-11 18:10:56

軟件

2015-08-25 09:52:36

云計(jì)算云計(jì)算產(chǎn)業(yè)云計(jì)算政策
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩av在线免播放器| 亚洲欧美日韩国产成人精品影院| 久久免费福利视频| 国产肉体xxxx裸体784大胆| 在线男人天堂| 亚洲天堂av老司机| 国产亚洲欧美另类一区二区三区| 黄色免费av网站| 婷婷综合社区| 日韩电影免费观看在线观看| 男人添女人下面免费视频| 欧美野外wwwxxx| 久久久一区二区三区捆绑**| 亚洲a级在线观看| 亚洲 欧美 日韩 综合| 国产精品久久久久蜜臀 | 久久久久人妻精品一区三寸| 香蕉视频国产在线观看| 成人激情黄色小说| 成人激情免费在线| 秋霞精品一区二区三区| 欧美成人中文| 色yeye香蕉凹凸一区二区av| 亚洲一区二区在线免费| 日韩国产一二三区| 福利一区视频在线观看| 中文字幕免费高| 男女视频在线观看| 丁香一区二区三区| 91精品免费久久久久久久久| 欧美一区二区三区不卡视频| 欧美日韩中文| 日韩中文在线观看| 女人又爽又黄免费女仆| jazzjazz国产精品久久| 69久久夜色精品国产69蝌蚪网| 妞干网在线视频观看| www在线免费观看视频| 中文字幕巨乱亚洲| 日韩av网站在线| www.桃色.com| 九九久久国产| 欧美午夜一区二区| 色诱视频在线观看| av电影一区| 精品国产乱码久久久久久婷婷| 国内少妇毛片视频| 日本一本在线免费福利| 综合激情成人伊人| 国产不卡一区二区三区在线观看 | 欧美精选午夜久久久乱码6080| 国产第一页视频| 伊人成综合网站| 欧美日韩激情小视频| 国产日本在线播放| 玖玖综合伊人| 久久久亚洲欧洲日产国码αv| 国产精品视频免费一区| 国产 日韩 欧美 精品| 国产成人亚洲综合a∨婷婷| 91免费在线观看网站| 国产视频一二三四区| 国产一区二区三区免费观看| 18成人在线| 高清乱码毛片入口| 91丨九色丨蝌蚪富婆spa| 激情视频在线观看一区二区三区| 日本美女一级视频| 99精品视频一区| 美女被啪啪一区二区| 欧洲免费在线视频| 久久精品免视看| 亚洲图片小说在线| 中文在线手机av| 亚洲一二三四在线观看| 国产a级片网站| 天天综合网站| 欧美日韩国产123区| 伦伦影院午夜理论片| 91国内精品| 亚洲二区中文字幕| 国产91丝袜美女在线播放| 999成人网| 亚洲国产成人久久综合| 性色av蜜臀av色欲av| 国产成人久久| 精品国偷自产在线视频| 久久久久久久9999| 先锋影音久久| 成人黄色免费片| 人成网站在线观看| 国产视频在线观看一区二区三区| 日本福利视频导航| wwwww亚洲| 欧美在线不卡视频| 国产精品偷伦视频免费观看了| 红杏成人性视频免费看| 在线观看久久av| 免费毛片在线播放免费| 亚洲一区二区网站| 91中文在线视频| 日韩一二三四| 亚洲激情一二三区| 激情五月开心婷婷| 欧州一区二区三区| 伊人久久五月天| 久久99久久久| 三级一区在线视频先锋| 18成人在线| 91在线网址| 精品色蜜蜜精品视频在线观看| 久久这里只精品| 青青草原在线亚洲| 萌白酱国产一区二区| 男人天堂2024| 成人动漫一区二区| 992tv成人免费观看| 波多野结衣亚洲| 欧美成人官网二区| 免费观看特级毛片| 久久午夜精品一区二区| 91文字幕巨乱亚洲香蕉| aaa在线观看| 欧美性猛交xxxx免费看漫画| 国产黄色一区二区三区| 91亚洲国产| 国产成人中文字幕| 无码精品视频一区二区三区| 亚洲精品水蜜桃| 三上悠亚av一区二区三区| 欧美电影在线观看免费| 色综合天天狠天天透天天伊人| 中文字幕视频免费观看| 久久久久久久电影| 浮妇高潮喷白浆视频| 在线视频亚洲欧美中文| 麻豆乱码国产一区二区三区| 中文字幕乱码一区二区| 久久中文字幕电影| www.爱色av.com| 风间由美性色一区二区三区四区| 欧美成人免费在线视频| 国产又大又长又粗| 中文字幕中文字幕一区二区| 国产免费又粗又猛又爽| 国产影视精品一区二区三区| 日本成人黄色片| 青草久久伊人| 色久优优欧美色久优优| 欧美激情aaa| 久久福利影视| 日本公妇乱淫免费视频一区三区| 国产精品高颜值在线观看| 欧美精品一区二区三区蜜桃| 欧美黄色一级网站| 成人丝袜18视频在线观看| 久久福利一区二区| 国产精品香蕉| 性色av一区二区三区免费 | 成人视屏在线观看| 亚洲视频专区在线| 免费在线不卡av| 中文字幕一区二区三区精华液 | 亚洲免费av网| 看亚洲a级一级毛片| 欧美精品免费在线观看| 欧美 日韩 中文字幕| 精品国产31久久久久久| 欧美老熟妇乱大交xxxxx| 三级影片在线观看欧美日韩一区二区 | 欧美日韩 一区二区三区| 欧美—级在线免费片| 91福利免费观看| 超碰成人免费| 97av在线影院| www.亚洲资源| 在线成人午夜影院| 久久精品国产av一区二区三区| 99视频一区二区三区| 99精品视频播放| 97偷自拍亚洲综合二区| 97超碰资源| 都市激情综合| 久久精品亚洲一区| 日韩一卡二卡在线| 欧美午夜电影网| 久久久精品一区二区涩爱| 99久久99久久精品免费看蜜桃 | 成人爱爱网址| 日韩一区二区欧美| 亚洲精品一区二区三区区别| 日韩欧美在线网址| 日韩国产第一页| 91丝袜呻吟高潮美腿白嫩在线观看| 日韩欧美黄色大片| 欧美日韩亚洲一区| 日本中文不卡| youjizz欧美| 国产精品视频一区二区高潮| 蜜臀av在线| 这里只有精品视频在线| 亚洲第一黄色片| 欧美最猛黑人xxxxx猛交| 免费日韩在线视频| 久久久久国产免费免费| 亚洲av无一区二区三区久久| 欧美成人激情| 精品免费二区三区三区高中清不卡| 国产精品字幕| 97视频在线观看视频免费视频| 日本三级视频在线观看| 亚洲精品久久7777777| 国产强被迫伦姧在线观看无码| 欧美日韩国产精品| 久久久久99精品成人片毛片| 国产精品久久久久久久久晋中| 女同毛片一区二区三区| 国产精品一二一区| 黄色永久免费网站| 亚洲欧美日韩视频二区| 我的公把我弄高潮了视频| 亚洲精品一二三区区别| 日本成人黄色| 九九免费精品视频在线观看| 国产大片精品免费永久看nba| 欧美精品videossex少妇| www.99久久热国产日韩欧美.com| 你懂的视频在线播放| 亚洲第一男人天堂| a在线观看视频| 制服丝袜亚洲网站| 亚洲资源在线播放| 欧美日韩中文精品| 免费的毛片视频| 欧美性猛交xxxx乱大交| 一级片中文字幕| 亚洲福利一二三区| 久久久久久久国产精品毛片| 亚洲日本电影在线| 日韩在线中文字幕视频| 亚洲欧洲99久久| 国产三级精品三级观看| 国产日韩欧美综合一区| 中文字幕免费高清| 国产亚洲女人久久久久毛片| 国产手机在线观看| 久久久天堂av| 国产成人免费观看网站| 欧美激情在线一区二区| 日韩免费成人av| 欧美精彩视频一区二区三区| av永久免费观看| 国产精品网站在线| 91 在线视频| 亚洲欧美偷拍另类a∨色屁股| 国产一区二区精彩视频| 国产精品国产成人国产三级 | 欧洲亚洲免费在线| 樱花草涩涩www在线播放| 97av视频在线| 日韩av中字| 国产精品久久久久久久天堂| 国产成人精品一区二区三区视频| 国产精品永久在线| 国产亚洲亚洲国产一二区| 懂色一区二区三区av片| 久久九九热re6这里有精品| 欧美国产一区二区在线| 成人在线免费视频观看| 久久久成人精品一区二区三区| 欧美午夜精品| www.com毛片| 蜜臀91精品一区二区三区| 亚洲图色中文字幕| 成人美女视频在线观看18| 在线观看国产三级| 中文字幕 久热精品 视频在线| 午夜激情福利电影| 亚洲一区二区三区视频在线播放| 影音先锋亚洲天堂| 精品视频在线免费| 精品国产伦一区二区三| 日韩精品久久久久久福利| 国产福利小视频在线观看| 久久久精品一区二区| www在线观看黄色| 国产精品久久久久91| 精品成人18| 欧美人xxxxx| 亚洲成人国产| 国产91对白刺激露脸在线观看| 日本欧美一区二区三区| 亚洲精品第二页| 亚洲国产精品二十页| 国产一级在线免费观看| 欧美性大战久久| 高清毛片aaaaaaaaa片| 中文字幕亚洲字幕| av中文资源在线资源免费观看| 国产成人免费av电影| 日本亚洲视频| 亚洲欧美国产精品桃花| 亚洲国产精品第一区二区三区| 一区二区三区入口| 99精品国产热久久91蜜凸| 亚洲区一区二区三| 欧美日韩免费网站| www香蕉视频| 丝袜亚洲另类欧美重口| 亚洲优女在线| 97人人做人人人难人人做| 郴州新闻综合频道在线直播| 免费看毛片的网址| 国产在线乱码一区二区三区| 自拍偷拍视频亚洲| 亚洲第一精品在线| 99久久免费国产精精品| 国产亚洲精品91在线| 国产资源在线看| 久久久久久久亚洲精品| 国产精品2区| 亚洲狠狠婷婷综合久久久| 免费视频一区| bl动漫在线观看| 一区2区3区在线看| 国产精品亚洲欧美在线播放| 中文在线不卡视频| 亚洲一二三四| 精品视频一区二区| 激情综合中文娱乐网| 人妻少妇偷人精品久久久任期| 亚洲国产精品精华液2区45| 一级久久久久久| 亚洲精品自拍视频| 国产盗摄——sm在线视频| av一区二区在线看| 国产精品a久久久久| 亚欧美一区二区三区| 亚洲视频一区二区在线观看| 亚洲资源在线播放| 精品国产一区二区三区久久久狼 | 亚洲aa中文字幕| 五月天综合网站| 三级性生活视频| 日韩毛片一二三区| 国产女人18毛片水真多| 另类图片亚洲另类| 深夜福利一区| 人人妻人人澡人人爽欧美一区| 国产激情一区二区三区四区 | 精品国产91久久久| 日本福利片在线| 国产成人综合精品在线| 成人系列视频| 久久久精品高清| 亚洲男人的天堂网| 亚洲免费黄色片| 97婷婷涩涩精品一区| 亚州精品视频| 99免费视频观看| 国产精品久久三区| 国产三级三级在线观看| 欧美激情在线视频二区| 牛牛影视久久网| 亚洲 中文字幕 日韩 无码| 中文成人av在线| 国产日本精品视频| 久久久久久久久久久免费 | 天堂一区二区三区| 韩国女主播成人在线观看| 亚洲国产美女视频| 亚洲国产一区自拍| 欧美日韩精品免费观看视欧美高清免费大片 | 黄色高清无遮挡| 国产精品久久久久久亚洲毛片| 国产普通话bbwbbwbbw| 久久青草精品视频免费观看| 日韩美女精品| 国产福利在线免费| 亚洲一区二区三区四区在线| 天堂中文在线8| 国产欧美日韩亚洲精品| 亚洲第一区色| 51妺嘿嘿午夜福利| 91精品久久久久久久久99蜜臂| wwwww亚洲| 婷婷四房综合激情五月| 国产成人免费视频一区| 日日夜夜操视频| 欧美大成色www永久网站婷| 任你躁在线精品免费| 中文字幕22页| 狠狠操狠狠色综合网| 巨大荫蒂视频欧美大片| 国产一区二区中文字幕免费看| 免费av成人在线| 国产成人精品亚洲男人的天堂| 在线精品高清中文字幕| 超碰地址久久| 精品综合久久久久|