天天看點

SmartNotebook:革新SQL的組織方式,加速資料科學程序

作者:新語資料故事彙

SQL(Structured Query Language)是一種關系型資料庫管理系統的标準語言,用于通路和操作關系型資料庫。盡管出現了一些新的資料管理和分析技術,但SQL仍然是企業群組織的核心資料管理和分析工具之一。在資料科學領域,SQL的重要性不言而喻,它易學易用且與腳本語言內建,廣泛應用于資料科學流程。SmartNotebook是一種創新的Notebook工具,它在SQL的組織方式上引入了新的概念。SmartNotebook内置主流資料庫/資料倉庫/大資料平台的支援,并提供動态化SQL、dfSQL和鍊式SQL等功能,幫助資料科學家更輕松地實作和簡化複雜的分析邏輯和步驟,并提高效率和性能。SmartNotebook的創新方式為資料科學家帶來了更好的工作體驗和更高效的資料分析能力。

SmartNotebook在SQL的優化與創新:

特點1:免安裝,支援主流資料庫和資料倉庫、大資料平台,獨立資料源配置與管理。

特點2:SQL 與Python無縫融合、動态SQL。

特點3:SQL方式操作DataFrame 資料集(dfSQL)。

特點4:全新SQL組織方式、CTE支援:鍊式SQL。

SQL是玩轉資料的主要語言

如果你想玩轉資料,那你一定要會SQL。

SQL是20世紀70年代初期由IBM的研究人員Donald D. Chamberlin和Raymond F. Boyce開發的一種關系型資料庫管理系統(RDBMS)的标準語言,用于通路和操作關系型資料庫。随着網際網路和大資料的快速發展,SQL在資料管理和分析領域的重要性越來越突出,現已成為大部分企業群組織的核心資料管理和分析工具之一。SQL的标準和版本不斷發展,如ANSI SQL、ISO SQL等,為SQL的發展提供了更多的規範和參考。各個資料庫管理系統也都提供了對SQL的實作和擴充,以滿足各種不同的需求和應用場景。目前,SQL被廣泛應用于金融、電商、醫療等各個領域,是資料管理和分析的關鍵技術之一。

Bill Gates曾經說過,“SQL是世界上最重要的資料管理語言之一”。這句話表明了SQL在資料管理和分析領域的重要性。SQL的标準化和普及程度高,使用友善,能夠處理大量的資料,支援複雜的查詢和資料分析操作,是以被廣泛應用于企業群組織的資料管理和分析工作中。同時,SQL的重要性也在不斷增加,因為随着資料規模和複雜度的不斷增加,需要更加高效和靈活的資料管理和分析工具來處理這些資料,而SQL正是滿足這一需求的重要工具之一。

在大資料時代還需要SQL 嗎?

雖然NoSQL、BigQuery、MapReduce和Spark等技術的出現給資料管理和分析帶來了許多創新和改進,但SQL仍然是大多數企業群組織的首選資料管理和分析工具。以下是SQL相對這些技術的一些優勢:

  1. 通用性和标準化:SQL是一個通用的标準化語言,被大多數關系型資料庫管理系統所支援。這意味着,無論使用哪種資料庫系統,使用者都可以使用相同的SQL語言進行資料管理和分析,這使得SQL成為一個通用的資料管理和分析工具。
  2. 簡單易學:相對于其他資料管理和分析技術,SQL語言非常簡單易學,需要的學習時間和成本相對較少。這使得SQL成為了大多數企業群組織的首選資料管理和分析工具之一。
  3. 高效性:SQL的高效性是由其查詢優化器和索引技術所支援的。這些技術可以大幅提高SQL查詢的性能和效率,使得SQL成為一個高效的資料管理和分析工具。
  4. 資料一緻性和可靠性:SQL被設計為一種嚴格的事務性語言,保證了資料的一緻性和可靠性。這使得SQL在大型企業群組織中被廣泛應用于資料管理和分析。

總之,盡管NoSQL、BigQuery、MapReduce和Spark等技術的出現為資料管理和分析帶來了許多創新和改進,但SQL作為一種通用的标準化語言,仍然是大多數企業群組織的首選資料管理和分析工具。

同樣,SQL在資料科學上也是十分重要。
SmartNotebook:革新SQL的組織方式,加速資料科學程式

為什麼SQL在資料科學中如此重要?

  1. 易學易用SQL因其易用的文法和使用英語單詞而備受贊譽。與一些複雜的程式設計語言不同,SQL幫助您輕松了解概念。
  2. 了解資料SQL幫助您探索和可視化資料集,有效地生成準确結果。SQL還有助于您更好地了解資料集并根據需要進行組織。
  3. SQL無處不在SQL已成為幾乎所有領先組織的首選。許多商業巨頭如Facebook,Google,Amazon,Netflix,Uber等都在使用SQL執行各種資料科學流程。
  4. SQL與腳本語言內建SQL與最常用的腳本語言(如R和Python)很容易內建。
  5. SQL是聲明式的SQL是非過程性語言。SQL比其他傳統的程式設計語言(如R和Python)更快,代碼更短。
  6. 管理大量資料SQL為處理大量資料提供了适當的資源,并可獲得有關其的見解。
  7. 不斷的發展空間盡管已經很老,但SQL仍然受到許多資料科學家的青睐。根據近期StackOverflow的開發者調查,SQL在資料科學中的應用比常用的程式設計語言R和Python更受歡迎。
SQL 不斷發展中
SmartNotebook:革新SQL的組織方式,加速資料科學程式

SQL作為一種重要的資料管理語言,不斷地發展和演變,以适應不同場景下的需求。無論是傳統的OLTP系統還是現在的分布式、雲化、NewSQL系統,SQL都扮演着重要的角色。SQL發展大緻分為以下幾個階段:

  1. OLTP(Online Transaction Processing)時代:SQL最初是用于支援事務處理的,比如銀行系統、庫存管理等場景,主要應用于OLTP系統。在這個時期,SQL的重點是快速、高效地執行基本的增删改查操作。
  2. OLAP(Online Analytical Processing)時代:随着資料量的不斷增長,OLAP系統應運而生。OLAP系統需要更複雜的資料分析能力,以支援資料挖掘、分析和報告等操作。是以,SQL也得以不斷發展,支援更多的資料分析和聚合操作,比如GROUP BY、HAVING、SUM、AVG等。
  3. 分布式時代:随着資料量和通路量的不斷增加,傳統的單機資料庫已經無法滿足業務需求,分布式資料庫應運而生。SQL也不再是單機應用,而是具備分布式計算能力,支援多節點叢集部署和水準擴充,比如Google的Spanner、Facebook的Cassandra、阿裡雲的AnalyticDB等。
  4. 雲化服務時代:随着雲計算的興起,越來越多的企業将資料庫部署到雲上,SQL也随之發展出了雲化服務。雲化服務提供了更加友善的部署和管理方式,同時也支援更加靈活的彈性伸縮能力,比如亞馬遜的RDS、Microsoft的Azure SQL Database、阿裡雲的RDS等。
  5. NewSQL時代:傳統的關系型資料庫雖然具備良好的資料一緻性和事務支援能力,但在高并發、大資料量等場景下,性能表現有限。為此,NewSQL應運而生,它既具備關系型資料庫的資料一緻性和事務支援能力,又支援分布式計算、大規模資料存儲和處理等能力。一些代表性的NewSQL資料庫包括VoltDB、CockroachDB、TiDB等。

NoteBook資料科學首選工具

Notebook是一個基于Web的互動式計算環境,可以支援多種程式設計語言,包括Python、R、Julia等,它可以幫助資料科學家在單個界面中組織代碼、文檔和圖形化輸出,以便更好地管理和共享工作。

Notebook有以下特點适合資料科學:

  1. 互動性:Notebook具有互動性,可以讓資料科學家在處理資料時實時看到結果,并快速疊代和調整代碼。
  2. 可視化:Notebook允許在一個單一的界面中內建可視化,資料科學家可以使用多種可視化工具和庫,如Matplotlib、Seaborn和Plotly等,更好地展示和了解資料。
  3. 文檔化:Notebook使得資料科學家可以将代碼、可視化和文檔組合在一個單一的文檔中,進而更容易地共享和協作。
  4. 代碼共享:Notebook可以作為一個容器,讓資料科學家共享和重複使用他們的代碼和分析,這可以提高工作效率和可重複性。

總之,Notebook為資料科學家提供了一個靈活的、互動的、可視化的、文檔化的、可共享的環境,可以幫助他們更好地組織和管理他們的資料分析工作,進而加快分析過程并提高分析結果的可靠性。

SmartNotebook:革新SQL的組織方式,加速資料科學程式

Notebook 的用途

  • 資料清洗
  • 統計模組化
  • 訓練機器學習模型
  • 資料可視化

SQL與Notebook

SQL非常适合進行資料檢索和計算基本的統計資料,但如果需要進行更深入、靈活的探索性資料分析或資料科學工作,Python則更為适用。是以,若能夠在同一工具中同時使用這兩種程式設計語言,将會更加友善和高效。

一種非常流行的這樣的工具是Jupyter Notebook,它支援多種程式設計語言(包括Python和SQL),并且可以在一個互動式環境中進行資料處理、可視化和分析。通過将SQL和Python內建在Jupyter Notebook中,資料科學家可以通過SQL查詢資料,然後使用Python進行進一步的探索性資料分析、模組化和可視化。這使得資料分析和資料科學更加高效、友善、疊代和複現。同時,使用Jupyter Notebook還可以将文檔、代碼、圖表和解釋性文本整合在一起,形成一個易于了解和共享的分析報告。

SmartNotebook:革新SQL的組織方式,加速資料科學程式

Notebook使用python 和SQL 主要有兩種方式,一種使用python操作資料庫連接配接執行SQL;另外一種方式使用SmartNotebook的SQL單元格直接執行原生SQL而不需要複雜連接配接與配置,内置主流資料庫/資料倉庫驅動,支援動态SQL(jinja2 模闆)、執行的結果直接儲存DataFrame中,優雅與python融合,支援鍊式SQL:将複雜的嵌套查詢轉化為簡單的鍊式CTE(Common Table Expression)查詢SQL。

方式一:使用 Python 讀取 SQL 查詢

  1. 安裝python 相關資料庫連接配接驅動包,比如 mysql:
pip install mysql-connector-python
           
  1. 建立資料庫連接配接(Connect)
conn= pymysql.connect(
  host='host', 
  port=3307, user='root', 
  passwd='pwd',
  charset='utf8',
  db='cte_test')
           
  1. 使用Pandas執行SQL
df = pd.read_sql_query('select * from grade_score_all', conn)
df
           
SmartNotebook:革新SQL的組織方式,加速資料科學程式

方式2:在SmartNoteBook 上使用SQL

SmartNoteBook是協作的、內建的、一站式資料科學/分析環境。SmartNoteBook是參考Jupyter notebook思想實作資料科學與分析的強大環境,深度融合Python(程式設計能力、AI能力)與SQL(資料處理)、可視化于一體,更高效編輯、執行和共享資料應用模型,進行資料采集、探索、機器學習、深度學習和互動可視化。開箱即用的資料科學、機器學習工具包;高效編輯器輔助和團隊協作跟蹤功能;通過Notebook結構化邏輯關系配合自然語言可以很好表現資料分析過程、闡述資料故事,形成資料報告,深層次的挖掘資料、釋放資料價值。

SmartNotebook 在SQL應用進行深入的優化和支援,主要有以下特點:

特點1:免安裝,支援主流資料庫和資料倉庫、大資料平台,獨立資料源配置與管理。

内置支援主流資料庫、資料倉庫和大資料平台,包括Mysql、Spark、Hive、PostgreSQL、Oracle、SQL Server、Presto、ClickHouse、Greenplum等。資料源獨立配置與管理,連接配接資訊(使用者名與密碼)不會暴露于代碼中。

SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式

特點2:SQL 與Python無縫融合、動态SQL

  1. 插入SQL單元格,選擇資料源,直接編寫SQL執行,結果儲存到python pandas 的DataFrame資料集,後續可以用python 進行資料分析或資料模組化。

    a) 添加"更多類型"選擇SQL 單元格。

    b) 選擇資料源,這裡包括資料庫的資料源和dfSQL 兩類,例如:選擇SQLChain 這個資料源;并對結果集進行命名,例如:total_score 。注:這個命名包括兩個意義:一是查詢的結果集保持此命名的DataFrame中;二是在鍊式SQL 作為CTE 表達式的名稱。

    c) 編寫SQL,執行(按鈕或指令鍵)并調試SQL。

SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式
  1. 動态SQL:支援jinjia2 表達式模闆,可以引用python 中變量進行變量替換,支援if 表達式進行邏輯判斷、for 循環表達式等。
SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式

特點3:SQL方式操作DataFrame 資料集(dfSQL)

任何DataFrame資料集都可以dfSQL以SQL文法進行查詢、變換、統計和過濾等操作,包括notebook内前面SQL單元格的資料集結果。目前dfSQL 僅限于支援select 操作,暫不支援update、delete等操作。

  1. dfSQL支援對DataFrame資料集的select相關操作,支援sqlite3 文法和統計函數。

a) 插入SQL單元格,資料源選擇dfSQL。注:dfSQL的資料源是内置的,不需要單獨配置。

b) 定義輸出結果資料集變量的名稱

c) 編寫SQL并執行

SmartNotebook:革新SQL的組織方式,加速資料科學程式
  1. dfSQL 也同樣支援動态dfSQL:支援jinjia2 表達式模闆,可以引用python 中變量進行變量替換,支援if 表達式進行邏輯判斷、for 循環表達式等。
SmartNotebook:革新SQL的組織方式,加速資料科學程式
  1. dfSQL 直接操作csv檔案,可以直接基于csv資料檔案進行統計彙總等分析。
SmartNotebook:革新SQL的組織方式,加速資料科學程式

特點4:全新SQL組織方式、CTE支援:鍊式SQL

鍊式SQL是SNB中的一種優雅、高效且易于調試的工作流。它允許在SQL查詢的from子句中引用notebook内同一資料源中的其他SQL查詢,進而将複雜的SQL查詢分解為短小、高效的SQL單元格。通過鍊式SQL,我們可以将複雜的嵌套查詢轉化為簡單的鍊式CTE(Common Table Expression)查詢SQL,使代碼更加簡潔、易于調試、複用及高效。快來嘗試鍊式SQL,讓你的SQL查詢變得更加優雅!

寫過SQL小夥伴,可能對SQL嵌套比較熟悉,複雜的可能要嵌套3-5層,又要聯合join等,SQL變得比較複雜,一個SQL語句有些達到幾十行或上百行。這些嵌套的複雜SQL造成編寫實作困難、維護困難。目前主流的資料庫或資料倉庫都支援CTE(common table expressions/通用表表達式),将嵌套查詢的子查詢使用with 定義派生表,可以更好組織代碼,同時複用這些派生表提高計算效率。

我們看下面這個簡單的嵌套查詢的邏輯及使用CTE 的方式:

  1. 嵌套方式:
SmartNotebook:革新SQL的組織方式,加速資料科學程式
  1. CTE 方式:将嵌套查詢拆解為兩個with 派生表方式,進行重新組織,可讀性大大提高;如下:
SmartNotebook:革新SQL的組織方式,加速資料科學程式
  1. 鍊式SQL 方式:為了更好地處理可能不斷增長的嵌套查詢,也為更好組織CTE,smartnotebook支援多個SQL單元格鍊式引用:每個SQL單元格都有輸出變量名或稱為SQL表達式名稱,其他SQL單元格可以通過表達式名稱進行引用查詢,就像表一樣。通過鍊式SQL單元格可以更好進行組織分析過程,讓SQL變得更優雅、易于調試、複用及高效。下面示例參考如下(為了更好了解鍊式sql過程,我們将調試打開:__SNB_DEBUG__=True):
SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式
SmartNotebook:革新SQL的組織方式,加速資料科學程式
補充:篩選每個學校的前三名的SQL 是引用total_rank ,而total_rank引用 total_score,引用過程是鍊式的,所有命名為鍊式SQL。通過SQL單元格引用關系,背景邏輯自動轉化為with CTE 語句。每個SQL單元格獨立進行編寫、調試。通過鍊式SQL 将複雜的嵌套查詢或CTE 語句拆解為獨立單元格或SQL。下面是一個完整的鍊式SQL流程圖:
SmartNotebook:革新SQL的組織方式,加速資料科學程式

繼續閱讀