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

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


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

操作演示


准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

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

  6. 确保已启用 BigQuery API。

    启用 API

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

  7. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

下载来源公开数据文件

  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. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

删除资源

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

  1. 删除 babynames 数据集:

    bq rm --recursive=true babynames
    

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

    输出类似于以下内容:

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

后续步骤