gpt4 book ai didi

amazon-web-services - s3-select 查询字段名数据

转载 作者:行者123 更新时间:2023-12-04 23:37:05 25 4
gpt4 key购买 nike

我正在尝试从 s3-select 中的 json 数据中查询数据。

   {
person = [
{
"Id": 1,
"Name": "Anshu",
"Address": "Templestowe",
"Car": "Jeep"
}
{
"Id": 2,
"Name": "Ben Mostafa",
"Address": "Las Vegas",
"Car": "Mustang"
}
{
"Id": 3,
"Name": "Rohan Wood",
"Address": "Wooddon",
"Car": "VW"
}
]
}

QUERY = "select * from S3Object s"
QUERY = "select s.person from S3Object s"
QUERY = "select s.person[0] from S3Object s"
QUERY = "select s.person[0].Name from S3Object s"

所有这些查询都可以正常工作并根据需要返回相应的对象,但是
当我尝试搜索有关名称/汽车的数据时,它不起作用。
QUERY = "select * from S3Object s where s.person.Name = \"Anshu\" "

错误:com.amazonaws.services.s3.model.AmazonS3Exception:第 1 行第 32 列的列索引无效。

s3-select网上相关内容不多。
想知道我们是否可以查询字段名称!
文档中没有为 s3-select 提供带有 where 子句的选择查询示例

最佳答案

我在任何 AWS 文档中都找不到这个,但我只是在玩弄并发现了一种有效的语法:

QUERY = "select * from S3Object s where 'Anshu' in s.person[*].Name"

基于一些扣除:
  • 我知道当 tags 属性是一个字符串数组时,像 WHERE ('blah' in s.tags) 这样的语法会起作用。
  • AWS 文档还说当 # 是有效的索引/数字时, s.person[#] 应该可以工作。基于此,我发现在方括号之间使用星号 (*),如 s.person[*].Name,也有效。这是在对 s.Person[]、s.Person[#]、s.Person[?] 等各种语法进行失败测试之后...

  • 用 Python 和 Boto3 证明:
    import boto3

    S3_BUCKET = 'your-bucket-name'

    s3 = boto3.client('s3')

    r = s3.select_object_content(
    Bucket=S3_BUCKET,
    Key='your-file-name.json',
    ExpressionType='SQL',
    Expression="select * from s3object s where 'Anshu' in s.person[*].Name",
    InputSerialization={'JSON': {"Type": "Lines"}},
    OutputSerialization={'JSON': {}}
    )

    for event in r['Payload']:
    if 'Records' in event:
    records = event['Records']['Payload'].decode('utf-8')
    print(records)

    很奇怪,我知道。请记住在 ~/.aws/credentials 文件中设置 [默认] 凭据。

    关于amazon-web-services - s3-select 查询字段名数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50324068/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com