首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过rusoto /锈菌使用select_object_content?

如何通过rusoto /锈菌使用select_object_content?
EN

Stack Overflow用户
提问于 2019-08-23 14:32:24
回答 1查看 411关注 0票数 1

以下代码试图从存储在S3上的文件中选择一些数据:

代码语言:javascript
复制
  let client = S3Client::new(Region::default());
  let source = ... object providing bucket and key ...;

  let r = SelectObjectContentRequest {
      bucket: source.bucket,
      key: source.key,
      expression: "select id from S3Object[*].id".to_string(),
      expression_type: "SQL".to_string(),
      input_serialization: InputSerialization {
          json: Some(JSONInput { type_: Some("LINES".to_string()) }),
          ..Default::default()
      },
      output_serialization: OutputSerialization {
          json: Some(JSONOutput { record_delimiter: Some("\n".to_string()) }),
          ..Default::default()
      },
      ..Default::default()
  };

它会导致以下错误:

不允许针对此resource.POST使用指定的方法

这个例子是Python/boto3 3示例的1:1端口,所以我非常肯定它应该能工作。我找到了这个问题,它只有几个月的历史,我对它的状态还不清楚。我怎么才能让这个和Rust一起工作呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-26 12:22:43

不幸的是,s3 select仍然不能在最新的rusoto_s3-0.40.0上工作。你所链接的问题拥有所有的答案。问题有两方面。

首先,现在s3 select rusoto发出的请求有一个伪造的查询字符串。它应该是/ObjectName?select&select-type=2,但rusoto将其编码为/bjectName?select%26select-type=2。这就是你看到的错误。

要验证,请像这样运行您的项目:

代码语言:javascript
复制
$ RUST_LOG=rusoto,hyper=debug cargo run

您将看到来自rusotohyper的日志。当然,它会发出一个不正确的URI。我们甚至可以钻研负责的代码

代码语言:javascript
复制
let mut params = Params::new();
params.put("select&select-type", "2");
request.set_params(params);

它应该是:

代码语言:javascript
复制
let mut params = Params::new();
params.put("select-type", "2");
params.put("select", "");
request.set_params(params);

虽然修复看起来很简单,但请记住,这些是从AWS botocore服务清单生成的胶水代码,而不是手动编码的。合并修复并不是那么简单。

第二,更大的问题。AWS s3选择响应使用自定义二进制格式rusoto只是还没有一个反序列化器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57628337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档