Categories
程式開發

數據湖和SQL並不矛盾


數據量的增加推動了技術的更新和範式的變化。與此同時,SQL仍然是主流。隨著數據的增長和復雜性的增加,SQL比以往任何時候都更適合分析和轉換數據湖中的數據。本文探討瞭如何將SQL用於數據湖和新的數據生態系統。本文要點:隨著數據的增長和復雜性的增加,SQL比以往任何時候都更適合分析和轉換數據湖中的數據。

本文最初發佈於TowardsDataScience,經原作者授權由InfoQ中文站翻譯並分享。

記得NoSQL嗎?

NoSQL數據庫的出現帶來了巨大的可伸縮性和簡單性。

如果我們必須高速處理大量的數據,我們會被告知NoSQL是唯一的出路。供應商一直在喋喋不休地討論SQL和中間件代碼之間的阻抗失配問題。

現在我們發現,大多數NoSQL供應商在花了幾年時間來貶低連接之後,都引入了SQL層。一些供應商還引入了SQL方言,使情況變得更糟。

在NoSQL上引入這個SQL層似乎是出於對新一代數據庫的恐懼,比如穀歌Spanner,以及提供JSON、XML作為一等數據類型的數據庫供應商。

Hadoop呢?

Hadoop為開發人員提供了map-reduce接口,這帶來了一些巨大的進步,但同時也帶來了很多問題(見DeWitt和Stonebraker的文章MapReduce:一次大倒退)。

在Hadoop上使用map-reduce處理數據還有很多需要改進的地方。性能調優、數據傾斜處理、獲得最佳吞吐量,所有這些都需要太多的裸機代碼更改。

人們嘗試了多種受SQL啟發的方法:

  • Apache Pig:類SQL語法、FOREACH代替FROM、GENERATE代替SELECT;
  • Hive: 用於SQL-in-Hadoop的類MySQL語法、將SQL轉換為map-reduce;
  • Drill、Impala、Presto和Pivotal的HAWQ:SQL-on-Hadoop,繞過map-reduce;
  • Spark SQL:SQL on Spark;
  • Apache Phoenix:SQL on HBase;
  • Hadoop作為已有DB的外部表:Oracle Big Data SQL、Teradata SQL-H。

經過多年的“大數據時代”,以及一些Hadoop的兼併和破產,我們現在看到了這些技術的倖存者。 Hadoop技術現在更多地存在雲中,而不是在本地環境中。現在,在組織中已經不經常看到完整的Cloudera或HortonWorks棧了。相反,少數幾種技術蓬勃發展,現在已廣泛用於雲數據棧。

數據湖上的SQL

Stonebraker很久以前就指出,數據庫的性能問題和可伸縮性與SQL關係不大,而更多地與數據庫本身的設計有關(NoSQL的討論與SQL無關)。

SQL的最大優點是它提供了熟悉性和分析數據的表達能力。 SQL的健壯性以關係代數和集合理論為基礎。

對於數據湖,我們可以看到以下這些技術。

  • Hive元數據存儲是人們喜愛的數據目錄。
  • 在SQL層,Presto作為一個查詢層脫穎而出,並在Amazon Athena、Google Cloud DataProc、Qubole中得到了廣泛應用。
  • Spark和Spark SQL的應用也很廣泛。
  • Hadoop文件系統(HDFS)用的不那麼多了,雲存儲(Azure Blob、谷歌云存儲、AWS S3)更受歡迎,CSV、Avro和Parquet文件格式也更受歡迎了。

雲數據倉庫和數據湖

在原始文件系統上存儲的經濟性推動了數據湖的創建。 SQL被用於分析數據。

Amazon RedShift Spectrum可以查詢S3數據。

Snowflake DB可以使用VARIANT列在數據庫中存儲XML、JSON或ORC數據,還可以使用外部表指向S3中的數據。

外部表還支持谷歌BigQuery和Azure SQL數據倉庫。

SQL和ELT (提取 加載 轉換)

數據處理的ELT(提取 加載 轉換)範式將數據轉換步驟放在最後。首先從源系統提取數據並將其加載到數據庫中。

舊的ETL方法RBAR(逐行處理)與關係數據庫執行的基於集合的處理形成了直接的對比,而基於集合的處理構成了SQL的基礎。

ELT中,我們現在從源數據庫中提取數據並將其放入數據湖中。

SQL轉換在雲數據倉庫或使用Presto完成,並將轉換後的數據加載到目標表。

通過GoldenGate、AWS DMS,或者使用Workato/Jitterbit/StitchData等工具或Kafka等健壯的事件管道,一點點地向數據湖或數據倉庫輸送數據。將源系統和加載區域之間的轉換最小化。然後使用SQL將這些數據轉換並加載到倉庫和分析層。

ELT工具鏈使用DAG(有向無環圖)工具,如Apache AirFlow和無服務器函數,而不是舊的ETL工具鏈中類似AutoSys這樣的調度器。

DBT是在轉換領域流行的另一個工具。像FiveTran和Matillion這樣的雲數據處理工具也使用SQL和ELT。 Domo序列化SQL來創建轉換管道。 Looker基於LookML生成SQL。

原文鏈接

https://towardsdatascience.com/data-lakes-and-sql-49084512dd70