我有一些用例,其中api服务使用rowKey检索BigTable行。我遇到的问题是api服务试图检索一些具有布尔值的列,并在前端执行布尔比较。因为BigTable不支持该数据类型。前端服务比较部分未按预期工作。我使用下面的代码在BigTable中存储布尔值。
Boolean value = Boolean.parseBoolean(newImageMap.get(Key).toString());
SetCell setCell = SetCell.newBuilder()
.setFamilyName(Utility.COLUMN_FAMILY)
.setColumnQualifier(Utility.str_to_bb(Key,StandardCharsets.UTF_8))
.setTimestampMicros(yearAgoMillis)
.setValue(ByteString.copyFrom(Bytes.toBytes(value)))
// .setValue(Utility.str_to_bb(String.valueOf(value),StandardCharsets.UTF_8))
.build();但是布尔值在BigTable中存储为字符串。您可以在下面的快照中看到存储值。如果有办法处理这类用例,请告诉我。boolean-value-ss
发布于 2020-02-14 21:29:38
由于BigTable不支持布尔数据类型,因此不可能在BigTable中转储布尔对象。相反,我建议您在驱动程序代码中进行更改,并将数据类型大小写设置为合适的格式,然后将其发送到前端,这样会更合适。为此,您必须预先识别来自源端的布尔数据类型,并将其存储为配置,该配置将作为驱动程序代码的输入。如果这个解决方案有效,请让我知道。
发布于 2020-02-07 03:46:12
因此有两个部分:使用现有的布尔字符串值和转换当前设置以使其更易于使用。
要使用当前设置,只需将结果与"true“和"false”字符串进行比较。根据您在与Pievis的评论中的讨论,这似乎不是您想要做的。
因此,要转换当前的设置:您应该使用0作为false,使用1作为true (或者您可以将空作为false),这将更有效地利用空间。然后,要转换所有现有的值,您必须对值"true“进行全表扫描过滤,然后将这些单元格更新为1,并根据删除这些单元格的值"false”进行筛选。
https://stackoverflow.com/questions/60101217
复制相似问题