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

本页介绍如何使用 bq 命令行工具运行查询、加载数据和导出数据。

准备工作

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

  1. 登录您的 Google 帐号。

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

  2. 选择或创建 Google Cloud Platform 项目。

    转到“管理资源”页面

  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)

运行帮助命令

使用 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,后跟一个英文冒号 (:)。以下示例列出了 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 |
    +----------+-------+
    

清理

为避免系统因本快速入门中使用的资源向您的 GCP 帐号收取费用,请执行以下操作:

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

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

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面