<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>資料處理 - 東東 GCP 教學 - GCP 實戰講師</title>
	<atom:link href="https://dongdonggcp.com/tag/%E8%B3%87%E6%96%99%E8%99%95%E7%90%86/feed/" rel="self" type="application/rss+xml" />
	<link>https://dongdonggcp.com</link>
	<description>助你考取證照，轉職成功</description>
	<lastBuildDate>Mon, 07 Apr 2025 06:13:05 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://dongdonggcp.com/wp-content/uploads/2025/04/cropped-340838097_121391010914395_5443948698124160121_n-32x32.jpg</url>
	<title>資料處理 - 東東 GCP 教學 - GCP 實戰講師</title>
	<link>https://dongdonggcp.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">243235092</site>	<item>
		<title>[BigQuery 教學]  雲端界陳浩南 &#8211; BigQuery 是什麼？功能、組成元件、特色和優勢完整介紹</title>
		<link>https://dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-is-bigquery-functions-advantages</link>
					<comments>https://dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/#respond</comments>
		
		<dc:creator><![CDATA[東東]]></dc:creator>
		<pubDate>Sat, 23 Nov 2024 09:50:20 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[BigData]]></category>
		<category><![CDATA[Data]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[大數據]]></category>
		<category><![CDATA[資料處理]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=7987</guid>

					<description><![CDATA[<p>如果你想看 BigQuery 影片介紹， [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/">[BigQuery 教學]  雲端界陳浩南 – BigQuery 是什麼？功能、組成元件、特色和優勢完整介紹</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">如果你想看 BigQuery 影片介紹，可以直接捲到最下面喔！</p>



<p class="wp-block-paragraph">如果用一句話講完 BigQuery，就是你只要下一個 SQL 分析語法，就可以叫雲端上一大堆機器出來幫你分析資料。就像陳浩南一聲令下，小弟瞬間集結完成，幫你「橋事情」。</p>



<p class="wp-block-paragraph">Google BigQuery 是一種由 Google Cloud 提供的無伺服器資料倉儲解決方案，專為大規模資料處理設計。</p>



<p class="wp-block-paragraph">你可以將它視為資料分析的高速引擎，幫助你快速從海量資料中找出洞察。</p>



<p class="wp-block-paragraph">重點是你只要使用通用的 SQL 語法，就可以馬上使用￼，完全不用學習新的技術，超級方便。</p>



<p class="wp-block-paragraph">接下來，我們將深入介紹它的功能、組成元件、特色以及使用它的好處。</p>



<h2 class="wp-block-heading">一、BigQuery 的基本介紹</h2>



<p class="wp-block-paragraph">BigQuery 是一種基於雲端的企業級資料倉儲服務，它可以快速處理結構化和非結構化數據，並提供即時查詢功能。它主要針對需要分析大量數據的組織設計，例如電子商務平台、金融服務公司等。</p>



<h2 class="wp-block-heading">二、BigQuery 的核心功能</h2>



<h3 class="wp-block-heading">(一) 即時查詢與高效能處理</h3>



<p class="wp-block-paragraph">BigQuery 的設計使它能在幾秒鐘內處理數百億行數據，這對於需要快速決策的企業來說至關重要。它的分散式架構允許你同時查詢和寫入資料，完全不需要等待。</p>



<h3 class="wp-block-heading">(二) 支援大規模資料分析</h3>



<p class="wp-block-paragraph">無論是幾百 GB 的數據，還是幾 PB 的數據，BigQuery 都能輕鬆處理。它的擴展性確保了隨著你的業務需求增長，你的資料分析能力也能跟上。</p>



<h3 class="wp-block-heading">(三) 與其他 GCP 工具的整合</h3>



<p class="wp-block-paragraph">BigQuery 可與 Google Cloud 其他工具無縫整合，例如 <a href="https://cloud.google.com/products/dataflow?hl=zh-TW">Dataflow</a>、<a href="https://cloud.google.com/pubsub?hl=zh-TW">Pub/Sub</a> 和 <a href="https://cloud.google.com/looker?hl=zh-TW">Looker</a> (或 <a href="https://cloud.google.com/looker-studio?hl=zh-TW">Looker Studio</a>)，讓你能建立完整的數據管道和視覺化報告。</p>



<h2 class="wp-block-heading">三、BigQuery 的組成元件</h2>



<p class="wp-block-paragraph">(一) <a href="https://cloud.google.com/bigquery/docs/datasets-intro">Dataset</a>：資料的邏輯分組</p>



<p class="wp-block-paragraph">Dataset 是 BigQuery 的核心概念之一。你可以將 Dataset 理解為數據的邏輯容器，用於組織和管理 Tables 與 Views。</p>



<p class="wp-block-paragraph">每個 Dataset 都屬於一個特定的專案，並可以設定資料位置、存取權限與加密選項。</p>



<h4 class="wp-block-heading">Dataset 的特點：</h4>



<p class="wp-block-paragraph">1. 幫助你有效組織資料（例如將不同部門的數據分開存放）。 </p>



<p class="wp-block-paragraph">2. 支援跨 Dataset 查詢，方便資料整合。 </p>



<p class="wp-block-paragraph">3. 具有細緻的權限管理，確保數據安全。</p>



<h3 class="wp-block-heading">(二) <a href="https://cloud.google.com/bigquery/docs/tables-intro">Table</a>：儲存結構化資料的基本單位</h3>



<p class="wp-block-paragraph">Table 是 BigQuery 中存放數據的主要單位。每張 Table 包含行與列，類似於傳統的關聯式資料表，但支持更大規模的資料。</p>



<h4 class="wp-block-heading">BigQuery 支持的 Table 類型</h4>



<p class="wp-block-paragraph">1. 永久表（Permanent Table）</p>



<p class="wp-block-paragraph">一般的資料表，存放數據直到你手動刪除。</p>



<p class="wp-block-paragraph">2. 臨時表（Temporary Table）</p>



<p class="wp-block-paragraph">這些表僅在查詢執行期間存在，適合處理臨時性的中間結果，你每次查詢永久表的結果，它都會暫存 24 小時。</p>



<p class="wp-block-paragraph">3. 分區表（Partitioned Table）</p>



<p class="wp-block-paragraph">這種表根據時間（例如日期）、數字範圍或數據欄位進行分區，能有效提升查詢效能並降低成本。</p>



<p class="wp-block-paragraph">4. 分片表（Sharded Table）</p>



<p class="wp-block-paragraph">通過表名結構（如 `table_202311`）分片，雖然靈活，但不如分區表高效。</p>



<h3 class="wp-block-heading">(三) <a href="https://cloud.google.com/bigquery/docs/views-intro">View</a>：基於查詢語句的虛擬表</h3>



<p class="wp-block-paragraph">View 是基於 SQL 查詢創建的虛擬表，讓你能透過查詢結果像操作實際表一樣進行使用。</p>



<h4 class="wp-block-heading">BigQuery 支持的 View 類型：</h4>



<p class="wp-block-paragraph">1. 標準 View（Standard View）</p>



<p class="wp-block-paragraph">基於靜態查詢語句，直接返回當前的查詢結果。</p>



<p class="wp-block-paragraph">2. 授權 View（Authorized View）</p>



<p class="wp-block-paragraph">允許你控制使用者對基礎表的存取權限。授權 View 是在敏感數據共享中非常實用的工具。</p>



<p class="wp-block-paragraph">3. 物化 View（Materialized View）</p>



<p class="wp-block-paragraph">將查詢結果存儲起來，從而加速重複查詢的性能，同時降低計算資源的使用。</p>



<p class="wp-block-paragraph">View 的優勢：</p>



<p class="wp-block-paragraph">1. 簡化複雜查詢，減少重複 SQL 撰寫的麻煩。</p>



<p class="wp-block-paragraph">2. 可作為權限管理的工具，限制對底層數據的存取，因為它能透過很靈活的語法，從各個表格抓取和過濾資料，給有適當權限的人看。</p>



<p class="wp-block-paragraph">3. 提高效能，特別是使用物化 View 時。</p>



<h2 class="wp-block-heading">四、BigQuery 的特色</h2>



<h3 class="wp-block-heading">(一) 無伺服器架構的便利性</h3>



<p class="wp-block-paragraph">BigQuery 不需要你配置伺服器或管理基礎設施，讓你能將精力集中在數據分析上，而非繁瑣的運維工作。</p>



<p class="wp-block-paragraph">光是這一點，就完全屌打巿面上所有資料倉儲和分析工具，像是 AWS 和 Azure 還要開機器，主機效能受限於你開的規格，BigQuery 完全不問規格，自動依照你的資料量瞬間呼叫機器幫你運算。</p>



<h3 class="wp-block-heading">(二) Pay-as-you-go 計費模式</h3>



<p class="wp-block-paragraph">BigQuery 採用<a href="https://cloud.google.com/bigquery/pricing">按 Query 量 (處理的資料量) 計費</a>，確保你只需為實際使用的資源付費，這對於中小型企業尤其有吸引力。</p>



<p class="wp-block-paragraph">不過也要注意，因為BigQuery 太方便了，你很容易就不小心 Query 太多資料，未來會再介紹節省 BigQuery 費用的方法。</p>



<h3 class="wp-block-heading">(三) 跨地區資料分析的優勢</h3>



<p class="wp-block-paragraph">BigQuery 支持跨地區資料分析，讓你能從全球各地的數據中快速獲得洞察，而不必擔心資料傳輸的延遲。</p>



<h2 class="wp-block-heading">五、使用 BigQuery 的主要優勢</h2>



<p class="wp-block-paragraph">(一) 企業如何受益於 BigQuery</p>



<p class="wp-block-paragraph">BigQuery 幫助企業節省成本、提升效率，並提供即時的數據洞察，這些都是在數據驅動時代中脫穎而出的關鍵。</p>



<p class="wp-block-paragraph">值得提的一點是企業不用在初期一口氣花好幾百萬，購買一套資料倉儲，而是每月依使用量計費，減少一口氣支出太多的負擔。</p>



<p class="wp-block-paragraph">(二) 開發者與資料科學家的支援</p>



<p class="wp-block-paragraph">BigQuery 提供 SQL 語法支援，且與各種開發工具兼容，讓開發者能快速上手並整合到現有的工作流程中。</p>



<h2 class="wp-block-heading">六、如何開始使用 BigQuery？</h2>



<h3 class="wp-block-heading">(一) 建立專案與資料集</h3>



<p class="wp-block-paragraph">首先，你需要在 Google Cloud Console 中<a href="https://dongdonggcp.wordpress.com/2024/02/01/how-to-apply-gcp-free-usage-credit-300-dollars/">建立一個專案</a>，並<a href="https://cloud.google.com/bigquery/docs/datasets">設定資料集</a>，這是你管理資料的基礎。</p>



<h3 class="wp-block-heading">(二) 撰寫查詢語法與分析資料</h3>



<p class="wp-block-paragraph">利用 BigQuery 提供的<a href="https://cloud.google.com/bigquery/docs/introduction-sql?hl=zh-cn">標準 SQL</a>，你可以輕鬆撰寫查詢語法，並快速分析資料，甚至建立視覺化的報表。</p>



<h2 class="wp-block-heading">七、結論</h2>



<p class="wp-block-paragraph">BigQuery 是一個功能強大且靈活的資料分析工具，無論是對於初創企業還是大型組織，都能帶來明顯的價值。如果你正在尋找一種高效處理數據的解決方案，不妨考慮使用 BigQuery。</p>



<h2 class="wp-block-heading">八、常見問題解答</h2>



<p class="wp-block-paragraph">1. BigQuery 是免費的嗎？</p>



<p class="wp-block-paragraph">BigQuery 提供<a href="https://cloud.google.com/bigquery/docs/sandbox">免費沙箱</a>，你連信用卡都不用就可以玩，每月包含 1 TB 的查詢和 10 GB 的存儲，超出部分需按使用量付費。 </p>



<p class="wp-block-paragraph">2. BigQuery 支持哪些資料格式？</p>



<p class="wp-block-paragraph">它支持 CSV、JSON、Parquet、Avro 等多種格式，適合不同的資料需求。 </p>



<p class="wp-block-paragraph">3. 如何與第三方工具整合？</p>



<p class="wp-block-paragraph">BigQuery 可以通過 API 或第三方工具如 Tableau、Power BI 進行整合，方便創建報告。 </p>



<p class="wp-block-paragraph">4. BigQuery 的資料安全性如何保障？</p>



<p class="wp-block-paragraph">BigQuery 提供強大的資料加密與訪問控制，不管是 Dataset、Table、View 都可以單獨分享存取權限，並符合多項全球合規標準。 </p>



<p class="wp-block-paragraph">5. BigQuery 可以取代傳統數據庫嗎？</p>



<p class="wp-block-paragraph">它適合用於分析數據，但不適合作為交易型資料庫（OLTP）。</p>



<p class="wp-block-paragraph">意思就是不能當一般的資料庫，每天不間斷 Insert、Update、Delete 的意思。</p>



<p class="wp-block-paragraph">影片版的介紹如下：</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<div class="ast-oembed-container " style="height: 100%;"><iframe title="[BigQuery 教學] 046 雲端界陳浩南 - BigQuery 到底有多快？| 簡報免費下載" width="1200" height="675" src="https://www.youtube.com/embed/QVakI1csb3g?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe></div>
</div></figure><p>The post <a href="https://dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/">[BigQuery 教學]  雲端界陳浩南 – BigQuery 是什麼？功能、組成元件、特色和優勢完整介紹</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7987</post-id>	</item>
		<item>
		<title>[Dataflow 教學] Dataflow 是什麼？跟 Apache Beam 有什麼關係？</title>
		<link>https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=what-is-dataflow-vs-apache-beam</link>
					<comments>https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/#respond</comments>
		
		<dc:creator><![CDATA[東東]]></dc:creator>
		<pubDate>Sat, 23 Nov 2024 07:29:12 +0000</pubDate>
				<category><![CDATA[Google Cloud Platform]]></category>
		<category><![CDATA[Apache Beam]]></category>
		<category><![CDATA[Data Pipeline]]></category>
		<category><![CDATA[Dataflow]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[大數據]]></category>
		<category><![CDATA[資料管道]]></category>
		<category><![CDATA[資料處理]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=7975</guid>

					<description><![CDATA[<p>Dataflow 是 GCP 資料三兄弟 [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/">[Dataflow 教學] Dataflow 是什麼？跟 Apache Beam 有什麼關係？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph"><a href="https://cloud.google.com/dataflow/docs/overview">Dataflow</a> 是 GCP 資料三兄弟的老二 (依知名度排行)，你的資料要放進 <a href="https://cloud.google.com/bigquery?hl=zh-TW">BigQuery</a> 分析之前，要先整理好資料的格式，所以 GCP 強力推薦使用 Dataflow。</p>



<p class="wp-block-paragraph">為什麼不用 VM 就好？你可以直接跳到最後一段！</p>



<h2 class="wp-block-heading">一、Dataflow 是什麼？</h2>



<p class="wp-block-paragraph">想像你是一間工廠的管理者，每天都要處理大量的原物料（資料）。這些原物料需要經過各種加工程序，最後變成成品。</p>



<p class="wp-block-paragraph">GCP 的 Dataflow 就像是一個全自動的生產線系統，你只要設定好要怎麼處理這些原物料，它就會自動幫你完成所有工序，而且還會自動調整工人（運算資源）的數量。</p>



<h2 class="wp-block-heading">二、Dataflow 舉例說明</h2>



<p class="wp-block-paragraph">當然這樣子講還是有點模糊，舉個實際的例子來說：假設你需要處理每天的銷售資料，Dataflow 可以自動幫你：</p>



<ol class="wp-block-list">
<li>收集各個分店的銷售資料</li>



<li>清理不正確的資料</li>



<li>計算各種統計數字</li>



<li>把結果存到資料庫</li>
</ol>



<h2 class="wp-block-heading">三、Dataflow 跟 Apache Beam 有什麼關係？</h2>



<p class="wp-block-paragraph"><a href="https://beam.apache.org/about/">Apache Beam</a> 是 Dataflow 的原型，GCP 只是把跟 Apache Beam 做一些加值的優化，放在 GCP 上，這樣你就不用自己在地端安裝和設定 Apache Beam，節省很多準備環境 (尤其是機器的安裝設定) 的時間。</p>



<p class="wp-block-paragraph">Apache Beam 就像是一套標準的工廠作業規範。它定義了一些基本的處理方式，讓你可以用同一種方式來描述你想要的資料處理流程，不管最後是要在哪裡執行。</p>



<h2 class="wp-block-heading">四、Apache Beam 的組成元件</h2>



<p class="wp-block-paragraph">讓我們來看看它的主要組成元件：</p>



<p class="wp-block-paragraph">1. Pipeline（管線）： 這就像是整個工廠的生產線規劃圖，定義了資料要如何從原料變成成品，經過哪些步驟。</p>



<p class="wp-block-paragraph">2. PCollection（資料集合）： 把它想像成工廠裡的輸送帶，上面放著要處理的原料或半成品。每次資料經過一道處理程序，就會形成新的一條輸送帶。</p>



<p class="wp-block-paragraph">3. Transform（轉換）： 這就是工廠裡的各種加工設備，例如：</p>



<ul class="wp-block-list">
<li>ParDo：像是一個工作站，可以對每件原料進行客製化處理</li>



<li>GroupByKey：就像是分類站，把相同種類的產品集中在一起</li>



<li>Combine：類似於組裝線，把多個零件組合成一個成品</li>
</ul>



<p class="wp-block-paragraph">4. I/O Transforms（輸入輸出轉換）： 就像工廠的原料進貨口和成品出貨口，決定資料要從哪裡讀入，最後要存到哪裡去。</p>



<p class="wp-block-paragraph">5. Window（時間窗口）： 假設你想要每小時統計一次生產數量，Window 就是幫你把資料按照時間切分的工具。</p>



<p class="wp-block-paragraph">6. Trigger（觸發器）： 就像是工廠的警報系統，當某些條件達成時（比如收集到足夠的數據），就會觸發特定的處理程序。</p>



<p class="wp-block-paragraph">最重要的是，這整套系統的特色是：</p>



<ul class="wp-block-list">
<li>全自動化：設定好後就會自動運作</li>



<li>可擴展性：需要處理更多資料時，會自動增加處理能力</li>



<li>容錯能力：即使某部分出問題，系統也能自動恢復</li>



<li>即時處理：能夠處理即時流入的資料，也能處理已存在的資料</li>
</ul>



<p class="wp-block-paragraph">關於 Apache Beam 詳細說明可以參考<a href="https://beam.apache.org/about/">這份文件</a>。</p>



<h2 class="wp-block-heading">五、從具體的角度再解釋一次 Apache Beam 的組成元件</h2>



<h3 class="wp-block-heading">1. Pipeline（管線）</h3>



<p class="wp-block-paragraph">從技術角度來看，Pipeline 是整個數據處理的骨幹，它包含了所有的處理步驟和邏輯。</p>



<pre class="wp-block-code"><code># Pipeline 的基本架構
pipeline = beam.Pipeline()
result = (pipeline 
    | "讀取資料" &gt;&gt; ReadFromText('input.csv')
    | "處理資料" &gt;&gt; Process()
    | "寫入結果" &gt;&gt; WriteToText('output.txt'))</code></pre>



<p class="wp-block-paragraph">例子：處理網站日誌文件，從讀取原始日誌、解析內容、到產生報表的整個流程。</p>



<h3 class="wp-block-heading">2. PCollection（資料集合）</h3>



<p class="wp-block-paragraph">這是 Beam 中最基本的資料結構，可以存放任何型別的資料，而且是不可變的（immutable）。每次轉換都會產生新的 PCollection。</p>



<pre class="wp-block-code"><code># 一個包含用戶訪問記錄的 PCollection
visits = pipeline | beam.Create(&#091;
    {'user': 'A', 'page': '/home', 'time': '2024-01-01 10:00'},
    {'user': 'B', 'page': '/products', 'time': '2024-01-01 10:05'}
])</code></pre>



<p class="wp-block-paragraph">例子：存放使用者的點擊記錄，每筆記錄包含用戶ID、訪問頁面、時間戳等資訊。</p>



<h3 class="wp-block-heading">3. Transform（轉換） </h3>



<p class="wp-block-paragraph">轉換是對 PCollection 進行操作的處理單元。主要類型包括：</p>



<p class="wp-block-paragraph">(1) ParDo（並行處理）：</p>



<pre class="wp-block-code"><code># 解析每一行日誌並提取重要資訊
class ParseLog(beam.DoFn):
    def process(self, element):
        user, action, timestamp = element.split(',')
        return &#091;{
            'user': user,
            'action': action,
            'timestamp': timestamp
        }]

logs | beam.ParDo(ParseLog())</code></pre>



<p class="wp-block-paragraph">例子：將原始的日誌文字轉換成結構化的資料格式。</p>



<p class="wp-block-paragraph">(2) GroupByKey（分組）：</p>



<pre class="wp-block-code"><code># 依照用戶ID分組，統計每個用戶的訪問次數
user_visits = (visits 
    | beam.Map(lambda x: (x&#091;'user'], 1))
    | beam.GroupByKey()
    | beam.Map(lambda x: {x&#091;0]: sum(x&#091;1])})
)</code></pre>



<p class="wp-block-paragraph">例子：統計每個用戶在不同頁面的停留時間。</p>



<p class="wp-block-paragraph">(3) Combine（合併）：</p>



<pre class="wp-block-code"><code># 計算每個頁面的總訪問次數
page_visits = (visits
    | beam.Map(lambda x: (x&#091;'page'], 1))
    | beam.CombinePerKey(sum)
)</code></pre>



<p class="wp-block-paragraph">例子：計算網站每個頁面的總瀏覽量。</p>



<h3 class="wp-block-heading">4. I/O Transforms（輸入輸出轉換）</h3>



<pre class="wp-block-code"><code># 從多個來源讀取資料
logs = pipeline | beam.io.ReadFromText('logs/*.txt')
# 寫入到資料庫
results | beam.io.WriteToMongoDB(uri='mongodb://localhost:27017')</code></pre>



<p class="wp-block-paragraph">例子：從 S3 讀取日誌檔案，處理後寫入到 BigQuery。</p>



<h3 class="wp-block-heading">5. Window（時間窗口）</h3>



<pre class="wp-block-code"><code># 每5分鐘統計一次訪問量
windowed_counts = (visits
    | beam.WindowInto(window.FixedWindows(300))  # 5分鐘
    | beam.GroupByKey()
    | beam.Map(count_visits)
)</code></pre>



<p class="wp-block-paragraph">例子：統計每小時的活躍用戶數，或計算每分鐘的交易金額。</p>



<h3 class="wp-block-heading">6. Trigger（觸發器）</h3>



<pre class="wp-block-code"><code># 當收集到100筆資料或等待時間超過1分鐘時觸發處理
early_results = (data
    | beam.WindowInto(
        window.GlobalWindows(),
        trigger=trigger.Repeatedly(
            trigger.AfterCount(100) | 
            trigger.AfterProcessingTime(60)
        ),
        accumulation_mode=trigger.AccumulationMode.DISCARDING
    )
)</code></pre>



<p class="wp-block-paragraph">例子：即時監控系統，當檢測到異常訪問模式時立即觸發警報。</p>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">六、Apache Beam 實際應用整合範例</h2>



<pre class="wp-block-code"><code># 完整的網站訪問分析pipeline
def analyze_website_logs():
    with beam.Pipeline() as pipeline:
        results = (pipeline
            | "讀取日誌" &gt;&gt; beam.io.ReadFromText('logs/*.txt')
            | "解析日誌" &gt;&gt; beam.ParDo(ParseLog())
            | "加上時間窗口" &gt;&gt; beam.WindowInto(window.FixedWindows(3600))
            | "依頁面分組" &gt;&gt; beam.Map(lambda x: (x&#091;'page'], 1))
            | "計算訪問量" &gt;&gt; beam.CombinePerKey(sum)
            | "格式化輸出" &gt;&gt; beam.Map(format_output)
            | "寫入結果" &gt;&gt; beam.io.WriteToText('results.txt')
        )</code></pre>



<p class="wp-block-paragraph">這個例子展示了如何使用這些組件來建立一個完整的數據處理流程：</p>



<ol class="wp-block-list">
<li>讀取多個日誌文件</li>



<li>解析每條日誌記錄</li>



<li>設定每小時的分析窗口</li>



<li>按頁面分組並計算訪問量</li>



<li>格式化輸出結果</li>



<li>將結果寫入文件</li>
</ol>



<p class="wp-block-paragraph">這樣的資料處理管道可以處理任意大小的資料集，而且能夠自動擴展和容錯。</p>



<p class="wp-block-paragraph">需要注意的是，這些程式碼都是在本地端執行，如果要在 GCP Dataflow 上運行，只需要修改 Pipeline 的執行器設定即可，程式碼邏輯不需要改變。</p>



<h2 class="wp-block-heading">七、為什麼不自己在 VM 上寫 Python 來處理資料就好？為何要用 Dataflow？到底差在哪裡？</h2>



<p class="wp-block-paragraph">讓我用實際的例子來說明在 VM 上自己寫 Python 處理資料，與使用 Dataflow 的差異。</p>



<p class="wp-block-paragraph">情境：處理每日 100GB 的使用者點擊日誌 Log</p>



<h3 class="wp-block-heading">(一) 在 VM 上自己寫 Python 的程式碼大概長這樣子：</h3>



<pre class="wp-block-code"><code># 在單一 VM 上運行的 Python 程式碼
def process_logs():
    with open('huge_logs.txt', 'r') as file:
        for line in file:
            user_data = parse_log(line)
            # 處理記憶體不足的問題
            if memory_usage &gt; threshold:
                save_temporary_results()
                clear_memory()
            
            # 處理單機運算慢的問題
            processed_data = complex_calculation(user_data)  # 可能要跑很久
            
            # 處理機器當機的問題
            try:
                save_to_database(processed_data)
            except ConnectionError:
                retry_save(processed_data)  # 需要自己寫重試機制 (retry)</code></pre>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">可能會遇到的問題：</p>



<ol class="wp-block-list">
<li><strong>記憶體限制</strong>
<ul class="wp-block-list">
<li>VM 記憶體用完就崩潰</li>



<li>需要自己寫程式分批處理</li>



<li>要自己管理暫存資料</li>
</ul>
</li>



<li><strong>運算效能</strong>
<ul class="wp-block-list">
<li>單機處理 100GB 可能要跑一整天，花錢</li>



<li>CPU 滿載可能影響其他程式</li>



<li>擴充需要自己開更多 VM、寫分散式程式，管機器太累了</li>
</ul>
</li>



<li><strong>錯誤處理</strong>
<ul class="wp-block-list">
<li>程式崩潰要從頭重跑</li>



<li>網路斷線要自己處理</li>



<li>VM 當機就前功盡棄</li>
</ul>
</li>



<li><strong>監控和維護</strong>
<ul class="wp-block-list">
<li>要自己寫 Log</li>



<li>要自己監控 CPU/記憶體</li>



<li>要自己處理備份</li>
</ul>
</li>
</ol>



<h2 class="wp-block-heading">(二) 使用 Dataflow 的情況</h2>



<pre class="wp-block-code"><code># Dataflow 程式碼
with beam.Pipeline(options=PipelineOptions()) as pipeline:
    results = (pipeline 
        | 'ReadLogs' &gt;&gt; ReadFromText('gs://bucket/huge_logs.txt')
        | 'ParseLogs' &gt;&gt; beam.ParDo(ParseLogFn())
        | 'CalculateResults' &gt;&gt; beam.ParDo(ComplexCalculationFn())
        | 'WriteToDB' &gt;&gt; WriteToDatabase()
    )</code></pre>



<p class="wp-block-paragraph">不覺得看起來簡單很多嗎？接下來看一下 Dataflow 自動處理的部分：</p>



<ol class="wp-block-list">
<li><strong>自動擴展（Auto-scaling）</strong>
<ul class="wp-block-list">
<li>自動偵測資料量</li>



<li>自動增加/減少運算資源</li>



<li>不用擔心記憶體爆掉</li>
</ul>
</li>



<li><strong>平行處理（Parallel Processing）</strong>
<ul class="wp-block-list">
<li>自動分散工作到多台機器</li>



<li>100GB 資料可能 1 小時就處理完</li>



<li>有效利用 Google 的運算資源</li>
</ul>
</li>



<li><strong>錯誤恢復（Fault Tolerance）</strong>
<ul class="wp-block-list">
<li>某台機器掛掉會自動重試</li>



<li>網路問題自動處理</li>



<li>不會從頭重跑，從上次中斷點繼續</li>
</ul>
</li>



<li><strong>監控和維護</strong>
<ul class="wp-block-list">
<li>完整的監控儀表板</li>



<li>即時查看處理進度</li>



<li>系統層級的 Log</li>
</ul>
</li>
</ol>



<h2 class="wp-block-heading">(三) 何時用 Dataflow 或 VM？</h2>



<h3 class="wp-block-heading">什麼時候選擇 Dataflow：</h3>



<ol class="wp-block-list">
<li>資料量大（&gt;10GB）</li>



<li>需要即時處理（Streaming）</li>



<li>處理邏輯複雜</li>



<li>需要可靠的錯誤處理</li>



<li>需要自動擴展</li>



<li>預算允許（雖然比 VM 貴，但省下很多人力跟時間）</li>
</ol>



<h3 class="wp-block-heading">什麼時候用 VM 就夠：</h3>



<ol class="wp-block-list">
<li>資料量小（&lt;1GB）</li>



<li>單次處理就好</li>



<li>處理邏輯簡單</li>



<li>不急著要結果 (你可以使用 Spot VM 享受 60%~90% Off 的折扣)</li>



<li>預算有限</li>
</ol>



<p class="wp-block-paragraph">重點是：Dataflow 不只是一個執行環境，而是一個完整的資料處理平台。雖然前期學習成本較高，但在處理大量資料時，會省下更多開發和維護的時間。</p>



<p class="wp-block-paragraph">這就像是比較「自己蓋房子」和「請建商蓋房子」的差異 &#8211; 雖然請建商比較貴，但他們有完整的團隊、標準流程和品質保證，最終反而更有效率。</p>



<p class="wp-block-paragraph">以上先簡單介紹一下，之後再深入介紹技術細節和實際操作。</p>



<p class="wp-block-paragraph"></p><p>The post <a href="https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/">[Dataflow 教學] Dataflow 是什麼？跟 Apache Beam 有什麼關係？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">7975</post-id>	</item>
	</channel>
</rss>
