S3 выберите запрос, не распознающий данные - PullRequest
0 голосов
/ 25 апреля 2020

Я генерирую кадр данных, записываю кадр данных в S3 как файл CSV и выполняю запрос выбора CSV в сегменте S3. На основании запроса и данных я ожидаю увидеть «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)

1 Ответ

0 голосов
/ 25 апреля 2020

Просто нужно привести строку в плавающее состояние в операторе SQL.

"SELECT s.\"speed\" FROM s3Object s WHERE cast(s.\"speed\" as float) > 3"

Не работает без проблем.

...