【问题标题】:Trying to use AWS' SelectObjectContent but getting error code: NotImplemented尝试使用 AWS\' SelectObjectContent 但收到错误代码:NotImplemented
【发布时间】:2023-01-27 04:22:01
【问题描述】:

我正在运行以下代码来获取放置在 S3 存储桶中的镶木地板文件中的记录数。

    import boto3
    import os

    s3 = boto3.client('s3')
    sql_stmt    = """SELECT count(*) FROM s3object s"""   
    
    req_fact =s3.select_object_content( 
        Bucket  = 'test_hadoop', 
        Key     = 'counter_db.cm_workload_volume_sec.dt=2023-01-23.cm_workload_volume_sec+2+000000347262.parquet', 
        ExpressionType  = 'SQL', 
        Expression      = sql_stmt, 
        InputSerialization={'Parquet':{}}, 
        OutputSerialization = {'JSON': {}})
    
    for event in req_fact['Payload']:
        if 'Records' in event:
            print(event['Records']['Payload'].decode('utf-8'))
        elif 'Stats' in event:
            print(event['Stats'])

但是我收到此错误:botocore.exceptions.ClientError:调用 SelectObjectContent 操作时发生错误(XNotImplemented):此节点不支持 SelectObjectContent。

问题是什么?

【问题讨论】:

    标签: amazon-web-services amazon-s3 boto3


    【解决方案1】:

    我针对已知良好(未压缩)镶木地板文件运行了您的代码,没有出现任何错误。

    resp = s3.select_object_content(
        Bucket='my-test-bucket',
        Key='counter_db.cm_workload_volume_sec.dt=2023-01-23.cm_workload_volume_sec+2+000000347262.parquet',
        ExpressionType='SQL',
        Expression="SELECT count(*) FROM s3object s",
        InputSerialization={'Parquet': {}},
        OutputSerialization={'JSON': {}},
    )
    
    Output:
    {"_1":4}
    

    在 AWS 控制台中,您可以导航到 S3 存储桶并找到该文件,将其突出显示并选择运行 S3 选择(操作 > 使用 S3 选择查询)。这将允许您验证是否可以使用 S3 select 查询该文件(我认为这是您的问题)

    请注意以下几点:Amazon S3 Select 不支持 Apache Parquet 对象的整体对象压缩。

    【讨论】:

      猜你喜欢
      • 2021-07-04
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 2023-03-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-08
      相关资源
      最近更新 更多