使用 bq 指令列工具的快速入門

本頁將說明如何使用 bq 指令列工具執行查詢、載入資料及匯出資料。

事前準備

開始本快速入門導覽課程之前,請先使用 Google Cloud Platform 主控台建立或選取專案,並安裝 Cloud SDK。

  1. 登入您的 Google 帳戶。

    如果您沒有帳戶,請申請新帳戶

  2. 選取或建立 Google Cloud Platform 專案。

    前往「Manage resources」(管理資源) 頁面

  3. 安裝並初始化 Cloud SDK
  4. 新專案會自動啟用 BigQuery。如要在現有的專案中啟用 BigQuery,請前往 啟用BigQuery API。

    啟用 API

  5. 如果您不希望針對專案使用信用卡或啟用計費功能,BigQuery 也提供沙箱模式。無論您的專案是否已啟用計費功能,本主題中的步驟都適用於這項專案。如果您想要啟用計費功能,請參閱這篇說明文章瞭解如何啟用。

檢查資料表

BigQuery 會提供一些範例資料表讓您查詢。在本快速入門導覽課程中,您將針對包含每部戲劇全文內容的 shakespeare 資料表執行查詢。

若要檢查特定資料表的結構定義,請執行

bq show projectId:datasetId.tableId

其中的專案和資料集 ID 如果已是 bq 工具的預設值,則可省略。以下範例將檢查 samples 資料集內的 shakespeare 資料表:

bq show bigquery-public-data:samples.shakespeare

輸出:

Table bigquery-public-data:samples.shakespeare

   Last modified                  Schema                 Total Rows   Total Bytes   Expiration
 ----------------- ------------------------------------ ------------ ------------- ------------
  26 Aug 14:43:49   |- word: string (required)           164656       6432064
                    |- word_count: integer (required)
                    |- corpus: string (required)
                    |- corpus_date: integer (required)

執行 help 指令

使用 bq help 取得 bq 指令列工具的相關詳細資訊。

bq help

加上指令名稱即可取得特定指令的相關資訊。例如,以下 bq help 呼叫會擷取 query 指令的相關資訊。

bq help query

執行查詢

執行查詢以查看子字串「raisin」在莎士比亞的作品中出現的次數。

如要執行查詢,請執行 bq query "[SQL_STATEMENT]" 指令。

  • \ 符號逸出任何位於 [SQL_STATEMENT] 內的引號,或

  • 使用其他的引號類型,而不要使用括起來的符號 ("')。

下列標準 SQL 查詢會計算子字串「raisin」在莎士比亞全部作品中出現的次數。

bq query --use_legacy_sql=false \
'SELECT
   word,
   SUM(word_count) AS count
 FROM
   `bigquery-public-data`.samples.shakespeare
 WHERE
   word LIKE "%raisin%"
 GROUP BY
   word'

輸出:

Waiting on job_dcda37c0bbed4c669b04dfd567859b90 ... (0s) Current status:
DONE
+---------------+-------+
|     word      | count |
+---------------+-------+
| Praising      |   4   |
| raising       |   5   |
| raisins       |   1   |
| praising      |   8   |
| dispraising   |   2   |
| dispraisingly |   1   |
+---------------+-------+

如果莎士比亞的作品沒有您搜尋的文字,就不會傳回任何結果。例如,以下對「huzzah」的搜尋不會傳回任何相符結果。

bq query --use_legacy_sql=false \
'SELECT
  word
FROM
  `bigquery-public-data`.samples.shakespeare
WHERE
  word = "huzzah"'

輸出:

Waiting on job_e19 ... (4s) Current status: DONE
$

建立新的資料表

現在要建立您自己的資料表。每份資料表都儲存在資料集內。資料集是由一系列資料表和檢視表等資源組成的。

步驟 1:下載範例資料

範例資料包含約 7 MB 由美國社會安全局提供的常用新生兒命名資料。

  1. 下載新生兒名字 zip 檔案

  2. 解壓縮檔案。

    ZIP 檔案包含一份說明資料集結構定義的讀我檔案。 進一步瞭解資料集

  3. 開啟名稱為 yob2010.txt 的檔案以查看其內容。該檔案為逗號分隔值 (CSV) 檔案,並且包含了三個欄位:名字、性別 (MF),以及相同名字的新生兒人數。這個檔案沒有標題列。

  4. yob2010.txt 檔案複製或移動至目前的目錄以執行 bq 指令。

步驟 2:建立新的資料集

  1. 使用 bq ls 指令查看預設專案是否有任何現有資料集。

    bq ls

    範例輸出:

      datasetId
     -------------
      olddataset
  2. 再次執行 bq ls,這次加入專案 ID 並在專案 ID 後加上冒號 (:),藉此列出該專案中的資料集。以下範例會列出 publicdata 專案中的資料集。
    bq ls publicdata:

    輸出:

      datasetId
     -----------
      samples
  3. 使用 bq mk 指令在預設專案中建立名稱為 babynames 的新資料集。資料集名稱不得超過 1,024 個字元,可以包含 A-Z、a-z、0-9 和底線,但不能由數字或底線作為開頭,也不可以包含空格。
    bq mk babynames

    範例輸出:

    Dataset 'myprojectid:babynames' successfully created.
  4. 執行 bq ls 以確認資料集現已顯示為預設專案的一部分:
    bq ls

    範例輸出:

      datasetId
     -------------
      olddataset
      babynames

步驟 3:上傳資料表

使用 bq load 指令,只需一個步驟就能建立或更新資料表並載入資料。

  1. 執行 bq load 指令,在上方所建的 babynames 資料集內將來源檔案載入至名為 names2010 的新資料表。根據預設,系統會同步執行這個作業,而且只需幾秒鐘的時間即可完成。

    bq load babynames.names2010 yob2010.txt name:string,gender:string,count:integer

    bq load 指令參數:

    • datasetID:babynames
    • tableID:names2010
    • 來源:yob2010.txt:如有必要,請在檔案中納入完整路徑
    • 結構定義:name:string,gender:string,count:integer

    範例輸出:

    Waiting on job_4f0c0878f6184119abfdae05f5194e65 ... (35s) Current status: DONE
  2. 執行 bq ls 以確認資料表現在會出現在資料集中:

    bq ls babynames

    輸出:

       tableId    Type
     ----------- -------
      names2010   TABLE
    
  3. 執行 bq show 以查看結構定義:

    bq show babynames.names2010

    輸出:

    Table myprojectid:babynames.names2010
    
       Last modified         Schema         Total Rows   Total Bytes   Expiration
     ----------------- ------------------- ------------ ------------- ------------
      13 Mar 15:31:00   |- name: string     34041        653855
                        |- gender: string
                        |- count: integer
    

根據預設,當您載入資料時,BigQuery 預期收到的是 UTF-8 編碼資料。如果您有採用 ISO-8859-1 (或 Latin-1) 編碼格式的資料,且載入資料發生問題,您可以透過 -E 標記明確要求 BigQuery 將您的資料視為 Latin-1 編碼格式。如需詳細資訊,請參閱字元編碼

步驟 4:執行查詢

  1. 執行以下指令以傳回最常見的女生名字:

    bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'F' ORDER BY count DESC LIMIT 5"

    輸出:

    Waiting on job_58c0f5ca52764ef1902eba611b71c651 ... (0s) Current status: DONE
    +----------+-------+
    |   name   | COUNT |
    +----------+-------+
    | Isabella | 22731 |
    | Sophia   | 20477 |
    | Emma     | 17179 |
    | Olivia   | 16860 |
    | Ava      | 15300 |
    +----------+-------+
    
  2. 執行以下指令以查看最罕見的男生名字。因為來源資料會略過出現少於 5 次的名字,所以次數至少必須為 5。
    bq query "SELECT name,count FROM babynames.names2010 WHERE gender = 'M' ORDER BY count ASC LIMIT 5"

    輸出:

    Waiting on job_556ba2e5aad340a7b2818c3e3280b7a3 ... (1s) Current status: DONE
    +----------+-------+
    |   name   | COUNT |
    +----------+-------+
    | Aarian   |     5 |
    | Aaidan   |     5 |
    | Aamarion |     5 |
    | Aadhavan |     5 |
    | Aaqib    |     5 |
    +----------+-------+
    

清除

如何避免系統向您的 GCP 帳戶收取您在本快速入門中所用資源的相關費用:

  1. 執行 bq rm 指令以移除 babynames 資料集。使用 -r 標記刪除資料集中的所有資料表,包括 names2010 資料表。

    bq rm -r babynames
    
  2. 輸入 y 以確認刪除指令。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁