【问题标题】:How to index JSON files stored in S3 by keys?如何通过键索引存储在 S3 中的 JSON 文件?
【发布时间】:2021-06-28 07:54:07
【问题描述】:

假设我想在 S3 中存储数百个 JSON 文件。所有这些 JSON 文件都具有相同的架构。我想通过键和值搜索这些 JSON 文件:例如查找所有带有键 a value = "abc*" 和键 x value = "xyz" 的 JSON 文件。我希望搜索返回与查询匹配的文件名和键。

通过键索引存储在 S3 中的 JSON 文件的最佳方法是什么?

这是我之前question的跟进

【问题讨论】:

    标签: json amazon-s3 search indexing


    【解决方案1】:

    您可能需要考虑使用S3 Select

    借助 Amazon S3 Select,您可以使用简单的结构化查询语言 (SQL) 语句来过滤 Amazon S3 对象的内容和 只检索您需要的数据子集。通过使用 Amazon S3 选择过滤此数据,可以减少 Amazon S3 传输,可降低检索成本和延迟 这个数据。

    Amazon S3 Select 适用于以 CSV、JSON 或 Apache 存储的对象 拼花格式。

    Full docs on S3 Select.

    这是一篇关于如何使用 S3 Select 的精彩博文。

    https://aws.amazon.com/blogs/storage/querying-data-without-servers-or-databases-using-amazon-s3-select/

    示例代码如下所示:

    import boto3
    
    # S3 bucket to query (Change this to your bucket)
    S3_BUCKET = 'greg-college-data'
    
    s3 = boto3.client('s3')
    
    r = s3.select_object_content(
            Bucket=S3_BUCKET,
            Key='COLLEGE_DATA_2015.csv',
            ExpressionType='SQL',
            Expression="select \"INSTNM\" from s3object s where s.\"STABBR\" in ['OR', 'IA']",
            InputSerialization={'CSV': {"FileHeaderInfo": "Use"}},
            OutputSerialization={'CSV': {}},
    )
    
    for event in r['Payload']:
        if 'Records' in event:
            records = event['Records']['Payload'].decode('utf-8')
            print(records)
    

    Code soruce.

    【讨论】:

    • 谢谢。我以为S3 Select 只支持 CSV。现在我想知道他们是否有 Java API ...
    • @Michael 肯定会 - aws.amazon.com/sdk-for-java
    猜你喜欢
    • 2020-02-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 2019-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多