У меня есть следующий код, написанный на Python. Я использую sh, чтобы перенести его на Bash, или использую просто старый AWS CLI. Задача состоит в том, чтобы выполнить запрос SQL в ведре S3, используя S3 Select. Примечание: все файлы в S3 заархивированы.
Существующий Python Код (рабочий)
ACCESS_KEY = 'Key1'
SECRET_KEY = 'Key2'
s3 = boto3.client('s3', aws_access_key_id=ACCESS_KEY, aws_secret_access_key=SECRET_KEY)
r = s3.select_object_content(
Bucket='bkt1',
Key=file2search,
ExpressionType='SQL',
Expression="SELECT * FROM s3object s where Lower(s._1) = (%r)" % ("SEARCH_STRING"),
InputSerialization = {'CompressionType': 'GZIP', 'CSV': {
'AllowQuotedRecordDelimiter': True,
'QuoteEscapeCharacter': '"',
'RecordDelimiter': '\n',
'FieldDelimiter': ':',
}},
OutputSerialization = {'CSV': {
'QuoteEscapeCharacter': '"',
'RecordDelimiter': '\n',
'FieldDelimiter': ':',
}}
)
Bash Код (НЕ работает)
SEARCH_STRING="hello@world.com"
aws s3api select-object-content \
--bucket projectbucket2 \
--key abc.gz \
--expression "SELECT * FROM s3object s where Lower(s._1) = \'$SEARCH_STRING\'" \
--expression-type 'SQL' \
--input-serialization '{"CSV": {}, "CompressionType": "GZIP"}' \
--output-serialization '{"CSV": {}}' "output.csv"
Код выдает ошибку: An error occurred (LexerInvalidChar) when calling the SelectObjectContent operation: Invalid character at line 1, column 46.
Помогите, пожалуйста.