0

次のシナリオがあります。AWSデータパイプラインMySQLヌルsedシェルコマンドアクティビティMIGRAINE

SQLテーブルを毎日MySQLデータベースに転送する必要があります。 私はCopyActivityを使ってデータパイプラインを試しましたが、エクスポートされたCSVには\ NやNULLの代わりに空白があり、MySQLはそれらのフィールドを私たちのアプリケーションには不適切なものとしてインポートします。

その後、やや異なるアプローチで試しました。 輸出はCopyActivity、ShellCommandActivity経てS3にテーブルには、ファイルをダウンロードし、以下のスクリプトを実行し、S3にファイルをアップロード:

#!/bin/bash 
sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' ${INPUT1_STAGING_DIR}/*.csv |cat ${INPUT1_STAGING_DIR}/*.csv > ${OUTPUT1_STAGING_DIR}/sqltable.csv 

上記のスクリプトは、私のテストのLinuxインスタンス上で完璧に動作しますが、それは上で実行されますときも何も起こりません一時的なEC2リソース。私は、出力s3データノード上に空白がある無用なcsvと全く同じエラーはありません。

私は何が間違っているのか、なぜスクリプトが私のテストのLinuxインスタンスと同じように動作しないのか分かりません。

パイプラインのログ:

18 Jul 2016 10:23:06,470 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.taskrunner.TaskPoller: Executing: [email protected] 
18 Jul 2016 10:23:06,648 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Begin Downloading files from S3 Path:s3://s3-bucket/mysqlexport/sqltable.csv to output/staging/df-09799242T7UHHPMT072T_input1_7c583c0755eb46f5b518feffa314fccd 
18 Jul 2016 10:23:06,648 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Local File Relative compared to Input Root Path:s3://s3-bucket/mysqlexport/sqltable.csv is 
18 Jul 2016 10:23:06,648 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Download just the root file to the local dir. Updated File Relative compared to Input Root Path:s3://s3-bucket/mysqlexport/sqltable.csv is sqltable.csv 
18 Jul 2016 10:23:06,649 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Begin Downloading S3 file s3://s3-bucket/mysqlexport/sqltable.csv to /media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_input1_7c583c0755eb46f5b518feffa314fccd/sqltable.csv 
18 Jul 2016 10:23:06,824 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Completed Downloading files from S3 Path:s3://s3-bucket/mysqlexport/sqltable.csv to output/staging/df-09799242T7UHHPMT072T_input1_7c583c0755eb46f5b518feffa314fccd 
18 Jul 2016 10:23:06,862 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.objects.CommandRunner: Executing command: #!/bin/bash 
sed -i -e 's/^,/\\N,/' -e 's/,$/,\\N/' -e 's/,,/,\\N,/g' -e 's/,,/,\\N,/g' ${INPUT1_STAGING_DIR}/sqltable.csv |cat ${INPUT1_STAGING_DIR}/sqltable.csv > ${OUTPUT1_STAGING_DIR}/sqltable.csv 
18 Jul 2016 10:23:06,865 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.objects.CommandRunner: configure ApplicationRunner with stdErr file: output/logs/df-09799242T7UHHPMT072T/ShellCommandActivityId_18OqM/@ShellCommandActivityId_18OqM_2016-07-18T10:18:38/@ShellCommandActivityId_18OqM_2016-07-18T10:18:38_Attempt=1/StdError and stdout file :output/logs/df-09799242T7UHHPMT072T/ShellCommandActivityId_18OqM/@ShellCommandActivityId_18OqM_2016-07-18T10:18:38/@ShellCommandActivityId_18OqM_2016-07-18T10:18:38_Attempt=1/StdOutput 
18 Jul 2016 10:23:06,866 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.objects.CommandRunner: Executing command: output/tmp/df-09799242T7UHHPMT072T-de05e7a112c440b4a42df69d554d8a9a/ShellCommandActivityId18OqM20160718T101838Attempt1_command.sh with env variables :{INPUT1_STAGING_DIR=/media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_input1_7c583c0755eb46f5b518feffa314fccd, OUTPUT1_STAGING_DIR=/media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_output1_7c8b2db30c16473f844db5eb21cb000e} with argument : null 
18 Jul 2016 10:23:06,952 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Begin Uploading local directory:output/staging/df-09799242T7UHHPMT072T_output1_7c8b2db30c16473f844db5eb21cb000e to S3 s3://s3-bucket/mysqlexport/ 
18 Jul 2016 10:23:06,977 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Begin Upload single file to S3:s3://s3-bucket/mysqlexport/sqltable.csv 
18 Jul 2016 10:23:06,978 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Begin upload of file /media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_output1_7c8b2db30c16473f844db5eb21cb000e/sqltable.csv to S3 paths3://s3-bucket/mysqlexport/sqltable.csv 
18 Jul 2016 10:23:07,040 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Completed upload of file /media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_output1_7c8b2db30c16473f844db5eb21cb000e/sqltable.csv to S3 paths3://s3-bucket/mysqlexport/sqltable.csv 
18 Jul 2016 10:23:07,040 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Completed uploading of all files 
18 Jul 2016 10:23:07,040 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.S3Helper: Completed upload of local dir output/staging/df-09799242T7UHHPMT072T_output1_7c8b2db30c16473f844db5eb21cb000e to s3://s3-bucket/mysqlexport/ 
18 Jul 2016 10:23:07,040 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.StageFromS3Connector: cleaning up directory /media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_input1_7c583c0755eb46f5b518feffa314fccd 
18 Jul 2016 10:23:07,050 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.connector.staging.StageInS3Connector: cleaning up directory /media/ephemeral0/mnt/taskRunner/output/staging/df-09799242T7UHHPMT072T_output1_7c8b2db30c16473f844db5eb21cb000e 
18 Jul 2016 10:23:07,051 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.taskrunner.HeartBeatService: Finished waiting for heartbeat thread @DefaultShellCommandActivity1_2016-07-18T10:18:38_Attempt=1 
18 Jul 2016 10:23:07,052 [INFO] (TaskRunnerService-resource:[email protected]_x5OCd_2016-07-18T10:18:38-1) df-09799242T7UHHPMT072T amazonaws.datapipeline.taskrunner.TaskPoller: Work ShellCommandActivity took 0:0 to complete 
+0

簡単な手順でそれをやってみると、簡単に始まり、問題がどこにあるかを確認できます。 – TenG

+0

sedは、ダウンロードしたcsvファイルがステージング入力フォルダに表示されないようです。私は、エクスポートされたcsvをダウンロードし、それに対してスクリプトを実行するための簡単なシェルコマンドアクティビティパイプラインを作成しました。エラーsedで終了:/メディア/ephemeral0/mnt/taskRunner/output/staging/df-04031231KGO5SUFX4TZL_input1_8bd192f49d6d472f8cb47291eda9c970/sqltable.csv :このようなファイルまたはディレクトリはありません。次に、ls -l $ {INPUT1_STAGING_DIR}> $ {OUTPUT1_STAGING_DIR} /test.txtを出力するスクリプトを作成し、合計168個を表示します。 -rw-rw-r-- 1 ec2-user ec2-user 168448 Jul 18 13:42 sqltable.csv私は無知だ。 – cirk0

答えて

0

ないbashスクリプトやシェルコマンドのいずれかが配管を好きではない、まさに問題だったか確認してください。とにかく最初にTenGのおかげで、私はプロセス全体を見る代わりに、プロセスの各ステップを個別に分析することを思い出させました。

スクリプトをダウンロードする代わりに、コマンドフィールドにsedコマンドとcopyコマンドを入力しました。それも、CSVファイルに標準のMySQLヌル\ Nのような値とNULLを認識しないとき、彼らはMySQLのサポートを主張する理由として

sed -i -e 's/^,/\\\\N,/' -e 's/,,/,\\\\N,/g' -e 's/,$/,\\\\N/' ${INPUT1_STAGING_DIR}/sqltable.csv 
cp ${INPUT1_STAGING_DIR}/sqltable.csv ${OUTPUT1_STAGING_DIR}/sqltable.csv 

とにかく、私はまだAWSパイプラインで失望しています。エクスポートとインポートの両方にAWS Pipelineを使用できるのはとても簡単で効率的ですが、残念ながらアプリケーションで空のフィールドとNULL値が異なる場合は後者には適しません。

関連する問題