<?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/category/%E5%A4%A7%E6%95%B8%E6%93%9A%E8%99%95%E7%90%86%E5%92%8C%E5%88%86%E6%9E%90/feed/" rel="self" type="application/rss+xml" />
	<link>https://dongdonggcp.com</link>
	<description>助你考取證照，轉職成功</description>
	<lastBuildDate>Wed, 06 Aug 2025 10:04:38 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</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>Cloud Pub/Sub 教學：比 RabbitMQ 好用，無限擴充的訊息佇列服務</title>
		<link>https://dongdonggcp.com/2025/08/06/cloud-pub-sub-tutorial-better-than-rabbitmq-mqtt/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cloud-pub-sub-tutorial-better-than-rabbitmq-mqtt</link>
					<comments>https://dongdonggcp.com/2025/08/06/cloud-pub-sub-tutorial-better-than-rabbitmq-mqtt/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 06 Aug 2025 10:04:37 +0000</pubDate>
				<category><![CDATA[大數據處理和分析]]></category>
		<category><![CDATA[MQTT]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[RabbitMQ]]></category>
		<category><![CDATA[Streaming Data]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=11267</guid>

					<description><![CDATA[<p>Cloud Pub/Sub (簡稱 Pub/Sub) 是一個全代管的即時訊息服務，簡單說就是把訊息暫存。它採用發布-訂閱（Publisher-Subscriber）的架構模式，讓資料產生者和使用者能夠獨立運作，大幅提升系統的彈性和可擴充性。</p>
<p>The post <a href="https://dongdonggcp.com/2025/08/06/cloud-pub-sub-tutorial-better-than-rabbitmq-mqtt/">Cloud Pub/Sub 教學：比 RabbitMQ 好用，無限擴充的訊息佇列服務</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>Cloud Pub/Sub (簡稱 Pub/Sub) 是一個全代管的即時訊息服務，主要用於應用程式之間的非同步通訊。它採用發布-訂閱（Publisher-Subscriber）的架構模式，讓資料產生者和使用者能夠獨立運作，大幅提升系統的彈性和可擴充性。</p>



<h2 class="wp-block-heading">為什麼我們需要 Cloud Pub/Sub？</h2>



<p>在現代的分散式系統中，不同的服務組件往往會面臨以下挑戰：</p>



<h3 class="wp-block-heading">後端處理速度跟不上</h3>



<p>當前端產生資料的速度遠大於後端處理的速度時，系統就會出現瓶頸。例如，電商網站在促銷活動期間，訂單產生的速度可能遠超過庫存系統的處理能力。</p>



<p>又或是遊戲架構，通常會有高低峰期，像白天線上可能只有 100 多人，但是晚上可能高達 10,000 人在玩遊戲，可是你後端只有一台機器，會來不及處理持續不斷送進來的資料，影響到使用者體驗。</p>



<h3 class="wp-block-heading">流量衝擊與系統穩定性</h3>



<p>資料處理來不及是一回事，請求突然暴增，直接衝擊到後端系統，很容易造成服務過載甚至當機，最好要有一個緩衝機制，先讓資料在某個地方「排隊」，不要直接「打進」後端，確保系統穩定。</p>



<h3 class="wp-block-heading">系統耦合度過高</h3>



<p>當系統元件之間過度依賴時，任何一點故障都可能影響整個系統的運作。Pub/Sub 扮演了一個「智慧排隊系統」的角色，讓訊息能夠讓各個服務單獨處理，不會因為某個服務壞掉，大家都不能再處理訊息。</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1024" height="528" src="https://dongdonggcp.com/wp-content/uploads/2025/08/如果串流資料量太大，後端承受不住的後果-1024x528.png" alt="" class="wp-image-11276" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/如果串流資料量太大，後端承受不住的後果-1024x528.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/如果串流資料量太大，後端承受不住的後果-300x155.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/如果串流資料量太大，後端承受不住的後果-768x396.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/如果串流資料量太大，後端承受不住的後果-1536x792.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/08/如果串流資料量太大，後端承受不住的後果.png 1826w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">如果串流資料量太大，後端承受不住的後果</figcaption></figure>



<h2 class="wp-block-heading">MQTT 協定的演進與 Pub/Sub 的關係</h2>



<p>在了 Pub/Sub 之前，早期有個協定叫做 MQTT（Message Queuing Telemetry Transport）。MQTT 最初由 IBM 在 1999 年開發，目的是為了在衛星網路中傳輸石油管線的感測器資料。目前也廣泛應用在物聯網的應用，例如收集各種感測器回傳的資料，或是從工產的生產線收集設備或產品資料，確保生產線沒有異常。</p>



<p>MQTT 採用發布-訂閱模式，在架構中，有三個核心角色：</p>



<p>發布者（Publisher）：負責發送訊息到特定主題</p>



<p>訂閱者（Subscriber）：或叫客戶端 (Client) 訂閱感興趣的主題並接收訊息</p>



<p>訊息代理（Message Broker）：居中協調，負責接收、儲存和轉發訊息</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1024" height="513" src="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-2-MQTT-架構-1024x513.jpg" alt="" class="wp-image-11268" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-2-MQTT-架構-1024x513.jpg 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-2-MQTT-架構-300x150.jpg 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-2-MQTT-架構-768x385.jpg 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-2-MQTT-架構.jpg 1202w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">MQTT 架構</figcaption></figure>



<p>這種模式的優點是發布者和訂閱者之間完全解耦，彼此不需要知道對方的存在，也不需要同時在線上。這種設計理念深深影響了後來許多訊息系統的架構，當然也包括 Pub/Sub。</p>



<h2 class="wp-block-heading">Cloud Pub/Sub 的核心概念</h2>



<p>Google Cloud Pub/Sub 沿用了 <a href="https://zh.wikipedia.org/zh-tw/MQTT" target="_blank" rel="noopener" title="">MQTT</a> 的發布-訂閱概念，但針對雲端環境進行了大幅優化：</p>



<p>主題（Topic）：</p>



<p>就像是一個訊息的分類標籤，發布者將訊息發送到特定主題中。例如，電商網站可能會有「user-clicks」、「purchase-events」等不同主題。</p>



<p>訂閱（Subscription）：</p>



<p>代表對某個主題的訂閱關係。一個主題可以有多個訂閱，每個訂閱都會收到該主題的所有訊息副本，這讓同一份資料可以被多個不同的服務同時處理。</p>



<p>訊息（Message）：</p>



<p>實際傳遞的資料內容，可以是 JSON、二進位資料或任何格式，每個訊息都有唯一的 ID 和時間戳記。</p>



<p>如下架構圖，Pub/Sub 的訊息傳送還可以分成 Pull 和 Push 兩種，Pull 是 Subscriber (或叫 Consumer) 主動去 Subscription 拉取訊息，如果要確保 Subscriber 能夠確實處理到每一筆訊息，適合使用 Pull 方式。如果希望訊息即時傳送出去，則建議使用 Push 方式。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" width="1020" height="640" src="https://dongdonggcp.com/wp-content/uploads/2025/08/PubSub.gif" alt="" class="wp-image-11274"/><figcaption class="wp-element-caption">Pub/Sub 架構</figcaption></figure>



<h2 class="wp-block-heading">Cloud Pub/Sub 的技術優勢</h2>



<p>相較於傳統的訊息佇列系統，Pub/Sub 提供了幾個重要特性：</p>



<h3 class="wp-block-heading">擴展性高</h3>



<p>能夠處理<a href="https://cloud.google.com/pubsub/architecture?hl=zh-tw" target="_blank" rel="noopener" title="">每秒數百萬筆訊息</a>，並且自動根據負載進行擴充，這種分散式的處理架構，遠遠超過傳統只能用一台機器處理的能力。</p>



<h3 class="wp-block-heading">至少一次傳遞保證 (<a href="https://cloud.google.com/pubsub/docs/exactly-once-delivery?hl=zh-cn" target="_blank" rel="noopener" title="">Exactly-Once Delivery</a>)</h3>



<p>確保每個訊息至少會被傳送一次，避免資料遺失。同時提供訊息確認機制，只有當訂閱者確認處理完成後，訊息才會從佇列中移除。</p>



<h2 class="wp-block-heading">順序保證</h2>



<p>透過訊息排序功能，可以確保相關訊息按照正確順序處理，這對金融交易相關應用特別重要。</p>



<h3 class="wp-block-heading">無效信件處理 (<a href="https://cloud.google.com/pubsub/docs/handling-failures?hl=zh-TW" target="_blank" rel="noopener" title="">死信佇列 Dead Letter Queue</a>)</h3>



<p>發送失敗的訊息暫存區 (Subscription)，訊息在此不會再持續發送，由後端主動來收訊息 (Pull 模式)。</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="578" src="https://dongdonggcp.com/wp-content/uploads/2025/08/Dead-Letter-Queue-1024x578.png" alt="" class="wp-image-11275" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/Dead-Letter-Queue-1024x578.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/Dead-Letter-Queue-300x169.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/Dead-Letter-Queue-768x433.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/Dead-Letter-Queue.png 1205w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">死信佇列 Dead Letter Queue 架構</figcaption></figure>



<h2 class="wp-block-heading">Pub/Sub 基本操作示範</h2>



<h3 class="wp-block-heading">建立 Pub/Sub Topic</h3>



<p>接下來我們可以快速體驗一下 Pub/Sub 如何運作，我們先建立一個主題為叫 my-topic。</p>



<p>順便勾選「新增預設訂閱項目」：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="631" src="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-4-建立-PubSub-Topic-1024x631.png" alt="" class="wp-image-11270" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-4-建立-PubSub-Topic-1024x631.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-4-建立-PubSub-Topic-300x185.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-4-建立-PubSub-Topic-768x473.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-4-建立-PubSub-Topic-1536x946.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-4-建立-PubSub-Topic.png 1710w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">建立 Pub/Sub Topic</figcaption></figure>



<h3 class="wp-block-heading">從 Cloud Shell 發送串流訊息</h3>



<p>然後打開 Cloud Shell，執行以下指令碼，它會每 10 秒鐘發出一個 Hello 訊息，加上發出訊息當下的時間：</p>



<pre class="wp-block-code"><code>while true; do &nbsp; gcloud pubsub topics publish my-topic --message="Hello! 時間：$(date '+%Y年%m月%d日 %H時%M分%S秒')"; &nbsp; sleep 10; done</code></pre>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="456" src="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-5-執行指令碼發送訊息到-PusSub-Topic-1024x456.png" alt="" class="wp-image-11271" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-5-執行指令碼發送訊息到-PusSub-Topic-1024x456.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-5-執行指令碼發送訊息到-PusSub-Topic-300x134.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-5-執行指令碼發送訊息到-PusSub-Topic-768x342.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-5-執行指令碼發送訊息到-PusSub-Topic-1536x684.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-5-執行指令碼發送訊息到-PusSub-Topic.png 1856w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">使用 Cloud Shell 發送串流訊息</figcaption></figure>



<h3 class="wp-block-heading">接收 Pub/Sub 訊息</h3>



<p>我們去訂閱項目 my-topic-sub 的「訊息」，按下「提取」：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="501" src="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-6-提取訊息-1024x501.png" alt="" class="wp-image-11272" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-6-提取訊息-1024x501.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-6-提取訊息-300x147.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-6-提取訊息-768x376.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-6-提取訊息.png 1281w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">接收 Pub/Sub 訊息</figcaption></figure>



<p>接下來等幾秒鐘，就會馬上看到收到的訊息，非常快。</p>



<h3 class="wp-block-heading">確認 Pub/Sub 訊息</h3>



<p>而這些訊息是還沒有被確認的狀態，而且在「確認」欄位顯示為「已超過確認期限」，因為預設的確認截止時間是 10 秒 (可以延長)，我的手速太慢，擷圖的時候已經超過時間了。</p>



<p>那我們就勾選「啟用確認訊息」，再按一次「提取」，它就會把最舊的兩筆訊息顯示一個「確認」按鈕，因為 Pub/Sub 重新傳送未確認的訊息，所以確認截止時間會重新計算，現在又可以按「確認」了。</p>



<p>這就是所謂的「<a href="https://cloud.google.com/pubsub/docs/exactly-once-delivery?hl=zh-cn" target="_blank" rel="noopener" title="">At-least-once delivery</a>」：確保訊息至少被傳遞一次。而且會持續重試，直到被確認為止，不然就是到了 7 天之後，訊息過期。</p>



<p>我們再按下「確認」的話，訊息才會被刪除，它們就不會再出現在訂閱項目中了。</p>



<p>你會發現這些訊息一直改變它的狀態，本來可以按確認的訊息，又會一個一個到期，你就直接再「提取」，它們又會不斷出確認按鈕，有點像在打遊戲的感覺！</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1024" height="682" src="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-7-確認收到的訊息-1024x682.png" alt="" class="wp-image-11273" srcset="https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-7-確認收到的訊息-1024x682.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-7-確認收到的訊息-300x200.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-7-確認收到的訊息-768x512.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-7-確認收到的訊息-1536x1023.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/08/10-2-7-確認收到的訊息.png 1540w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption class="wp-element-caption">確認 Pub/Sub 訊息</figcaption></figure>



<h3 class="wp-block-heading">停止發送訊息</h3>



<p>最後記得在 Cloud Shell 那邊，按下 ctrl + C 喔，不然訊息會一直累積下去，你就確認不完喔！</p>



<p>前面提到的 Pub/Sub，只是讓傳過來的資料先暫時排隊起來，我們再用後端服務來消化資料。</p>



<p>但是如果資料多到「怎麼樣都處理不完」的話，就不得不介紹 Cloud Dataflow 這個服務，有需要可以參考<a href="https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/" target="_blank" rel="noopener" title="">《Dataflow 是什麼？跟 Apache Beam 有什麼關係？》</a>這篇文章喔！</p>



<p></p><p>The post <a href="https://dongdonggcp.com/2025/08/06/cloud-pub-sub-tutorial-better-than-rabbitmq-mqtt/">Cloud Pub/Sub 教學：比 RabbitMQ 好用，無限擴充的訊息佇列服務</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/08/06/cloud-pub-sub-tutorial-better-than-rabbitmq-mqtt/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">11267</post-id>	</item>
		<item>
		<title>BigQuery 不就是查詢嗎？跟資料庫差在哪裡？能做什麼分析？</title>
		<link>https://dongdonggcp.com/2025/07/04/is-bigquery-a-database-what-is-the-usage/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=is-bigquery-a-database-what-is-the-usage</link>
					<comments>https://dongdonggcp.com/2025/07/04/is-bigquery-a-database-what-is-the-usage/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Fri, 04 Jul 2025 02:15:51 +0000</pubDate>
				<category><![CDATA[大數據處理和分析]]></category>
		<category><![CDATA[BigData]]></category>
		<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[大數據]]></category>
		<category><![CDATA[資料分析]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=11072</guid>

					<description><![CDATA[<p>許多人初次接觸 BigQuery 時會問 [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2025/07/04/is-bigquery-a-database-what-is-the-usage/">BigQuery 不就是查詢嗎？跟資料庫差在哪裡？能做什麼分析？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<div data-elementor-type="wp-post" data-elementor-id="11072" class="elementor elementor-11072" data-elementor-post-type="post">
				<div class="elementor-element elementor-element-350a063c e-flex e-con-boxed e-con e-parent" data-id="350a063c" data-element_type="container">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-40f5660f elementor-widget elementor-widget-text-editor" data-id="40f5660f" data-element_type="widget" data-widget_type="text-editor.default">
				<div class="elementor-widget-container">
									
<p>許多人初次接觸 BigQuery 時會問：「這不就是一個支援 SQL 的資料庫嗎？」到底有什麼差別？</p>

<p>實際上，BigQuery 提供了遠超傳統 SQL 的強大分析功能，這些功能讓數據科學家和分析師能夠進行複雜的數據探索和分析。</p>

<h3 class="wp-block-heading">視窗函數：時間序列和趨勢分析</h3>

<p>視窗函數是 BigQuery 最強大的功能之一，它允許在不使用 GROUP BY 的情況下進行聚合計算：</p>

<pre class="wp-block-code"><code>-- 計算每日銷售額的7天移動平均
SELECT 
  date,
  daily_sales,
  AVG(daily_sales) OVER (
    ORDER BY date 
    ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
  ) as moving_avg_7days,
  -- 計算與前一天的銷售增長率
  LAG(daily_sales) OVER (ORDER BY date) as prev_day_sales,
  (daily_sales - LAG(daily_sales) OVER (ORDER BY date)) 
    / LAG(daily_sales) OVER (ORDER BY date) * 100 as growth_rate
FROM daily_sales_summary
ORDER BY date;</code></pre>

<p>這種功能對於財務分析、庫存管理、趨勢預測等場景極其有用。</p>

<h3 class="wp-block-heading">陣列處理：處理複雜嵌套 (巢狀) 數據</h3>

<p>BigQuery 原生支援陣列數據類型，這對處理 JSON 數據、用戶行為軌跡等特別有用：</p>

<pre class="wp-block-code"><code>-- 分析用戶購物車中的商品組合
SELECT 
  user_id,
  ARRAY_LENGTH(cart_items) as item_count,
  -- 提取所有商品類別
  ARRAY_AGG(DISTINCT category) as categories,
  -- 找出最貴的商品
  ARRAY_AGG(product_name ORDER BY price DESC LIMIT 1)[OFFSET(0)] as most_expensive_item
FROM users_carts
CROSS JOIN UNNEST(cart_items) as item
GROUP BY user_id, cart_items;</code></pre>

<h3 class="wp-block-heading">地理空間分析：位置數據的深度洞察</h3>

<p>BigQuery 內建了強大的地理空間分析功能，支援點、線、面等各種地理對象：</p>

<pre class="wp-block-code"><code>-- 分析門店覆蓋範圍和競爭分析
SELECT 
  store_id,
  store_name,
  -- 計算門店間距離
  ST_DISTANCE(
    ST_GEOGPOINT(store_lng, store_lat),
    ST_GEOGPOINT(-73.935242, 40.730610)  -- 紐約時代廣場
  ) / 1000 as distance_to_times_square_km,
  -- 創建門店3公里服務範圍
  ST_BUFFER(ST_GEOGPOINT(store_lng, store_lat), 3000) as service_area,
  -- 統計服務範圍內的競爭對手數量
  (SELECT COUNT(*) 
   FROM competitor_stores c
   WHERE ST_DWITHIN(
     ST_GEOGPOINT(store_lng, store_lat),
     ST_GEOGPOINT(c.lng, c.lat),
     3000
   )) as competitors_nearby
FROM our_stores;</code></pre>

<h3 class="wp-block-heading">機器學習整合：BigQuery ML</h3>

<p>BigQuery ML 讓 SQL 開發者無需學習 Python 或 R 就能建立機器學習模型：</p>

<pre class="wp-block-code"><code>-- 建立客戶流失預測模型
CREATE OR REPLACE MODEL `project.dataset.churn_model`
OPTIONS(
  model_type='logistic_reg',
  input_label_cols=['churned']
) AS
SELECT
  -- 特徵工程
  DATE_DIFF(CURRENT_DATE(), last_purchase_date, DAY) as days_since_purchase,
  total_purchases,
  avg_order_value,
  customer_lifetime_value,
  support_tickets_count,
  -- 標籤
  churned
FROM customer_features
WHERE partition_date &gt; DATE_SUB(CURRENT_DATE(), INTERVAL 365 DAY);

-- 使用模型進行預測
SELECT
  customer_id,
  ML.PREDICT(MODEL `project.dataset.churn_model`, 
    (SELECT * FROM current_customers WHERE customer_id = c.customer_id)
  ).predicted_churned as churn_probability
FROM current_customers c;</code></pre>

<h3 class="wp-block-heading">時間序列分析：預測和異常檢測</h3>

<p>BigQuery 提供了專門的時間序列分析功能：</p>

<pre class="wp-block-code"><code>-- 使用時間序列分解來檢測異常
SELECT
  date,
  actual_value,
  -- 季節性分析
  AVG(actual_value) OVER (
    PARTITION BY EXTRACT(DAYOFWEEK FROM date)
    ORDER BY date
    ROWS BETWEEN 4 PRECEDING AND 4 FOLLOWING
  ) as seasonal_avg,
  -- 趨勢分析
  AVG(actual_value) OVER (
    ORDER BY date
    ROWS BETWEEN 30 PRECEDING AND 30 FOLLOWING
  ) as trend,
  -- 異常檢測：偏離季節性平均超過2個標準差
  ABS(actual_value - AVG(actual_value) OVER (
    PARTITION BY EXTRACT(DAYOFWEEK FROM date)
    ORDER BY date
    ROWS BETWEEN 4 PRECEDING AND 4 FOLLOWING
  )) &gt; 2 * STDDEV(actual_value) OVER (
    PARTITION BY EXTRACT(DAYOFWEEK FROM date)
    ORDER BY date
    ROWS BETWEEN 4 PRECEDING AND 4 FOLLOWING
  ) as is_anomaly
FROM time_series_data
ORDER BY date;</code></pre>

<h3 class="wp-block-heading">統計分析函數：深度數據探索</h3>

<p>BigQuery 內建了豐富的統計函數，支援各種統計分析需求：</p>

<pre class="wp-block-code"><code>-- 客戶價值分析
SELECT
  customer_segment,
  COUNT(*) as customer_count,
  -- 描述性統計
  AVG(annual_revenue) as avg_revenue,
  STDDEV(annual_revenue) as revenue_stddev,
  MIN(annual_revenue) as min_revenue,
  MAX(annual_revenue) as max_revenue,
  -- 分位數分析
  PERCENTILE_CONT(annual_revenue, 0.25) OVER() as q1_revenue,
  PERCENTILE_CONT(annual_revenue, 0.5) OVER() as median_revenue,
  PERCENTILE_CONT(annual_revenue, 0.75) OVER() as q3_revenue,
  -- 相關性分析
  CORR(annual_revenue, satisfaction_score) OVER() as revenue_satisfaction_corr
FROM customer_analysis
GROUP BY customer_segment;</code></pre>

<h3 class="wp-block-heading">進階資料處理函數</h3>

<p>BigQuery 還提供了許多專門的資料處理函數：</p>

<pre class="wp-block-code"><code>-- 文本分析和數據清理
SELECT
  -- 正規表達式提取
  REGEXP_EXTRACT(email, r'@(.+)') as domain,
  -- 數據指紋（用於去重）
  FARM_FINGERPRINT(CONCAT(name, email, phone)) as record_fingerprint,
  -- 生成唯一識別碼
  GENERATE_UUID() as record_id,
  -- 文本相似度（用於數據匹配）
  EDIT_DISTANCE(name1, name2) as name_similarity,
  -- JSON 數據解析
  JSON_EXTRACT_SCALAR(user_profile, '$.preferences.language') as preferred_language
FROM user_data;</code></pre>

<h2 class="wp-block-heading">實務應用場景</h2>

<h3 class="wp-block-heading">商業智慧分析</h3>

<p>BigQuery 在商業智慧領域的應用極其廣泛。企業可以輕鬆建立複雜的銷售漏斗分析、客戶生命週期價值分析、市場區隔分析等。例如，電商公司可以分析不同客戶群體的購買行為，識別高價值客戶，並制定精準的行銷策略。</p>

<p><strong>銷售趨勢分析</strong>：通過視窗函數和時間序列分析，企業可以識別銷售的季節性模式、長期趨勢，以及異常波動。這些洞察對於庫存管理、行銷預算分配、業績預測都極其重要。</p>

<p><strong>客戶行為分析</strong>：利用陣列處理和路徑分析功能，企業可以深入了解客戶在網站或應用中的行為軌跡，識別轉換的關鍵節點，優化用戶體驗。</p>

<h3 class="wp-block-heading">即時數據分析</h3>

<p>BigQuery 的流式數據處理能力使其成為即時分析的理想選擇：</p>

<p><strong>網站流量監控</strong>：結合 Google Analytics 和其他數據源，企業可以即時監控網站效能、用戶行為，並在發現異常時立即採取行動。</p>

<p><strong>IoT 數據處理</strong>：製造業、物流業等可以利用 BigQuery 處理來自感測器、設備的海量 IoT 數據，進行預測性維護、品質控制等。</p>

<p><strong>金融風險監控</strong>：金融機構可以即時分析交易數據，檢測可疑的詐欺行為，確保業務安全。</p>

<h3 class="wp-block-heading">進階分析應用</h3>

<p>BigQuery 的機器學習整合和進階分析功能開啟了更多可能性：</p>

<p><strong>預測分析</strong>：從客戶流失預測到需求預測，企業可以利用歷史數據建立預測模型，為未來的決策提供數據支持。</p>

<p><strong>推薦系統</strong>：電商、媒體公司可以利用 BigQuery ML 建立個人化推薦系統，提升用戶參與度和轉換率。</p>

<p><strong>異常檢測</strong>：無論是網路安全、品質控制還是業務營運，BigQuery 的異常檢測功能都能幫助企業及時發現問題。</p>

<h2 class="wp-block-heading">總結</h2>

<p>BigQuery 代表了數據分析技術的一個重要里程碑。它不僅僅是一個「會下 SQL 的資料庫」，而是一個功能完整、效能卓越的現代數據分析平台。從 Dremel 的學術研究到 BigQuery 的商業成功，這個演進過程展示了雲端運算如何徹底改變了數據分析的格局。</p>

<p>對於企業而言，BigQuery 提供了突破傳統基礎設施限制的機會，讓組織能夠專注於數據洞察而非技術維護。其豐富的分析功能、卓越的效能表現，以及與 Google Cloud 生態系統的深度整合，使其成為現代數據驅動型企業的理想選擇。</p>

<p>隨著數據量的持續增長和分析需求的日益複雜，BigQuery 這樣的雲端原生數據平台將繼續發揮重要作用，推動企業數據分析能力的不斷提升。</p>

<p>相關文章：</p>

<p><a href="https://www.dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/">雲端界陳浩南 – BigQuery 是什麼？功能、組成元件、特色和優勢完整介紹</a></p>

<p><a href="https://www.dongdonggcp.com/2025/02/12/how-to-upload-data-to-bigquery/">把資料上傳到 BigQuery 的各種方法和步驟</a></p>

<p> </p>
								</div>
				</div>
					</div>
				</div>
				</div><p>The post <a href="https://dongdonggcp.com/2025/07/04/is-bigquery-a-database-what-is-the-usage/">BigQuery 不就是查詢嗎？跟資料庫差在哪裡？能做什麼分析？</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/07/04/is-bigquery-a-database-what-is-the-usage/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">11072</post-id>	</item>
		<item>
		<title>Dataproc 是什麼？四大優勢與使用方法介紹</title>
		<link>https://dongdonggcp.com/2025/04/23/whai-is-dataproc-architecture-and-usage-introduction/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=whai-is-dataproc-architecture-and-usage-introduction</link>
					<comments>https://dongdonggcp.com/2025/04/23/whai-is-dataproc-architecture-and-usage-introduction/#respond</comments>
		
		<dc:creator><![CDATA[admin]]></dc:creator>
		<pubDate>Wed, 23 Apr 2025 10:13:24 +0000</pubDate>
				<category><![CDATA[大數據處理和分析]]></category>
		<category><![CDATA[Dataproc]]></category>
		<category><![CDATA[GCP]]></category>
		<category><![CDATA[Hadoop]]></category>
		<category><![CDATA[HDFS]]></category>
		<category><![CDATA[Hive]]></category>
		<category><![CDATA[Spark]]></category>
		<category><![CDATA[大數據]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=10584</guid>

					<description><![CDATA[<p>Dataproc 是 GCP 上的全代管的大數據處理服務，它支援大數據工具如 Apache Spark、Hadoop、Hive 等，不用自行安裝環境。<br />
你可以直接進入 Comman Line 視窗，下達指令來探索和處理資料。你也可以撰寫 Spark 腳本，提交給 Dataproc 自動執行。</p>
<p>The post <a href="https://dongdonggcp.com/2025/04/23/whai-is-dataproc-architecture-and-usage-introduction/">Dataproc 是什麼？四大優勢與使用方法介紹</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">認識 Google Cloud Dataproc</h1>



<h2 class="wp-block-heading">Dataproc 是什麼？</h2>



<p><a href="https://cloud.google.com/dataproc?hl=zh-TW" target="_blank" rel="noopener" title="">Dataproc</a> 是 GCP 的一個全代管的大數據處理服務，它支援開源的大數據生態系統工具，如 <a href="https://cloud.google.com/learn/what-is-apache-spark?hl=zh-TW" target="_blank" rel="noopener" title="">Apache Spark</a>、<a href="https://cloud.google.com/learn/what-is-hadoop?hl=zh-TW" target="_blank" rel="noopener" title="">Hadoop</a>、<a href="https://hive.apache.org/" target="_blank" rel="noopener" title="">Hive</a> 等。</p>



<p>簡單說，Dataproc 幫你把資料處理這件事，變得又快又簡單，就像把一座沉重的工廠裝進自動販賣機，按一下就能開工。</p>



<h2 class="wp-block-heading">為什麼選擇 Dataproc？四大優勢</h2>



<p><strong>1.  快速啟動與彈性擴展</strong>：只需幾分鐘就能啟動叢集，根據工作負載自動擴縮。</p>



<p><strong>2. 與 GCP 生態系整合</strong>：無縫串接 <a href="https://dongdonggcp.com/2024/11/23/what-is-bigquery-functions-advantages/" target="_blank" rel="noopener" title="">BigQuery</a>、<a href="https://dongdonggcp.com/2024/11/27/what-is-google-cloud-storage/" target="_blank" rel="noopener" title="">Cloud Storage</a>、<a href="https://dongdonggcp.com/2025/04/14/vertex-ai-functions-agent-builder-model-builder-model-garden-introduction/" target="_blank" rel="noopener" title="">Vertex AI</a> 等工具。</p>



<p>3. 精準付費、節省成本：按秒計費、支援自動關閉機制，有效降低閒置成本。</p>



<p>4. 使用你本來就會的技能： Dataproc 包含 Hadoop、Spark、Hive、Pig 等 Open Source 的工具，不用重新學習。</p>



<h1 class="wp-block-heading">Dataproc 的應用場景</h1>



<h2 class="wp-block-heading">大數據處理</h2>



<p>無論是 ETL（Extract, Transform, Load）處理，還是資料清洗、彙整，都可以用 Dataproc。</p>



<h2 class="wp-block-heading">結合 Spark 進行機器學習訓練</h2>



<p>Dataproc 支援 <a href="https://spark.apache.org/mllib/" target="_blank" rel="noopener" title="">Spark MLlib</a>，你可以直接在叢集上進行分散式訓練，大幅提升訓練速度與模型精度。</p>



<h2 class="wp-block-heading">搭配 Jupyter Notebook 做互動分析</h2>



<p>開發者可透過 <a href="https://cloud.google.com/dataproc/docs/concepts/components/jupyter" target="_blank" rel="noopener" title="">Jypyter Notebook</a> 與叢集互動，實現即時查詢與分析，彷彿在大型資料倉庫裡漫步，探索資料的可能性。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="569" src="https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc-Architecture-1024x569.png" alt="" class="wp-image-10585" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc-Architecture-1024x569.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc-Architecture-300x167.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc-Architecture-768x427.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc-Architecture-1536x854.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc-Architecture.png 1702w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h1 class="wp-block-heading">Dataproc 的架構設計概念</h1>



<h2 class="wp-block-heading"><strong>叢集（Cluster）與節點角色說明</strong></h2>



<p>Dataproc 叢集主要包含兩種節點角色：Master 與 Worker。就像一個工廠，Master 是主管，Worker 是執行員工。</p>



<p>而節點其實就是 Compute Engine 的虛擬機器，因為我們是對整個 Cluster 操作，不針對某一台 VM，所以我們才稱它們叫 Node。</p>



<h3 class="wp-block-heading">Master 節點與 Worker 節點的差異</h3>



<ul class="wp-block-list">
<li><strong>Master</strong>：負責指派任務、監控進度、管理資源。</li>
</ul>



<ul class="wp-block-list">
<li><strong>Worker</strong>：實際執行 Spark Job 與 Hadoop Task。</li>
</ul>



<h3 class="wp-block-heading">如何選擇正確的 VM 類型？</h3>



<p><strong>n2-standard</strong> 適合大多數應用。</p>



<p><strong>e2-medium</strong> 適合成本敏感的小型專案。</p>



<p>可依工作負載選擇是否搭配 GPU 或高記憶體，但如果是初學者，建議不要開太大的機器喔！</p>



<h2 class="wp-block-heading">Spark、Hadoop、Hive 在架構中的定位</h2>



<ul class="wp-block-list">
<li><strong>Spark</strong>：主力計算框架，支援即時與批次任務。</li>
</ul>



<ul class="wp-block-list">
<li><strong>Hadoop HDFS</strong>：用於資料儲存與分散處理。</li>
</ul>



<ul class="wp-block-list">
<li><strong>Hive</strong>：提供 SQL 介面查詢 HDFS 中的資料。</li>
</ul>



<h1 class="wp-block-heading">實際操作：如何建立一個 Dataproc Cluster (叢集)</h1>



<h2 class="wp-block-heading">在 GCP Console 上建立步驟</h2>



<p>進入 Dataproc =&gt; Cluster。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="753" height="488" src="https://dongdonggcp.com/wp-content/uploads/2025/04/click_create_dataproc_cluster.png" alt="" class="wp-image-10586" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/click_create_dataproc_cluster.png 753w, https://dongdonggcp.com/wp-content/uploads/2025/04/click_create_dataproc_cluster-300x194.png 300w" sizes="(max-width: 753px) 100vw, 753px" /></figure>



<p>選擇 Compute Engine。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="527" height="377" src="https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_on_compute_engine.png" alt="" class="wp-image-10587" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_on_compute_engine.png 527w, https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_on_compute_engine-300x215.png 300w" sizes="(max-width: 527px) 100vw, 527px" /></figure>



<p>給 Cluster 命名，選擇 Region 和 Zone，我是照 <a href="https://www.cloudskillsboost.google/focuses/586?catalog_rank=%7B%22rank%22%3A1%2C%22num_filters%22%3A1%2C%22has_search%22%3Atrue%7D&amp;parent=catalog&amp;search_id=44571046" target="_blank" rel="noopener" title="">《Dataproc: Qwik Start &#8211; Console》</a> 這個 Lab 做的，所以就跟它一模一樣，你也可以選擇台灣 asia-east1 喔！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="926" height="542" src="https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_region_zone.png" alt="" class="wp-image-10588" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_region_zone.png 926w, https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_region_zone-300x176.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/cluster_region_zone-768x450.png 768w" sizes="(max-width: 926px) 100vw, 926px" /></figure>



<p>先設定 Manager Node，我還是習慣叫 Master Node。</p>



<p>這裡要注意，剛開始你可能會找不到 N1、N2 或 E2 的主機，你要先把 Disk 改成 Standard 的，這幾個型號就會出現了。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="914" height="580" src="https://dongdonggcp.com/wp-content/uploads/2025/04/Master-Node.png" alt="" class="wp-image-10589" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/Master-Node.png 914w, https://dongdonggcp.com/wp-content/uploads/2025/04/Master-Node-300x190.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/Master-Node-768x487.png 768w" sizes="(max-width: 914px) 100vw, 914px" /></figure>



<p>一樣的做法再設定 Worker Node。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="918" height="700" src="https://dongdonggcp.com/wp-content/uploads/2025/04/Worker-Node.png" alt="" class="wp-image-10590" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/Worker-Node.png 918w, https://dongdonggcp.com/wp-content/uploads/2025/04/Worker-Node-300x229.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/Worker-Node-768x586.png 768w" sizes="(max-width: 918px) 100vw, 918px" /></figure>



<p>在 IP 的部分，原本 「Internal IP only」是有勾選的，要把它取消喔，</p>



<p>如果只有內部 IP，是不容易從部外連進去的，</p>



<p>它會先勾選，我想是為了安全性的問題，怕任何人都可以連到 Dataproc，</p>



<p>但我們是初學者，玩一下就會馬上把它刪掉(記得喔)，所以沒關係！</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="925" height="488" src="https://dongdonggcp.com/wp-content/uploads/2025/04/use-external-IP.png" alt="" class="wp-image-10591" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/use-external-IP.png 925w, https://dongdonggcp.com/wp-content/uploads/2025/04/use-external-IP-300x158.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/use-external-IP-768x405.png 768w" sizes="(max-width: 925px) 100vw, 925px" /></figure>



<p>接下來等大概五分鐘左右，它就準備好了。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="897" height="452" src="https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-21-下午5.49.01.png" alt="" class="wp-image-10593" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-21-下午5.49.01.png 897w, https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-21-下午5.49.01-300x151.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-21-下午5.49.01-768x387.png 768w" sizes="(max-width: 897px) 100vw, 897px" /></figure>



<p>同時你也可以在 Compute Engine 頁面上看到真的有機器開出來，一台 Master Node，兩台 Worker Node。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="932" height="378" src="https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc_Cluster_Nodes.png" alt="" class="wp-image-10604" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc_Cluster_Nodes.png 932w, https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc_Cluster_Nodes-300x122.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/Dataproc_Cluster_Nodes-768x311.png 768w" sizes="(max-width: 932px) 100vw, 932px" /></figure>



<p>接下來有兩種操作場景。</p>



<h2 class="wp-block-heading">第一種是直接連到 Dataproc Master Node 的 Command Line</h2>



<p>(本部份取自網路上的 YouTube 影片：<a href="https://www.youtube.com/watch?v=ED9emgRK48Q" target="_blank" rel="noopener" title="">GCP Dataproc Cluster creation | HDFS and Hive</a>)</p>



<p>先 SSH 連到 Master Node，然後上傳一個要分析的檔案。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="267" src="https://dongdonggcp.com/wp-content/uploads/2025/04/Upload_Hadoop_File-1024x267.png" alt="" class="wp-image-10596" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/Upload_Hadoop_File-1024x267.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/Upload_Hadoop_File-300x78.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/Upload_Hadoop_File-768x201.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/Upload_Hadoop_File-1536x401.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/04/Upload_Hadoop_File.png 1742w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>進入 Hive 建立資料庫名叫 “vehicle”。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="253" src="https://dongdonggcp.com/wp-content/uploads/2025/04/create_hive_database-1024x253.png" alt="" class="wp-image-10597" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/create_hive_database-1024x253.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_hive_database-300x74.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_hive_database-768x189.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_hive_database-1536x379.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_hive_database.png 1829w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>建立表格 “vehicle_sold”，並查詢表格結構。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="306" src="https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select_schema-1024x306.png" alt="" class="wp-image-10606" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select_schema-1024x306.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select_schema-300x90.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select_schema-768x230.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select_schema-1536x460.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select_schema.png 1855w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>接下來使用語法來查詢資料，看到能正常顯示剛上傳的資料。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="466" src="https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select-1024x466.png" alt="" class="wp-image-10598" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select-1024x466.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select-300x137.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select-768x350.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select-1536x699.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/04/create_table_and_select.png 1729w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>你會在上半部看到效能數據，如果資料量很大，可以查看是否需要調整主機規格來優化效能。</p>



<p>其中 Map 1 是什麼意思？</p>



<p>“1” 是第一階段，Map 是映射任務，資料被分割成多個小塊，每個小塊由一個 Map 任務處理。</p>



<p>把資料轉成 key-value 格式，例如 (Venue, 302), (Ertiga, 123)。</p>



<p>最後來下一個加總語法，查詢各類汽車銷售數量。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="485" src="https://dongdonggcp.com/wp-content/uploads/2025/04/select_group_by-1024x485.png" alt="" class="wp-image-10601" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/select_group_by-1024x485.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/select_group_by-300x142.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/select_group_by-768x363.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/select_group_by-1536x727.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/04/select_group_by.png 1665w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>“Reducer2” 是第二階段 &#8211; 歸納任務，Reducer 接收 Map 任務輸出的 key-value，然後將相同 key 的 value 合併。</p>



<p>例如相同 Creta 的 336 和 265 加總起來為 601。</p>



<p>以上是第一種使用場景，就是讓你可以用下指令的方式，跟 Dataproc 互動操作。</p>



<h2 class="wp-block-heading">第二種場景是提交你寫好的 Job 程式碼給 Dataproc 自動執行</h2>



<p>(本部分是我操作 Skillboost Lab：<a href="Dataproc: Qwik Start - Console" target="_blank" rel="noopener" title="">Dataproc: Qwik Start &#8211; Console</a> 的截圖)</p>



<p>接下來去 Jobs，我們要準備提交一個 Job。</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="990" height="543" src="https://dongdonggcp.com/wp-content/uploads/2025/04/create-job.png" alt="" class="wp-image-10595" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/create-job.png 990w, https://dongdonggcp.com/wp-content/uploads/2025/04/create-job-300x165.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/create-job-768x421.png 768w" sizes="(max-width: 990px) 100vw, 990px" /></figure>



<p>在這個 Lab 我們要用一支程式去計算圓周率，所以要引入一個 org.apache.spark.examples.SparkPi 這個 Class，</p>



<p>然後再給它執行 Job 細節的程式碼檔案：file:///usr/lib/spark/examples/jars/spark-examples.jar</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="807" height="540" src="https://dongdonggcp.com/wp-content/uploads/2025/04/job_config_1.png" alt="" class="wp-image-10602" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/job_config_1.png 807w, https://dongdonggcp.com/wp-content/uploads/2025/04/job_config_1-300x201.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/job_config_1-768x514.png 768w" sizes="(max-width: 807px) 100vw, 807px" /></figure>



<p>這個程式使用<a href="https://zh.wikipedia.org/zh-tw/%E8%92%99%E5%9C%B0%E5%8D%A1%E7%BE%85%E6%96%B9%E6%B3%95" target="_blank" rel="noopener" title="">蒙地卡羅方法</a>（Monte Carlo Method）來估算圓周率（Pi）的值，</p>



<p>參數 1000 代表程式將生成的 x,y 座標點對的數量，生成的點對越多，估算的圓周率值就越精確。</p>



<p>所以，當你在 Arguments 欄位中輸入 1000 時，您實際上是在告訴 SparkPi 程式生成 1000 個隨機點來估算 Pi 值。</p>



<p>如果您輸入更大的數字（例如 10000 或 100000），估算會更精確，但計算時間也會更長。</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="556" src="https://dongdonggcp.com/wp-content/uploads/2025/04/Pi-1024x556.png" alt="" class="wp-image-10603" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/Pi-1024x556.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/04/Pi-300x163.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/04/Pi-768x417.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/04/Pi.png 1204w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>最後我們會在 Job Details 看到它算出來的圓周率，你會看到它有點不準。</p>



<p>我們記得 Pi 是 3.1415926&#8230;&#8230;，但它算出來竟然是 3.14193&#8230;&#8230;.</p>



<p>因為它只算 1000 個點，所以沒那麼準，如果算更多個點，一定比我們記憶的還準。</p>



<h2 class="wp-block-heading">Dataproc 和 <a href="https://dongdonggcp.com/2024/11/23/what-is-dataflow-vs-apache-beam/" target="_blank" rel="noopener" title="">Dataflow</a> 很像？到底有何差異？</h2>



<p>當你在 Dataproc 上執行 Spark Job 時，確實會有一些操作方式上的相似點：</p>



<ul class="wp-block-list">
<li>兩者都能執行預先編譯好的程式（JAR 檔案、Python 腳本等）</li>



<li>兩者都能處理批次和串流資料</li>



<li>兩者都能自動分散工作負載到多個節點</li>
</ul>



<p>但根本差異仍然存在。</p>



<p><strong>Dataproc 執行 Spark 程式時：</strong></p>



<ul class="wp-block-list">
<li>你要先建立和維護 Dataproc Cluster</li>



<li>使用 <code>gcloud dataproc jobs submit spark</code> 或通過 Web UI 提交 JAR 檔</li>



<li>Spark 程式會在你開好的 Cluster 上執行</li>



<li>叢集資源是固定的（除非手動調整）</li>



<li>叢集在任務完成後繼續存在（除非配置為自動刪除）</li>
</ul>



<p><strong>Dataflow 執行 <a href="https://beam.apache.org/about/" target="_blank" rel="noopener" title="">Apache Beam</a> 程式時：</strong></p>



<ul class="wp-block-list">
<li>不用預先建立 Cluster</li>



<li>提交程式後，Dataflow 會自動建立和管理執行環境</li>



<li>資源會根據工作負載 Autoscale</li>



<li>任務完成後，所有資源會自動釋放 (刪除 Cluster)</li>
</ul>



<p>簡言之，Dataproc 執行 Spark 程式時，你仍需管理基礎架構 (Cluster)，而 Dataflow 則完全幫你管理這一層面。</p>



<p>這就是為什麼在某些使用案例中，兩者看起來很相似，</p>



<p>都是提交預先寫好的程式來處理資料，但底層的資源管理和架構哲學是不同的。</p>



<h3 class="wp-block-heading">Dataproc 和 Dataflow 比較表</h3>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="756" height="611" src="https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-23-下午5.28.43.png" alt="" class="wp-image-10608" srcset="https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-23-下午5.28.43.png 756w, https://dongdonggcp.com/wp-content/uploads/2025/04/截圖-2025-04-23-下午5.28.43-300x242.png 300w" sizes="(max-width: 756px) 100vw, 756px" /></figure>



<h1 class="wp-block-heading">工作流程範本  Dataproc Workflow Template</h1>



<h2 class="wp-block-heading">自動化任務排程的關鍵利器</h2>



<p><a href="https://cloud.google.com/dataproc/docs/concepts/workflows/overview" target="_blank" rel="noopener" title="">Workflow Templates</a> 用來設定和管理一系列相依的 Dataproc 作業 (Job)，</p>



<p>例如 A Job 必須完成之後，再開始 B Job。</p>



<p>就像食譜，你只需設定好步驟與材料，系統會自動幫你依序完成資料處理任務。</p>



<p>注意建立範本後，Dataproc 不會建立 Cluster 或開始運作。只有在建立機器後才會開始工作。</p>



<h3 class="wp-block-heading">工作流程範本的種類</h3>



<p><strong>代管叢集 Managed Cluster</strong></p>



<p>當你手上沒有運作中的 Cluster，工作流程會建立一個「臨時」Cluster 來運行作業，完成時刪除該 Cluster。</p>



<p><strong>叢集選擇器 Cluster Selector</strong></p>



<p>當你手上有幾個運作中的 Cluster，你可以下標籤來指定做事的 Cluster，有點像 Kubernetes 那種管理方法。</p>



<p>每個 Cluster 都可以設標籤，是 key-value 的結構，例如你有 3 個 Cluster：</p>



<p>cluster-1 的標籤&nbsp; analytics=ig</p>



<p>cluster-2 的標籤&nbsp; analytics=fb</p>



<p>cluster-3 的標籤&nbsp; web=click</p>



<p>你指定 analytics=fb，cluster-2 就會開始做事。</p>



<p>它會選具有完全相同標籤的 cluster 來工作，而且會找具有最多 YARN 可用記憶體的叢集來運行所有工作流程作業。</p>



<p>但工作完，Cluster 會持續存在，不會把你的 Cluster 刪掉。</p>



<h1 class="wp-block-heading">Dataproc 與其他 GCP 工具整合</h1>



<h3 class="wp-block-heading"><strong>結合 BigQuery 快速查詢分析結果</strong></h3>



<p>Dataproc 可以使用 <a href="https://cloud.google.com/dataproc/docs/concepts/connectors/bigquery" target="_blank" rel="noopener" title="">BigQuery 連接器</a>在 Spark 或 Hadoop 作業中直接讀寫 BigQuery 資料。</p>



<p>處理完的結果可直接匯入 BigQuery，進行後續報表分析與視覺化。</p>



<p>如果經常使用 Dataproc、Cloud Storage 和 BigQuery，建議使用 Avro 格式的資料，因為完全相容。 </p>



<h3 class="wp-block-heading"><strong>與 Cloud Storage 無縫資料串接</strong></h3>



<p>傳統上 Hadoop 用 HDFS 在資料的永久儲存，確保資料在系統關閉或重啟後仍然存在。</p>



<p>在 Dataproc 上使用 <a href="https://cloud.google.com/dataproc/docs/concepts/connectors/cloud-storage" target="_blank" rel="noopener" title="">Cloud Storage 連接器</a>時，可以讓 Dataproc 直接讀寫儲存在 Cloud Storage 上的資料，</p>



<p>無需使用 HDFS。(因為 Dataproc 通常用完就會刪掉環境，上面的 Disk 跟著刪除)</p>



<p>而且 GCS 還比 Disk 便宜。</p>



<p>你可以再搭配 GCS 的物件生命週期管理 Object Lifecycle，有效控管儲存成本。</p>



<h1 class="wp-block-heading">成本管理與效能最佳化技巧</h1>



<h2 class="wp-block-heading">如何利用預留節點與自動關機功能省錢</h2>



<p>使用 Preemptible VM（可搶占節點）節省 80% 成本，但這種主機可能隨時被終止。</p>



<p>建議你用在容錯性高的批次處理工作（可以隨時停下來、即使失敗也可以重試、有備份機制），</p>



<p>也就是「不緊急不重要的工作」。</p>



<p>建議搭配重試機制和優雅停用 (Graceful Decommissioning) 設定，確保正在進行的工作在節點移除前完成。</p>



<h3 class="wp-block-heading"><strong>使用 Cloud Logging 監控資源與效能</strong></h3>



<p>透過指標追蹤 CPU、Memory 使用率，找出瓶頸，優化叢集配置。</p>



<h1 class="wp-block-heading"><strong>Dataproc 常見錯誤與排除方式</strong></h1>



<h2 class="wp-block-heading">排查任務失敗的三個關鍵檢查點</h2>



<ul class="wp-block-list">
<li>驗證 Cluster 資源是否足夠，像記憶體是不是快爆了。</li>



<li>檢查程式碼是否有錯誤。</li>



<li>檢查輸入資料路徑是否正確。</li>
</ul>



<h2 class="wp-block-heading">如何讀懂 Job Logs 與錯誤訊息</h2>



<p>進入 Job Logs，根據錯誤訊息回推失敗原因，例如記憶體不足、格式錯誤、路徑遺失等。</p>



<p>你也可以直接錯誤的 Log 拿去問 ChatGPT。</p>



<h1 class="wp-block-heading">適合導入 Dataproc 的企業情境</h1>



<h2 class="wp-block-heading">金融業：批次風險模型計算</h2>



<p>金融機構常需夜間批次執行大量風控模型，Dataproc 正好適合這種短時高負載任務。</p>



<h2 class="wp-block-heading">零售業：銷售資料彙總與推薦引擎訓練</h2>



<p>從 POS 資料中彙總趨勢、訓練推薦模型，Dataproc 可有效協助行銷與庫存預測。</p>



<p>當然，可以做批次處理的工具都可以，像上面提到的 Dataflow，取決於你對哪個比較熟悉。</p>



<h1 class="wp-block-heading">結語：Dataproc 是否適合你的團隊？</h1>



<p>如果你的團隊正在處理大量資料，需要彈性資源、自動化流程，</p>



<p>或正從傳統平台轉型到雲端，那麼 Dataproc 將會是你強而有力的幫手。</p>



<p>它不只是工具，更是未來資料基礎建設的基石。</p>



<h1 class="wp-block-heading">常見問答（FAQ）</h1>



<p><strong>Q1：Dataproc 可以不寫程式嗎？</strong><br>A：可以透過 Workflow Template 搭配 SQL、Hive 指令，降低程式依賴。（所以還是要拿下指令）</p>



<p>真的要不寫程式，可以考慮用 Dataprep，它是互動式並且視覺化的操作界面，可以設定資料處理規則讓它自動執行。</p>



<p><strong>Q2：Dataproc 和 BigQuery 哪個適合分析？</strong><br>A：BigQuery 適合即時分析，Dataproc 則擅長處理大量轉換、清洗、模型訓練等流程，Dataproc 的分析，主要是拿來探索用的，就是讓你大概看一下資料長怎樣，不方便做大規模而且複雜的分析。</p>



<p><strong>Q3：有支援 GPU 計算嗎？</strong><br>A：有，可以在 Worker 節點指定使用 GPU 運算資源。</p>



<p><strong>Q4：Dataproc 支援 Python 嗎？</strong><br>A：完全支援，Spark 任務可用 PySpark 寫成，也可整合 Notebook 開發環境。</p>



<p><strong>Q5：部署後多久能用？</strong><br>A：幾分鐘內即可建立好叢集，立即上線處理任務。</p>



<p></p>



<p></p>



<p></p><p>The post <a href="https://dongdonggcp.com/2025/04/23/whai-is-dataproc-architecture-and-usage-introduction/">Dataproc 是什麼？四大優勢與使用方法介紹</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/04/23/whai-is-dataproc-architecture-and-usage-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10584</post-id>	</item>
	</channel>
</rss>
