我有一个csv文件,其中包含我需要将s3文件移动到新位置的位置

时间:2017-07-12 14:26:32

标签: bash csv amazon-s3 aws-lambda

我有兴趣将我的数据加载到AWS ATHENA DB

我的数据由source_video划分,每个我们有11个csv文件,代表11个引用此数据的表

ATHENA希望按表加载,而不是按source_video加载

为此我必须根据表名而不是source_video将这些文件移动到文件夹。

我精通python和bash 我知道如何使用aws cli

我想知道是否有一种比运行4Million + mv命令并在多台机器上并行执行不同进程更简单的方法

我有一个csv文件,其文件位置是为其创建的source_video的子项:

我有400,000多个source_video位置 我在每个source_video位置有11个文件

+source_video1
- 11 files by type
+source_video2
- 11 files by type
+source_video3
- 11 files by type
.
.
+source_video400,000+
- 11 files by type

我希望将它们移动到11个文件夹,每个文件夹类型包含400,000多个文件

字段:videoName,CClocation,identityLocation,TAGTAskslocation,M2Location 和其他地方......

以下是2行数据的示例:

 pj1/09/11/09/S1/S1_IBM2MP_0353_00070280_DVR1.avi,
 S1_IBM2MP_0353_00070280_DVR1.avi,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_CCsidentities.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_CCsTAGtasks.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_AL1CCs2data.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_AL1CCs2extendeddata.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_AL1CCsdata.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_CCsALGsruns.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_Cg1CCsdata.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_Cg1CCfeat.csv, s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0353_00070280_DVR1_1021866/S1_IBM2MP_0353_00070280_DVR1.avi_CCsidentitiestaggers.csv
 pj1/09/11/09/S1/S1_IBM2MP_0443_00070380_DVR1.avi,
 S1_IBM2MP_0443_00070380_DVR1.avi,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_CCsidentities.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_CCsTAGtasks.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_AL1CCs2data.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_AL1CCs2extendeddata.csv, s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_AL1CCsdata.csv, s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_CCsALGsruns.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_Cg1CCsdata.csv, s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_Cg1CCfeat.csv,
 s3:/bucket1/DB2/pj1/09/11/09/S1_IBM2MP_0443_00070380_DVR1_307638/S1_IBM2MP_0443_00070380_DVR1.avi_CCsidentitiestaggers.csv

1 个答案:

答案 0 :(得分:0)

你是对的。 Athena希望与一个表相关的所有文件都位于一个目录中,或者位于一个目录的子目录中。

鉴于您要触摸这么多文件,您可以选择处理文件而不是简单地移动它们。例如,将多个文件的内容放入少量文件中。您也可以考虑压缩文件,因为这会降低扫描成本(Athena根据从磁盘读取的数据收费 - zip文件读取的数据更少,因此成本更低)。

请参阅:Analyzing Data in S3 using Amazon Athena

这种类型的处理可以在运行Hadoop的Amazon EMR集群上高效完成,但是运行Hadoop需要一些专业知识,因此使用您熟悉的编码(例如Python)可能更容易。