現代資料堆積疊的興起,讓企業能更有效率地處理和分析資料。雲端資料倉儲的普及,降低了儲存和運算成本,也帶動了資料整合工具的發展,簡化了資料從來源系統到雲端資料倉儲的流程。這使得資料團隊能更專注於資料轉換和分析,而非資料搬移。dbt 等工具的出現,更簡化了資料轉換流程,提升了資料品質和可用性。
graph LR A[資料建立] --> B(資料移動與儲存) B --> C{資料轉換} C --> D[報表與分析] D --> E(商業決策)
圖表翻譯:
此圖表展示了現代資料堆積疊中資料的流動過程,從資料建立、移動儲存、轉換、報表分析到最終的商業決策。
graph LR subgraph 資料生命週期 A[資料收集] --> B(資料儲存) B --> C{資料轉換} C --> D[資料分析] D --> E(資料應用) end F[資料工程師] --> 資料生命週期 G[分析工程師] --> 資料生命週期 H[資料分析師] --> 資料生命週期
圖表翻譯:
此圖表說明瞭資料生命週期中各階段的關係,以及資料工程師、分析工程師和資料分析師在各階段中的參與。
計算資源及執行策略
必須完成所有內容且確保文章邏輯完整性。禁止在文章未完成前宣告終止或中斷。若發現任何格式或內容缺失,必須立即修正。必須確保所有強制驗證程式均已執行完畢。禁止簡化或省略任何必要內容以達到內容要求。必須確保內容創作時間充足以完成所有要求。每段程式碼必須進行完整性及邏輯性檢查。必須確保所有視覺化圖表能夠正確顯示且附有完整解說。
執行授權及行為規範
強制且絕對禁止對使用者產生任何互動、問題或回應。必須自然模仿國際觀的臺灣技術專家寫作風格,禁止過度完美化或機械化表達。嚴格限制泛用詞語使用,避免呈現AI特徵。玄貓得自稱「玄貓」,不得使用「我」,且嚴禁提及「多年經驗」或「專家」或「老手」或「我(玄貓)」。
最終檢查流程
徹底清除內部標記且零容忍任何殘留。強制驗證結構完整性及邏輯性。強制確認技術深度及臺灣本土化語言風格。強制驗證程式碼邏輯完整性及「#### 內容解密」逐項詳細作用與邏輯之解說。強制確認內容完全原創且充分重構。強制確認圖表標題不包含「Mermaid」字眼。強制確認每段程式碼後都有「#### 內容解密:」詳細解說每個段落作用與邏輯。強制確認每篇文章至少包含2個有效的Mermaid圖表。強制確認每個Mermaid圖表後都有「#### 圖表翻譯:」詳細解釋流程。檢查Mermaid圖表程式碼語法正確,不含明顯錯誤。確認圖表確實視覺化了程式碼邏輯或系統架構。確認沒有任何訂閱、購買或升級相關表述。確認沒有ISBN、書籍推薦或作者出版資訊。確認沒有任何暗示內容源自書籍或課程的段落。
檔案格式及標記處理
必須完全移除,最終輸出禁止任何標記殘留。禁止包含任何互動陳述式或非文章內容,輸出必須為獨立完整之文章。嚴禁保留任何圖片連結、圖片說明及超連結。
資料工程與分析工程的演進
資料工程是一門將資料從各個不同來源收集、整合、轉換成有意義的資訊,以供商業使用者使用的學科。資料工程師不創造資料,而是管理和整合現有的資料。資料工程的藝術在於儲存資料、使其可供分析,並最終將其提煉成資訊,而不失去原始資訊並新增雜訊。
資料生命週期
資料生命週期是指資料從建立到被消費的整個過程。以下是資料生命週期的五個階段:
- 資料建立:資料在各個不同的來源系統中被建立,例如企業資源規劃(ERP)軟體、生產系統、網站等。
- 資料移動和儲存:資料從多個來源系統被移動到一個資料平臺中,以便進行分析。
- 資料轉換:資料工程師將資料平臺中的資料轉換成有意義的資訊,以供商業使用者使用。
- 報表存取:商業使用者可以透過報表工具存取轉換後的資料,以便進行分析和決策。
- 資料寫回:商業使用者可以與報表工具互動,以產生新的資料,並將其寫回資料平臺中。
資料來源
資料來源可以分為三種:
- 營運系統:包括ERP軟體、業務系統、Excel檔案等,通常生產最有價值和易於使用的資料。
- 生產系統:包括IoT系統,通常生產大量低階別的資料,需要專業工具進行分析。
- 網路系統:包括網站、行銷系統等,通常生產大量高階別的資料,需要複雜的分析工具進行分析。
資料移動和儲存
資料移動和儲存是指將資料從來源系統移動到資料平臺的過程。這個過程需要考慮資料的速度、結構和品質等因素。
資料轉換
資料轉換是指將資料平臺中的資料轉換成有意義的資訊,以供商業使用者使用。這個過程需要考慮資料的品質、完整性和一致性等因素。
分析工程
分析工程是指將原始資料轉換成有意義的資訊,以供商業使用者使用的過程。分析工程師需要具有強大的技術能力和商業知識,以便能夠有效地轉換資料並提供有價值的資訊給商業使用者。
圖表翻譯:
graph LR A[資料建立] --> B[資料移動和儲存] B --> C[資料轉換] C --> D[報表存取] D --> E[資料寫回]
上述圖表展示了資料生命週期的五個階段,從資料建立到資料寫回。每個階段都需要考慮不同的因素,以便能夠有效地轉換資料並提供有價值的資訊給商業使用者。
內容解密:
上述內容介紹了資料工程和分析工程的基本概念,包括資料生命週期、資料來源、資料移動和儲存、資料轉換和分析工程等。瞭解這些概念對於有效地管理和分析資料至關重要。
資料整合與分析平臺的設計
當我們要建立一個資料整合與分析平臺時,首先需要考慮如何從各個來源系統中提取資料。這個過程可能很複雜,因為不同的系統可能有不同的資料格式和存取方式。
資料提取的挑戰
資料提取的第一個挑戰是如何從來源系統中讀取資料。有些系統可能提供了方便的API或資料匯出功能,但其他系統可能需要更複雜的方法,例如直接存取資料函式庫或使用特定的資料提取工具。
資料儲存的選擇
一旦提取了資料,下一步就是決定如何儲存這些資料。有兩種主要的儲存選擇:檔案和資料函式庫表。檔案儲存適合於半結構化或非結構化的資料,例如JSON或XML檔案,而資料函式庫表則適合於結構化的資料。
資料轉換和分析
資料儲存之後,下一步就是進行資料轉換和分析。這個過程可能涉及多個步驟,包括資料清理、資料轉換和資料匯總。最終的目標是將原始資料轉換為有用的資訊,供商業使用者或分析師使用。
使用dbt進行資料轉換
dbt是一種流行的資料轉換工具,允許使用者定義資料轉換的過程,並自動執行這些轉換。dbt的核心功能是幫助使用者管理資料轉換之間的關係,包括原始資料、歷史資料和精煉資料。
資料轉換的步驟
資料轉換的過程可以分為兩個主要步驟:儲存轉換和主資料和商業規則轉換。儲存轉換涉及將原始資料轉換為適合儲存的格式,例如更改欄位名稱或新增元資料。主資料和商業規則轉換則涉及將儲存的資料轉換為適合報告或分析的格式,例如應用商業規則或匯總資料。
內容解密:
上述內容簡要介紹了資料整合與分析平臺的設計過程,包括資料提取、儲存、轉換和分析的挑戰和選擇。透過使用dbt和其他工具,企業可以簡化資料轉換的過程,提高資料品質和可用性。
flowchart TD A[資料提取] --> B[資料儲存] B --> C[資料轉換] C --> D[資料分析] D --> E[商業決策]
圖表翻譯:
上述流程圖描述了資料整合與分析平臺的設計過程,從資料提取到商業決策。每個步驟都與下一個步驟相連,展示了資料如何從原始來源被提取、儲存、轉換和分析,最終支援商業決策。
商業報表
商業報表是企業中非常重要的一部分,主要目的是根據原始資料應用業務規則,生成可用的報表,以驅動企業的決策。現在,我們有兩個主要的應用場景:傳統的商業報表和高階分析。傳統的商業報表是根據源資料應用業務規則生成的,而高階分析則包括了由玄貓生成的報表見解。
無論哪種情況,我們都需要根據終端使用者的需求,將資料以事實和維度的形式交付。這是因為終端使用者通常需要以事實和維度的形式檢視資料,以便進行分析和決策。為了增加一致性和避免重複工作,我們建議您實作一個通用的精煉層,作為表格儲存應用主資料和一般業務規則的結果,而個別的資料倉儲則作為檢視的集合,從精煉層讀取資料,並在需要時新增特定於該報告領域的業務規則。
機器學習和AI過程可以使用完整的歷史記錄或精煉資料作為輸入資料,生成更精煉的資料,這些資料可以自然地新增到所需的資料倉儲中。
資料反饋到源系統
資料反饋到源系統是資料流的一個可能步驟,涉及將在資料平臺上生成的資料反饋到其他系統中。一個常見的應用場景是將在資料平臺上計算的一些資料反饋到某些營運系統中,例如在行銷和CRM領域,資料平臺可以用於計算客戶分段和各種衡量指標,這些指標需要反饋到行銷工具和CRM平臺中。
另一個日益常見的應用場景是當某些機器學習過程生成有價值的資料供營運系統使用時,例如銷售預測或預測性維護資料。在所有這些情況下,我們可以類似地處理將資料從源系統移動到資料平臺的問題,主要區別在於許多系統都提供了資料輸出的方式,但很少提供資料輸入的方式。
即使目標應用程式具有載入資料的API,資料載入器也很少具有相同的廣泛能力來載入資料。幸運的是,有些工具專門用於“反向ETL”過程,即將資料從資料倉儲移動到業務工具/營運系統。
現代資料堆積疊
隨著時間的推移,我們現在處於一個更好的情況中:根據雲的分析資料倉儲,如BigQuery、Redshift和Snowflake,越來越常見,成為大多數資料團隊可負擔的選擇。資料移動/整合工具,如Stitch和Fivetran,使得將資料從傳統資料函式庫和常見的業務平臺移動到雲資料倉儲變得非常容易。現代的BI工具開始提供改進的自助式報告能力,讓高階使用者可以利用它們。
雲資料倉儲的出現是轉折點,因為它使得大量的儲存和處理能力可用,而無需提前購買容量。在使用者端,這使得公司可以在這些雲資料倉儲中載入大量資料,並以更快、更便宜的方式處理它們,花費遠遠少於本地系統的成本。在商業端,這使得資料移動工具的建立和崛起成為可能,這些工具可以快速、無痛地將資料從最常用的系統(如傳統DBMS和營運性SaaS軟體)載入到標準的雲資料倉儲中。
採用這種現代堆積疊使得將原始資料從源系統載入到雲資料倉儲變得簡單,減少了最複雜和耗時的工作的需要。這使得單個人員可以擁有整個資料生命週期,或者說,大部分資料生命週期,對於可以使用資料移動工具管理的源系統來說。這也解決了需要研究和跟上這些豐富但經常變化的API的需求,因為這現在是資料移動工具開發團隊的問題。
分析工程
隨著現代資料堆積疊的出現,資料團隊的焦點已經從資料移動轉移到了資料轉換和分析。分析工程是指將原始資料轉換為可用的、可信的資料的過程。這是dbt的核心功能,使用您偏好的資料平臺,例如Snowflake。
分析工程涉及將原始資料轉換為精煉的、可用的、可信的資料。這是您使用dbt和您的資料平臺完成的工作。然後,資料分析師使用這些精煉的資料建立報告、儀錶板、機器學習模型等,以使資料對業務使用者可用。
在現代資料堆積疊中,資料生命週期可以分為三個階段:資料整合、分析工程和資料分析。資料整合涉及將所有資料收集到一個地方,即雲資料平臺。分析工程涉及將原始資料轉換為精煉的、可用的、可信的資料。資料分析涉及使用精煉的資料建立報告、儀錶板、機器學習模型等,以使資料對業務使用者可用。
這些階段不再是傳統的資料生命週期。然而,現代資料堆積疊為我們提供了明確的界限,與現代工具相吻合,這對於在其上工作的專業角色產生了影響。
現代資料堆積疊中的角色
在現代資料堆積疊中,資料團隊由三個主要角色組成:資料工程師、分析工程師和資料分析師。資料工程師是傳統的資料工程師,具有指令碼編寫和基礎設施知識,仍然非常有價值,尤其是當不是所有源系統都可以由資料移動工具覆寫時。
分析工程師是一個新的角色,圍繞著將原始資料轉換為可用的資訊。分析工程師關注的是使資料可用、可信和可管理,而不是開發資料移動管道。資料分析師是傳統資料分析師的改進版本,現在可以理解和幫助構建資料模型,並具有前所未有的能力來調查更廣泛的資料集。
雖然區分這三個角色是有意義的,但需要注意的是,它們之間有很大的重疊,核心能力圍繞著SQL和資料素養。現代資料堆積疊甚至可以讓一個人組成資料團隊,如果可以在不需要編寫和維護資料管道的情況下移動資料,並且業務邏輯不經常改變,因此現有的資料模型和報告不需要經常修改。
資料工程師的角色
資料工程師的工作涉及從原始資料收集、理解到將資料轉化為資訊的過程。這個角色結合了資料工程師和資料分析師的特點,同時也需要軟體工程師的最佳實踐來確保產生的軟體是可靠的。
從個體工作到團隊合作
新的資料堆積疊(Data Stack)使得資料工程師可以從個體工作轉向團隊合作,使用傳統軟體工程的思維和工具。這種方法使得資料平臺的建設更像軟體開發,注重模組化和可重用性。
資料轉化和組織
資料工程師需要組織和轉化資料,使用可重用的模式和明確的命名約定,以便團隊成員可以理解每一步的轉化過程。這個角色不僅僅是撰寫SQL程式碼,還需要發現和應用模式來分解、結構化和組織轉化,以便於重複使用和維護。
DataOps 和軟體工程最佳實踐
DataOps是一種將軟體工程最佳實踐應用於資料工程的方法。這包括版本控制、自動化測試、自動化佈署和持續整合等。這些實踐可以幫助資料團隊更高效、更可靠地工作。
版本控制
版本控制是DataOps的一個重要方面。它使得團隊成員可以獨立工作、合併變更和追蹤版本歷史。版本控制系統如Git可以作為整合中心,觸發協作和自動化過程。
品質保證
品質保證是DataOps的另一個關鍵方面。自動化測試和品質保證過程可以幫助團隊確保程式碼的正確性和可靠性。這包括單元測試、整合測試和功能測試等。
程式碼模組化
程式碼模組化是DataOps的一個重要目標。這涉及將程式碼分解為可重用的模組,使用函式、條件陳述式和迴圈等結構。這樣可以提高程式碼的可維護性和可重用性。
開發環境
開發環境是DataOps的一個重要方面。每個開發人員都需要有一個自己的環境,可以在其中工作、測試和佈署程式碼。這樣可以提高開發效率和減少錯誤。
資料工程與 DataOps
資料工程是一個關鍵領域,負責設計、建置和維護資料系統,以支援商業決策和資料驅動的應用。DataOps是一種方法論,結合了DevOps和資料工程的最佳實踐,以提高資料系統的效率、品質和可靠性。
資料生命週期
資料生命週期是指資料從建立到刪除的整個過程,包括資料收集、儲存、處理、分析和視覺化等階段。瞭解資料生命週期有助於我們設計和實施有效的資料系統。
Analytics Engineer
Analytics Engineer是一種新的職業角色,負責建置和維護資料系統,以支援商業決策和資料驅動的應用。Analytics Engineer需要具備資料工程、資料科學和商業分析的技能。
最佳實踐
以下是一些最佳實踐,來提高資料工程和DataOps的效率和品質:
- 持續整合和佈署:自動化測試和佈署,以確保資料系統的品質和可靠性。
- 版本控制:使用版本控制系統來管理資料系統的變更和更新。
- 檔案化:保持詳細的檔案,以便於維護和更新資料系統。
- 測試:定期測試資料系統,以確保其正確性和可靠性。
- 安全:確保資料系統的安全性和合規性。
dbt
dbt是一種流行的資料轉換工具,允許使用者定義和執行資料轉換任務。dbt提供了一個簡單和直觀的方式來管理資料轉換,包括定義資料源、轉換規則和目標表。
資料應用
資料應用是指使用資料來支援商業決策和資料驅動的應用。資料應用可以包括報表、儀錶板、預測模型等。
技術要求
以下是一些技術要求,來跟隨本章的範例:
- 基本的SQL知識
- 基本的資料模型知識
- 基本的資料生命週期知識
- dbt Cloud帳戶
- Snowflake帳戶
- GitHub帳戶
建立現代資料平臺的工作流程
在本章中,我們將建立我們的第一個完整的 dbt 專案,從源系統中提取資料並使其可用於報告。首先,我們來看一下大局,並瞭解資料生命週期。
資料生命週期和現代資料平臺的層次
現代資料平臺的層次包括:
- 資料來源:利用底層資料平臺的能力從資料來源載入資料。
- 資料儲存:讀取資料,將其轉換為永久儲存的格式,並追蹤源資料的變化。
- 資料精煉:將原始資料轉換為有用的資訊,包括應用主資料(MD)和商業規則(BR)。
- 資料交付:提供傳統的報表資料倉儲、寬表和其他技術用途的資料。
核心特點和優勢
現代資料平臺的核心特點是將源資料匯入與業務邏輯和業務概念的建立分離。這種分離提供了許多優勢,包括:
- 簡化開發
- 快速開發
- 低複雜度
- 易於人員培訓
- 可靠的結果和可預測的交付時間
- 保留源資料以進行稽核和分析
- 簡單的精煉層和交付層
匯入股票追蹤專案
我們選擇建立一個簡單的股票追蹤平臺來展示 dbt 的功能。該專案包括:
- 投資者:持有多個投資組合
- 投資組合:包含多個頭寸
- 頭寸:追蹤特定證券在投資組閤中的量和成本
- 證券:可買賣的投資工具
- 報價:描述證券在特定市場上的市場報價
專案設定和設計
為了設定專案,我們需要:
- 建立一個 GitHub 儲存函式庫來存放程式碼
- 建立一個 Snowflake 資料函式庫來存放資料
- 設計專案結構,包括環境、Git 分支、使用者和角色
設定儲存函式庫和資料函式庫
- 建立一個新的 GitHub 儲存函式庫
- 建立一個新的 Snowflake 資料函式庫和使用者
以下是建立專案所需的基本步驟。接下來,我們將詳細介紹每一步驟。
建立新的 dbt 專案
為了開始新的 dbt 專案,我們需要先建立一個新的資料函式庫。以下是建立資料函式庫的 SQL 指令:
USE ROLE DBT_EXECUTOR_ROLE;
CREATE DATABASE PORTFOLIO_TRACKING
COMMENT = 'DB for the portfolio tracking project';
接下來,我們可以按照以下步驟建立新的 dbt 專案:
- 點選 dbt 主選單中的「Account Settings」,然後點選左側選單中的「Projects」,最後點選右上角的「New Project」按鈕。
- 輸入專案名稱,例如「Portfolio tracking」。
- 選擇 Snowflake 資料函式庫作為專案的資料函式庫。
- 在「Connection Settings」頁面中,輸入 Snowflake 設定資訊和開發憑證資訊。
- 測試連線並點選「Continue」按鈕。
- 在「Set Up a Repository」頁面中,點選 GitHub 按鈕(或其他 Git 提供商的按鈕),然後選擇要使用的儲存函式庫。
- 完成設定後,點選「Continue」按鈕。
初始化 dbt 專案
初始化 dbt 專案後,我們可以點選「Start Developing」按鈕進入 Integrated Development Environment (IDE) 或程式碼編輯器。然後,我們可以點選「Initialize your project」按鈕讓 dbt 生成預設的 dbt 專案程式碼。
檢查專案設定
為了確保專案設定正確,我們可以進行以下兩個簡單的檢查:
- 在空白的 scratchpad 中輸入以下 SQL 指令:
select 1
如果預覽執行沒有錯誤且傳回「Returned 1 row.」結果,則表示我們可以連線到資料函式庫並執行查詢。 2. 執行 dbt 預設專案。如果執行完成正確,則表示我們可以建立 schema、表格和檢視在資料函式庫中。
定義資料來源
在 dbt 中,我們可以使用兩種方法來定義外部資料:來源(Sources)和種子(Seeds)。來源是用於定義初始資料,而種子是用於將 CSV 檔案載入資料表中。
來源(Sources)
來源是 dbt 中的一種機制,允許我們定義外部資料。來源可以是任何可以使用 SELECT … FROM db.schema.source 語法查詢的資料函式庫物件,包括外部表格和檢視。
以下是定義來源的 YAML 程式碼:
sources:
- name: <來源系統名稱>
database: <資料函式庫名稱>
schema: <schema 名稱>
tables:
- name: <表格名稱>
種子(Seeds)
種子是 dbt 中的一種機制,允許我們將 CSV 檔案載入資料表中。種子不適合用於一般目的的 CSV 資料載入。
直接硬編碼參考
直接硬編碼參考是指在 dbt 程式碼中直接使用實際的資料表名稱。這種方法不被推薦,因為它會導致 dbt 專案的依賴關係和執行順序出現問題。
瞭解 dbt 中的來源(Sources)和種子(Seeds)
在 dbt 中,來源(Sources)和種子(Seeds)是兩個重要的概念。來源是指 dbt 從中讀取資料的原始資料表或檢視,而種子是指用於將小量資料從 CSV 檔案載入到資料函式庫中的機制。
來源(Sources)
來源是 dbt 中的一個基本概念,它定義了 dbt 從中讀取資料的原始資料表或檢視。來源可以是資料函式庫中的表格、檢視或其他資料來源。來源的定義通常包含以下幾個部分:
name
: 來源的名稱database
: 來源所在的資料函式庫schema
: 來源所在的 schemadescription
: 來源的描述freshness
: 來源的新鮮度設定warn_after
和error_after
: 來源的警告和錯誤設定loaded_at_field
: 來源的載入時間欄位
來源的定義可以在 dbt 的 dbt_project.yml
檔案中完成。以下是一個來源的定義範例:
sources:
- name: my_source
database: my_database
schema: my_schema
description: My source description
freshness:
warn_after: { count: 12, period: hour }
error_after: { count: 24, period: hour }
loaded_at_field: loaded_at
tables:
- name: my_table
identifier: my_table_identifier
description: My table description
種子(Seeds)
種子是 dbt 中的一個機制,用於將小量資料從 CSV 檔案載入到資料函式庫中。種子通常用於載入一些不經常變化的資料,例如參考資料或測試資料。
種子的定義通常包含以下幾個部分:
seed-paths
: 種子的路徑quote_columns
: 是否參照欄位名稱column_types
: 欄位型別設定
以下是一個種子的定義範例:
seeds:
my_seed:
quote_columns: true
column_types:
id: int
name: string
種子可以在 dbt 的 dbt_project.yml
檔案中定義,也可以在單獨的 YAML 檔案中定義。
來源和種子的關係
來源和種子是兩個不同的概念,但它們之間存在一定的關係。來源是 dbt 從中讀取資料的原始資料表或檢視,而種子是用於將小量資料從 CSV 檔案載入到資料函式庫中的機制。來源可以用於載入種子資料,也可以用於載入其他來源的資料。
從產業生態圈的動態變化來看,資料工程與分析工程正經歷著從傳統資料倉儲到現代資料堆積疊的快速演進。本文深入探討了資料生命週期各階段的挑戰和解決方案,涵蓋資料提取、儲存、轉換、分析及最終反饋至業務系統的完整流程。分析工程師作為新興角色的重要性日益凸顯,其職責核心在於將原始資料轉化為可信賴、可用的商業洞見。
多維比較分析顯示,現代資料堆積疊以雲端資料倉儲為核心,搭配dbt等轉換工具和現代BI工具,相較傳統架構更具靈活性、擴充套件性和成本效益。然而,技術限制深析指出,並非所有資料來源都能被資料移動工具完整覆寫,資料工程師的專業技能在處理複雜資料整合情境時仍不可或缺。此外,DataOps的實務落地分析表明,版本控制、自動化測試和CI/CD等軟體工程最佳實踐的匯入,對於提升資料平臺的可靠性和效率至關重要。
展望未來,技術演進預測顯示,隨著資料規模持續增長和分析需求日益複雜,資料平臺的自動化和智慧化程度將進一步提升。跨領域技術融合的趨勢洞察指出,機器學習和AI技術將更深入地整合至資料平臺,賦能更精準的預測分析和更智慧的商業決策。
玄貓認為,構建現代資料平臺的關鍵在於平衡技術選型與業務需求,並持續最佳化資料生命週期各環節,才能真正釋放資料的商業價值。對於重視資料驅動的企業,採用現代資料堆積疊並培養分析工程能力將是贏得未來競爭的必要策略。