Google cloud platform 有没有办法在Cloud BigTable中转储布尔对象?

Google cloud platform 有没有办法在Cloud BigTable中转储布尔对象?,google-cloud-platform,google-cloud-dataflow,apache-beam,google-cloud-bigtable,Google Cloud Platform,Google Cloud Dataflow,Apache Beam,Google Cloud Bigtable,我有一个特定的用例,api服务使用rowKey检索BigTable行。我要讨论的问题是api服务试图检索一些具有布尔值的列,并在前端进行布尔比较。因为BigTable不支持该数据类型。前端服务比较部分未按预期工作。我使用下面的代码在BigTable中存储布尔值 Boolean value = Boolean.parseBoolean(newImageMap.get(Key).toString()); SetCell

我有一个特定的用例,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中。您可以在下面的快照中看到存储的值。 让我知道,如果有办法处理这种类型的用例。

因此,这有两个部分:使用现有的布尔字符串值和将当前设置转换为更易于使用的设置

要使用当前设置,只需将结果与“true”和“false”字符串进行比较。根据你与皮耶维斯的评论中的讨论,这似乎不是你想要做的

因此,要转换当前设置,请执行以下操作:
您应该使用0作为false,使用1作为true(或者可以将空作为false),这将更有效地节省空间。然后要转换所有现有值,您必须对值“true”进行完整的表扫描筛选,然后将这些单元格更新为1,并在删除这些单元格时对值“false”进行筛选。

由于BigTable不支持布尔数据类型,因此无法在BigTable中转储布尔对象。相反,我建议您将驱动程序代码和类型case中的数据类型更改为合适的格式,并将其发送到前端,这样更合适。为此,您必须从源端预先识别布尔数据类型,并将其存储为配置,该配置将作为驱动程序代码的输入。
如果此解决方案有效,请告诉我。

我没有使用Bigtable的第一手经验,但如果问题出在前端,我不会更改数据层。在那里或API中修复它怎么样?你也可以试着在db中使用1作为true,使用“empty”作为false,但我不知道这是否会在不知道确切动机的情况下修复你的fe。我可以完全理解你想说的部分,但问题是你不能访问每个api并在前端进行相应的更改。应用程序是如此庞大,我们不可能追溯到这一部分。所以我选择了另一部分。谢谢你的回复,这是我之前的想法,但是前端球员还没有准备好在他们的队伍中做出所有的改变。所以我只是停留在这一部分。您是否能够使用带值过滤器的扫描在我概述的位置修改您的数据库?根据当前的体系结构规则,我无法修改将影响应用程序的现有记录。您可以创建一个新列,用于在将所有内容迁移到新格式时存储数据。但这将导致前端的条件级别更改