google-cloud-bigtable - 获取整行的最佳方法,其中某列 = 某个值?
问题描述
我想查询某一列等于某个值的整行数据。
chain1 = row_filters.RowFilterChain(
filters=[
row_filters.ColumnQualifierRegexFilter("VOLTAGE SCREW CONVEYOR DRIVE"),
row_filters.ValueRangeFilter(b"0.693", b"1")
]
)
这是我的过滤器,但这只会得到 1 个单元格。我想得到整行。有人对如何实现这一点有任何主要提示吗?
我设法通过两次调用 Bigtable 来实现它,但我认为它根本没有效率。
chain1 = row_filters.RowFilterChain(
filters=[
row_filters.ColumnQualifierRegexFilter("VOLTAGE SCREW CONVEYOR DRIVE"),
row_filters.ValueRangeFilter(b"0.693", b"1"),
row_filters.StripValueTransformerFilter(True)
]
)
rows = table.read_rows(row_set=row_set,
filter_=chain1)
# Get the rowkeys
rowkeys = [row.row_key for row in rows]
# Get the rows for these rowkeys
row_set = RowSet()
for rk in rowkeys:
row_set.add_row_key(rk)
# Final soln
rows = table.read_rows(row_set=row_set)
解决方案
您可以使用条件行过滤器,它可以让您将基本过滤器与真过滤器和假过滤器结合起来。如果基本过滤器发出任何单元格,则使用真过滤器,否则使用错误过滤器。按照您的示例,它将类似于
condition = RowFilterChain(
filters=[
ColumnQualifierRegexFilter("VOLTAGE SCREW CONVEYOR DRIVE"),
ValueRangeFilter(b"0.693", b"1"),
CellsPerRow(1), // since we only need one cell to trigger the true filter
]
)
conditionalFilter = row_filters.ConditionalRowFilter(
base_filter = condition,
true_filter = PassAllFilter(), // this way you get the whole row and not just the single cell value
false_filter = BlockAllFilter()
)
推荐阅读
- sql - SSAS:如何生成所有有权访问多维数据集的用户的 csv?
- python - 几乎在列表列表中列出 Python
- python - 我如何预测python中的结果?
- laravel - 在 laravel 中显示 Not Acceptable 406 错误
- bash - git cmds 的自动化脚本
- bash - Bash 条件下的误报
- magento2 - Magento 2 - 显示两个路径的类别图像 URL
- javascript - 使用 Angular 9 实现 Facebook Pixel
- google-apps-script - ReferenceError:未定义会议数据服务
- amazon-web-services - 如何删除 AWS Cloud Front 失效?