如果不使用Athena或任何Fargate或EC2 VM,要获得存储在Amazon S3上的100 GB CSV文件的准确行数,最快的方法是什么?我不能使用Athena,因为CSV文件不够干净。我不能使用Fargates或EC2 VM,因为我需要一个纯粹的无服务器解决方案,我不能使用像Snowflake这样的第三方服务(仅限原生AWS服务)。
此外,100 GB太大,无法容纳在Lambda Function的/tmp
中(限制为10 GB)。我可以尝试运行类似DuckDB的东西(或任何其他流数据库引擎),并使用SELECT COUNT(*) FROM "s3://myBucket/myFile.csv"
查询扫描整个文件,但Lambda很可能超时,因为它从S3的读取带宽最多为100 MB/s,并且其运行时间不能超过15分钟(900 s)。
我知道文件的大致大小。
备注:我对AWS Glue Data Catalog的爬行器提供的行数估计不准确,误差为-50%/+100%。这可能用于某种迭代或二分法过程,但我无法计算出任何结果。例如,我尝试向上述查询添加一个OFFSET
,其值小于但接近行数。但是运行DuckDB的Lambda超时了,这令人失望,也有些令人惊讶,因为像SELECT * FROM "s3://myBucket/myFile.csv" LIMIT 10 OFFSET 10000000
这样的查询运行得很好。
1条答案
按热度按时间wpx232ag1#
最快的解决方案可能是将
SelectObjectContent
与ScanRange
结合使用,以并行处理50MB左右的块上的请求。