SQL思維 VS 編程思維(重製版)

昨天看了一篇文章,裏面有段話講的比較務實:

開發效率,從平臺發展的各階段實踐中,我們發現,對於一個統計任務/算法任務/風控任務,如果採用傳統的編程思維方式去實現,那麼只能通過堆開發人員,去做大量的開發、迭代和維護工作,一個任務可能會花一天甚至幾天的時間才能完成,對於一天幾十甚至幾百個任務需求來說,一個SQL僅僅只需要幾分鐘的開發時間(以我廠爲例,每日2.5萬+個例行任務和臨時任務)。我們做到了全平臺SQL化,用SQL思維取代編程思維,降低平臺使用門檻,大大解放上層業務開發團隊。

林慶敏,公衆號:趣店技術團隊趣店大數據平臺架構

你可能會好奇,什麼是傳統編程思維,什麼是SQL思維?他們的區別在哪?

要想了解他們的差異和區別,不妨來做到測試題:

現在有十萬個主鍵ID,對應某個記錄表的主鍵。現在是寫代碼要求把十萬個ID對應的記錄拿到。

我下面給出兩個方式。

第一個是,用SQL裏的In查詢,但是因爲受限於SQL自身的長度,我們不可能把十萬個ID都放到一條SQL裏,所以我們將ID集合切分,然後併發去訪問得到結果。

select * from table1 where id in (....ids...)

第二個方式是,將ID保存成一個表A,然後將A和記錄表進行Join關聯。

如果是第一種做法,那麼這就是我說的"編程思維",而第二種則是“SQL思維”。

我之前將"編程思維","SQL思維"發了個朋友圈,問大家他們之間有啥區別,答案五花八門。不過就我的認知而言,如果從表面看,其實區別很明顯:

1. SQL 思維其實就是Join思維。如果面對數據,你的第一反應是join,pivot,那麼你就是典型的SQL思維。

2. 編程思維其實就是 for/if/else 思維。如果你面對數據,第一反應是for/if/else,那麼就是典型的編程思維。

如果深入點分析,SQL本質上是面向集合中特定的類型,將一切操作都轉化爲表操作,而且這種操作是通過申明來表達的。雖然編程語言中,操作的最多的其實也是集合類,但是編程語言集合種類繁多,並且作爲通用語言,自身也並不會如何操作集合給出一個“規範的”思維,用戶首先想到的是利用for循環/if/else對集合做處理。

以編程思維爲主的人接觸SQL會覺得各種彆扭,還是覺得自己for循環(包含if/else)的模式更可控,更自由。但是,一個相對來說複雜一點的SQL完成的任務,如果讓大家用for循環模式來完成(其實就是用一些基礎的集合類),大家可能會花一天甚至幾天的時間才能完成,並且性能可能會比較差,而SQL可能只要幾分鐘。

SQL的流行取決於數據自然就是按表組織的,無論有無數據庫(SQL),他都會是這種形態。那麼SQL又天然是面向表操作,自然會有很強的能量。

Excel -> SQL -> Python, Excel符合托拉拽的操控數據,所以是最廣泛的操作數據的工具,其次就是SQL了,Python雖然流行,但他是一個通用的語言,複雜度擺在那。

雖然一旦你有了SQL思維,你可以非常高效的用SQL去玩轉數據,但是任何一個語言都有其侷限,譬如SQL很難去做機器學習,即使擴展語法後,你也只能做系統提供的一些算法支持,無法充分利用現有的Python生態。

MLSQL很好的解決了這個問題,他在增強了SQL的表達能力(腳本化能力)的基礎上,還完全支持了Python生態體系,非常好的融合大數據和算法。

下面是一段小的MLSQL腳本:

全部SQL化是MLSQL的主要特色,雖然也允許你使用Python編程,但是是作爲內置在SQL中的腳本語言存在的,但這也讓MLSQL的能力得到很大的擴展,基本可以做任何想做的事情。

如果大家想對MLSQL做進一步瞭解,可以點擊原文鏈接直達MLSQL知乎專欄,或者

掃碼添加小可愛微信號。添加成功後,發送  mlsql  這5個英文字母進羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章