首页 > 解决方案 > 获取整行的最佳方法,其中某列 = 某个值?

问题描述

我想查询某一列等于某个值的整行数据。

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)

标签: google-cloud-bigtablebigtable

解决方案


您可以使用条件行过滤器,它可以让您将基本过滤器真过滤器假过滤器结合起来。如果基本过滤器发出任何单元格,则使用真过滤器,否则使用错误过滤器。按照您的示例,它将类似于

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()
)

推荐阅读