本页面介绍如何使用 bq
命令行工具运行查询以及加载数据。
准备工作
在开始学习本快速入门之前,请使用 Google Cloud Console 创建或选择项目并安装 Cloud SDK。
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
- 安装并初始化 Cloud SDK。
- 新项目会自动启用 BigQuery。如需在预先存在的项目中激活 BigQuery,请转到 启用 BigQuery API。
- 如果您不想提供信用卡或为项目启用结算功能,BigQuery 会提供沙盒。无论您的项目是否启用了结算功能,本主题中的步骤都适用。如果您想启用结算功能,请参阅了解如何启用结算功能。
检查表
BigQuery 提供了多个示例表,您可以对这些示例表执行查询操作。在本快速入门中,您将针对 shakespeare
表运行一些查询;对于莎士比亚每部戏剧中的每一个词语,该表都包含一个对应的条目。
如需检查特定表的架构,请运行以下命令。如果项目 ID 和数据集 ID 是 bq
工具的默认值,则可以省略项目 ID 和数据集 ID。
bq show PROJECT_ID:DATASET_ID.TABLE_ID
以下示例检查 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 的热门婴儿名字数据。
提取文件。
该 ZIP 文件中包含一个描述数据集架构的 README 文件。 详细了解该数据集。
打开名为
yob2010.txt
的文件,查看其具体内容。该文件是一个包含以下三列的 CSV 文件:姓名、性别(M
或F
)以及使用该姓名的儿童人数。该文件没有标题行。将
yob2010.txt
文件复制或移动到运行bq
命令行工具的目录中。如果您在 Cloud Shell 中运行bq
命令行工具,请上传yob2010.txt
文件;请参阅使用 Cloud Shell 管理文件。
第 2 步:创建新的数据集
-
使用
bq ls
命令查看您的默认项目是否包含任何现有数据集。bq ls
示例输出:
datasetId ------------- olddataset
- 再次运行
bq ls
以列出特定项目中的数据集,方法是添加项目 ID,后跟一个英文冒号 (:)。以下示例列出了publicdata
项目中的数据集。bq ls publicdata:
输出:
datasetId ----------- samples
-
使用
bq mk
命令在默认项目中创建一个名为babynames
的新数据集。数据集名称最长可使用 1024 个字符,可包含 A-Z、a-z、0-9 和下划线,但不能以数字或下划线开头,也不能有空格。bq mk babynames
示例输出:
Dataset 'myprojectid:babynames' successfully created.
- 运行
bq ls
以确认该数据集现已位于默认项目中:bq ls
示例输出:
datasetId ------------- olddataset babynames
第 3 步:上传表
bq load
命令只需一步即可创建或更新表并加载数据。
-
运行
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
- datasetID:
-
运行
bq ls
以确认该表现已显示在相应数据集内:bq ls babynames
输出:
tableId Type ----------- ------- names2010 TABLE
-
运行
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 步:运行查询
-
运行以下命令,返回最热门的女孩名字:
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 | +----------+-------+
-
运行以下命令,查看最少见的男孩名字。
最小计数为 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 | +----------+-------+
清理
为避免系统因本快速入门中使用的资源向您的 Google Cloud 帐号收取费用,请按照以下步骤操作。
运行
bq rm
命令以移除babynames
数据集。使用-r
标志删除该数据集内的所有表(包括names2010
表)。bq rm -r babynames
通过输入
y
,确认删除命令。
后续步骤
如需详细了解
bq
命令行工具,请参阅使用bq
命令行工具。如需详细了解如何将数据加载到 BigQuery 中,请参阅 加载数据简介。
如需详细了解如何查询数据,请参阅查询 BigQuery 数据概览。
如需了解如何从 BigQuery 中导出数据,请参阅导出表数据。
如需详细了解如何以编程方式访问 BigQuery,请参阅 REST API 参考或 BigQuery API 客户端库页面。