什麼是流式SQL,它有什麼用?

2022-09-21 20:21:13 字數 3977 閱讀 4785

流式sql是指採用用於編寫資料庫查詢的相同的宣告式sql,而在快速變化的資料流上執行。

這很有用,因為。

當你能迅速採取行動時,資料往往更有價值

現有的從資料流中獲得實時洞察力的工具過於複雜。

sql的 "宣告 "性質在解決第二點方面發揮了重要作用,因為它允許使用者專注於他們想要什麼,而讓底層引擎擔心如何完成。

在現實世界中,流式sql被用來。

讓我們先具體說明一下我們說的流處理和sql是什麼意思。

流(事件流)

流指的是像kafka、kinesis或pulsar這樣的訊息中介,它們將資料作為事件或訊息的連續流來處理。

事件流處理一切,從交易到使用者在**或移動應用程式上的行動、物聯網感測器資料、伺服器的指標,甚至是傳統資料庫上的活動,都通過 change data capture.

sql在流的背景下,sql為使用者提供了一種宣告性語言,用於。

注意:create materialized view命令是流式sql的核心概念。它來自於 databases來的,在那裡它被用來提前計算檢視,以防資料發生變化。在流**中,資料一直在變化,所以查詢在維護成物化檢視時往往更有用。

其他常見的sql動詞如insert、update和delete在流式sql中也有作用,但在這篇文章中,我們將重點討論從流中讀取、連線/過濾/轉換這些流的核心概念,並使其輸出可查詢或 寫到乙個新的流。

一旦你嘗試在流上使用sql,一些關鍵的區別就會變得很明顯。

時間點查詢與連續查詢

在傳統資料庫上執行sql查詢,會從乙個時間點上返回一組靜態的結果。

以這個疑問為例:

select sum(amount) as total_amount from invoices;

當你執行它時,資料庫引擎會掃瞄在查詢時存在的所有的invoices,並返回其金額之和。

使用流式sql,你可以執行上面的確切查詢,並得到乙個時間點的答案。但是你查詢的是快速變化的資料流,一旦你得到了結果,它們可能就已經過時了。在許多情況下,乙個持續更新的查詢(物化檢視)在以下幾個方面更有用,我們將在下面描述。

要把上面的查詢變成乙個物化的檢視,你要寫。

create materialized view invoice_summary as

select sum(amount) as total_amount from invoices;

當你第一次建立時,sql引擎將處理它所能訪問的整個invoice事件歷史,直到現在,然後隨著新的發票事件的到來繼續更新。

傳統的資料庫有查詢響應時間的概念:你執行乙個查詢,在引擎計算結果的過程中會經過一些時間,然後你得到響應。

在流處理中,最初的響應時間只是在你第一次物化乙個檢視時的乙個因素。但是,如果我們的輸入事件突然激增,在流結果中一定會有某種時間上的懲罰。這種懲罰就是時間滯後:輸出比輸入落後多少時間?

就像傳統資料庫的響應時間一樣,大多數終端使用者不需要考慮流式系統的時滯問題,但知道它的存在有助於以避免問題的方式編寫和使用流式sql。

不同的行動為底層引擎創造工作

在讀取方面,傳統的資料庫引擎一直在閒置,直到它收到乙個查詢,然後它計畫和優化它,並開始工作提供結果。一旦它回覆了結果,它就會再次閒置,直到它收到另乙個查詢。傳送查詢是為引擎創造工作。

如果你回到上面的物化檢視,來自流的新資料為引擎創造了工作。在materialize中,這種方法是通過增量計算實現的:更新檢視所做的工作與進來的資料成比例,而不是與查詢的複雜性成比例。我們不需要對資料進行全面的重新掃瞄來更新結果。

這種模式的轉變使得流式sql最適合於反覆詢問同一問題的查詢(如儀錶盤、報告、自動化、大多數應用程式**),而不是臨時性的查詢。

為什麼流式sql是有用的?

1.資料最初出現時往往是最有價值的

這有兩個原因,乙個很明顯,乙個不太明顯。

更快的資料=更快的決策--**市場是這個想法發揮到極致的乙個明顯例子。

但它也適用於saas企業,像市場、旅遊、活動等需要對費率和庫存做出快速決策的垂直行業,以及零售和物流業,因為快速決策可以減少低效率,等等。

資料離它的源頭越近,被誤解的機會就越少--資料從建立的地方到使用的地方,每一步都會增加出錯的可能性,即終端使用者(人或機器)認為資料代表的東西並不存在。時間在其中起到了作用,它迫使人們圍繞操作順序和工作的一致性進行協調。在這種情況下,切換到流資料並不是因為它更快,而是因為你不再需要考慮時間問題。

2.sql是一種從流式資料中獲得洞察力的偉大手段

這裡是另乙個關於流式事件的物化檢視的例子。

create materialized view experiments as

select

experiment_views.name,

experiment_views.variant,

count(distinct(experiment_views.user_id)) as unique_users,

count(distinct(conversions.user_id)) as unique_conversions

from experiment_views

left join conversions on

conversions.user_id = experiment_views.user_id

and conversions.created_at > experiment_views.created_at

group by experiment_views.name, experiment_views.variant;

sql有乙個額外的好處,那就是它是一種成熟的語言,建立了30多年,周圍有乙個工具和教育的生態系統。這意味著更多的開發者可以使用流**資料,並輕鬆地將其整合到他們的堆疊的其他部分。

今天,任何已經在使用像kafka這樣的訊息**的人都可以開始使用流式sql,而不需要付出很大努力。在未來,隨著cdc軟體的成熟,這一標準將擴充套件到 "任何擁有資料庫的人"。"以下是一些使用流式sql的例子。

商業智慧型和分析

當決定 "什麼是賦予我們的內部團隊從資料中做出智慧型決策的最佳方式 "時,流式sql是乙個需要考慮的選項,它的權衡使它對某些情況比其他情況更好。

在許多情況下,用流式sql完成的主源資料的物化檢視是乙個更簡單的 data pipeline.除了實時資料的好處外,企業使用這種方法還可以迴避以下問題。

微服務流式sql被用來取代在微服務中做複雜資料協調和轉換的**。

像kafka這樣的事件流通常已經是微服務架構中的第一等公民。工程師們經常發現自己在構建和維護複雜的應用程式,從kafka中消費。例如:從事件日誌中讀取的應用程式,以產生對saas應用程式的api使用的洞察力和測量。

微服務中任何看起來像查詢的元件都可能被流式sql所取代。

實時應用

如果你的應用程式的價值取決於你實時交付更新和資料的能力,流式sql可能是建立乙個昂貴或複雜的多元件堆疊的替代方案。

新的能力

面向使用者的實時分析--以前,只有像linkedin和google這樣的技術巨頭才有規模和工程團隊來建立面向使用者的實時分析(如linkedin的 "誰瀏覽了你的個人資料 "頁面或google analytics的實時儀表板)。通過降低複雜性,流式sql向更多的公司開放了神奇的實時使用者分析功能。

業務自動化 - 一旦你有了實時儀錶盤的流式sql,乙個自然的進展就是開始在相同的資料上做出自動化的決定。(例如。如果你的電子商務**從某一特定**獲得的流量激增,就在主頁上增加乙個**活動)。

materialize提供了乙個流式sql實現,它在兩個重要方面是獨一無二的。

在materialize中,你可以用與postgres相容的sql編寫查詢。我們認為值得花費額外的精力來構建這個系統,因為只有在這種級別的sql相容中,你才能獲得與現有工具整合的好處,並消除使用者對高階流處理概念的負擔。

查詢引擎使用增量計算(differential dataflow)來更有效地維護物化檢視,因為新的資料進來了。

什麼是XSL,它有什麼用途

xsl 之於 xml 就像 css 之於 html。它是指可擴充套件樣式表語言 extensible stylesheet language 這是一種用於以可讀格式呈現 xml 資料的語言。xsl 實際上包含兩個部分 xslt 用於轉換 xml 文件的語言 xpath 用於在 xml 文件中導航的語...

面試突擊52 什麼是三正規化?它有什麼用?

第一正規化規定表中的每個列都應該是不可分割的最小單元。比如以下表中的 address 欄位就不是不可分割的最小單元,如下圖所示 其中 address 還可以拆分為國家和城市,如下圖所示 這樣改造之後,上面的表就滿足第一正規化了。第二正規化是在滿足第一正規化的基礎上,規定表中的非主鍵列不存在對主鍵的部...

什麼是mvc,mvc有什麼用?

mvc是一種設計模式,使資料和頁面分離,降低耦合性。模型 模型表示企業資料和業務規則 檢視 檢視是使用者看到並與之互動的介面 控制器 控制器接受使用者的輸入並呼叫模型和檢視去完成使用者的需求 總結mvc的處理過程,首先控制器接收使用者的請求,並決定應該呼叫哪個模型來進行處理,然後模型用業務邏輯來處理...