管理表数据
本文档介绍如何在 BigQuery 中管理表数据。 您可以通过以下方式处理 BigQuery 表数据:
- 将数据加载到表中
- 对表数据执行附加或覆盖操作
- 浏览(或预览)表数据
- 查询表数据
- 使用数据操纵语言 (DML) 修改表数据
- 复制表数据
- 导出表数据
如需了解如何管理表架构,请参阅修改表架构。
准备工作
向需要执行本文档中每项任务的用户授予必要权限的角色。执行任务所需的权限(如果有)列在任务的“所需权限”部分中。
将数据加载到表中
您可以在创建表时加载数据,也可以先创建空表,然后再加载数据。加载数据时,您可以针对支持的数据格式使用架构自动检测功能,也可以指定架构。
如需详细了解如何加载数据,请参阅关于源数据格式和位置的文档:
如需详细了解如何从 Cloud Storage 加载数据,请参阅:
如需详细了解如何从本地来源加载数据,请参阅从本地文件加载数据。
对表数据执行附加和覆盖操作
您可以使用加载或查询操作覆盖表数据。您可以通过执行加载附加操作或将查询结果附加到表,将其他数据附加到现有表。
如需详细了解如何在加载数据时对表执行附加或覆盖操作,请参阅关于源数据格式的文档:
- 使用 Avro 数据覆盖或附加到表
- 使用 CSV 数据覆盖或附加到表
- 使用 JSON 数据覆盖或附加到表
- 使用 Parquet 数据覆盖或附加到表
- 使用 ORC 数据覆盖或附加到表
- 使用 Datastore 数据覆盖或附加到表
如需使用查询结果覆盖或附加到表,请指定目标表并将写入配置设置为以下某项:
- Append to table - 将查询结果附加到现有表。
- Overwrite table - 使用查询结果覆盖名称相同的现有表。
您可以使用以下查询将记录从一个表附加到另一个表:
INSERT INTO <projectID>.<datasetID>.<table1> ( <column2>, <column3>) (SELECT * FROM <projectID>.<datasetID>.<table2>)
如需详细了解如何使用查询结果执行数据附加或覆盖操作,请参阅写入查询结果。
浏览表数据
您可以通过以下方式浏览表数据:
- 使用 Google Cloud 控制台
- 使用 bq 命令行工具的
bq head
命令 - 调用
tabledata.list
API 方法 - 使用客户端库
所需权限
如需浏览表和分区数据,您需要拥有 bigquery.tables.getData
Identity and Access Management (IAM) 权限。
以下预定义的 IAM 角色均包含浏览表和分区数据所需的权限:
roles/bigquery.dataViewer
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
如果您拥有 bigquery.datasets.create
权限,则可以浏览您创建的数据集的表和分区中的数据。
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
浏览表数据
如需浏览表数据,请执行以下操作:
控制台
在 Google Cloud 控制台中,打开 BigQuery 页面。
在浏览器面板中,展开您的项目并选择数据集。
点击列表中的表。
点击详情并记下行数中的值。使用 bq 命令行工具或 API,您可能需要此值来控制结果的起点。
点击 Preview。此时会显示一组数据示例。
命令行
发出带 --max_rows
标志的 bq head
命令,即可列出特定表行数对应的所有列。如果未指定 --max_rows
,则默认值为 100。
如需浏览表中的列的子集(包括嵌套和重复的列),请使用 --selected_fields
标志以英文逗号分隔列表的形式输入列。
如需指定显示表数据之前要跳过的行数,请使用 --start_row=integer
标志(或 -s
快捷方式)。默认值为 0
。如需检索表中的行数,您可以使用 bq show
命令检索表信息。
如果要浏览的表在非默认项目中,请按以下格式将相应项目 ID 添加到命令:project_id:dataset.table
。
bq head \ --max_rows integer1 \ --start_row integer2 \ --selected_fields "columns" \ project_id:dataset.table
其中:
- integer1 是要显示的行数。
- integer2 是显示数据之前要跳过的行数。
- columns 是以英文逗号分隔的列的列表。
- project_id 是项目 ID。
- dataset 是包含该表的数据集的名称。
- table 是要浏览的表名称。
示例:
输入以下命令以列出 mydataset.mytable
中前 10 行的所有列。mydataset
在默认项目中。
bq head --max_rows=10 mydataset.mytable
输入以下命令以列出 mydataset.mytable
中前 100 行的所有列。mydataset
在 myotherproject
中,不在默认项目中。
bq head myotherproject:mydataset.mytable
输入以下命令,仅显示 mydataset.mytable
中的 field1
和 field2
。该命令使用 --start_row
标志跳转到第 100 行。mydataset.mytable
在默认项目中。
bq head --start_row 100 --selected_fields "field1,field2" mydataset.mytable
因为 bq head
命令不会创建查询作业,所以 bq head
命令不会显示在查询历史记录中,您也无需为此付费。
API
通过调用 tabledata.list
可浏览表中的数据。在 tableId
参数中指定表的名称。
配置以下可选参数来控制输出:
maxResults
- 要返回的结果数上限selectedFields
- 以英文逗号分隔的待返回列的列表;如果未指定此参数,则返回所有列startIndex
- 待读取的起始行的索引(从零开始)
返回的值会封装在一个 JSON 对象中,您必须对此对象进行解析,具体请参阅 tabledata.list
参考文档。
C#
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 C# 设置说明进行操作。 如需了解详情,请参阅 BigQuery C# API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Go
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Go 设置说明进行操作。 如需了解详情,请参阅 BigQuery Go API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
默认情况下,Go 版 Cloud 客户端库会自动分页,因此您无需自行实现分页,例如:
Java
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Java 设置说明进行操作。 如需了解详情,请参阅 BigQuery Java API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Node.js
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Node.js 设置说明进行操作。 如需了解详情,请参阅 BigQuery Node.js API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
默认情况下,Node.js 版 Cloud 客户端库会自动分页,因此您无需自行实现分页,例如:
PHP
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 PHP 设置说明进行操作。 如需了解详情,请参阅 BigQuery PHP API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
PHP 版 Cloud 客户端库会通过生成器函数 rows
在迭代期间获取下一页的结果,从而实现自动分页。
Python
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Python 设置说明进行操作。 如需了解详情,请参阅 BigQuery Python API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Ruby
试用此示例之前,请按照 BigQuery 快速入门:使用客户端库中的 Ruby 设置说明进行操作。 如需了解详情,请参阅 BigQuery Ruby API 参考文档。
如需向 BigQuery 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为客户端库设置身份验证。
Ruby 版 Cloud 客户端库中会使用 Table#data
和 Data#next
自动分页。
查询表数据
您可以使用以下查询作业类型之一来查询 BigQuery 数据:
- 交互式查询作业。默认情况下,BigQuery 会尽快运行交互式(按需)查询作业。
持续查询作业(预览版)。借助这些作业,查询会持续运行,让您能够实时分析 BigQuery 中的传入数据,然后将结果写入 BigQuery 表,或将结果导出到 Bigtable 或 Pub/Sub。您可以使用此功能执行对时间敏感的任务,例如创建数据洞见并立即采取行动、应用实时机器学习 (ML) 推理,以及构建事件驱动型数据流水线。
批量查询作业。使用这些作业时,BigQuery 会代表您将每个批量查询排队,然后在有空闲资源时启动查询,通常在几分钟之内。
您可以使用以下方法运行查询作业:
- 在 Google Cloud 控制台中编写和运行查询。
- 在 bq 命令行工具中运行
bq query
命令。 - 以编程方式调用 BigQuery REST API 中的
jobs.query
或jobs.insert
方法。 - 使用 BigQuery 客户端库。
如需详细了解如何查询 BigQuery 表,请参阅查询 BigQuery 数据简介。
除了查询存储在 BigQuery 表中的数据外,您还可以查询存储在外部的数据。如需了解详情,请参阅外部数据源简介。
修改表数据
您可以使用 SQL 中的数据操纵语言 (DML) 语句修改表中的数据。您可以使用 DML 语句更新、合并、插入和删除表中的行。如需查看每种类型的 DML 语句的语法参考和示例,请参阅 GoogleSQL 中的数据操纵语言语句。
旧版 SQL 方言不支持 DML 语句。如需使用旧版 SQL 更新或删除数据,您必须先删除表,然后使用新数据重新创建该表。您也可以通过编写查询修改数据,并将查询结果写入新的目标表。
复制表数据
您可以通过以下方式复制表:
- 使用 Google Cloud 控制台
- 使用 bq 命令行工具的
bq cp
命令 - 调用
jobs.insert
API 方法并配置复制作业 - 使用客户端库
如需详细了解如何复制表,请参阅复制表。
导出表数据
您可以采用 CSV、JSON、Avro 或 Parquet(预览版)格式将表数据导出到 Cloud Storage 存储桶。不支持导出到本地机器;但是,您可以使用 Google Cloud 控制台下载和保存查询结果。
如需了解详情,请参阅导出表数据。
表安全性
如需控制对 BigQuery 中表的访问权限,请参阅表访问权限控制简介。
后续步骤
- 如需详细了解如何加载数据,请参阅加载数据简介。
- 如需详细了解如何查询数据,请参阅查询 BigQuery 数据简介。
- 如需详细了解如何修改表架构,请参阅修改表架构。
- 如需详细了解如何创建和使用表,请参阅创建和使用表。
- 如需详细了解如何管理表,请参阅管理表。