我有一系列使用JSON的文件,需要将这些文件拆分为多个文件以减小其大小。一个问题是文件是使用第三方工具提取的,并作为JSON对象到达一行。
我可以使用S3 select处理一个小文件(例如,未压缩的文件约为300Mb),但是当我尝试使用一个较大的文件时,例如1Gb的未压缩文件(90Mb gzip已压缩),我会收到以下错误消息:
[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
我无法从控制台运行查询,因为文件大于128Mb,但是执行该操作的代码如下:
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': {}},
)