如何解决BigTable:有没有更好的方法可以从部分行键中获取唯一值?
我在 <name>#<date>#<id_value>
中创建了一个带有行键的 bigtable
当我使用如下所示的行键前缀进行过滤时,我想获得唯一的 ID。
client = bigtable.Client(project=project_id,admin=True)
instance = client.instance(instance_id)
table = instance.table(table_id)
prefix = "phone#20190501"
end_key = prefix[:-1] + chr(ord(prefix[-1]) + 1)
# example row keys = ['phone#20190501#<id_value>','phone#20190501#<id_value>'...]
row_set = RowSet()
row_set.add_row_range_from_keys(prefix.encode("utf-8"),end_key.encode("utf-8"))
rows = table.read_rows(row_set=row_set)
id_values = []
for row in rows:
# get last id_value from row key
id_value = str(row.key).replace('phone#20190501#','')
id_values.append(id_value)
unique_id_list = list(set(id_values))
print('COUNT: %s' % len(unique_id_list))
但是,我想知道如果我读取的行数超过 1 亿,我认为这种计算唯一 id_value 的方式可能会占用大量内存和 cpu。
是否有更好的方法来计算 Bigtable 中的唯一 ID 或标准 SQL 中的“UNIQUE”之类的函数
解决方法
Bigtable 没有像 SQL 那样排序/唯一的方法,它必须在客户端完成 - 通过代码。但是,有一些性能注意事项可以帮助您。 您可以在下面的 stack thread posted by DamPlz 中找到它:
-
如果查询速度是必须的,loading the data 进入 BigQuery 而不是设置外部数据源将是最 有效的方式。尽管如此,您还是可以做一些事情 提高 BigQuery 或 BigTable 性能。
-
此连接器仍处于 Beta 阶段,并且有一些 performance considerations。我们还应该考虑 考虑到 BigTable 是一个 noSQL(非关系)数据库 并且不适用于 SQL 查询。如果您正在探索 你想在你的应用程序中使用的数据模型,我推荐你 考虑all these options并选择更合适的 满足您的需求。
-
如果您想使用 SQL 查询数据,我会说这不是一个好的选择。理解 BigTable 的非关系架构, 读取数据的最有效方式是发送 read requests。您可以在不同的位置找到一些关于此的代码示例 official documentation 中的语言。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。