建立無伺服器資料管道:IoT 至數據分析

1. 總覽/簡介

雖然由網頁、應用程式伺服器和資料庫組成的多層應用程式是網頁開發的基礎,也是許多網站的起點,但成功的應用程式往往會面臨擴充性、整合和敏捷性方面的挑戰。例如,資料要如何即時處理,又如何分散到多個關鍵業務系統?這些問題加上網路規模應用程式的需求,促使我們需要分散式訊息系統,並採用使用資料管道來建構具備彈性、即時的系統的架構模式。因此,瞭解如何將即時資料發布至分散式訊息系統,以及如何建構資料管道,對開發人員和架構師來說都是重要的技能。

建構目標

在本程式碼研究室中,您將建構天氣資料管道,從物聯網 (IoT) 裝置開始,利用訊息佇列接收及傳送資料,並利用無伺服器函式將資料移至資料倉儲,然後建立用於顯示資訊的資訊主頁。我們會使用搭載天氣感應器的 Raspberry Pi 做為 IoT 裝置,而 Google Cloud Platform 的多個元件則會組成資料管道。雖然建構 Raspberry Pi 很有幫助,但這不是本程式碼研究室的必修部分,而且串流天氣資料可以用指令碼取代。

79cd6c68e83f7fea.png

完成本程式碼研究室中的步驟後,您將擁有串流資料管道動態饋給資訊主頁,其中會顯示溫度、濕度、露點和氣壓。

e28ca9ea4abb1457.png

課程內容

  • 如何使用 Google Pub/Sub
  • 如何部署 Google Cloud 函式
  • 如何運用 Google BigQuery
  • 如何使用 Google 數據分析建立資訊主頁
  • 此外,如果您建立了 IoT 感應器,您也會瞭解如何運用 Google Cloud SDK,以及如何保護對 Google Cloud Platform 的遠端存取呼叫

軟硬體需求

如果您想建立本程式碼研究室的 IoT 感應器部分,而非使用範例資料和指令碼,您還需要下列資源 ( 可以以整組產品套件的形式訂購,或按這裡逐一訂購)...

  • 搭配電源供應器、SD 卡和充電盒的 Raspberry Pi Zero W
  • USB 讀卡機
  • USB 集線器 (可讓鍵盤和滑鼠在 Raspberry Pi 上單一的 USB 連接埠)
  • 母對母麵包板線
  • GPIO 鐵鎚標頭
  • BME280 感應器
  • 焊槍和焊錫

此外,您必須有電腦螢幕或電視 (具備 HDMI 輸入端)、HDMI 傳輸線、鍵盤和滑鼠。

2. 開始設定

自學環境設定

如果您還沒有 Google 帳戶 (Gmail 或 G Suite),請先建立帳戶。無論您是否已擁有 Google 帳戶,一定要善用價值$300 美元的免費試用方案

登入 Google Cloud Platform 主控台 (console.cloud.google.com)。您可以使用本實驗室的預設專案 (「我的第一個專案」),也可以選擇建立新專案。如要建立新專案,您可以使用「管理資源」頁面。專案 ID 在所有 Google Cloud 專案中均不得重複 (您已使用下方顯示的名稱,無法使用這個名稱)。請記下專案 ID (即 _____),因為稍後會用到。

f414a63d955621a7.png

3415e861c09cd06a.png

完成這個程式碼研究室的費用不應超過數美元,但如果您決定使用更多資源,或是將資源繼續執行,則可能會增加費用。請務必完成程式碼研究室結尾的「清理」部分。

3. 建立 BigQuery 資料表

BigQuery 是無伺服器企業資料倉儲服務,具備高擴充性和成本低廉的特性,是儲存來自物聯網裝置的串流資料的理想選擇,同時也能讓數據分析資訊主頁查詢資訊。

我們來建立一個資料表,用來儲存所有 IoT 天氣資料。在 Cloud 控制台中選取 BigQuery。這會在新視窗中開啟 BigQuery (請勿關閉原始視窗,因為您需要再次存取該視窗)。

12a838f78a10144a.png

按一下專案名稱旁的向下箭頭圖示,然後選取「建立新資料集」

27616683b64ce34a.png

輸入資料集的名稱「weatherData」,選取資料儲存位置,然後按一下「確定」

62cfcbd1add830ea.png

按一下資料集旁邊的「+」符號,建立新資料表

3d7bff6f9843fa3c.png

在「Source Data」(來源資料) 中,選取「Create empty table」(建立空白資料表)。在「目的地資料表名稱」部分輸入「weatherDataTable」。在「結構定義」下方點選「新增欄位」按鈕,直到選出共 9 個欄位。按照下方所示填寫欄位,並確認已為每個欄位選取適當的「類型」。完成所有步驟後,按一下「Create Table」按鈕。

eef352614a5696a7.png

畫面顯示的結果應如下所示...

7d10e5ab8c6d6a0d.png

您現在已設定資料倉儲,可接收天氣資料。

4. 建立 Pub/Sub 主題

Cloud Pub/Sub 為串流分析和事件導向運算系統提供簡單可靠的可擴充式基礎架構。因此,這項服務非常適合處理傳入的 IoT 訊息,並允許下游系統處理這些訊息。

如果您仍在 BigQuery 視窗中,請切換回 Cloud 控制台。如果您已關閉 Cloud 控制台,請前往 https://console.cloud.google.com

在 Cloud 控制台中,依序選取「Pub/Sub」和「主題」。

331ad71e8a1ea7b.png

如果您看到「啟用 API」提示,請點選「啟用 API」按鈕。

9f6fca9dc8684801.png

按一下「建立主題」按鈕

643670164e9fae12.png

輸入「天氣」做為主題名稱,然後按一下「建立」

d7b049bc66a34db6.png

您應該會看到新建立的主題

7c385759f65a1031.png

您現在有了 Pub/Sub 主題,可用於發布 IoT 訊息,並允許其他程序存取這些訊息。

安全發布至主題

如果您打算透過 Google Cloud 控制台以外的資源 (例如 IoT 感應器) 將訊息發布至 Pub/Sub 主題,就必須使用服務帳戶更嚴密地控管存取權,並建立信任憑證,確保連線安全無虞。

在 Cloud 控制台中,依序選取「IAM 與管理」和「服務帳戶」

8e2f8a1428d0feca.png

按一下「建立服務帳戶」按鈕

60892b564e0ac140.png

在「角色」下拉式選單中,選取「Pub/Sub 發布者」角色

31f8c944af11270e.png

輸入服務帳戶名稱 (iotWeatherPublisher),勾選「提供新的私密金鑰」核取方塊,並確認金鑰類型已設為 JSON,然後按一下 [建立]

7e3f9d7e56a44796.png

系統會自動下載安全金鑰。請務必妥善保管這組金鑰,按一下 [關閉]。

60a7da32dd85ba73.png

您應該會看到已建立的服務帳戶,而且有一個相關聯的金鑰 ID。

b25f6f5629fe8fd7.png

為了方便日後存取,我們會將金鑰儲存在 Google Cloud Storage 中。依序選取 Cloud 控制台中的「儲存空間」和「瀏覽器」。

c4414fe61be320a9.png

點選「建立值區」按鈕

cde91311b267fc65.png

選擇儲存值區的名稱 (名稱必須在 Google Cloud 中不重複),然後按一下「建立」按鈕

28c10e41b401f479.png

找出自動下載的安全金鑰,然後拖曳或上傳至 Storage 值區

a0f6d069d42cec4b.png

金鑰上傳完成後,應會顯示在 Cloud Storage 瀏覽器中

55b25c8b9d73ec19.png

請記下儲存空間值區名稱和安全金鑰檔案名稱,以供後續使用。

5. 建立 Cloud 函式

雲端運算能讓您的運算作業完全以無伺服器的模型執行,因此您能隨時調整處理邏輯來因應其他位置發布的事件。在本實驗室中,每當有訊息發布至天氣主題,Cloud 函式就會啟動,讀取訊息並儲存在 BigQuery 中。

在 Cloud 控制台中選取 Cloud Functions

a14ac2e4f03bf831.png

如果您看到 API 訊息,請按一下「啟用 API」按鈕

40ba0a08430e0e8a.png

按一下「建立函式」按鈕

5d82d8faeffa55bf.png

在「名稱」欄位中,輸入 function-weatherPubSubToBQ。在「觸發條件」中選取 Cloud Pub/Sub 主題,然後在「主題」下拉式選單中選取「weatherdata」。針對原始碼,請選取內嵌編輯器。在 index.js 分頁中,將下列程式碼貼到現有程式碼開頭處。請務必配合您的環境,變更 projectId、datasetId 和 tableId 的常數。

/**
 * Background Cloud Function to be triggered by PubSub.
 *
 * @param {object} event The Cloud Functions event.
 * @param {function} callback The callback function.
 */
exports.subscribe = function (event, callback) {
  const BigQuery = require('@google-cloud/bigquery');
  const projectId = "myProject"; //Enter your project ID here
  const datasetId = "myDataset"; //Enter your BigQuery dataset name here
  const tableId = "myTable"; //Enter your BigQuery table name here -- make sure it is setup correctly
  const PubSubMessage = event.data;
  // Incoming data is in JSON format
  const incomingData = PubSubMessage.data ? Buffer.from(PubSubMessage.data, 'base64').toString() : "{'sensorID':'na','timecollected':'1/1/1970 00:00:00','zipcode':'00000','latitude':'0.0','longitude':'0.0','temperature':'-273','humidity':'-1','dewpoint':'-273','pressure':'0'}";
  const jsonData = JSON.parse(incomingData);
  var rows = [jsonData];

  console.log(`Uploading data: ${JSON.stringify(rows)}`);

  // Instantiates a client
  const bigquery = BigQuery({
    projectId: projectId
  });

  // Inserts data into a table
  bigquery
    .dataset(datasetId)
    .table(tableId)
    .insert(rows)
    .then((foundErrors) => {
      rows.forEach((row) => console.log('Inserted: ', row));

      if (foundErrors && foundErrors.insertErrors != undefined) {
        foundErrors.forEach((err) => {
            console.log('Error: ', err);
        })
      }
    })
    .catch((err) => {
      console.error('ERROR:', err);
    });
  // [END bigquery_insert_stream]


  callback();
};

在 package.json 分頁中,將下列程式碼貼到預留位置程式碼上

{
  "name": "function-weatherPubSubToBQ",
  "version": "0.0.1",
  "private": true,
  "license": "Apache-2.0",
  "author": "Google Inc.",
  "dependencies": {
    "@google-cloud/bigquery": "^0.9.6"
  }
}

如果要執行的函式設為「HelloWorld」,請將其變更為「subscribe」。點選 [建立] 按鈕

3266d5268980a4db.png

函式會在約 2 分鐘後顯示已部署

26f45854948426d0.png

恭喜!您已成功透過函式將 Pub/Sub 連結至 BigQuery。

6. 設定 IoT 硬體 (選用)

組裝 Raspberry Pi 和感應器

如果有超過 7 個引腳,請將標頭修剪至只剩 7 個引腳。將排針焊接到感應器板。

a162e24426118c97.png

小心安裝鎚頭接頭到 Raspberry Pi。

a3a697907fe3c9a9.png

請按照這裡的步驟格式化 SD 卡,然後安裝 NOOBS (New Out Of Box Software) 安裝程式。將 SD 卡插入 Raspberry Pi,並將 Raspberry Pi 放入充電盒內。

1e4e2459cd3333ec.png

根據下圖,使用麵包板電線將感應器接到 Raspberry Pi。

392c2a9c85187094.png

Raspberry Pi PIN 碼

感應器連線

針腳 1 (3.3V)

VIN

針腳 3 (CPIO2)

SDI

針腳 5 (GPIO3)

SCK

針腳 9 (接地)

東北

44322e38d467d66a.png

將監視器 (使用 Mini-HDMI 連接器)、鍵盤/滑鼠 (搭配 USB 集線器) 和最後的電源變壓器連接。

設定 Raspberry Pi 和感應器

在 Raspberry Pi 完成開機後,請針對所需作業系統選取 Raspbian,確定您的偏好語言正確無誤,然後按一下 [安裝] (視窗左上方的硬碟圖示)。

a16f0da19b93126.png

按一下畫面右上方的 Wi-Fi 圖示,然後選取網路。如果是安全網路,請輸入密碼 (預先共用金鑰)。

17f380b2d41751a8.png

按一下畫面左上方的「覆盆子」圖示,然後依序選取「偏好設定」和「Raspberry Pi Configuration」。在「介面」分頁中啟用 I2C。在「Localisation」分頁中,設定語言代碼和時區。設定時區後,請讓 Raspberry Pi 重新啟動。

14741a77fccdb7e7.png

重新啟動完成後,按一下「Terminal」圖示,開啟終端機視窗。

9df6f228f6a31601.png

輸入下列指令,確認感應器已正確連接。

  sudo i2cdetect -y 1

結果應如下所示,請確認顯示 77。

cd35cd97bee8085a.png

安裝 Google Cloud SDK

為了善用 Google Cloud 平台上的工具,您必須在 Raspberry Pi 上安裝 Google Cloud SDK。這個 SDK 包含管理及運用 Google Cloud Platform 所需的工具,並支援多種程式設計語言。

在 Raspberry Pi 上開啟終端機視窗 (如果尚未開啟),然後設定環境變數,讓 SDK 版本與 Raspberry Pi 上的作業系統相符。

  export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)"

接著新增 Google Cloud SDK 套件的儲存位置,讓安裝工具知道系統要求安裝 SDK 時前往何處。

  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" |  sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list

從 Google 的套件存放區新增公開金鑰,讓 Raspberry Pi 在安裝期間驗證安全性並信任內容

  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add -

確認 Raspberry Pi 上的所有軟體都已更新,並安裝核心 Google Cloud SDK

  sudo apt-get update && sudo apt-get install google-cloud-sdk

當系統顯示「Do you want to continue?」提示訊息時,請按下 Enter 鍵。

使用 Python 套件管理工具安裝 tendo 套件。這個套件可用於檢查指令碼是否執行多次,以及是否已安裝用於天氣指令碼的應用程式。

  pip install tendo

使用 Python 套件管理員,確認已安裝 Python 適用的 Google Cloud PubSub 和 OAuth2 套件,並已更新至最新版本

  sudo pip install --upgrade google-cloud-pubsub
  sudo pip install --upgrade oauth2client

初始化 Google Cloud SDK

SDK 允許透過經過驗證的遠端存取 Google Cloud。在本程式碼研究室中,這會用於存取儲存值區,方便將安全金鑰下載到 Raspberry Pi。

在 Raspberry Pi 的指令列中輸入

  gcloud init --console-only

當系統顯示「Would you like to log in (Y/n)?」提示訊息時,請按下 Enter 鍵。

畫面上顯示「在瀏覽器中前往以下連結:」後面接著是一串開頭為 https://accounts.google.com/o/oauth 的長網址?...,請將滑鼠游標懸停在網址上,然後按一下滑鼠右鍵並選取「複製網址」。接著開啟網頁瀏覽器 (畫面左上角的藍色地球圖示),在網址列上按一下滑鼠右鍵,然後點選「貼上」。

出現登入畫面後,請輸入與 Google Cloud 帳戶相關聯的電子郵件地址,然後按下 Enter 鍵。接著輸入密碼,然後按一下「下一步」按鈕。

系統會提示您 Google Cloud SDK 想要存取您的 Google 帳戶。按一下「允許」按鈕。

畫面隨即會顯示驗證碼。使用滑鼠醒目顯示該項目,然後按一下滑鼠右鍵並選擇「複製」。返回終端機視窗,確認游標位於「Enter verification code:」右側,然後按一下滑鼠右鍵,然後選擇「Paste」。按下 Enter 鍵。

如果系統要求您「選擇要使用的 Cloud 專案:」,請輸入您在本程式碼研究室中使用的專案名稱對應的數字,然後按下 Enter 鍵。

如果系統提示您啟用 Compute API,請按下 Enter 鍵加以啟用。接著,系統會要求您設定 Google Compute Engine 設定。按下 Enter 鍵。系統會顯示可能的區域/區域清單,請選擇最接近您所在位置的區域,輸入對應的編號,然後按下 Enter 鍵。

稍後,您會看到一些額外資訊。Google Cloud SDK 現已設定完成。您可以關閉網頁瀏覽器視窗,因為您之後不需要這個視窗。

安裝感應器軟體和天氣指令碼

透過 Raspberry Pi 的命令列,複製所需套件,以便從輸入/輸出引腳讀取資訊。

  git clone https://github.com/adafruit/Adafruit_Python_GPIO

安裝下載的套件

  cd Adafruit_Python_GPIO

  sudo python setup.py install

  cd ..

複製啟用天氣感應器的專案程式碼

  git clone https://github.com/googlecodelabs/iot-data-pipeline

將感應器驅動程式複製到與下載軟體其餘部分相同的目錄中。

  cd iot-data-pipeline/third_party/Adafruit_BME280

  mv Adafruit_BME280.py ../..

  cd ../..

輸入以下內容即可編輯指令碼...

  nano checkWeather.py

將專案變更為專案 ID,將主題變更為 Pub/Sub 主題名稱 (這些資訊已列於本程式碼研究室的「開始設定」和「建立 Pub/Sub 主題」部分)。

將 sensorID、sensorZipCode、sensorLat 和 sensorLong 的值變更為您想要的值。如要取得特定位置或地址的經緯度值,請按這裡

完成必要的變更後,按下 Ctrl-X 鍵即可退出 nano 編輯器。按下 Y 鍵確認。

# constants - change to fit your project and location
SEND_INTERVAL = 10 #seconds
sensor = BME280(t_mode=BME280_OSAMPLE_8, p_mode=BME280_OSAMPLE_8, h_mode=BME280_OSAMPLE_8)
credentials = GoogleCredentials.get_application_default()
project="myProject" #change this to your Google Cloud project id
topic = "myTopic" #change this to your Google Cloud PubSub topic name
sensorID = "s-Googleplex"
sensorZipCode = "94043"
sensorLat = "37.421655"
sensorLong = "-122.085637"

安裝安全金鑰

將安全金鑰 (從「安全地發布至某個主題」專區) 複製到 Raspberry Pi。

如果您使用 SFTP 或 SCP 將安全金鑰從本機電腦複製到 Raspberry Pi (/home/pi 目錄),請略過下一個步驟,直接跳到匯出路徑。

如果您將安全金鑰放入儲存值區,請務必記住儲存值區名稱和檔案名稱。使用 gsutil 指令複製安全金鑰。這個指令可以存取 Google 儲存空間 (為何其命名為 gsutil,以及檔案路徑開頭為 gs:// 的原因)。請務必變更下列指令,以便顯示您的值區名稱和檔案名稱。

  gsutil cp gs://nameOfYourBucket/yourSecurityKeyFilename.json .

系統會顯示訊息,說明檔案正在複製,且作業已完成。

透過 Raspberry Pi 的指令列,匯出安全金鑰的路徑 (請根據您所擁有的檔案變更檔案名稱)

  export GOOGLE_APPLICATION_CREDENTIALS=/home/pi/iot-data-pipeline/yourSecurityKeyFilename.json

您現在已建立完成的 IoT 天氣感應器,可以開始將資料傳送至 Google Cloud。

7. 啟動資料管道

可能需要啟用 Compute API

從 Raspberry Pi 進行串流資料

如果您建立了 Raspberry Pi IoT 天氣感應器,請啟動指令碼來讀取天氣資料,並推送至 Google Cloud Pub/Sub。如果您不在 /home/pi/iot-data-pipeline 目錄中,請先移到該處

  cd /home/pi/iot-data-pipeline

啟動天氣指令碼

  python checkWeather.py

您應該會看到終端機視窗每分鐘回應一次天氣資料結果。資料傳送後,您可以跳到下一節 (檢查資料是否處於流動)。

模擬資料串流

如果您沒有建構 IoT 天氣感應器,可以使用已儲存在 Google Cloud Storage 中的公開資料集,並將其饋送至現有的 Pub/Sub 主題,模擬資料串流。搭配使用 Google Dataflow 和 Google 提供的範本,可從 Cloud Storage 讀取並發布至 Pub/Sub。

在這個程序中,Dataflow 需要臨時儲存位置,因此我們要建立一個儲存值區。

在 Cloud 控制台中,依序選取「Storage」和「Browser」。

c4414fe61be320a9.png

點選「建立值區」按鈕

cde91311b267fc65.png

選擇 Storage 值區的名稱 (提醒您,這個名稱在所有 Google Cloud 中均不得重複),然後按一下「建立」按鈕。請記下這個儲存值區的名稱,因為稍後會用到。

1dad4cfbccfc96b1.png

在 Cloud 控制台中選取「Dataflow」。

43ec245b47ae2e78.png

按一下「Create Job From Template」(利用範本建立工作) (畫面上方)

da55aaf2a1b0a0d0.png

按照下方所示填入工作詳細資料,並注意下列事項:

  • 輸入工作名稱「dataflow-gcs-to-pubsub」
  • 系統會根據專案託管位置自動選取區域,無需變更。
  • 選取 GCS Text 至 Cloud Pub/Sub 的 Cloud Dataflow 範本
  • 在「輸入 Cloud Storage 檔案」中,輸入 gs://codelab-iot-data-pipeline-sampleweatherdata/*.json (這是公開資料集)
  • 對於輸出 Pub/Sub 主題,確切路徑取決於專案名稱,並會類似「projects/yourProjectName/topics/weatherdata」。
  • 將「臨時位置」設為您剛建立的 Google Cloud Storage 值區名稱,並加上檔案名稱前置字串「tmp」。格式應為「gs://myStorageBucketName/tmp」。

填妥所有資訊後 (請參閱下方說明),按一下「Run job」(執行工作) 按鈕

5f8ca16672f19d9b.png

Dataflow 工作應會開始執行。

e020015c369639ad.png

Dataflow 工作大約需要一分鐘才能完成。

218a3ff7197dcf75.png

8. 檢查資料是否可正常流通

Cloud 函式記錄

確保 Pub/Sub 觸發 Cloud 函式

  gcloud beta functions logs read function-weatherPubSubToBQ

記錄檔應會顯示函式正在執行、接收中資料,且正在將資料插入 BigQuery

d88f7831dabc8b3f.png

BigQuery 資料

檢查並確認資料能傳送至 BigQuery 資料表。在 Cloud 控制台中,前往 BigQuery (bigquery.cloud.google.com)。

85627127d58f1d2e.png

在視窗左側的專案名稱下方,依序點選「資料集」(weatherData) 和資料表 (weatherDataTable),然後點選「Query Table」(查詢資料表) 按鈕

44dc0f765a69580c.png

為 SQL 陳述式加上星號,使其讀取 SELECT * FROM... (如下所示),然後按一下「RUN QUERY」按鈕

b3a001e11c2902f2.png

系統提示時,請按一下「執行查詢」按鈕

2c894d091b789ca3.png

如果看到結果,表示資料正在正常傳送。

c8a061cebb7b528a.png

隨著資料開始流程,您現在可以建立數據分析資訊主頁。

9. 建立數據分析資訊主頁

Google 數據分析可將您的資料轉變成資訊豐富的資訊主頁與報告,既便於閱讀、容易共用,更具有完整的可自訂性。

使用網路瀏覽器前往 https://datastudio.google.com

10f8c27060cd7430.png

在「Start a new report」(建立新報表) 下方,按一下「Blank」(空白),然後按一下「Get Started」(開始使用) 按鈕

df1404bc0047595e.png

勾選核取方塊來接受條款,按一下 [下一步] 按鈕,選取您想接收的電子郵件,然後按一下 [完成] 按鈕。再次在「Start a new report」(建立新報表) 下方,按一下「Blank」(空白)

55e91d3dd88b05ca.png

按一下「建立新資料來源」按鈕

a22f3fac05774fc9.png

依序按一下「BigQuery」和「授權」按鈕,然後選擇要與 數據分析 搭配使用的 Google 帳戶 (應與您在程式碼研究室中使用的帳戶相同)。

5ab03f341edc8964.png

按一下「允許」按鈕

22bcdbb5f5f1d30c.png

選取專案名稱、資料集和資料表。然後按一下「連線」按鈕。

dc6b6b0ed9ced509.png

如以下所示,變更類型欄位 (除了 timecollected 和 sensorID 以外,所有欄位都應為數字)。請注意,timecollected 設為 Date Hour (而非僅設為 Date)。變更「匯總」欄位,如下所示 (露點、溫度、濕度和壓力應為平均值,其他所有項目則應設為「None」)。按一下「建立報表」按鈕。

c60887e29c3bdf9b.png

按一下「Add to report」(加入報表) 按鈕確認

5ec3888dfdd85095.png

如果系統要求您選取 Google 帳戶,請依指示操作,然後按一下「允許」按鈕,讓數據分析將報表儲存在 Google 雲端硬碟中。

7b8006a813b3defa.png

畫面上會顯示空白的報表面板,供您建立資訊主頁。從頂端一列圖示中,選擇「時間序列」。

c7cd97354e1cde04.png

在空白工作表的左上角繪製矩形。應佔據空白紙張的 ¼ 左右。

e0e82cb19921f835.png

選取視窗右側的「樣式」分頁標籤。將「缺少資料」從「Line To Zero」變更為「Line Breaks」。在左側 Y 軸部分,將 Axis Min 中的 0 刪除至 (Auto)。

c7620bfe734d546.png

按一下工作表中的圖表,然後複製/貼上 (Ctrl-C/Ctrl-V) 圖表 3 次。請對齊圖表,使每個版面有 1⁄4 的版面配置。

9a7d3faa28996219.png

按一下每個圖表,然後在「時間序列屬性和資料」部分按一下現有指標 (露點),選擇要顯示的其他指標,直到所有四個天氣讀數 (露點、溫度、濕度和氣壓) 都有各自的圖表。

d29b21cac9e1ef5d.png

fda75a2f2a77a323.png

您現已擁有基本資訊主頁!

8f59e8f4d44b8552.png

10. 恭喜!

您已建立整個資料管道!您已瞭解如何使用 Google Pub/Sub、部署無伺服器函式、運用 BigQuery,以及使用 Data Studio 建立數據分析資訊主頁。此外,您也瞭解瞭如何安全地使用 Google Cloud SDK 將資料帶入 Google Cloud Platform。最後,您現在已掌握了一些重要架構模式的實作經驗,可在處理大量流量時維持可用性。

79cd6c68e83f7fea.png

清除

實驗天氣資料和分析管道後,您可以移除執行中的資源。

如果您已建構 IoT 感應器,請將其關閉。在終端機視窗中按下 Ctrl-C 鍵即可停止指令碼,然後輸入以下指令來關閉 Raspberry Pi

  shutdown -h now

前往「Cloud Functions」,勾選 function-weatherPubSubToBQ 旁邊的核取方塊,然後點選「刪除」

ae95f4f7178262e0.png

前往 Pub/Sub,按一下「Topic」,然後勾選「weatherdata」主題旁的核取方塊,接著按一下「Delete」

6fb0bba3163d9a32.png

前往「儲存空間」,勾選儲存空間值區旁的核取方塊,然後點選「刪除」

9067fb2af9f907f4.png

前往 bigquery.cloud.google.com,按一下專案名稱旁邊的向下箭頭,再依序點選天氣資料資料集右側的向下箭頭和「刪除資料集」。

a952dfeec49248c4.png

系統提示時,請輸入資料集 ID (weatherData),即可完成刪除資料的程序。

6310b1cc8da31a77.png