使用 Python 的 Bigtable 模拟器和 Google 发现资源

Posted

技术标签:

【中文标题】使用 Python 的 Bigtable 模拟器和 Google 发现资源【英文标题】:Bigtable Emulator & Google Discovery Resource with Python 【发布时间】:2020-05-13 12:52:54 【问题描述】:

我正在尝试在 python 的 googleapiclient.discovery.Resource 模块中使用 bigtable 模拟器。

Bigtable 模拟器在127.0.0.1:8086 上运行

通过发现服务设置 Bigtable 客户端服务:

http = httplib2.Http(None, timeout=http_timeout)
client=discovery.build('bigtableadmin', 'v2', http=_http)
_client._baseUrl = 127.0.0.1:8086

以下 post 请求由发现发送:

http://127.0.0.1:8086/v2/projects/my_project/instances/my_instance/tables?alt=json

最终返回[Errno 54] Connection reset by peer.

我可以通过google.cloud.bigtable.Client 毫无问题地使用bigtable 模拟器。

我可以使用具有相同发现服务的本地 pubs 模拟器,rest api 似乎工作正常,但在 bigtable 模拟器上失败。

Bigtable Emulator 是否支持发布请求?或者模拟器只使用google.cloud.bigtable.Client?我找不到有关模拟器文档的任何详细信息。

【问题讨论】:

您能否详细说明您使用资源类的方式?添加带有特定方法的代码 sn-p 用于示例执行将有助于缩小和跟踪复制。 感谢您的反馈,我添加了发现服务构建。同样的方法适用于 pubsub 模拟器,并且服务客户端可以将 rest api 调用发送到模拟器。但它不适用于大表。我开始认为bigtable emulator 不支持rest api 操作。 我发现了一些具有类似行为的条目,我会说问题取决于 Discovery 库管理连接的方式。我试过 curl ,我得到了完全相同的错误。 ***.com/questions/8658118/…***.com/questions/50839322/… 我看到了。我的猜测是 bigtable 模拟器不支持 REST api 调用。 @sergiofranco 来自 google.cloud.bigtable.Client 的文档字符串:“注意::由于 Cloud Bigtable API 需要 gRPC 传输,因此此类不接受 _http 参数。” 【参考方案1】:

根据上面的评论和here 的描述,由于 Cloud Bigtable API 需要 gRPC 传输,因此此类不接受 _http 参数。

因此,这将解释您得到的错误

【讨论】:

以上是关于使用 Python 的 Bigtable 模拟器和 Google 发现资源的主要内容,如果未能解决你的问题,请参考以下文章

如何从 GoLang 应用程序连接到 Bigtable Emulator?如何使用它?

是否可以针对本地 BigTable 模拟器实例运行 BigQuery 命令行界面 (cli)?

尝试在 bigtable 中模拟单元级 TTL,但整个列族数据被垃圾收集删除

使用 bigtable 和 python,像 google.api_core.exceptions.Aborted: 409 Error while reading table 这样的异常的原因是啥?

在 python 中使用谷歌数据流从 Bigquery 到 Bigtable 数据传输

大表数据建模和python查询