查询和分析 Bigtable 数据: BigQuery
BigQuery 是一个托管式数据仓库,可帮助您使用 SQL 查询查询和分析 Bigtable 数据。BigQuery 适合数据分析师、数据工程师和数据 科学家或任何想要使用 Bigtable 数据 业务问题。
利用 BigQuery,您可以查询自己的 Bigtable 数据 。如果您想加入 将 Bigtable 数据传输到 BigQuery 表。
本文档简要介绍了如何使用 BigQuery 查询 Bigtable 数据。在阅读本页之前,您应该先熟悉 该 Bigtable 概览 和 BigQuery 概览
理想方式是使用 BigQuery 查询 Bigtable 表 对于在每个部分中都具有相同列族和列限定符的表格, 。
创建外部表
您或贵组织中的管理员必须先创建外部表,然后才能查询 Bigtable 数据。外部表是一种 BigQuery 表,其中包含指向您要将查询发送到的 Bigtable 表的元数据指针。如需详细了解外部表,请参阅 外部数据源简介。
您必须在 Bigtable 表所在的区域中创建外部表。也就是说,如果表位于
一个在 europe-central2-a
(华沙)、europe-west1-c
具有集群的实例
(比利时)和 asia-east1-a
(东京),则必须创建外部表
华沙、比利时或东京
在大多数情况下,在创建外部表时,请设置 readRowkeyAsString
并
将 ignoreUnspecifiedColumnFamilies
设置为 true。
如果 ignoreUnspecifiedColumnFamilies
为 true,则在创建表时
定义仅包含列族中某些列,
列会提升为外部表中的列。未选列中的数据会归入“一般”column
列下。
如需创建外部表,请按照以下页面上的说明操作: 创建 Bigtable 外部表。
查询外部表中的数据
为 Bigtable 表创建外部表后, 可以使用以下方法之一向其发送 SQL 查询:
- 在命令行中,使用
bq
:BigQuery CLI - 对 BigQuery API 的调用
- 以下任何一项: BigQuery 客户端库
如需了解如何编写和运行查询,请参阅 运行查询。 如需了解 Bigtable 专用说明(包括所需权限和代码示例),请参阅查询 Bigtable 数据。
计划查询
如果您想定期将 Bigtable 数据导入 BigQuery,则可以使用定期查询。它们也很有用 这些用例可能需要您构建数据流水线 将数据流式传输到 BigQuery 中。有关如何管理 请参阅 安排查询。
避免全表扫描
与直接向 Bigtable 表发送读取请求时类似,当您针对该表查询外部表时,通常应避免全表扫描。全表扫描会增加 CPU 使用率,并且所花时间比选择性查询要长得多。它们还需要更多 BigQuery 吞吐量。
如果您的查询涉及所有行,则会触发全表扫描。另一方面,如果您限制查询并请求一组行或指定的非连续行,则系统不会扫描整个表。中的示例 限制查询的 GoogleSQL 语法包括:
WHERE rowkey = "abc123"
WHERE rowkey BETWEEN "abc123" PRECEDING AND "abc999" FOLLOWING
WHERE rowkey > 999999
(如果您将行键读取为字符串)
联接
如果您打算使用联接来分析 关联至来自其他来源的数据时,您应当创建一个 从 Bigtable 中提取计划联接的相关字段。 如需了解联接表的更多最佳实践,请参阅 优化查询计算。
费用
当您创建和查询外部表时,需要为 BigQuery 费用以及 处理流量所需的 Bigtable 节点。由于您的外部表与 Bigtable 表位于同一区域,因此不会产生网络费用。
如果您倾向于在正常营业时间运行查询,请考虑以下做法: 启用 Bigtable 自动扩缩 在需要时增加,在作业完成时减少。自动扩缩 如果您运行定期查询,并且这些查询 截止日期。
另一种限制费用的方法是避免全表扫描。
如需详细了解 BigQuery 的费用优化,请参阅 估算和控制费用。
限制
存在以下限制:
- 您无法使用 BigQuery 查询存储为 JSON 格式的 Bigtable 数据。
- 如果查询结果包含具有嵌套类型(例如协议缓冲区 [protobuf] 和 Avro 格式)的序列化数据,则在 Google Cloud 控制台中可能会呈现错误或难以读取。