Scala 将HBase扫描转换为RowFilter
我正在使用spotify提供的数据流作业。 在上一个scio版本中,使用了新的bigtable java api(com.google.bigtable.v2) 现在需要“RowFilter”进行筛选,而不是Hbase“Scan”。有没有简单的方法将“扫描”转换为“行过滤器”?我在源代码中查找了,但不知道如何使用它。 我找不到易于从hbase api迁移到“新”api的文档 我在代码中使用了一个简单的扫描,需要进行转换:Scala 将HBase扫描转换为RowFilter,scala,google-cloud-bigtable,spotify-scio,Scala,Google Cloud Bigtable,Spotify Scio,我正在使用spotify提供的数据流作业。 在上一个scio版本中,使用了新的bigtable java api(com.google.bigtable.v2) 现在需要“RowFilter”进行筛选,而不是Hbase“Scan”。有没有简单的方法将“扫描”转换为“行过滤器”?我在源代码中查找了,但不知道如何使用它。 我找不到易于从hbase api迁移到“新”api的文档 我在代码中使用了一个简单的扫描,需要进行转换: val scan = new Scan() scan.setRowPref
val scan = new Scan()
scan.setRowPrefixFilter("helloworld".getBytes)
scan.addColumn("family".getBytes, "qualifier".getBytes)
scan.setMaxVersions()
理论上,您可以将添加到项目中,并调用
com.google.cloud.bigtable.hbase.adapters.adapters.SCAN\u ADAPTER.ADAPTER(SCAN)
,将扫描
转换为行过滤器
,或者更具体地说,转换为[ReadRowsRequest][3]
,其中包含[RowFilter][4]
。(链接指向包含变量和广泛注释的对象的protobuf定义)
也就是说,bigtable hbase依赖项添加了许多可传递的依赖项。我将在独立项目中使用bigtable hbase SCAN_适配器,然后打印行过滤器以查看其构造方式
在您提到的特定情况下,RowFilter
非常简单,但可能会有额外的复杂性。您的扫描有三个部分,因此我将详细介绍如何实现它们:
scan.setRowPrefixFilter(“helloworld.getBytes”)
。这将转换为BigtableIO
上的开始键和结束键。“helloworld”是开始键,您可以使用计算结束键。默认的BigtableIO
不公开设置开始键和设置结束键,因此必须更改scio版本以公开这些设置器scan.addColumn(“family”.getBytes,“qualifier”.getBytes)
转换为两个RowFilter
s,添加到RowFilter
中,带有链(主要类似于AND)。第一个RowFilter
将设置familyNameRegexFilter,第二个RowFilter
将设置columnNameRegexFilter
scan.setMaxVersions()
使用cellsPerColumnLimitFilter
集转换为RowFilter
。它需要从#2添加到链中。警告:如果使用timestampRangeFilter
或RowFilter
的值过滤器来限制列的范围,请确保将cellsPerColumnLimitFilter
放在链的末尾谢谢你的帮助!“SCAN_ADAPATER”中的“adapt”方法还有第二个必需参数“readHooks”,您对如何使用它有什么解释吗?我天真地尝试了null,但它不起作用。Scio公开了“keyRange”,你认为它可以用于RangeFilter吗?Scio似乎用“PatchedBigtableIO.java”来修补现有的BigtableIO。对于setMaxVersions,我有点惊讶,我在一些作业中使用了它,它似乎可以工作。扫描适配器应该使用新的DefaultReadHooks()作为第二个参数。关于setMaxVersions(),我错了。我在考虑页面过滤器。我将编辑我的评论。