S3 Select动态键嵌套JSON数值查询问题求助
问题解决:S3 Select动态查询JSON中的目标数值
序列化配置说明
你的InputSerialization配置是正确的,因为存储的是单个JSON文档(而非每行一个JSON的Lines格式),设置"Type": "Document"符合要求,这部分无需修改。
错误原因及修正后的查询语句
之前的SQL语句报错,是因为S3 Select的SQL语法中,动态键名(或包含下划线的键名)不能直接用.访问,必须通过双引号包裹键名+[]语法来引用动态属性。
直接查询目标数值
如果确定目标code和client存在,可直接用以下语句获取数值:
sql_exp = f"SELECT s[\"{proc}\"][\"{client_name}\"] AS target_value FROM s3object s"
- 用
[]包裹双引号的键名,避免解析器将动态变量或下划线识别为非法语法 - 用
AS target_value给结果起别名,方便后续解析
带存在性判断的查询
如果需要先判断目标值是否存在再返回,可添加WHERE条件:
sql_exp = f"SELECT s[\"{proc}\"][\"{client_name}\"] AS target_value FROM s3object s WHERE s[\"{proc}\"][\"{client_name}\"] IS NOT NULL"
结果读取示例
S3 Select返回的是流式响应,需要读取Payload中的数据:
import json for event in resp['Payload']: if 'Records' in event: # 解码并解析返回的JSON record_data = event['Records']['Payload'].decode('utf-8') result = json.loads(record_data) print(result['target_value'])
内容的提问来源于stack exchange,提问作者nvergos
相关产品推荐
相关产品推荐

