使用 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 模拟器。
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 这样的异常的原因是啥?