如何在 Amazon S3 Glacier 存储类或 Amazon S3 Glacier 文件库中存储的对象上运行选择查询?

上次更新时间:2019 年 6 月 20 日

我想要在我使用 Amazon Simple Storage Service (Amazon S3) Glacier 存储类存储的对象上运行选择查询。或者,我想在我已存档在 Amazon S3 Glacier 文件库中的对象上运行选择查询。如何使用 AWS 命令行界面 (AWS CLI) 运行此选择查询?

解决方法

Amazon S3 Glacier 存储类

按照以下步骤使用 AWS CLI 在 Amazon S3 Glacier 存储类中存储的对象上运行选择查询

1.    使用 restore-object AWS CLI 命令的参数创建 JSON 文件。请务必包含以下参数:
对于表达式参数,输入选择查询。
对于 OutputLocation 参数,输入您希望将查询结果存储到的 S3 位置。

例如,下面的 JSON 文件将运行查询 SELECT * FROM object。然后,它将查询结果发送到 S3 位置 awsexamplebucket/outputJob

{
    "Type": "SELECT",
    "Tier": "Standard",
    "SelectParameters": {
        "InputSerialization": {
            "CSV": {
                "FileHeaderInfo": "USE"
            }
        },
        "ExpressionType": "SQL",
        "Expression": "SELECT * FROM object",
        "OutputSerialization": {
            "CSV": {}
        }
    },
    "OutputLocation": {
        "S3": {
            "BucketName": "awsexamplebucket",
            "Prefix": "outputJob",
            "StorageClass": "STANDARD"
        }
    }
}

注意:此示例仅包含必需的参数。

2.    运行 restore-object 命令并指定您要创建的 JSON 文件作为 -restore-request 值:

$ aws s3api restore-object --bucket awsexamplebucket --key file.csv --restore-request file://restoreJob.json

3.    运行命令后,您将会收到选择查询结果存储到的 S3 位置。此输出类似于以下内容:

{
    "RestoreOutputPath": "outputJob/example_iNHt-0sE2cqt8ZtwNdE1nHi7nKzRaIWLyzzcsW4QWIUaHduHVReDDdavy-aLfEdnD6ql3AR8s4f4oZzhdhBg/"
}

如果关于查询输出的更多信息,请参阅选择输出

Amazon S3 Glacier 文件库

按照以下步骤使用 AWS CLI 在 Amazon S3 Glacier 文件库中存档的对象上运行选择查询

1.    使用 initiate-job AWS CLI 命令的参数创建 JSON 文件。请务必包含以下参数:
对于表达式参数,输入选择查询。
对于 OutputLocation 参数,输入您希望将查询结果存储到的 S3 位置。

例如,下面的 JSON 文件将运行查询 SELECT * FROM archive。然后,它将查询结果发送到 S3 位置 awsexamplebucket/outputJobGlacier

{
    "Type": "SELECT",
    "ArchiveId": "example_QpOx5CphSp5VY8Jbhkmd1-TyIF5KFr_VYDAyyqb0n5r5i5_CBVKY0F0OfwzbsWrewjIJ1Kd1d9Tgp97C$",
    "Tier": "Standard",
    "SelectParameters": {
        "InputSerialization": {
            "csv": {
                "FileHeaderInfo": "USE"
            }
        },
        "ExpressionType": "SQL",
        "Expression": "SELECT * FROM archive",
        "OutputSerialization": {
            "csv": {}
        }
    },
    "OutputLocation": {
        "S3": {
            "BucketName": "awsexamplebucket",
            "Prefix": "outputJobGlacier",
            "StorageClass": "STANDARD"
        }
    }
}

注意:此示例仅包含必需的参数。

2.    运行 initiate-job 命令并指定您创建的 JSON 文件作为 --job-parameters 值:

$ aws glacier initiate-job --account-id 111122223333 --vault-name awsexamplevault --job-parameters file://restoreJobGlacier.json

3.    运行命令后,您将会收到响应,其中包括查询结果存储到的 S3 位置 (jobOutputPath)。此输出类似于以下内容:

{
    "jobOutputPath": "outputJobGlacier/example_N4Zpv9bExi9TCv1gSSwWUhsK-371E9KBCFlAEMSnD2Gzq4GXhaT4aK7Gj8_s-jAn4aAvMNgUEbhTlxUfNYT9/",
    "location": "/111122223333/vaults/awsexamplevault/jobs/example_N4Zpv9bExi9TCv1gSSwWUhsK-371E9KBCFlAEMSnD2Gzq4GXhaT4aK7Gj8_s-jAn4aAvMNgUEbhTlxUfNYT9",
    "jobId": "example_N4Zpv9bExi9TCv1gSSwWUhsK-371E9KBCFlAEMSnD2Gzq4GXhaT4aK7Gj8_s-jAn4aAvMNgUEbhTlxUfNYT9"
}

如果关于查询输出的更多信息,请参阅 Glacier 选择输出。 


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?