sql - S3选择查询不识别数据
问题描述
我生成一个数据帧,将数据帧作为 CSV 文件写入 S3,然后对 S3 存储桶中的 CSV 执行选择查询。根据查询和数据,我希望看到“4”和“10”打印,但我只看到“4”。由于某种原因,S3 没有看到“10”。
它适用于日期之间的过滤。
import pandas as pd
import s3fs
import boto3
# dataframe
d = {'date':['1990-1-1','1990-1-2','1990-1-3','1999-1-4'], 'speed':[0,10,3,4]}
df = pd.DataFrame(d)
# write csv to s3
bytes_to_write = df.to_csv(index=False).encode()
fs = s3fs.S3FileSystem()
with fs.open('app-storage/test.csv', 'wb') as f:
f.write(bytes_to_write)
# query csv in s3 bucket
s3 = boto3.client('s3',region_name='us-east-1')
resp = s3.select_object_content(
Bucket='app-storage',
Key='test.csv',
ExpressionType='SQL',
Expression="SELECT s.\"speed\" FROM s3Object s WHERE s.\"speed\" > '3'",
InputSerialization = {'CSV': {"FileHeaderInfo": "Use"}},
OutputSerialization = {'CSV': {}},
)
for event in resp['Payload']:
if 'Records' in event:
records = event['Records']['Payload'].decode('utf-8')
print(records)
解决方案
只需要将字符串转换为在 SQL 语句中浮动。
"SELECT s.\"speed\" FROM s3Object s WHERE cast(s.\"speed\" as float) > 3"
不是它没有问题。
推荐阅读
- laravel - Laravel firstOrCreate 方法抛出重复 ID 错误
- javascript - 王牌编辑着色词
- asp.net-core - 等价于配置
使用 autofac 模块 - c# - 在 .NET 4 和 WebForms 中异步处理批处理请求回调
- php - 想要 glob api 的正则表达式来查找文件
- c++ - C++程序显示两个区间之间的数字检查一个数字是否可以表示为两个素数之和
- javascript - 未处理的 JS 异常:意外的标识符“_Object$defineProperty”。Import 只需要一个参数
- r - 删除正则表达式时出错,将文本拆分为段落,然后在 R 中应用 ifelse
- asp.net - 获取 ASP.net Core 中的压缩响应长度
- javascript - Javascript Facebook 登录流程 PWA