无法使用 Google 的规范示例从 Bigtable 读取数据

Posted

技术标签:

【中文标题】无法使用 Google 的规范示例从 Bigtable 读取数据【英文标题】:Failed to read data from Bigtable using Google's canonical example 【发布时间】:2021-07-05 16:24:28 【问题描述】:

我遵循 Google 对writing a single row of data to Bigtable 和reading it back again 的建议。

因此我的代码如下所示:

import datetime

from google.cloud import bigtable


def write_simple(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)

    timestamp = datetime.datetime.utcnow()
    column_family_id = "stats_summary"

    row_key = "phone#4c410523#20190501"

    row = table.direct_row(row_key)
    row.set_cell(column_family_id,
                 "connected_cell",
                 1,
                 timestamp)
    row.set_cell(column_family_id,
                 "connected_wifi",
                 1,
                 timestamp)
    row.set_cell(column_family_id,
                 "os_build",
                 "PQ2A.190405.003",
                 timestamp)

    row.commit()

    print('Successfully wrote row .'.format(row_key))

def read_row(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    table = instance.table(table_id)

    row_key = "phone#4c410523#20190501"

    row = table.read_row(row_key)
    print(row)

def print_row(row):
    print("Reading data for :".format(row.row_key.decode('utf-8')))
    for cf, cols in sorted(row.cells.items()):
        print("Column Family ".format(cf))
        for col, cells in sorted(cols.items()):
            for cell in cells:
                labels = " []".format(",".join(cell.labels)) \
                    if len(cell.labels) else ""
                print(
                    "\t:  @".format(col.decode('utf-8'),
                                            cell.value.decode('utf-8'),
                                            cell.timestamp, labels))
    print("")

write_simple(
    project_id="msm-groupdata-datalake-dev", 
    instance_id="jamiet-dp-tf-instance", 
    table_id="user-agent")
read_row(
    project_id="myproject", 
    instance_id="myinstance", 
    table_id="mytable")

当我运行它时,这是我得到的输出:

成功写行电话#4c410523#20190501。 无

困扰我的是。鉴于我正在读/写相同的 row_key,我希望得到一行回来,但似乎我不是,我不知道为什么。谁能给点建议?

【问题讨论】:

【参考方案1】:

查看您的代码,我认为为什么当您阅读响应时是 None 的问题是因为您实际上并没有在表格中写字。

您需要检查您的column_family_id 是什么,以便在您创建的表中写入信息,例如我制作了一个用于测试的表,而我的column_family_idnf1 而不是stats_summary

最好的问候。

【讨论】:

绝对正确,谢谢。一旦我创建了列族,它就开始工作了。

以上是关于无法使用 Google 的规范示例从 Bigtable 读取数据的主要内容,如果未能解决你的问题,请参考以下文章

Android:Google FCM 规范 ids - 如何在非生产或测试中重现

ImportError:无法从“google.cloud”导入名称“tasks_v2”

Google Cloud KMS:无法解密

google or-tools 无法获得最佳 LP 结果,如 gurobi 示例

使用 PHP 和 MySQL 构建 Google 图表

无法使用服务帐户订阅 google pub 子主题