# **Data Pipeline 資料管線**
## 📌What is a data pipeline?
### 解釋
資料管線,**是一套讓你工作資料化、流程化、自動化的系統方法**。簡單來說,就是將資料從「某個系統」移動到另一個「系統」的方法,而其中對資料的存儲和管理會在不同情況下有所變動。另外,資料通道也允許從不同來源取得資料(disparate sources),進而在更高效(high-performing)的資料存儲中轉換(transformation)和整合(consolidation)。

### 應用
* 建立和維護資料傳送等等基礎架構(infrastructure)的人員。例如:資料工程師(data engineer)。
* 數據整合的終端使用者。例如:資料科學家(data scientist)、資料分析師(data analysts)、商業智能工程師(BI engineer)、產品總監(chief product officer)、市場行銷(marketing)。
1. 策略(strategic)或是運籌(operational)的決策人員
2. 建立和維護分析工具的人員
## 📌Data pipeline components
### 解釋
**1. 起點(Origin):**
資料進入管線的開始。有可能是:
1.各類型資料源(data sources): 交易處理系統APP、物聯網感測器、社群軟體等等。
2.存儲系統(storage systems): 資料倉儲(data warehouse)、資料湖泊(data lake)
**2. 終點(Destination):**
資料完成轉換/傳送。主要取決於對資料的實際應用:
1.用於資料視覺化(data visualization)或分析工具(analytical tools)。
2.移至存儲系統:資料倉儲、資料湖泊。
**3. 資料流(Dataflow)**
```
資料在起點和終點間「流動」的過程。其中一個很常聽到的名詞就是所謂的ETL。
- 抽取(Extract): 從不同資料源(disparate source systems)的系統獲取資料。
- 轉置(Transform): 將資料移入暫存區(staging area),並將資料轉換成未來可用的格式。
- 載入(Load): 載入重新格式化(reformatted)的資料到最終目的地。
```
**4. 存儲(Storage)**
資料在管線裡不同階段中保存的地方。存儲取決於很多因素,例如:
- 體積(volume)
- 頻率(frequency)
- 資料庫查詢量(volume of queries to a storage system)
**5. 處理(Processing)**
資料處理和資料流是不可分割的,只是資料處理著重於如何「實現」資料變動的過程。例如:
- 複製資料庫的資料(database replication)
- 串流資料(streaming data)*等等
**6. 工作流(Workflow)**
在管線中,工作流定義了資料互相間一系列的任務(task)和依賴性(dependence),主要的觀念:
- 任務(job)
- 上游(upstream)
- 下游(downstream)
若上游沒有被準確執行,下游就有可能會出狀況,就像水流(waterflow)一樣。
**7. 監控(Monitoring)**
檢查管線中的數據是否有在正常運作,不管是效率(efficiency)或是負荷(data load)等等因素。
**8. 技術(Technology)**
1.ETL工具:包括資料準備/整合工具 e.g. Informatica Power Center, Apache Spark, Talend Open Studio
2.資料倉儲(ata warehouses): 關聯式資料庫 e.g. Amazon Redshift, Snowflake, Oracle
3.資料湖泊(data lakes): 原始資料儲存,可能是關聯或無關聯資料(relational and non-relational data),常被資料科學家用於機器學習專案使用 e.g. Microsoft Azure, IBM
4.Batch workflow schedulers: 自動化和監控工作流(workflow) e.g. Airflow, Luigi, Oozie, or Azkaban
5.處理串流/連續生成資料: e.g. Apache Spark, Flink, Storm, Kafka
6.程式語言:Python, Ruby, Java

## 📌Types of data pipeline solutions
不同的狀況下有不同管線通道實施及應用的方式。例如:若你想要將你的資料移到雲端,你可能就需要雲原生(cloud-native)*的工具。
**1. 批次(Batch)**
批次處理的工具。最主要的應用時機:當你要定期(regular interval)移動大量(large volume)的資料時,而不用即時的去處理。時常運用在整合大量市場(marketing)資料作為後續分析用。
**2. 即時(Real-time)**
即時處理資料的工具。最主要的應用時機:處理串流資料時,有可能是金融市場的資料又或是自動量測工具回傳的資料。
**3. 雲原生(Cloud native)**
處理雲端資料的工具,像是來自AWS bucket的資料。這類型工具存在雲端,你可以省下自己架框架(infra)和專業資源(expert resources)的金錢和時間,因為你可以依賴提供這些資源的供應商來主持(host)你的資料管線。
**4. 開源(Open source)**
當你需要一個低成本(low-cost)的替代方案,而不是商業性質的供應商(commercial vendor)時,開源程式就是一個很好的解決方案,你也可以依照自己的需求來擴增其功能。不過因為是公開的,要注意其他用戶也有機會修改和擴增它。



## 📌 ETL v.s. data pipeline
資料管線是一個更大的集合,裡面可能會包含多段ETL,以及執行ETL的工具等等。

## 📌Annotation
***批次處理v.s.串流資料**
| | 批次處理 | 串流處理 |
| -------- | -------- | -------- |
| 資料範圍 | 查詢或處理資料集中的所有或大部分資料。 | 查詢或處理滾動式時窗內的資料或僅限最新的資料記錄。 |
| 資料大小 | 大型資料批次。 | 個別記錄或包含幾筆記錄的微型批次。 |
| 效能 | 延遲從幾分鐘到數小時。 | 需要幾秒或幾毫秒的延遲。 |
| 分析 | 複雜分析。 | 簡易回應功能、彙總和累積指標。 |
***雲端原生**
雲端原生技術可讓組織在新式動態環境(例如公用、私人和混合式雲端)中建立並執行可調整的應用程式。更詳細資料可詳見:https://reurl.cc/dGgE26

***Lambda結構**
包含傳統的批次資料管線(batch data pipeline)以及即時的串流資料管線(stream data pipeline)。
## 📌Comments
Please feel free to point out the mistakes in the article😊.
If u have any further questions or cooperation opportunities, please contact me via
Email📬: willie880201044@gmail.com
## 📌References
1. What is a data pipeline? https://reurl.cc/Dg7d26
2. What is Data Pipeline: Components, Types, and Use Cases https://reurl.cc/W3gkmD
3. AWS Streaming data: https://reurl.cc/qg25nq
4. Alooma https://reurl.cc/4aOKMX