You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS SDK v2 for Go中SelectObjectContent无返回结果求助

S3 SelectObjectContent接口无返回结果,但控制台/CLI可正常执行

我在调用S3的SelectObjectContent接口时无法获取返回结果,但相同的查询在AWS控制台和CLI中都能正常运行,这让我很困惑。

测试对象

测试对象是存储在私有测试桶中的一个简单JSON文件(已GZIP压缩):

{
  "Name": "Kevin",
  "Role": "engineer",
  "Color": "blue"
}

查询语句

使用的查询语句非常简单:

SELECT * FROM s3object LIMIT 5

调用代码

以下是我编写的Go语言调用函数:

func S3SelectObjectContent(bucket, region, objectKey, expression string) (*s3.SelectObjectContentOutput, error) {
    client := s3.NewFromConfig(Config, func(o *s3.Options) {
        o.Region = region
    })

    input := &s3.SelectObjectContentInput{
        Bucket:         &bucket,
        Key:            &objectKey,
        Expression:     &expression,
        ExpressionType: types.ExpressionTypeSql,
        InputSerialization: &types.InputSerialization{
            JSON: &types.JSONInput{
                Type: types.JSONTypeDocument,
                // Type: types.JSONTypeLines
            },
            CompressionType: types.CompressionTypeGzip,
        },
        OutputSerialization: &types.OutputSerialization{
            JSON: &types.JSONOutput{
                RecordDelimiter: aws.String("\n"),
            },
        },
    }

    result, err := client.SelectObjectContent(context.TODO(), input)
    if err != nil {
        return nil, err
    }

    return result, nil
}

已排查事项

  • 调整过bucket和objectKey参数,参数错误时会返回“not found”提示,说明当前参数正确
  • 确认拥有存储桶访问权限,可通过ListObjectsV2接口列出桶内对象
  • 确认代码能读取文件内容:指向非GZIP压缩的文件时,会收到“文件未压缩”的提示
  • 存储桶为私有桶,配置了最小化策略(如下)

存储桶策略

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::kkevin-testbucket",
                "arn:aws:s3:::kkevin-testbucket/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:PrincipalAccount": "123456789064"
                }
            }
        }
    ]
}

补充说明

以下CLI命令可以正常运行并生成正确输出:

aws s3api select-object-content \
    --bucket kkevin-testbucket \
    --key testfile.json.gz \
    --expression "select * from s3object limit 5" \
    --expression-type 'SQL' \
    --input-serialization '{"JSON": {"Type": "Document"}, "CompressionType": "GZIP"}' \
    --output-serialization '{"JSON": {}}' "output.json" \
    --profile sandbox

内容的提问来源于stack exchange,提问作者Kkevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:18:22