快速入门:使用 bq 命令行工具

本页面介绍如何使用 bq 命令行工具运行查询以及加载数据。

准备工作

在开始学习本快速入门之前,请使用 Google Cloud Console 创建或选择项目并安装 Cloud SDK。

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。

    转到项目选择器页面

  3. 安装并初始化 Cloud SDK
  4. 新项目会自动启用 BigQuery。如需在先前存在的项目中激活 BigQuery,请转到 启用 BigQuery API。

    启用 API

  5. 如果您不想在项目中使用信用卡或启用结算功能,BigQuery 提供了沙盒机制。无论您的项目是否启用了结算功能,本主题中的步骤都适用。如果您想启用结算功能,请参阅了解如何启用结算功能

检查表

BigQuery 提供了多个示例表,您可以对这些示例表执行查询操作。在本快速入门中,您将针对 shakespeare 表运行一些查询;对于莎士比亚每部戏剧中的每一个词语,该表都包含一个对应的条目。

如需检查特定表的架构,请运行以下命令。如果项目 ID 和数据集 ID 是 bq 工具的默认值,则可以省略项目 ID 和数据集 ID。

bq show PROJECT_ID:DATASET_ID.TABLE_ID

以下示例检查 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)

运行帮助命令

使用 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 文件中包含一个描述数据集架构的 README 文件。 详细了解该数据集

  3. 打开名为 yob2010.txt 的文件,查看其具体内容。该文件是一个包含以下三列的 CSV 文件:姓名、性别(MF)以及使用该姓名的儿童人数。该文件没有标题行。

  4. yob2010.txt 文件复制或移动到您使用 bq 命令行工具来运行命令的目录中。

第 2 步:创建新的数据集

  1. 使用 bq ls 命令查看您的默认项目是否包含任何现有数据集。

    bq ls

    示例输出:

      datasetId
     -------------
      olddataset
  2. 再次运行 bq ls 以列出特定项目中的数据集,方法是添加项目 ID,后跟一个英文冒号 (:)。以下示例列出了 publicdata 项目中的数据集。
    bq ls publicdata:

    输出:

      datasetId
     -----------
      samples
  3. 使用 bq mk 命令在默认项目中创建一个名为 babynames 的新数据集。数据集名称最长可使用 1024 个字符,可包含 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
    • source:yob2010.txt:如有必要,请提供文件的完整路径
    • schema: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 |
    +----------+-------+
    

清理

为避免系统因本快速入门中使用的资源向您的 Google Cloud 帐号收取费用,请按照以下步骤操作。

  1. 运行 bq rm 命令以移除 babynames 数据集。使用 -r 标志删除该数据集内的所有表(包括 names2010 表)。

    bq rm -r babynames
    
  2. 通过输入 y,确认删除命令。

后续步骤