<?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>BigQuery External Table - 東東 GCP 教學 - GCP 實戰講師</title>
	<atom:link href="https://dongdonggcp.com/tag/bigquery-external-table/feed/" rel="self" type="application/rss+xml" />
	<link>https://dongdonggcp.com</link>
	<description>助你考取證照，轉職成功</description>
	<lastBuildDate>Mon, 07 Apr 2025 06:11:45 +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>BigQuery External Table - 東東 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 教學] 把資料上傳到 BigQuery 的各種方法和步驟</title>
		<link>https://dongdonggcp.com/2025/02/12/how-to-upload-data-to-bigquery/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=how-to-upload-data-to-bigquery</link>
					<comments>https://dongdonggcp.com/2025/02/12/how-to-upload-data-to-bigquery/#respond</comments>
		
		<dc:creator><![CDATA[東東]]></dc:creator>
		<pubDate>Wed, 12 Feb 2025 07:35:28 +0000</pubDate>
				<category><![CDATA[BigQuery]]></category>
		<category><![CDATA[上雲]]></category>
		<category><![CDATA[AWS S3]]></category>
		<category><![CDATA[BigQuery External Table]]></category>
		<category><![CDATA[Dataflow]]></category>
		<category><![CDATA[Datastream]]></category>
		<category><![CDATA[Federated Query]]></category>
		<category><![CDATA[Pub/Sub]]></category>
		<category><![CDATA[Streaming Insert]]></category>
		<guid isPermaLink="false">https://dongdonggcp.com/?p=8514</guid>

					<description><![CDATA[<p>一、前言 &#8211; BigQuer [&#8230;]</p>
<p>The post <a href="https://dongdonggcp.com/2025/02/12/how-to-upload-data-to-bigquery/">[BigQuery 教學] 把資料上傳到 BigQuery 的各種方法和步驟</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></description>
										<content:encoded><![CDATA[<h1 class="wp-block-heading">一、前言 &#8211; BigQuery 的簡介與優勢</h1>



<p>BigQuery 是 GCP 的企業級資料倉儲服務，它可以快速處理結構化和非結構化資料，並提供即時查詢和分析功能。</p>



<p>它主要針對需要分析大量資料的企業所設計，例如電子商務平台、遊戲公司、媒體公司和金融服務公司等等。簡述 BigQuery 的優勢如下：</p>



<h2 class="wp-block-heading">(一) 再大的資料都能即時高速處理與查詢</h2>



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



<p>而且無論是幾百 GB 的數據，還是幾 PB 的數據，BigQuery 都能輕鬆處理。它的擴充能力確保即使你的業務需求增長，你的資料分析能力也能跟上。</p>



<figure class="wp-block-image aligncenter size-full"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/01-bigquery-e69fa5e8a9a2-1000-e58484e7ad86e58faae8a681-24-e7a792.gif" alt="" class="wp-image-8526" /><figcaption class="wp-element-caption">01 BigQuery 查詢 1000 億筆只要 24 秒<br>資料來源 <a href="https://cloud.google.com/blog/products/bigquery/anatomy-of-a-bigquery-query">GCP 官方部落格</a></figcaption></figure>



<h2 class="wp-block-heading">(二) 串接各種資料來源</h2>



<p>BigQuery 自問世以來，便極力整合巿面上各種服務，尤其是針對第三方的資料來源，開發了各種連接器 (Connector) 來串接，直接省去你手動傳輸的工作，非常方便。</p>



<p>建議你可以先查看<a href="https://cloud.google.com/bigquery/docs/dts-introduction#supported_data_sources">官方文件</a>，也許你的資料來源已經內建整合 BigQuery 的功能喔！</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/02-bigquery-e4b8b2e68ea5e59084e7a8aee8b387e69699e4be86e6ba90.png?w=1024" alt="" class="wp-image-8527" /><figcaption class="wp-element-caption">02 BigQuery 串接各種資料來源<br>資料來源 <a href="https://cloud.google.com/blog/products/data-analytics/introducing-bigquery-partner-center">GCP 官方部落格</a></figcaption></figure>



<h2 class="wp-block-heading">(三) 無伺服器容易上手</h2>



<p>使用 BigQuery 根本不用開機器，直接倒入資料就可以開始分析，光是這一點就足以輾壓巿面上各種分析工具。而且你只要使用 SQL 語法就能分析出結果 (如第一張圖片)，不用重新學習新的語法，對使用者非常友善。</p>



<p>基於以上特色，BigQuery 在世界各地早已經有各大知名企業使用，最知名的就是 <a href="https://cloud.google.com/blog/products/data-analytics/how-twitter-modernized-its-data-processing-with-google-cloud">Twitter</a> (現在叫 X)，而在台灣像是知名的社群數據分析公司 <a href="https://cloud.google.com/customers/qsearch">QSearch</a>，在 8 小時內可以分析 432 億筆資料。<a href="https://www.ithome.com.tw/people/134613">痞客邦</a> 幾10秒就查完 60 億筆資料。</p>



<p>其他成功案例還有 <a href="https://cloud.google.com/customers/kkbox">KKBOX</a>、<a href="https://cloud.google.com/customers/ettoday?hl=zh-tw">東森新聞雲</a>、大數據(<a href="https://cloud.google.com/customers/big-data?hl=zh-tw">網路溫度計</a>)、旋轉拍賣 <a href="https://cloud.google.com/customers/carousell">Carousell</a>、<a href="https://cloud.google.com/customers/smartdaily?hl=en">智生活</a>、<a href="https://cloud.google.com/customers/udn">UDN 聯合新聞網</a>、 <a href="https://cloud.google.com/customers/qburger?hl=en">QBurger</a>、<a href="https://cloud.google.com/customers/freshworks">Freshworks</a>、<a href="https://cloud.google.com/customers/blibli-com">Blibli </a>等等，族繁不及備載。</p>



<h1 class="wp-block-heading">二、資料上傳到 BigQuery 的方法介紹</h1>



<p>BigQuery 支援多種上傳資料的方法和工具，方便企業處於各種不同情境，都能夠找到方法把資料匯入 BigQuery，分述如下：</p>



<h2 class="wp-block-heading">(一) 手動匯入檔案</h2>



<h3 class="wp-block-heading">1. 從本機上傳 CSV 檔</h3>



<p>假如你剛開始使用 GCP，你可以先在 Console 上面手動匯入一筆小量的資料，我這裡先準備一個 CSV 檔案，內容是 GCP 的帳單明細。如果你想用我的資料測試看看，也可以從<a href="https://docs.google.com/spreadsheets/d/1y_mBUVcydMv7Mk7QpPAdXwA-k6mNmCWZvFuOliYAtL0/edit?usp=drive_link">這裡下載</a>。</p>



<p>這裡要注意如果第一列是你的欄位名稱，務必要確保它是小寫英文字母開頭，後面是可接英文和數字，如果有空格請使用底線，萬一沒有按照要求來匯入資料，就會失敗喔！</p>



<figure class="wp-block-image aligncenter size-large"><img fetchpriority="high" decoding="async" width="1996" height="1026" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/03-e5b8b3e596aee6988ee7b4b0-csv-e6aa94.png?w=1024" alt="" class="wp-image-8528" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/03-e5b8b3e596aee6988ee7b4b0-csv-e6aa94.png 1996w, https://dongdonggcp.com/wp-content/uploads/2025/02/03-e5b8b3e596aee6988ee7b4b0-csv-e6aa94-300x154.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/03-e5b8b3e596aee6988ee7b4b0-csv-e6aa94-1024x526.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/03-e5b8b3e596aee6988ee7b4b0-csv-e6aa94-768x395.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/03-e5b8b3e596aee6988ee7b4b0-csv-e6aa94-1536x790.png 1536w" sizes="(max-width: 1996px) 100vw, 1996px" /><figcaption class="wp-element-caption">03 帳單明細 CSV 檔<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>我們先到 <a href="https://console.cloud.google.com/bigquery">BigQuery 的主畫面</a>，然後點擊「建立資料集」，也就是 Dataset：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="2108" height="1352" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset.png?w=1024" alt="" class="wp-image-8529" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset.png 2108w, https://dongdonggcp.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset-300x192.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset-1024x657.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset-768x493.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset-1536x985.png 1536w, https://dongdonggcp.com/wp-content/uploads/2025/02/04-e9bb9ee6938ae5bbbae7ab8b-bigquery-dataset-2048x1314.png 2048w" sizes="(max-width: 2108px) 100vw, 2108px" /><figcaption class="wp-element-caption">04 點擊建立 BigQuery Dataset<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>點擊之後，馬上跳出側邊視窗，先設定 Dataset ID，注意不能用 “-” 而是要用 “_”。另外 Dataset ID 並不像 Cloud Storage，使用全球獨一無二的 Bucket ID，你可以設定任何的 Dataset ID。</p>



<p>在位置部分，和 Snapshot 或 Image 一樣，你可以設定單一地區或是多個地區的儲存位置。</p>



<p>下方有一個預設資料表到期時間，通常我們不會去設定，因為萬一時間到了，整個 Dataset 的資料都會刪除乾淨。除非你很確定只是短期使用，再做這個設定。</p>



<p>確認沒問題的話，就可以點擊「建立資料集」。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/05-e8a8ade5ae9a-dataset-id-e5928ce59cb0e58d80.png?w=808" alt="" class="wp-image-8530" /><figcaption class="wp-element-caption">05 設定 Dataset ID 和地區<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>接下來你會看到左邊已經產生剛剛建立的 Dataset，並在右邊視窗看到相關資訊，我們再點擊「建立資料表」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/06-e5bbbae7ab8be8b387e69699e8a1a8.png?w=1024" alt="" class="wp-image-8531" /><figcaption class="wp-element-caption">06 建立資料表<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>接著跳出側邊的視窗，我們在來源部分點擊下拉選單，選擇來源為「上傳」。</p>



<p>同時你也會看到它可以從各種不同來源來建立資料表，例如 Cloud Storage、雲端硬碟、Bigtable 甚至 AWS 的 S3 和 Azure Blob Storage 都可以是匯入資料的來源。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/07-e9808fe9818ee4b88ae582b3e6aa94e6a188e4be86e5bbbae7ab8be8b387e69699e8a1a8.png?w=1024" alt="" class="wp-image-8532" /><figcaption class="wp-element-caption">07 透過上傳檔案來建立資料表<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>接著跳出上傳檔案的視窗，選擇我的 CSV 檔案之後，BigQuery 自動偵測要匯入的檔案格式，自動秀出 CSV。</p>



<p>我們再輸入要建立的表格名稱，接著不要急著按下「建立資料表」喔！我們再來看一些重要參數。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/08-bigquery-e887aae58b95e581b5e6b8ace6aa94e6a188e6a0bce5bc8f.png?w=936" alt="" class="wp-image-8533" /><figcaption class="wp-element-caption">08 BigQuery 自動偵測檔案格式<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>結構定義就是 Schema，指的就是這張表格的結構，包含欄位名稱和資料格式，例如文字叫 STRING、日期叫 DATE 等等，還有欄位是否可以為空 (NULLABLE) 還是必填 (REQUIRED)。</p>



<p>你可以點擊「以文字形式編輯」，手動一個一個欄位設定。如果你是初學者，不知道如何設定的話，可以直接勾選「自動偵測」，BigQuery 會自動幫你偵測內容，選擇一個適合的格式。</p>



<p>如果你是專業的資料數據工程師，請務必手動設定欄位，確保它的格式符合你後續的分析工作。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/09-e58bbee981b8e887aae58b95e581b5e6b8ac-schema.png?w=1024" alt="" class="wp-image-8534" /><figcaption class="wp-element-caption">09 勾選自動偵測 Schema<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>接下來的「分區」下拉式選單，是因為 BigQuery 有所謂的<a href="https://cloud.google.com/bigquery/docs/partitioned-tables">分區表</a> (Partitioned Table)。</p>



<p>因為 BigQuery 一般的表格，每次都是查詢整個表格，即使你只撈出一點點資料，但它仍然會以整張表格的資料量計費，這樣很容易就花費不少錢。</p>



<p>而分區表的設計，可以讓你設定撈取資料的日期範圍，當你使用相同語法來查詢時，它只會依照日期範圍的資料量來計費，而不是整張表格計費，節省不少成本。</p>



<p>我們目前的資料量不大，可以保持「無分區」就好。我們再往下展開進階選項。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/10-e8a8ade5ae9ae58cafe585a5-bigquery-e79a84e58886e58d80e8a8ade5ae9a.png?w=974" alt="" class="wp-image-8535" /><figcaption class="wp-element-caption">10 設定匯入 BigQuery 的分區設定<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>進階選項展開後，第一個是「寫入偏好設定」，如果你的表格本來有資料，你可以決定要繼續新增 (附加到資料表中)，或是把原本資料蓋掉 (覆寫資料表)，而我們是建立新的表格，所以選哪一種都可以。</p>



<p>而「允許的錯誤數量」很重要，指的是你對於這個匯入動作，是否要求必須每一筆都格式正確。</p>



<p>如果是，你就設成 0，但你要注意，在匯入過程中，<strong>只要偵測到一筆資料有問題，你就必須「全部重新匯入」，即使你已經匯入 100 萬筆資料。</strong></p>



<p>這就會導致你浪費前面所有的時間，你可以視情況「把允許的錯誤數量」調高一點，例如資料筆數的 1%，否則你就必須保證資料格式完全正確。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/11-e8a8ade5ae9ae58cafe585a5-bigquery-e79a84e8a1a8e6a0bce980b2e99a8ee981b8e9a085.png?w=1024" alt="" class="wp-image-8536" /><figcaption class="wp-element-caption">11 設定匯入 BigQuery 的表格進階選項<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>至於「要略過的標題列數」，就像我前面準備好的 CSV 檔，第一列是欄位名稱，所以我就在這裡輸入 1，確保它不會把欄位名稱也當成一筆資料，如果你的原始資料並沒有欄位名稱，就保持 0 就好。&nbsp;</p>



<p>其他選項就保持預設，然後按下建立資料表。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" width="1101" height="819" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/12-e8a8ade5ae9ae8a681e795a5e9818ee79a84e6a899e9a18ce58897e695b8e4b8a6e5bbbae7ab8be8b387e69699e8a1a8.png?w=1024" alt="" class="wp-image-8537" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/12-e8a8ade5ae9ae8a681e795a5e9818ee79a84e6a899e9a18ce58897e695b8e4b8a6e5bbbae7ab8be8b387e69699e8a1a8.png 1101w, https://dongdonggcp.com/wp-content/uploads/2025/02/12-e8a8ade5ae9ae8a681e795a5e9818ee79a84e6a899e9a18ce58897e695b8e4b8a6e5bbbae7ab8be8b387e69699e8a1a8-300x223.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/12-e8a8ade5ae9ae8a681e795a5e9818ee79a84e6a899e9a18ce58897e695b8e4b8a6e5bbbae7ab8be8b387e69699e8a1a8-1024x762.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/12-e8a8ade5ae9ae8a681e795a5e9818ee79a84e6a899e9a18ce58897e695b8e4b8a6e5bbbae7ab8be8b387e69699e8a1a8-768x571.png 768w" sizes="(max-width: 1101px) 100vw, 1101px" /><figcaption class="wp-element-caption">12 設定要略過的標題列數並建立資料表<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>幾秒鐘後，會看到系統提示資料表建立完成的訊息，我們可以直接點擊「前往資料表」：&nbsp;</p>



<figure class="wp-block-image size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/13-e7b3bbe7b5b1e68f90e7a4bae8a1a8e6a0bce5bbbae7ab8be5ae8ce68890efbc8ce9bb9ee6938ae5898de5be80e8b387e69699e8a1a8.png?w=812" alt="" class="wp-image-8538" /></figure>



<p>13 系統提示表格建立完成，點擊前往資料表</p>



<p>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></p>



<p>畫面跳轉到我們建立完成的表格，你可以看到 BigQuery 自動偵測的欄位名稱和資料類型。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/14-e7a2bae8aa8de8a1a8e6a0bc-schema.png?w=1024" alt="" class="wp-image-8539" /><figcaption class="wp-element-caption">14 確認表格 Schema<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>我們點擊「詳細資訊」，可以看到表格的一些基本資訊，例如表格的完整 ID、建立時間、位置、表格的大小和資料比數等等。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/15-e69fa5e79c8be8a1a8e6a0bce8a9b3e7b4b0e8b387e8a88a.png?w=1024" alt="" class="wp-image-8540" /><figcaption class="wp-element-caption">15 查看表格詳細資訊<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>我們在點「預覽」，可以看到表格前面幾列的內容。</p>



<p>要注意 BigQuery 是按照查詢的資料量來計費的，如果你想探索資料，不要動不動就 「Select * from 某個 Table」，這樣是會被計費收錢的喔！</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/16-e9a090e8a6bde8a1a8e6a0bce585a7e5aeb9.png?w=1024" alt="" class="wp-image-8541" /><figcaption class="wp-element-caption">16 預覽表格內容<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>這個方法要注意，只能上傳最大 100 MB 的檔案，再大就無法上傳了。</p>



<h3 class="wp-block-heading">2. 從 Google Drive 匯入 BigQuery</h3>



<p>這個方法可以上傳最大 10GB 的檔案，所以先上傳到這裡比較方便。 但它只限 Google 試算表，不能匯入 CSV 檔案喔！</p>



<p>你可以直接在檔案上按右鍵=&gt;共用=&gt;複製連結：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/17-e5be9ee99bb2e7abafe7a1ace7a29fe8a487e8a3bde6aa94e6a188e980a3e7b590.png?w=1024" alt="" class="wp-image-8542" /><figcaption class="wp-element-caption">17 從雲端硬碟複製檔案連結<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>然後貼到「選取雲端硬碟 URI」欄位中：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/18-e8b2bce4b88ae6aa94e6a188e59ca8e99bb2e7abafe7a1ace7a29fe79a84e980a3e7b590.png?w=1024" alt="" class="wp-image-8543" /><figcaption class="wp-element-caption">18 貼上檔案在雲端硬碟的連結<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>比較特別的地方是，你可以指定匯入的資料範圍，不一定要全部匯入。我們選定資料範圍後可以複製左上角的座標：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/19-e8a487e8a3bde5baa7e6a899.png?w=1024" alt="" class="wp-image-8544" /><figcaption class="wp-element-caption">19 複製座標<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>然後貼到工作表範圍：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1845" height="626" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/20-e8b2bce4b88ae8a681e58cafe585a5e79a84e5b7a5e4bd9ce8a1a8e7af84e59c8d.png?w=1024" alt="" class="wp-image-8545" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/20-e8b2bce4b88ae8a681e58cafe585a5e79a84e5b7a5e4bd9ce8a1a8e7af84e59c8d.png 1845w, https://dongdonggcp.com/wp-content/uploads/2025/02/20-e8b2bce4b88ae8a681e58cafe585a5e79a84e5b7a5e4bd9ce8a1a8e7af84e59c8d-300x102.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/20-e8b2bce4b88ae8a681e58cafe585a5e79a84e5b7a5e4bd9ce8a1a8e7af84e59c8d-1024x347.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/20-e8b2bce4b88ae8a681e58cafe585a5e79a84e5b7a5e4bd9ce8a1a8e7af84e59c8d-768x261.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/20-e8b2bce4b88ae8a681e58cafe585a5e79a84e5b7a5e4bd9ce8a1a8e7af84e59c8d-1536x521.png 1536w" sizes="(max-width: 1845px) 100vw, 1845px" /><figcaption class="wp-element-caption">20 貼上要匯入的工作表範圍<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>其他的設定跟前面一樣，沒問題就按下建立資料表：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/21-e7a2bae5ae9ae585b6e4bb96e983a8e58886efbc8ce5bbbae7ab8be8b387e69699e8a1a8.png?w=1024" alt="" class="wp-image-8546" /><figcaption class="wp-element-caption">21 確定其他部分，建立資料表<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>完成後去查看表格，你會發現，你看不到資料量大小和筆數，是因為 BigQuery 並沒有把 Google 試算表的資料複製進來，而是當成外部的表 (External Table) 來用。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/22-e69fa5e4b88de588b0e8b387e69699e9878fe5a4a7e5b08fe5928ce7ad86e695b8.png?w=1024" alt="" class="wp-image-8547" /><figcaption class="wp-element-caption">22 查不到資料量大小和筆數<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>接著我們使用查詢來確認，看它是不是剛好 10 筆資料。我們開啟新的分頁：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/23-e9bb9ee6938ae69fa5e8a9a2.png?w=1024" alt="" class="wp-image-8548" /><figcaption class="wp-element-caption">23 點擊查詢<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>它把前面欄位的部分空著，我們直接輸入「 * 」代表所有欄位，並且把「 LIMIT 1000」刪除，確保它能夠秀出所有資料，接著按下「執行」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/24-e8aabfe695b4e8aa9ee6b395e4b8a6e59fb7e8a18ce69fa5e8a9a2.png?w=1024" alt="" class="wp-image-8549" /><figcaption class="wp-element-caption">24 調整語法並執行查詢<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>你會到剛好 10 筆資料的查詢結果，代表即使試算表有 100 多筆資料，但我們己在匯入時限制 10 筆的範圍，所以這裡就只能看到 10 筆。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/25-e79c8be588b0e5899be5a5bd-10-e7ad86e8b387e69699e79a84e69fa5e8a9a2e7b590e69e9c.png?w=1024" alt="" class="wp-image-8550" /><figcaption class="wp-element-caption">25 看到剛好 10 筆資料的查詢結果<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>關於資料不在 BigQuery 裡面的問題，不用擔心，接下來我們使用「撈出資料寫入表格」的語法來處理，我們開啟一個新的查詢分頁，然後準備以下語法：</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>CREATE TABLE `專案.資料集.新表格名稱` ASSELECT * FROM `專案.資料集.原外部表格名稱`</td></tr></tbody></table></figure>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/26-e8aabfe695b4e8aa9ee6b395e8ae93e69fa5e8a9a2e7b590e69e9ce584b2e5ad98e588b0_bigquery_e8a1a8e6a0bc.png?w=1024" alt="" class="wp-image-8551" /><figcaption class="wp-element-caption">26 調整語法讓查詢結果儲存到_BigQuery_表格<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>沒問題就按下執行，因為這個語法是讓它直接執行寫入資料表的動作，是在背景作業，不會秀出資料給你看。所以我們再按「前往資料表」：</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="2004" height="722" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/27-e59fb7e8a18ce5ae8ce68890efbc8ce5898de5be80e8b387e69699e8a1a8.png?w=1024" alt="" class="wp-image-8552" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/27-e59fb7e8a18ce5ae8ce68890efbc8ce5898de5be80e8b387e69699e8a1a8.png 2004w, https://dongdonggcp.com/wp-content/uploads/2025/02/27-e59fb7e8a18ce5ae8ce68890efbc8ce5898de5be80e8b387e69699e8a1a8-300x108.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/27-e59fb7e8a18ce5ae8ce68890efbc8ce5898de5be80e8b387e69699e8a1a8-1024x369.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/27-e59fb7e8a18ce5ae8ce68890efbc8ce5898de5be80e8b387e69699e8a1a8-768x277.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/27-e59fb7e8a18ce5ae8ce68890efbc8ce5898de5be80e8b387e69699e8a1a8-1536x553.png 1536w" sizes="(max-width: 2004px) 100vw, 2004px" /><figcaption class="wp-element-caption">27 執行完成，前往資料表<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>你會看到它沒有再秀出「外部資料設定」和「來源 URI」，而是直接秀出資料筆數和佔用空間大小。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/28-e7a2bae8aa8de8b387e69699e698afe584b2e5ad98e59ca8-bigquery-e69cace8baab.png?w=1024" alt="" class="wp-image-8553" /><figcaption class="wp-element-caption">28 確認資料是儲存在 BigQuery 本身<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>代表它已經是 BigQuery 本身的內部表格喔！</p>



<h3 class="wp-block-heading">3. 從 Google Cloud Storage 匯入檔案</h3>



<p>假如你的資料超過 10 GB，那建議先上傳到 Cloud Storage 再匯入 BigQuery，這樣最大單次能匯入 5TB 的檔案。 </p>



<p>我用同個檔案來示範，首先我直接拖曳到 Cloud Storage 的 Bucket。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/29-e68a8ae6aa94e6a188e58588e4b88ae582b3e588b0_cloud_storage_bucket.png?w=1024" alt="" class="wp-image-8554" /><figcaption class="wp-element-caption">29 把檔案先上傳到_Cloud_Storage_Bucket<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>然後回到 BigQuery 建立資料表，按下「瀏覽」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/30-e981b8e69387e5be9e-gcs-e58cafe585a5e4b8a6e7808fe8a6bde6aa94e6a188.png?w=952" alt="" class="wp-image-8555" /><figcaption class="wp-element-caption">30 選擇從 GCS 匯入並瀏覽檔案<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>然後找到要匯入的檔案，再按「選取」。</p>



<p>順便提一下，它支援萬用字元 (例如: gs://bucket/data/*.csv)，代表你可以一次匯入多個檔案，但資料總量還是不能超過 5 TB 喔！</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/31-e5be9e-gcs-e981b8e58f96e8a681e58cafe585a5e79a84e6aa94e6a188.png?w=1024" alt="" class="wp-image-8556" /><figcaption class="wp-element-caption">31 從 GCS 選取要匯入的檔案<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>接下來看到「結構定義」，我們這次自己來挑選匯入之後的欄位格式。如果你使用我的範例檔案，可以參考下圖設定，其它類型可以查看<a href="https://cloud.google.com/bigquery/docs/schemas">官方文件</a>。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/32-e8a8ade5ae9a-schema-e5be8ce58887e68f9be68890e3808ce4bba5e69687e5ad97e5bda2e5bc8fe7b7a8e8bcafe3808d.png?w=1024" alt="" class="wp-image-8557" /><figcaption class="wp-element-caption">32 設定 Schema 後切換成「以文字形式編輯」<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>然後按下「以文字形式編輯」，它會把設定轉換成語法，強烈建議你複製語法。</p>



<p>為什麼要多此一舉？</p>



<p>你剛剛手動設定欄位，一定花費很多時間。如果待會匯入發生錯誤，相同的動作你就要再做一次。</p>



<p>現在只有 6 個欄位就算了，如果正式的表格有 40 個欄位，你可能已經花了半個小時設定，結果匯入失敗要重來的話，你可能會懷疑人生。</p>



<p>如果你已經事先複製語法，你只要稍做調整就可以直接貼上，可以省去你大量的時間。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/33-e8a487e8a3bde8aa9ee6b395e588b0e585b6e4bb96e59cb0e696b9.png?w=850" alt="" class="wp-image-8558" /><figcaption class="wp-element-caption">33 複製語法到其他地方<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>接下來是分割設定，是因為 BigQuery 有所謂的<a href="https://cloud.google.com/bigquery/docs/partitioned-tables">分區表</a> (Partitioned Table)。</p>



<p>因為 BigQuery 一般的表格，每次都是查詢整個表格，即使你只撈出一點點資料，但它仍然會以整張表格的資料量計費，這樣很容易就花費不少錢。</p>



<p>而分區表的設計，可以讓你設定撈取資料的日期範圍，當你使用相同語法來查詢時，它只會依照日期範圍的資料量來計費，而不是整張表格計費，節省不少成本。</p>



<p>我們這次選擇「依欄位分割」，然後選取「use_date」欄位，並且勾選必須使用「WHERE 子句」來查詢資料。</p>



<p>目的就是要強迫使用者在查詢的時候指定時間範圍，如果使用者不使用這個語法，系統不會讓他執行，藉此降低查詢成本 。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/34-e8a8ade5ae9ae794a8e4be86e58886e589b2e8a1a8e6a0bce79a84e6ac84e4bd8d.png?w=1024" alt="" class="wp-image-8559" /><figcaption class="wp-element-caption">34 設定用來分割表格的欄位<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>接下來進階選項的部分跟前面一樣，你可以事情況設定「允許的錯誤數量」，以及「要列過的標題列數」，如果沒問題就按下「建立資料表」。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/35-e7a2bae8aa8de585b6e4bb96e8a8ade5ae9ae4b8a6e9bb9ee6938ae3808ce5bbbae7ab8be8b387e69699e8a1a8e3808d.png?w=1024" alt="" class="wp-image-8560" /><figcaption class="wp-element-caption">35 確認其他設定並點擊「建立資料表」<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>建立完成之後你會看到系統提示「這是分區資料表」，你也會在下方看到「已分區」以及分區的欄位。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/36-e7a2bae8aa8de8a1a8e6a0bce8b387e8a88a.png?w=1024" alt="" class="wp-image-8561" /><figcaption class="wp-element-caption">36 確認表格資訊<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>關於更多從 Cloud Storage 匯入 BigQuery 的細節，可以參考<a href="https://cloud.google.com/bigquery/docs/loading-data-cloud-storage-csv">這份文件</a>。</p>



<h3 class="wp-block-heading">我們將三種方法整理如下表，你可以視情況選用適合的匯入方法。</h3>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/36-2-e4b889e7a8aee6898be58b95e58cafe585a5e8b387e69699e79a84e696b9e6b395e6af94e8bc83.png?w=1024" alt="" class="wp-image-8562" /><figcaption class="wp-element-caption">36-2 三種手動匯入資料的方法比較<br>資料來源：自行整理</figcaption></figure>



<p></p>



<h2 class="wp-block-heading">(二) 使用 Data Transfer Service 立即或排程匯入</h2>



<p>如果你要正式傳輸大量資料到 BigQuery，推薦使用 Data Transfer Service（ 簡稱 DTS)。</p>



<p>它除了可以從地端的資料庫上傳之外、也支援從 Google 相關的行銷平台如 Google Ads、Ad Manager 和 Google Play，甚至其他雲端如 AWS S3 Storage、AWS Redshift、Azure Blog Storage、Salesforce 等，更多資料來源可以參考<a href="https://cloud.google.com/bigquery/docs/dts-introduction#supported_data_sources">這份文件</a>。</p>



<p>針對不同來源，操作方法都差不多，我們就以 AWS S3 Storage 來源為例子，說明步驟如下。</p>



<p>我們先從 BigQuery 主選單進去，找到「資料移轉」再建立「移轉作業」：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1798" height="848" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/37-e980b2e585a5-data-transfer-service.png?w=1024" alt="" class="wp-image-8563" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/37-e980b2e585a5-data-transfer-service.png 1798w, https://dongdonggcp.com/wp-content/uploads/2025/02/37-e980b2e585a5-data-transfer-service-300x141.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/37-e980b2e585a5-data-transfer-service-1024x483.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/37-e980b2e585a5-data-transfer-service-768x362.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/37-e980b2e585a5-data-transfer-service-1536x724.png 1536w" sizes="(max-width: 1798px) 100vw, 1798px" /><figcaption class="wp-element-caption">37 進入 Data Transfer Service<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>接下來從「來源類型」點擊下拉式選單，你會看到它有非常多的來源可以選擇，我們就直接選 「Amazon S3」：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/38-e5be9ee4be86e6ba90e9a19ee59e8be981b8e69387-amazon-s3.png?w=684" alt="" class="wp-image-8564" /><figcaption class="wp-element-caption">38  從來源類型選擇 Amazon S3<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>我們就來設定轉移的作業名稱，以及排程的執行頻率，例如每天執行一次就設定為 24 小時。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/39-e8a8ade5ae9a-dts-e8bd89e7a7bbe5908de7a8b1e5928ce9a0bbe78e87.png?w=681" alt="" class="wp-image-8565" /><figcaption class="wp-element-caption">39 設定 DTS 轉移名稱和頻率<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>在目的地設定，我們輸入轉入&nbsp; BigQuery 的表格名稱。而在 Amazon S3 的資料來源設定當中，有兩個重要的欄位叫做 Access Key ID 和 Secret Access Key：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/40-e5a1abe5afab-s3-e8b387e69699e4be86e6ba90e8a9b3e7b4b0e8b387e69699.png?w=678" alt="" class="wp-image-8566" /><figcaption class="wp-element-caption">40 填寫 S3 資料來源詳細資料<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>我們就去 AWS 的主控台然後點擊右上角自己的 ID，進入安全憑證頁面：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/41-aws-e4b8bbe68ea7e58fb0e980b2e585a5-security-credentials.png?w=1024" alt="" class="wp-image-8567" /><figcaption class="wp-element-caption">41 AWS 主控台進入 Security Credentials<br>資料來源：擷圖自 <a href="https://us-east-1.console.aws.amazon.com/console/home">AWS 主控台</a></figcaption></figure>



<p></p>



<p>接著點擊「建立存取金鑰」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/42-e5bbbae7ab8b-access-key.png?w=1024" alt="" class="wp-image-8568" /><figcaption class="wp-element-caption">42 建立 Access Key<br>資料來源：擷圖自 <a href="https://us-east-1.console.aws.amazon.com/console/home">AWS 主控台</a></figcaption></figure>



<p></p>



<p>接著就進入到存取金鑰的頁面，它有提供 Access Key ID 和 Secret Access Key，如果你只是短暫測試，就直接將兩個值複製起來，不要下載 CSV 檔案，以免金鑰被駭客拿到。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/43-e4b88be8bc89e68896e8a487e8a3bd-access-key.png?w=1024" alt="" class="wp-image-8569" /><figcaption class="wp-element-caption">43 下載或複製 Access Key<br>資料來源：擷圖自 <a href="https://us-east-1.console.aws.amazon.com/console/home">AWS 主控台</a></figcaption></figure>



<p></p>



<p>&nbsp;Access Key ID 和 Secret Access Key 複製後貼入 DTS 的內容欄位。</p>



<p>另外 Write Disposition 指的是，你匯入資料後，要不要清除原始資料 (WRITE_TRUNCATE)，或是一直附加到表格的最後面 (WRITE_APPEND)。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/54-e59fb7e8a18ce980a3e7b79ae6b8ace8a9a6e68896e79bb4e68ea5e5bbbae7ab8b.png?w=838" alt="" class="wp-image-8570" /><figcaption class="wp-element-caption">44 AWS S3 Access Key 和寫入方式設定<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>而在傳輸選項的部分：</p>



<p>Number of Error Allowed</p>



<p>跟之前建立 BigQuery 一樣，如果資料量夠大，建議設定一些允許的錯誤，以免整個傳輸作業有任何一點錯誤，導致全部重來。</p>



<p>Decimal Target Types&nbsp;</p>



<p>這是非常重要的欄位，指的是關於如何處理從 S3 中的 decimal (十進位數) 格式資料轉換到 BigQuery 時的資料型態轉換規則。</p>



<p>你可以先指定比較偏好的型態，再指定退而求其次的型態，最多三個。</p>



<p>在傳輸過程中，先用第一個型態來接收資料，如果接收到不符合這個型態的，整個欄位自動調整成第二個型態來接收看看，不行再改成第三個型態。</p>



<p>例如你有一個 decimal(38,9) 的欄位 (總共38位數，小數點後9位)，你先設定「NUMERIC, BIGNUMERIC, STRING」：</p>



<ul class="wp-block-list">
<li>系統會先檢查 NUMERIC 是否能處理這個精確度 (這麼多位的數字)。</li>



<li>結果後來發現有一個數字太大，NUMERIC 不足以處理 (因為 NUMERIC 最多 38 位)，就會嘗試把欄位整個改成 BIGNUMERIC 繼續接收資料。</li>



<li>結果數字又更大，或是非數字的資料出現，BIGNUMERIC 也不行，最後會轉成 STRING，幾乎什麼格式的內容都可以接受。</li>
</ul>



<p>這樣做的好處是：</p>



<ul class="wp-block-list">
<li>避免資料傳輸中斷 &#8211; 不會因為突然出現意外的資料格式就失敗，不要全部重來太辛苦了。</li>



<li>自動調適 &#8211; 不需要事先精確知道所有資料的格式和範圍，如果你懶得事先指定格式，就給一個順序讓 DTS 自動判斷就好。</li>



<li>資料完整性 &#8211; 確保所有資料都能被正確保存，即使需要轉換成比較寬鬆的格式，寧可先收進來，格式後續再慢慢處理就好了。</li>
</ul>



<p>Ignore Unknown Values</p>



<p>很容易理解，無法判斷的內容就直接略過，也可以避免因錯誤而中斷。</p>



<p>Header Rows to Skip</p>



<p>跟之前匯入 CSV 檔的操作一樣，如果第一列是標題就讓它略過。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/45-e582b3e8bcb8e981b8e9a085e8a8ade5ae9a.png?w=1024" alt="" class="wp-image-8571" /><figcaption class="wp-element-caption">45 傳輸選項設定<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>最後服務帳戶的部分，要指定一個讓它能有權限代替你執行整個傳輸工作，你不需要事先研究要設定給這個 Service Account 哪些權限。</p>



<p>你直接指定一個帳戶給它，它會自動授予必要的權限角色給這個帳戶，當然你可以先產生一個不具備任何權限的服務帳戶，後面碰到權限問題再調整就好。</p>



<p>然後勾選「電子郵件通知」，這樣就不用時時進來確認進度。沒問題就按下「儲存」，它就會自動開始傳輸了。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/46-service-account-e5928ce9809ae79fa5e8a8ade5ae9a.png?w=1024" alt="" class="wp-image-8572" /><figcaption class="wp-element-caption">46 Service Account 和通知設定<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>整個設定如上，除了你可以在 Console 設定，如果你有安裝指令套件，也可以下 bq 指令；或是寫程式呼叫 API，或操作 Java 的 Library 都可以執行傳輸工作。</p>



<p>更多設定的細節可以參考<a href="https://cloud.google.com/bigquery/docs/s3-transfer">這份文件</a>。如果是從 Azure Blob Storage 來傳輸，也可以參考<a href="https://cloud.google.com/bigquery/docs/blob-storage-transfer">這份文件</a>。</p>



<h2 class="wp-block-heading">(三) 匯入串流資料</h2>



<p>前兩種都是批次，代表一次性把資料匯入完成。</p>



<p>而串流資料是持續不斷產生的 (例如社群留言、股票報價、使用者點擊遊戲或工廠 IoT 設備回傳)，可能要即時處理和反應 (例如即時推薦商品或掉出寶物)，就必須使用串流資料的傳輸方法，依照複雜程度分述如下：</p>



<h3 class="wp-block-heading">1. BigQuery Storage Write API</h3>



<p>這個方法針對小規模、簡單的串流需求，直接從應用程式寫入資料，並且不需要複雜的資料轉換，最適合這種方法。</p>



<p>BigQuery 早期主要使用 <a href="https://cloud.google.com/bigquery/docs/streaming-data-into-bigquery">tabledata.insertAll API</a>。這個 API 的設計相對簡單，主要特性包括：</p>



<p>(1) 使用 REST over HTTP 通訊協定。</p>



<p>(2) 資料格式採用 JSON。</p>



<p>(3) 提供基本的串流寫入功能。</p>



<p>(4) 操作直觀容易上手。</p>



<p>但它同時也存在一些明顯的問題：</p>



<p>(1) 效能限制</p>



<p>．使用 REST over HTTP 通訊協定，傳輸效率較低。</p>



<p>．JSON 格式佔用較大的網路頻寬。</p>



<p>．屬於短期 Request，每個連接都有建立和關閉的動作，耗費系統資源且傳輸量受限。</p>



<p>(2) 資料一致性問題</p>



<p>．沒有完整的交易支援，例如有一部分失敗，不能全部倒回處理。</p>



<p>．無法保證資料的精確一次處理，可能出現資料重複的情況。</p>



<p>(3) 成本考量：</p>



<p>．資料傳輸成本較高。</p>



<p>．沒有免費用量額度。</p>



<p>而 <a href="https://cloud.google.com/bigquery/docs/write-api">Storage Write API</a> 相對的優勢如下：</p>



<p>(1) 採用 gRPC 串流取代 REST over HTTP</p>



<p>雖然每個資料表最多 100 個連線，但這 100 個連線是持久的，可以持續使用，效能提昇不少。</p>



<p>(2) 資料一致性強化</p>



<p>它使用一個編號系統「串流偏移」(Stream Offset) 來追蹤每筆資料，當發現資料重複就不會傳送，提供「完全一次性」處理保證的選項。</p>



<p>(3) 成本效益</p>



<p>Storage Write API 提供每月 2 TiB 的免費擷取額度，而且 gRPC 串流能夠使用更少的資源來處理資料，提升資源的使用效率。</p>



<p>兩者比較總結如下表：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/47-bigquery-tabledata.insertall-e88887storage-write-api-e6af94e8bc83.png?w=984" alt="" class="wp-image-8573" /><figcaption class="wp-element-caption">47 BigQuery tabledata.insertAll 與Storage Write API 比較<br>資料來源：自行整理</figcaption></figure>



<p></p>



<p>因此，如果需要高頻率的短期連線，可以使用 tabledata.insertAll API，如果需要穩定的長期資料串流以及資料一致性保證或交易支援，就選擇 Storage Write API。</p>



<h3 class="wp-block-heading">2. Datastream</h3>



<p>如果不寫程式，最好的方法就是使用 <a href="https://cloud.google.com/datastream/docs/behavior-overview">Datastream</a>，它可以支援資料庫的即時同步，包含 MySQL、PostgreSQL、Oracle 等，如果來來源資料庫有變更，它也能同步到 BigQuery，也就是所謂的 CDC (Change Data Capture)。</p>



<p>設定步驟很簡單，首先進入Datastream 來建立連線設定檔：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/48-e980b2e585a5-datastream-e5bbbae7ab8be980a3e7b79ae8a8ade5ae9ae6aa94.png?w=1024" alt="" class="wp-image-8574" /><figcaption class="wp-element-caption">48 進入 Datastream 建立連線設定檔<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p>我們真是 PostgreSQL 資料來為範例的資料來源，點擊 PostgreSQL：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/49-e981b8e69387-postgresql-e5819ae782ba-datastream-e4be86e6ba90.png?w=1024" alt="" class="wp-image-8575" /><figcaption class="wp-element-caption">49 選擇 PostgreSQL 做為 Datastream 來源<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>我這裡沒有現成的資料庫，以下使用國外網友的示範圖片，輸入連線設定檔名稱和 ID，並且指定 Region：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/50-e8bcb8e585a5-datastream-e980a3e7b79ae8a8ade5ae9ae6aa94e5908de7a8b1e4b8a6e68c87e5ae9a-region.png?w=1024" alt="" class="wp-image-8576" /><figcaption class="wp-element-caption">50 輸入 Datastream 連線設定檔名稱並指定 Region<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>接著輸入資料庫的 IP、Port、連線帳號、密碼和資料庫名稱：&nbsp;</p>



<h3 class="wp-block-heading"></h3>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/51-e68f90e4be9be8b387e69699e5baabe980a3e79a84e980a3e7b79ae8b387e8a88a.png?w=1024" alt="" class="wp-image-8577" /><figcaption class="wp-element-caption">51 提供資料庫連的連線資訊<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>它有提供三種連線方式，我們選擇最簡單的 IP 白名單，這裡指的是允許地端的資料庫可以從Datastream 的 IP 連線過去存取資料。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/52-e981b8e69387e8b387e69699e582b3e8bcb8e696b9e5bc8f.png?w=1024" alt="" class="wp-image-8578" /><figcaption class="wp-element-caption">52 選擇資料傳輸方式<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>看到它跳出 IP 位址，直接複製起來貼到地端的防火牆去設白名單。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/53-e8a8ade5ae9ae4be86e6ba90e7b6b2e8b7afe58581e8a8b1-datastream-e79a84-ip-e58ebbe5ad98e58f96e8b387e69699e5baab.png?w=1024" alt="" class="wp-image-8579" /><figcaption class="wp-element-caption">53 設定來源網路允許 Datastream 的 IP 去存取資料庫<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p>接著要測試連線，這裡一定要測試成功，才可以建立設定檔，所以上方的欄位不能隨便亂打喔！</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/54-e59fb7e8a18ce980a3e7b79ae6b8ace8a9a6e68896e79bb4e68ea5e5bbbae7ab8b-1.png?w=838" alt="" class="wp-image-8580" /><figcaption class="wp-element-caption">54 執行連線測試或直接建立<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>若測試通過，就可以建立設定檔了。</p>



<h3 class="wp-block-heading"></h3>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/55-e6b8ace8a9a6e980a3e7b79ae68890e58a9fe5be8ce5bbbae7ab8be8a8ade5ae9ae6aa94.png?w=1024" alt="" class="wp-image-8581" /><figcaption class="wp-element-caption">55 測試連線成功後建立設定檔<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>接著畫面會秀出，我們剛剛建好的連線設定檔內容，我們回到上一層：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/56-e7a2bae8aa8de980a3e7b79ae8b387e8a88ae4b8a6e59b9ee588b0e4b88ae4b880e5b1a4-1.png?w=1024" alt="" class="wp-image-8584" /><figcaption class="wp-element-caption">56 確認連線資訊並回到上一層<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>我們要針對傳輸的目的地 BigQuery 也建立連線設定檔，點擊「Create Profile」：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/57-e5bbbae7ab8b-bigquery-e79a84e980a3e7b79ae8a8ade5ae9ae6aa94.png?w=1024" alt="" class="wp-image-8586" /><figcaption class="wp-element-caption">57 建立 BigQuery 的連線設定檔<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p>選擇 BigQuery：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/58-e981b8e69387-bigquery-e5819ae782bae582b3e8bcb8e79baee79a84e59cb0-1.png?w=1024" alt="" class="wp-image-8587" /><figcaption class="wp-element-caption">58 選擇 BigQuery 做為傳輸目的地<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>設定名稱和 Region 並按下建立：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/59-e8a8ade5ae9ae5908de7a8b1e5928c-region-e4b8a6e68c89e4b88be5bbbae7ab8b.png?w=1024" alt="" class="wp-image-8588" /><figcaption class="wp-element-caption">59 設定名稱和 Region 並按下建立<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>接下來就看到它設定完成了：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/60-e7a2bae8aa8d-bigquery-e980a3e7b79ae8b387e8a88a.png?w=1024" alt="" class="wp-image-8589" /><figcaption class="wp-element-caption">60 確認 BigQuery 連線資訊<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p>我們現在可以正式建立串流工作，點擊「Create Stream」：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/61-e980b2e585a5-stream-e981b8e596aee5bbbae7ab8be4b8b2e6b581-1.png?w=1024" alt="" class="wp-image-8620" /><figcaption class="wp-element-caption">61 進入 Stream 選單建立串流<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>輸入串流的名稱、ID、Region、來源跟目的地：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/61-e980b2e585a5-stream-e981b8e596aee5bbbae7ab8be4b8b2e6b581.png?w=1024" alt="" class="wp-image-8591" /><figcaption class="wp-element-caption">62 設定 Stream 名稱、來源和目的地<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>然後按「Continue」進行下一步：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/63-e7a2bae8aa8de784a1e8aaa4e9bb9ee6938ae7b9bce7ba8c.png?w=1010" alt="" class="wp-image-8594" /><figcaption class="wp-element-caption">63 確認無誤點擊繼續<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>在這裡我們選擇剛剛建立的 PostgreSQL 連線設定檔：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="2036" height="936" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/64-e981b8e69387e5899be5bbbae7ab8be79a84-postgresql-e980a3e7b79ae8a8ade5ae9ae6aa94.png?w=1024" alt="" class="wp-image-8593" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/64-e981b8e69387e5899be5bbbae7ab8be79a84-postgresql-e980a3e7b79ae8a8ade5ae9ae6aa94.png 2036w, https://dongdonggcp.com/wp-content/uploads/2025/02/64-e981b8e69387e5899be5bbbae7ab8be79a84-postgresql-e980a3e7b79ae8a8ade5ae9ae6aa94-300x138.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/64-e981b8e69387e5899be5bbbae7ab8be79a84-postgresql-e980a3e7b79ae8a8ade5ae9ae6aa94-1024x471.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/64-e981b8e69387e5899be5bbbae7ab8be79a84-postgresql-e980a3e7b79ae8a8ade5ae9ae6aa94-768x353.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/64-e981b8e69387e5899be5bbbae7ab8be79a84-postgresql-e980a3e7b79ae8a8ade5ae9ae6aa94-1536x706.png 1536w" sizes="(max-width: 2036px) 100vw, 2036px" /><figcaption class="wp-element-caption">64 選擇剛建立的 PostgreSQL 連線設定檔<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>在這裡我們一樣要測試一下資料庫的連線，成功後再按「Continue」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/65-e980a3e7b79ae6b8ace8a9a6e68890e58a9fe4b8a6e7b9bce7ba8c-1.png?w=1024" alt="" class="wp-image-8596" /><figcaption class="wp-element-caption">65 連線測試成功並繼續<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>在 Configure Source 中，我們要設定 Publication Slot Name 和 Publication Name。</p>



<p>這個 Slot 不是 BigQuery 本身的 Slot 喔！在 PostgreSQL 的資料複寫 (Replication) 機制中，Replication Slot 是一個重要的概念。</p>



<p>它能夠追蹤資料變更，即使複寫目標 (Datastream) 暫時離線或延遲，Slot 也會確保需要的 WAL (Write-Ahead Logging) 檔案，直到 Datastream 收到這些變更，也能避免資料遺失。</p>



<p>你需要在 PostgreSQL 資料庫中預先建立這個 Replication Slot，然後在設定 Datastream 時提供這個 Slot 名稱，這樣 Datastream 就能透過這個 Slot 來追蹤和接收資料庫的變更。</p>



<p>而 Publication 是 PostgreSQL 10 版之後推出的邏輯複寫 (Logical Replication) 機制中的一個重要元素。你可以指定特定的表格要被複寫，以及要複寫哪些類型的操作。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/66-e8a8ade5ae9a-publication-slot-e5928c-publication-name.png?w=1024" alt="" class="wp-image-8597" /><figcaption class="wp-element-caption">66 設定 Publication Slot 和 Publication Name<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>再往下選擇要轉移資料的表格跟欄位，選好再下一步：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/67-e68c87e5ae9ae8a681e5908ce6ada5e8b387e69699e79a84e8a1a8e6a0bce5928ce6ac84e4bd8d.png?w=920" alt="" class="wp-image-8598" /><figcaption class="wp-element-caption">67 指定要同步資料的表格和欄位<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>在目的地的部分，我們就選擇剛剛建立的 BigQuery 連線設定檔：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/68-e981b8e69387-bigquery-e79a84e8a8ade5ae9ae6aa94e4b8a6e7b9bce7ba8c.png?w=1024" alt="" class="wp-image-8599" /><figcaption class="wp-element-caption">68 選擇 BigQuery 的設定檔並繼續<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>這裡是問你要把轉移出來的資料要放在單一 Region 還是多個 Region 的 Dataset。</p>



<p>如果你後續的的應用主要在特定區域運作，選擇 Region 即可，如果你需要更高的配額限制和更高的可用性，選擇 Multi-region。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/69-e68c87e5ae9ae8b387e69699e8a681e5908ce6ada5e588b0-bigquery-e79a84-region.png?w=1024" alt="" class="wp-image-8600" /><figcaption class="wp-element-caption">69 指定資料要同步到 BigQuery 的 Region<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>Stream Write Mode 指的是寫入模式，包含 Merge (合併模式，會更新舊資料)、Append (追加模式，不會更新或刪除現有資料) 和Replace (替換模式，會刪除所有現有資料)。</p>



<p>而 Staleness Limit (資料陳舊限制)，指的是資料是否需要立即處理，設定為 0 秒表示資料會立即被處理，用來保持最即時的狀態。但可能會導致較高的查詢成本，因為每次變更都需要立即處理。</p>



<p>如果您想降低成本，並且可以接受一點資料延遲的話，可以增加一點 Staleness Limit。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/70-e68c87e5ae9ae5afabe585a5e6a8a1e5bc8fe5928ce8b387e69699e999b3e8888ae99990e588b6.png?w=1024" alt="" class="wp-image-8601" /><figcaption class="wp-element-caption">70 指定寫入模式和資料陳舊限制<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>最後再按一下「RUN VALIDATION」來確認所有的設定正確無誤，如果都沒問題就可直接按下「CREATE &amp; START」直接開始傳輸：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/71-e9a997e8ad89e68980e69c89e8a8ade5ae9ae4b8a6e5bbbae7ab8be5b7a5e4bd9c.png?w=1024" alt="" class="wp-image-8602" /><figcaption class="wp-element-caption">71 驗證所有設定並建立工作<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>它跳出一個確認視窗，再次按下「CREATE &amp; START」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/72-e7a2bae8aa8de5bbbae7ab8b-datastream-e5b7a5e4bd9c.png?w=1024" alt="" class="wp-image-8603" /><figcaption class="wp-element-caption">72 確認建立 Datastream 工作<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<p>接著我們就看到 Datastream 開始同步資料了：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1078" height="506" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/73-e7a2bae8aa8d-datastream-e9968be5a78be5908ce6ada5e8b387e69699.png?w=1024" alt="" class="wp-image-8604" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/73-e7a2bae8aa8d-datastream-e9968be5a78be5908ce6ada5e8b387e69699.png 1078w, https://dongdonggcp.com/wp-content/uploads/2025/02/73-e7a2bae8aa8d-datastream-e9968be5a78be5908ce6ada5e8b387e69699-300x141.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/73-e7a2bae8aa8d-datastream-e9968be5a78be5908ce6ada5e8b387e69699-1024x481.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/73-e7a2bae8aa8d-datastream-e9968be5a78be5908ce6ada5e8b387e69699-768x360.png 768w" sizes="(max-width: 1078px) 100vw, 1078px" /><figcaption class="wp-element-caption">73 確認 Datastream 開始同步資料<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=GVl2jfB7DKA">YouTube 影片</a></figcaption></figure>



<p></p>



<h3 class="wp-block-heading">3. Pub/Sub 搭配 Cloud Functions</h3>



<p>Pub/Sub 是一個完全代管的訊息佇列 (Message Queue) 服務，基於發布/訂閱 (Publish/Subscribe) 模式，主要用於事件驅動架構和串流資料處理。主要有三個特性：</p>



<p>(1) 解耦 (Decoupling)</p>



<p>透過發布/訂閱模式，發送方和接收方之間不需要直接互動，讓系統的各個部分能夠獨立發展和擴展，大幅提升了系統的靈活性和可維護性。</p>



<p>(2) 可靠性 (Reliability)</p>



<p>系統會將所有訊息永久儲存，即使在過程中發生異常，訊息也不會遺失。</p>



<p>(3) 擴展性 (Scalability)</p>



<p>系統能夠因應流量變化自動擴充，無需手動干預。</p>



<p>而 Cloud Functions 本身是輕量級的應用程式平台，內建訂閱 Pub/Sub Topic 的功能 很適合處理中小規模的串流資料，尤其是針對簡單的資料轉換。</p>



<p>當新訊息到達時，能夠自動觸發 Cloud Function 執行，最適合用於事件驅動的架構，特別是那些資料流時有時無的場景。</p>



<p>優勢：</p>



<p>因為是無伺服器架構，不用管理任何基礎設施。系統能夠根據實際負載自動擴展，只要為實際使用的資源付費。</p>



<p>開發過程也相對簡單，工程師可以專注於業務邏輯的實現，不必擔心底層基礎建設的管理。這種按需付費的模式通常能提供較好的成本效益。</p>



<p>限制：</p>



<p>Cloud Functions 的執行時間有上限，最長只能運行 540 秒，不適合需要長時間處理的任務。例如資料轉換太複雜的時候，並且冷啟動也會帶來延遲。另外對於併發處理能力也有一定的限制。</p>



<p>注意事項：</p>



<p>首先要設定合理的 Time-Out 時間，確保能夠完整處理資料。同時，必須實作穩健可靠的錯誤處理和重試機制，以應對可能的失敗情況。你也要建立完善的監控機制來追踪 Cloud Functions&nbsp; 的執行狀態。</p>



<h3 class="wp-block-heading">4. Pub/Sub + Cloud Run</h3>



<p>Cloud Run 結合 Pub/Sub 提供了一個更加靈活的串流資料處理方案。特別適合那些需要自訂處理邏輯，或需要特定運作環境的場景。</p>



<p>與 Cloud Functions 相比，它支援更長的運作時間，最長可達到 60 分鐘，並且能夠處理中大型的串流資料。</p>



<p>優勢：</p>



<p>由於容器化的部署方式，這提供很大的靈活性。</p>



<p>您可以使用任何程式語言，安裝任何所需的相依性套件。Cloud Run 能夠自動擴充 (Autoscale)，同時能運作較長時間，讓它能夠適用於複雜的應用場景。</p>



<p>限制：</p>



<p>首先是容器映像檔的維護，這需要一個完整的容器管理或 CI/CD 流程。相比 Cloud Functions，Cloud Run 的設定也相對複雜一些，需要更多的維運工作。</p>



<p>從成本角度來看，如果沒設定好 Autoscale 的參數，可能會導致較高的費用。</p>



<p>注意事項：</p>



<p>要注意容器映像檔的維護和更新策略。對資源的配置需要仔細優化，包括記憶體、CPU 等參數的設定。</p>



<p>建立完善的監控和警報機制也很重要，需要及時發現和解決潛在問題。另外，為了控制成本也要小心設定 Autoscale 的策略。</p>



<h3 class="wp-block-heading">5.&nbsp; Pub/Sub + Dataflow</h3>



<p>Dataflow 結合 Pub/Sub 是一個企業級的串流處理方案，適合處理大規模資料和複雜的轉換。</p>



<p>Dataflow 具有高度的擴展性，特別是那些複雜的業務邏輯，或需要進行大規模數據處理的企業級應用場景。</p>



<p>優勢：</p>



<p>Dataflow 提供了豐富的資料轉換和處理功能，能夠處理複雜的業務邏輯。它也能 Autoscale，能夠自動處理負載量的變化。</p>



<p>還內建完善的容錯機制，能夠確保數據處理的可靠性。此外，它還支援複雜的視窗操作 (Window Operations)，將連續不斷的資料流切分成有限時間區段來處理，以及自訂的轉換邏輯。</p>



<p>限制：</p>



<p>Dataflow 也是最複雜的，它需要較多的專業知識，從設定到後續維護都很複雜。從成本角度來看，它是會自動建立虛擬機器來運作，也有較高的運營成本，通常需要專門的團隊和較長的時間投入。</p>



<p>注意事項：</p>



<p>首先是仔細規劃資料管道 (Data Pipeline) 的設計，確保能夠高效地處理資料流。</p>



<p>成本優化也是一個重要考量，需要合理設置資源使用策略，從 CPU、記憶體、硬碟，到 Autoscale、處理窗格和管道設計等等。建立完善的監控機制是很重要的。</p>



<h3 class="wp-block-heading">6.&nbsp; 串流方法比較表</h3>



<p>以下整理五種串流資料的方法，你可以根據場景來決定處理方式：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/74-e59084e7a8aee4b8b2e6b581e8b387e69699e89995e79086e696b9e6b395e6af94e8bc83e8a1a8.png?w=1024" alt="" class="wp-image-8605" /><figcaption class="wp-element-caption">74 各種串流資料處理方法比較表<br>資料來源：自行整理</figcaption></figure>



<p></p>



<h1 class="wp-block-heading">三、資料「不用」上傳到 BigQuery 的方法介紹</h1>



<p>沒錯，資料不一定要上傳到 BigQuery 才能做分析，你可以讓資料就在原來的地方，讓 BigQuery 自己過去抓資料來分析，以下介紹資料「不用」上傳到 BigQuery 的方法：</p>



<h2 class="wp-block-heading">(一) 外部表&nbsp; (External Tables)</h2>



<p>外部表就像是在 BigQuery 中設定一個連結，指向存放在別處的資料。連結建立後，你就一樣在 BigQuery 的介面，使用一般的 SQL 語法來查詢，就跟查詢 BigQuery 本身的表格一樣方便。</p>



<p>適用的資料來源包含：</p>



<ul class="wp-block-list">
<li>Cloud Storage 中的 CSV、JSON、Avro、Parquet、ORC 等檔案</li>



<li>Google 試算表</li>



<li>Bigtable</li>
</ul>



<p>像是從雲端硬碟匯入 Google 試算表，我們在最前面已經示範過了，匯入之後，就會呈現表格的詳細資訊，有一個來源 URI 代表真的是外部表，這裡就不再贅述。</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/75-e5be9ee99bb2e7abafe7a1ace7a29fe58cafe585a5-google-e8a9a6e7ae97e8a1a8e5b0b1e698afe5a496e983a8e8a1a8.png?w=1024" alt="" class="wp-image-8606" /><figcaption class="wp-element-caption">75 從雲端硬碟匯入 Google 試算表就是外部表<br>資料來源：擷圖自 <a href="https://console.cloud.google.com/bigquery">GCP 主控台</a></figcaption></figure>



<p></p>



<p>使用外部表有一些注意事項如下：</p>



<p>1. 查詢效能會比較慢</p>



<p>因為每次都要讀取外部資料，效能取決於資料來源本身，就不像在 BigQuery 身上那麼快。</p>



<p>2. 資料格式要一致</p>



<p>尤其是 CSV 的欄位順序和型態，例如 Schema 設定 3 個欄位，但某些 CSV 檔只有 2 個欄位，就會報錯「Invalid field count」；或是​​數字欄位出現文字，會造成「Invalid integer value」錯誤。</p>



<p>3. 檔案路徑支援萬用字元 「*」</p>



<p>代表你可以一口氣匯入「多個」檔案成為「一個」外部表，很適合定期新增的資料檔案，例如每天的 Log 檔，每次執行查詢時，BigQuery 都會重新掃描符合萬用字元的檔案，非常方便。</p>



<p>4. 權限要設定正確</p>



<p>你設定適當的權限給 BigQuery Service Account，例如 storage.objectViewer，確保 BigQuery 能存取Cloud Storage 的檔案。</p>



<h2 class="wp-block-heading">(二) 同步查詢 (Federated Query)</h2>



<p>Federated Query 是直接發送 SQL 查詢語法到其他資料來源，即時取得結果。這種方式更有彈性，可以直接查詢原始資料庫，尤其來源資料經常變動的話，適合用這種方式查詢。</p>



<p>適用的資料來源包含：</p>



<ul class="wp-block-list">
<li>Cloud SQL (MySQL/PostgreSQL)</li>



<li>Cloud Spanner</li>



<li>Alloy DB</li>
</ul>



<p>我們以網路上示範的影片為例子呈現如下，我們現在 Spanner 準備好一個 demo_db 資料庫，點擊進入看到 emp 表格，再點進去：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/76-e980b2e585a5-spanner-e59fb7e8a18ce5808be9ab94e8b387e69699e5baabe8a1a8e6a0bc.png?w=1024" alt="" class="wp-image-8607" /><figcaption class="wp-element-caption">76 進入 Spanner 執行個體=&gt;資料庫=&gt;表格<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p></p>



<p>我們再點擊「Data」，看到裡面已經準備好一筆資料。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/77-e79c8be588b0-spanner-e8a1a8e6a0bce585a7e79a84e4b880e7ad86e8b387e69699.png?w=1024" alt="" class="wp-image-8608" /><figcaption class="wp-element-caption">77 看到 Spanner 表格內的一筆資料<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p></p>



<p>我們在回到 BigQuery 去新增外部的資料來源，點擊「ADD DATA」裡面的「External data source」：&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/78-e59ca8-bigquery-e696b0e5a29ee5a496e983a8e8b387e69699e4be86e6ba90.png?w=1024" alt="" class="wp-image-8609" /><figcaption class="wp-element-caption">78 在 BigQuery 新增外部資料來源<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p></p>



<p>選擇 Spanner 之後，填上資料庫的相關資訊，如果相關內容都輸入正確，可以直接按下「Create Connection」：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/79-e8bcb8e585a5-spanner-e8b387e8a88ae4b8a6e5bbbae7ab8be980a3e7b79a.png?w=1024" alt="" class="wp-image-8610" /><figcaption class="wp-element-caption">79 輸入 Spanner 資訊並建立連線<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p></p>



<p>接下來它秀出連線資訊，我們可以直接點擊「Query」來試著查詢資料：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/80-e79c8be588b0-spanner-e8b387e69699e5baabe79a84e980a3e7b79ae8b387e8a88ae4b8a6e9968be5959fe69fa5e8a9a2.png?w=1024" alt="" class="wp-image-8611" /><figcaption class="wp-element-caption">80 看到 Spanner 資料庫的連線資訊並開啟查詢<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p>它預設的語法是讓你看到整個資料庫的 Metadata，例如資料庫裡有哪些表格和欄位。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1688" height="1166" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/81-e887aae58b95e794a2e7949fe69fa5e8a9a2e8aa9ee6b395efbc8ce59fb7e8a18ce5be8ce587bae78fbee695b4e5808be8b387e69699e5baab-schema.png?w=1024" alt="" class="wp-image-8612" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/81-e887aae58b95e794a2e7949fe69fa5e8a9a2e8aa9ee6b395efbc8ce59fb7e8a18ce5be8ce587bae78fbee695b4e5808be8b387e69699e5baab-schema.png 1688w, https://dongdonggcp.com/wp-content/uploads/2025/02/81-e887aae58b95e794a2e7949fe69fa5e8a9a2e8aa9ee6b395efbc8ce59fb7e8a18ce5be8ce587bae78fbee695b4e5808be8b387e69699e5baab-schema-300x207.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/81-e887aae58b95e794a2e7949fe69fa5e8a9a2e8aa9ee6b395efbc8ce59fb7e8a18ce5be8ce587bae78fbee695b4e5808be8b387e69699e5baab-schema-1024x707.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/81-e887aae58b95e794a2e7949fe69fa5e8a9a2e8aa9ee6b395efbc8ce59fb7e8a18ce5be8ce587bae78fbee695b4e5808be8b387e69699e5baab-schema-768x531.png 768w, https://dongdonggcp.com/wp-content/uploads/2025/02/81-e887aae58b95e794a2e7949fe69fa5e8a9a2e8aa9ee6b395efbc8ce59fb7e8a18ce5be8ce587bae78fbee695b4e5808be8b387e69699e5baab-schema-1536x1061.png 1536w" sizes="(max-width: 1688px) 100vw, 1688px" /><figcaption class="wp-element-caption">81 自動產生查詢語法，執行後出現整個資料庫 Schema<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p></p>



<p>我們來調整一下語法，讓它直接查詢「emp」這個表格，最後就看到原本儲存 Spanner 的裡面的資料內容，代表我們的確是連線到 Spanner 做查詢。&nbsp;</p>



<figure class="wp-block-image aligncenter size-large"><img loading="lazy" decoding="async" width="1058" height="818" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/82-e8aabfe695b4e8aa9ee6b395efbc8ce69fa5e588b0-spanner-e8a3a1e79a84e8b387e69699.png?w=1024" alt="" class="wp-image-8613" srcset="https://dongdonggcp.com/wp-content/uploads/2025/02/82-e8aabfe695b4e8aa9ee6b395efbc8ce69fa5e588b0-spanner-e8a3a1e79a84e8b387e69699.png 1058w, https://dongdonggcp.com/wp-content/uploads/2025/02/82-e8aabfe695b4e8aa9ee6b395efbc8ce69fa5e588b0-spanner-e8a3a1e79a84e8b387e69699-300x232.png 300w, https://dongdonggcp.com/wp-content/uploads/2025/02/82-e8aabfe695b4e8aa9ee6b395efbc8ce69fa5e588b0-spanner-e8a3a1e79a84e8b387e69699-1024x792.png 1024w, https://dongdonggcp.com/wp-content/uploads/2025/02/82-e8aabfe695b4e8aa9ee6b395efbc8ce69fa5e588b0-spanner-e8a3a1e79a84e8b387e69699-768x594.png 768w" sizes="(max-width: 1058px) 100vw, 1058px" /><figcaption class="wp-element-caption">82 調整語法，查到 Spanner 裡的資料<br>資料來源：擷圖自 <a href="https://www.youtube.com/watch?v=cO86meG-Ntk">Federated Query 操作影片</a></figcaption></figure>



<p></p>



<p>使用 Federated Query 的注意事項：</p>



<p>1. 需要額外設定連線和授權</p>



<p>因為我們直接連線到來源資料庫，查詢時間可能較長。光是連線成功就需要時間等待。</p>



<p>2. 要注意資料量</p>



<p>避免查詢太大量資料，影響原始資料庫的運作，如果要大量還是把資料轉入 BigQuery 比較好。</p>



<p>3. SQL 語法會因資料來源而異</p>



<p>要配合來源資料，例如 MySQL、PostgreSQL 和 Spanner 的查詢語法可能有所不同。</p>



<p>4. 計費方式與一般查詢不同</p>



<p>它不會佔用 BigQuery 的儲存費用，但仍然會有查詢費用。如果頻繁查詢外部資料庫，也要考慮提高規格，相對也造成較高成本。</p>



<h2 class="wp-block-heading">(三) 如何判斷要用原生、外部表或同步查詢？</h2>



<p>我們已經看了各種匯入資料到 BigQuery 的方法，那要選原生或外部表或同步查詢的決策標準是什麼？這裡整理各種方法優缺點和適用的場景給你參考：</p>



<figure class="wp-block-image aligncenter size-large"><img decoding="async" src="https://dongdonggcp.wordpress.com/wp-content/uploads/2025/02/83-bigquery-e4b889e7a8aee69fa5e8a9a2e696b9e5bc8fe6af94e8bc83.png?w=1017" alt="" class="wp-image-8614" /><figcaption class="wp-element-caption">83 BigQuery 三種查詢方式比較<br>資料來源：自行整理</figcaption></figure>



<p></p>



<p>建議策略</p>



<p>1. 從資料更新頻率來看</p>



<p>(1) 如果資料每天更新 1-2 次，建議使用原生表，查詢效能最好。</p>



<p>(2) 如果資料持續變動 (如每分鐘)，考慮外部表或 Federated Query。</p>



<p>(3) 如果是即時分析需求，一定使用 Federated Query。</p>



<p>2. 從查詢效能來看</p>



<p>(1) 需要毫秒級回應，必須使用原生表。</p>



<p>(2) 可接受秒級延遲，使用外部表。</p>



<p>(3) 可接受較高延遲，使用 Federated Query 。</p>



<p>3. 以成本為考量</p>



<p>(1) 資料量大但查詢頻率低，選擇外部表或 Federated Query，不用花費 BigQuery 儲存成本。</p>



<p>(2) 查詢頻率高，原生表有 24 小時快取，重複讀取外部資料成本較高。</p>



<p>(3) 預算有限，可先用 Federated Query，再根據使用情況調整。</p>



<p>4. 實務建議</p>



<p>(1) 可採用混合策略，不同的資料採用不同的查詢方式。</p>



<ul class="wp-block-list">
<li>熱門資料 (經常查詢) 使用原生表</li>



<li>冷資料 (不常查詢) 使用外部表</li>



<li>特殊即時需求用 Federated Query</li>
</ul>



<p>(2) 建議先小規模測試：</p>



<ul class="wp-block-list">
<li>先用小部分資料評估性能</li>



<li>測試實際查詢場景</li>



<li>監控成本和效能數據再決定</li>
</ul>



<h1 class="wp-block-heading">四、上傳到 BigQuery 之前的注意事項</h1>



<p>前面看完各種上傳或不上傳到 BigQuery 的方法，除了針對採取的方法提共建議之外，這裡也建議上傳之前要確認以下注意事項：</p>



<h3 class="wp-block-heading">(一) 資料品質與準備工作</h3>



<p>你必須確保所有資料的格式是一致的，包括日期格式和數值類型都要統一，異常值和空值也要先處理好。</p>



<p>編碼格式最好用 UTF-8，這樣比較不會出現亂碼。另外欄位名稱要注意，不能用特殊字元，不然 BigQuery 會報錯。</p>



<p>針對批次載入，你沒有辦法在 BigQuery 傳到一半給它按暫停，調整後再繼續傳，它錯了就是要全部重來，所以請務必謹慎處理，避免重工。</p>



<h3 class="wp-block-heading">(二) 成本考量</h3>



<p>如果資料需要整理，可以先用臨時表，等到都整理好了再存到永久表。這樣中間處理的表隔天會自動刪除，不會佔用空間也不用付費，最後的結果才存在永久表裡給大家查詢使用。</p>



<p>分區 (Partitioned) 策略也要規劃好，確保查詢只針對部分資料而不是整張表格，這樣可以省下不少查詢費用。要是預算有限，最好設個配額上限，免得花太多錢。</p>



<h3 class="wp-block-heading">(三) 效能優化</h3>



<p>表格結構要設計得合理，別搞得太複雜，例如盡量使用巢狀表格 （Nested Table） 而非 Join 太多表格。</p>



<p>選擇分區欄位的時候，通常用時間欄位或是基數 (Cardinality：一個欄位中不重複值的數量) 比較高的欄位會比較好。如果需要的話，也可以考慮加上叢集索引。</p>



<h3 class="wp-block-heading">(四) 權限與安全性</h3>



<p>如果上傳有使用特定工具，要遵守「最小權限原則」，給予剛好且必要的權限。資料存取的控管策略也要想清楚，特別是有敏感資料的話，可能還需要設定資料遮罩或加密。</p>



<h3 class="wp-block-heading">(五) 上傳方式選擇</h3>



<p>大部分情況都建議先傳到 Cloud Storage 再導入 BigQuery，至少資料已經先進來了，也不受檔案大小限制。</p>



<p>記得要設定合理的 Time-Out 時間，讓傳輸工作多等待一段時間，萬一上傳失敗也要有因應的處理方式。</p>



<h3 class="wp-block-heading">(六) 監控與維護</h3>



<p>上傳過程中要做好監控，隨時掌握進度。要是上傳失敗了，得要有辦法快速恢復。定期維護和檢查資料品質也別忘了。</p>



<h3 class="wp-block-heading">(七) 文件與溝通</h3>



<p>透過文件把所有細節都記錄下來，每個欄位都要寫清楚說明，資料從哪裡來、怎麼處理的都要記錄好。</p>



<p>跟其他團隊也要講清楚什麼時候上傳、會影響到誰。要是碰到問題，大家也才知道該怎麼處理。</p>



<h1 class="wp-block-heading">五、結論</h1>



<p>我們總共看了手動上傳、Data Transfer Service、Datastream 和串流各種方法，以及「不上傳」到 BigQuery 的外部表和 Federated Query。</p>



<p>可以看到 BigQuery 提供的方法真的非常多，讓你可以因應各種情境，來評估和選擇最適合的方法。</p>



<p>至於到底要用哪一種方法，除了參考上面的整理表格之外，最重要還是建議你先以小量資料試過一遍，才會發現到更多沒提到的小細節，來幫助你做出更好的判斷。</p>



<p>只要資料成功進來了，BigQuery 就不只能夠幫你做好分析，還能做為開發 AI 模型的基礎，幫企業產生更多價值。</p>



<p>本文同時刊登於：</p>



<p><a href="https://masterconcept.ai/zh-hant/learning-column/google-cloud-zh-hant/gcp-kol-x-master-concept-the-benefits-and-usage-of-bigquery/">【東東老師 X 思想科技】BigQuery 的優勢與使用方法</a></p>



<p><a href="https://masterconcept.ai/zh-hant/learning-column/google-cloud-zh-hant/gcp-kol-x-master-concept-method-for-importing-data-into-bigquery/">【東東老師 X 思想科技】資料匯入到 BigQuery 的方法</a></p>



<p><a href="https://masterconcept.ai/zh-hant/learning-column/google-cloud-zh-hant/gcp-kol-x-master-concept-how-to-upload-data-without-to-bigquery/">【東東老師 X 思想科技】資料「不用」上傳到 BigQuery 的方法介紹</a></p>



<p></p><p>The post <a href="https://dongdonggcp.com/2025/02/12/how-to-upload-data-to-bigquery/">[BigQuery 教學] 把資料上傳到 BigQuery 的各種方法和步驟</a> first appeared on <a href="https://dongdonggcp.com">東東 GCP 教學 - GCP 實戰講師</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://dongdonggcp.com/2025/02/12/how-to-upload-data-to-bigquery/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">10184</post-id>	</item>
	</channel>
</rss>
