使用 bq 工具

在本教程中,您将学习如何使用 bq(一款适用于 BigQuery 基于 Python 的命令行界面 [CLI] 工具)来创建数据集、加载示例数据和查询表。完成本教程后,您将熟悉 bq 以及如何使用 CLI 处理 BigQuery。

如需所有 bq 命令和标志的完整参考信息,请参阅 bq 命令行工具参考文档

准备工作

  1. In the Cloud de Confiance console, on the project selector page, select or create a Cloud de Confiance project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. 如果您要使用现有项目来完成本指南,请验证您是否拥有完成本指南所需的权限。如果您创建了新项目,则您已拥有所需的权限。

  3. Enable the BigQuery API.

    Roles required to enable APIs

    To enable APIs, you need the Service Usage Admin IAM role (roles/serviceusage.serviceUsageAdmin), which contains the serviceusage.services.enable permission. Learn how to grant roles.

    Enable the API

    对于新项目,BigQuery API 会自动启用。

  4. 可选:为项目启用结算功能。如果您不想启用结算功能或提供信用卡,本文档中的步骤仍然有效。BigQuery 提供执行这些步骤的沙盒。如需了解详情,请参阅启用 BigQuery 沙盒
  5. 所需的角色

    如需获得创建数据集、创建表、加载数据和查询数据所需的权限,请让管理员为您授予项目的以下 IAM 角色:

    • 运行加载作业和查询作业: BigQuery Job User roles/bigquery.jobUser
    • 创建数据集、创建表、将数据加载到表中以及查询表: BigQuery Data Editor roles/bigquery.dataEditor

    如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

    您也可以通过自定义角色或其他预定义角色来获取所需的权限。

    下载包含源数据的文件

    您要下载的文件包含约 7 MB 的热门婴儿名字数据。由美国社会保障管理局提供。

    如需详细了解数据,请参阅社会保障管理局的热门名字背景信息

    1. 在新的浏览器标签页中打开以下网址,下载美国社会保障管理局的数据:

      https://www.ssa.gov/OACT/babynames/names.zip
      
    2. 提取文件。

      如需详细了解数据集架构,请参阅您提取的 NationalReadMe.pdf 文件。

    3. 如需查看数据,请打开 yob2024.txt 文件。此文件包含姓名、出生时指定的性别和使用该姓名的儿童人数的英文逗号分隔值。该文件没有标题行。

    4. 将该文件移至您的工作目录中。

      • 如果您使用的是 Cloud Shell,请点击 更多上传,然后点击选择文件,选择 yob2024.txt 文件并点击上传

      • 如果您在使用本地 shell,请将 yob2024.txt 文件复制或移动到运行 bq 工具的目录中。

    创建数据集

    1. 输入以下命令以创建名为 babynames 的数据集:

      bq mk --dataset babynames
      

      输出类似于以下内容:

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

      bq ls --datasets=true
      

      输出类似于以下内容:

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

    将数据加载到表中

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

      bq load babynames.names2024 yob2024.txt name:string,assigned_sex_at_birth:string,count:integer
      

      输出类似于以下内容:

      Upload complete.
      Waiting on bqjob_r3c045d7cbe5ca6d2_0000018292f0815f_1 ... (1s) Current status: DONE
      
    2. 确认 names2024 表现已显示在 babynames 数据集内:

      bq ls --format=pretty babynames
      

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

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

      bq show babynames.names2024
      

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

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

    查询表数据

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

      bq query \
          'SELECT
            name,
            count
          FROM
            babynames.names2024
          WHERE
            assigned_sex_at_birth = "F"
          ORDER BY
            count DESC
          LIMIT 5'
      

      输出类似于以下内容:

      +-----------+-------+
      |   name    | count |
      +-----------+-------+
      | Olivia    | 14718 |
      | Emma      | 13485 |
      | Amelia    | 12740 |
      | Charlotte | 12552 |
      | Mia       | 12113 |
      +-----------+-------+
      
    2. 确定数据中最罕见的男孩姓名:

      bq query \
          'SELECT
            name,
            count
          FROM
            babynames.names2024
          WHERE
            assigned_sex_at_birth = "M"
          ORDER BY
            count ASC
          LIMIT 5'
      

      输出类似于以下内容:

      +---------+-------+
      |  name   | count |
      +---------+-------+
      | Aaran   |     5 |
      | Aadiv   |     5 |
      | Aadarsh |     5 |
      | Aarash  |     5 |
      | Aadrik  |     5 |
      +---------+-------+
      

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

    清理

    为避免因本页中使用的资源导致您的 Cloud de Confiance 账号产生费用,请按照以下步骤操作。

    删除项目

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

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

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

    1. In the Cloud de Confiance 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 标志会删除数据集中的所有表,包括 names2024 表。

      输出类似于以下内容:

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

    后续步骤