使用 bq 工具加载和查询数据

了解如何使用 bq 命令行工具创建数据集、加载示例数据和查询表。


如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示

操作演示


准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. 在 Google Cloud Console 中的项目选择器页面上,选择或创建一个 Google Cloud 项目

    转到“项目选择器”

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

    转到“项目选择器”

  4. 确保您的 Google Cloud 项目已启用结算功能

  5. 如果您没有为本教程中使用的 Google Cloud 项目启用结算功能,则需要在 BigQuery 沙盒中处理数据。借助 BigQuery 沙盒,您可以免费使用限定的 BigQuery 功能,了解 BigQuery。

  6. 确保已启用 BigQuery API。

    启用 API

    如果您创建了一个新项目,则系统会自动启用 BigQuery API。

  7. 在 Google Cloud 控制台中,激活 Cloud Shell。

    激活 Cloud Shell

    Cloud Shell 会话随即会在 Google Cloud 控制台的底部启动,并显示命令行提示符。Cloud Shell 是一个已安装 Google Cloud CLI 且已为当前项目设置值的 Shell 环境。该会话可能需要几秒钟时间来完成初始化。

下载来源公开数据文件

  1. 下载婴儿姓名 ZIP 文件
  2. 提取该 zip 文件。该压缩包中包含一个名为 NationalReadMe.pdf 的文件,该文件描述数据集架构。详细了解婴儿姓名数据集
  3. 打开 yob2010.txt 文件。 这是一个英文逗号分隔值 (CSV) 文件,其中包含三列:姓名、出生时指定的性别和使用该姓名的儿童人数。该文件没有标题行。
  4. 将该文件移至您的工作目录中。
    • 如果您使用的是 Cloud Shell,请点击 更多 > 上传,然后点击选择文件,选择 yob2010.txt 文件并点击上传
    • 如果您在使用本地 shell,请将 yob2010.txt 文件复制或移动到运行 bq 工具的目录中。

创建数据集

  1. 创建名为 babynames 的数据集:

    bq mk babynames
    

    输出类似于以下内容:

    Dataset 'myproject:babynames' successfully created.
    

    数据集名称不得超过 1024 个字符,可包含 A-Z、a-z、0-9 和下划线。该名称不能以数字或下划线开头,也不能包含空格。

  2. 确认 babynames 数据集现已显示在项目中:

    bq ls
    

    输出类似于以下内容:

      datasetId
    -------------
      babynames
    

将数据加载到表中

  1. babynames 数据集中,将源文件 yob2010.txt 加载到名为 names2010 的新表中:

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

    输出类似于以下内容:

    Upload complete.
    Waiting on bqjob_r3c045d7cbe5ca6d2_0000018292f0815f_1 ... (1s) Current status: DONE
    

    默认情况下,当您加载数据时,BigQuery 会要求 UTF-8 编码的数据。如果您的数据采用 ISO-8859-1(或 Latin-1)编码,并且您遇到问题,请使用 bq load -E=ISO-8859-1 指示 BigQuery 将数据视为 Latin-1。如需了解详情,请参阅编码

  2. 确认 names2010 表现已显示在 babynames 数据集内:

    bq ls babynames
    

    输出类似于以下内容:为简化输出,省略了某些列。

      tableId     Type
    ----------- ---------
     names2010    TABLE
    
  3. 确认新 names2010 表的表架构包含 name: stringassigned_sex_at_birth: stringcount: integer

    bq show babynames.names2010
    

    输出类似于以下内容:为简化输出,省略了某些列。

      Last modified        Schema                      Total Rows   Total Bytes
    ----------------- ------------------------------- ------------ ------------
    14 Mar 17:16:45   |- name: string                    34089       654791
                      |- assigned_sex_at_birth: string
                      |- count: integer
    

查询表数据

  1. 确定数据中最热门的女孩姓名:

    bq query --use_legacy_sql=false \
        'SELECT
          name,
          count
        FROM
          `babynames.names2010`
        WHERE
          assigned_sex_at_birth = "F"
        ORDER BY
          count DESC
        LIMIT 5;'
    

    输出类似于以下内容:

    +----------+-------+
    |   name   | count |
    +----------+-------+
    | Isabella | 22925 |
    | Sophia   | 20648 |
    | Emma     | 17354 |
    | Olivia   | 17030 |
    | Ava      | 15436 |
    +----------+-------+
    
  2. 确定数据中最罕见的男孩姓名:

    bq query --use_legacy_sql=false \
        'SELECT
          name,
          count
        FROM
          `babynames.names2010`
        WHERE
          assigned_sex_at_birth = "M"
        ORDER BY
          count ASC
        LIMIT 5;'
    

    输出类似于以下内容:

    +----------+-------+
    |   name   | count |
    +----------+-------+
    | Aamarion |     5 |
    | Aarian   |     5 |
    | Aaqib    |     5 |
    | Aaidan   |     5 |
    | Aadhavan |     5 |
    +----------+-------+
    

    最小计数为 5,因为源数据省略了出现次数少于 5 次的名字。

清理

为避免因本页面中使用的资源导致您的 Google Cloud 账号产生费用,请删除包含这些资源的 Google Cloud 项目。

删除项目

如果您使用 BigQuery 沙盒查询公共数据集,则您的项目不会启用结算功能。

为了避免产生费用,最简单的方法是删除您为本教程创建的项目。

如需删除项目,请执行以下操作:

  1. 在 Google Cloud 控制台中,进入管理资源页面。

    转到“管理资源”

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除资源

如果您使用的是现有项目,请删除您创建的资源:

  1. 删除 babynames 数据集:

    bq rm --recursive=true babynames
    

    --recursive 标志会删除数据集中的所有表,包括 names2010 表。

    输出类似于以下内容:

    rm: remove dataset 'myproject:babynames'? (y/N)
    
  2. 如需确认删除命令,请输入 y

后续步骤