S3 Выберите ошибку Python

Я пытаюсь поймать данные из объекта S3. Я использую функцию S3 Select, как показано ниже:

версия boto3: 1.7.59

import boto3

s3 = boto3.client('s3')
r = s3.select_object_content(
    Bucket="bucket",
    Key="file.json",
    ExpressionType='SQL',
    Expression="select * from s3object S3Object AS s",
    InputSerialization = {
                            'JSON': {
                            'Type': 'LINES'
                            }
                        },
    OutputSerialization = { 'JSON': { 'RecordDelimiter': ',' } },
)


for event in r['Payload']:
    if 'Records' in event:
        records = event['Records']['Payload'].decode('utf-8')
        print(records)
    elif 'Stats' in event:
        statsDetails = event['Stats']['Details']
        print("Stats details bytesScanned: ")
        print(statsDetails['BytesScanned'])
        print("Stats details bytesProcessed: ")
        print(statsDetails['BytesProcessed'])

После запуска моего кода я получаю сообщение об ошибке:

Трассировка (последний вызов был последним): файл "C:/Users/a_urrego/PycharmProjects/DW_FlightHub/S3Select.py", строка 48, в OutputSerialization = { 'JSON': { 'RecordDelimiter': ',' } }, файл "C:\Users\a_urrego\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botocore\client.py", строка 314, в _api_call вернуть self._make_api_call(имя_операции, kwargs) Файл"C:\Users\a_urrego\AppData\Local\Programs\Python\Python36-32\lib\site-packages\botocore\client.py", строка 612, в _make_api_call поднять error_class(parsed_response, operation_name) botocore.exceptions.ClientError: ошибка произошло (ParseUnexpectedToken) при вызове операции SelectObjectContent: обнаружен неожиданный токен AS: как в строке 1, столбец 33.

Процесс завершен с кодом выхода 1

2 ответа

Решение

Похоже, что выражение SQL, которое вы передаете, неверно:

"select * from s3object S3Object AS s"

общий синтаксис SQL будет

"SELECT <columns | *> FROM <table> <alias>"

но похоже, что вы дублировали имя таблицы или что-то там. Верхний регистр операторов SQL является необязательным, но мне, как правило, это нравится.

Я не использовал эту функцию в boto3, но, похоже, это проблема после 3 минут поиска в Google и чтения сообщения об ошибке.

[Редактировать]

Обновленный мой шаблон выше после реализации опечатки. Также стоит отметить, что псевдоним таблицы не нужен в этом случае, так как это очень простая инструкция SELECT.

Вам также не нужен AS, он вызовет другую ошибку, ниже будет достаточно:

      select * from s3object S3Object
Другие вопросы по тегам