过滤条件
从 Bigtable 读取数据时,您可以读取特定行或特定范围的行中的数据。但是,您并非总是需要所有行中的所有数据。您可能只需要行键中包含特定值的行,或者特定列族中的单元。
如需限制读取请求的结果,请在请求中添加过滤条件。您可以在发送响应之前将过滤条件应用于数据,从而减少返回的数据量。因此,使用过滤条件可以降低网络费用并提高吞吐量。本页面简要介绍 Bigtable 过滤条件的工作原理以及可用的过滤条件列表。
如需了解每种过滤条件的详细信息和代码示例,请参阅过滤条件示例。
过滤条件的工作原理
当读取请求包含过滤条件时,Bigtable 会从表格中检索一行或一定范围的行。对于其检索的各输入行,Bigtable 会使用您的过滤条件评估该行,然后根据过滤结果生成输出行。
Bigtable 提供多种类型的过滤条件,如以下部分所述。基本过滤条件分为两类:限制性和修改性。您可以将基本过滤条件组合为组合式过滤条件。
在大多数情况下,过滤条件会应用于所有行,除非您指定应该应用过滤条件的行键、行范围或行数。唯一的例外情况是行键正则表达式过滤条件,在某些情况下,如果正则表达式是固定前缀,该过滤条件可能会限制行范围。通常,为避免全表扫描速度缓慢,请务必指定过滤条件对应的行。
限制性过滤条件
限制性过滤条件根据是否符合特定条件来控制响应中包含哪些行或单元。例如,响应中应仅包含行键与正则表达式匹配的行,或者您希望只包含特定列族中的单元。
许多限制性过滤条件可以排除输出行中的单元。如果排除了输出行中的所有单元,则该行不包含在响应中。
有关限制性过滤条件的完整列表,请参阅过滤条件汇总。
修改性过滤条件
修改性过滤条件会影响单个单元的数据或元数据。
Bigtable 提供以下修改性过滤条件:
删除值过滤条件,用于将每个单元的值替换为空字符串。如果您只需要符合条件的行数或行键列表,而不是这些行中的数据,则此过滤条件非常有用。
应用标签过滤条件,用于向每个单元应用标签,以标识产生响应中每个单元的过滤条件。您的应用可以使用这些标签对客户端执行额外的过滤。
组合式过滤条件
组合式过滤条件可让您将多个基本过滤条件合并为一个,从而可以将多个过滤条件应用于一个读取请求。
例如,如需获取服务器的 CPU 使用情况数据,您可以使用一个过滤条件,以仅包含行键以 SERVER
开头的行,然后使用第二个过滤条件,以仅包含 CPU
列族中的单元。
Bigtable 提供以下组合式过滤条件:
- 链,用于对每个输入行应用一系列过滤条件并返回输出行。链式过滤条件类似于使用逻辑 AND。
- 交错式,通过多个过滤条件发送每个输入行,然后将输入行的所有过滤结果合并到一个输出行中。交错式过滤条件类似于使用逻辑 OR。
- 条件性,通过将两个可能的过滤条件中的其中一个应用于输入行来生成输出行。将谓词过滤条件应用到输入行,然后检查谓词过滤条件的输出行是否包含单元,以此选择过滤条件。
过滤条件和性能
过滤条件可让您仅检索实际需要的数据。因此,过滤条件可以通过减少发送到应用的数据量来提高性能。
不过,过滤条件并不是解决所有性能问题的通用解决方案。通常而言,过滤条件应该用于控制吞吐量效率,而不是缩短发送请求和接收响应之间的延迟时间。如果得到正确使用,过滤条件可以成为改善读取性能策略的有效部分。
具体来说,条件性过滤条件会增加延迟时间,因为条件性比其他过滤条件慢得多。如果您的读取请求非常注重性能,请不要在请求中使用条件。
过滤条件汇总
下表列出了 Bigtable 提供的过滤条件,其中包括指向每种过滤条件的详细信息和代码示例的链接。
限制性过滤条件 | |
---|---|
全部屏蔽 | 不提交任何单元。最适合用于调试。 |
每列的单元数上限 | 仅在一行中添加列的 N 个最新版本。 |
每行的单元数上限 | 仅包含一行中的前 N 个单元。 |
每行的单元偏移量 | 省略行中的前 N 个单元。 |
列族正则表达式 | 仅包含列族与 RE2 正则表达式匹配的单元。 |
列限定符正则表达式 | 仅包含列限定符与正则表达式匹配的单元。 |
列范围 | 仅包含列限定符在特定范围内的特定列族中的单元。 |
全部通过 | 提交所有输入单元。最适合用于调试。 |
行键正则表达式 | 仅包含行键与正则表达式匹配的单元。 |
行样本 | 检索行的随机样本。 |
接收器 | 在最终输出行中包含单元,并阻止后续过滤条件对其进行修改或移除。 |
时间戳范围 | 仅包含时间戳在特定范围内的单元。 |
值范围 | 仅包含值在特定范围内的单元。 |
值正则表达式 | 仅包含值与正则表达式匹配的单元。 |
修改性过滤条件 | |
---|---|
应用标签 | 为所有单元添加标签。 |
删除值 | 返回空字符串作为每个单元的值。 |
组合式过滤条件 | |
---|---|
链式 | 按顺序应用多个过滤条件。 |
情况 | 将两个可能的过滤条件中的其中一个应用于行。 |
交错式 | 将多个过滤条件的输出行合并成一个输出行。 |