使用 bq 工具加载和查询数据
了解如何使用 bq 命令行工具创建数据集、加载示例数据和查询表。
如需在 Google Cloud 控制台中直接遵循有关此任务的分步指导,请点击操作演示:
准备工作
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
确保已启用 BigQuery API。
如果您创建了一个新项目,则系统会自动启用 BigQuery API。
-
In the Google Cloud console, 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.
如果您没有为本教程中使用的 Google Cloud 项目启用结算功能,则需要在 BigQuery 沙盒中处理数据。借助 BigQuery 沙盒,您可以免费使用限定的 BigQuery 功能,了解 BigQuery。
下载来源公开数据文件
- 下载婴儿姓名 ZIP 文件。
- 提取该 zip 文件。该压缩包中包含一个名为
NationalReadMe.pdf
的文件,该文件描述数据集架构。详细了解婴儿姓名数据集。 - 打开
yob2010.txt
文件。 这是一个英文逗号分隔值 (CSV) 文件,其中包含三列:姓名、出生时指定的性别和使用该姓名的儿童人数。该文件没有标题行。 - 将该文件移至您的工作目录中。
- 如果您使用的是 Cloud Shell,请点击
yob2010.txt
文件并点击上传。 - 如果您在使用本地 shell,请将
yob2010.txt
文件复制或移动到运行 bq 工具的目录中。
- 如果您使用的是 Cloud Shell,请点击
创建数据集
创建名为
babynames
的数据集:bq mk babynames
输出类似于以下内容:
Dataset 'myproject:babynames' successfully created.
数据集名称不得超过 1024 个字符,可包含 A-Z、a-z、0-9 和下划线。该名称不能以数字或下划线开头,也不能包含空格。
确认
babynames
数据集现已显示在项目中:bq ls
输出类似于以下内容:
datasetId ------------- babynames
将数据加载到表中
在
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。如需了解详情,请参阅编码。确认
names2010
表现已显示在babynames
数据集内:bq ls babynames
输出类似于以下内容:为简化输出,省略了某些列。
tableId Type ----------- --------- names2010 TABLE
确认新
names2010
表的表架构包含name: string
、assigned_sex_at_birth: string
和count: 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
查询表数据
确定数据中最热门的女孩姓名:
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 | +----------+-------+
确定数据中最罕见的男孩姓名:
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 沙盒查询公共数据集,则您的项目不会启用结算功能。为了避免产生费用,最简单的方法是删除您为本教程创建的项目。
如需删除项目,请执行以下操作:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
删除资源
如果您使用的是现有项目,请删除您创建的资源:
删除
babynames
数据集:bq rm --recursive=true babynames
--recursive
标志会删除数据集中的所有表,包括names2010
表。输出类似于以下内容:
rm: remove dataset 'myproject:babynames'? (y/N)
如需确认删除命令,请输入
y
。
后续步骤
- 详细了解如何使用 bq 工具。
- 了解 BigQuery 沙盒。
- 详细了解如何将数据加载到 BigQuery 中。
- 详细了解如何在 BigQuery 中查询数据。
- 了解 BigQuery 动态。
- 了解 BigQuery 定价。
- 了解 BigQuery 配额和限制。