У меня есть ряд файлов в формате JSON, которые нужно разделить на несколько файлов, чтобы уменьшить их размер.Одна проблема заключается в том, что файлы извлекаются с помощью стороннего инструмента и поступают в виде объекта JSON в одну строку.
Я могу использовать S3 select для обработки небольшого файла (скажем, около 300 МБ без сжатия), но когда я пытаюсьи использовать больший файл - скажем, 1Gb несжатый (сжатый gzip 90Mb) Я получаю следующую ошибку:
[ERROR] EventStreamError: An error occurred (InternalError) when calling the SelectObjectContent operation: We encountered an internal error. Please try again.
Запрос, который я пытаюсь выполнить:
select count(*) as rowcount from s3object[*][*] s
Я могувыполнить запрос из консоли, потому что размер файла превышает 128 МБ, но код, выполняющий операцию, выглядит следующим образом:
def execute_select_query(bucket, key, query):
"""
Runs a query against an object in S3.
"""
if key.endswith("gz"):
compression = "GZIP"
else:
compression = "NONE"
LOGGER.info("Running query |%s| against s3://%s/%s", query, bucket, key)
return S3_CLIENT.select_object_content(
Bucket=bucket,
Key=key,
ExpressionType='SQL',
Expression=query,
InputSerialization={"JSON": {"Type": "DOCUMENT"}, "CompressionType": compression},
OutputSerialization={'JSON': {}},
)