私は8以上のスキーマと200以上のテーブルを持ち、データは異なるスキーマのCSVファイルによってロードされます。S3からRedshiftにデータをロードする平均時間を見つける方法
S3からRedshiftへのデータをすべての200のテーブルにロードする平均時間を見つける方法については、SQLスクリプトを知りたいと思います。
私は8以上のスキーマと200以上のテーブルを持ち、データは異なるスキーマのCSVファイルによってロードされます。S3からRedshiftにデータをロードする平均時間を見つける方法
S3からRedshiftへのデータをすべての200のテーブルにロードする平均時間を見つける方法については、SQLスクリプトを知りたいと思います。
STL System Tables for Loggingを調べると、クエリの実行時間を知ることができます。
おそらく、クエリのテキストを解析して読み込まれたテーブルを検出する必要がありますが、履歴の読み込み時間を使用して各テーブルの標準読み込み時間を計算することができます。
いくつかの特に有用なテーブルは、次のとおり
これを行うにはスマートな方法があります。 S3からRedshiftにデータを移行するETLスクリプトが必要です。 ETLロジックが、そのテーブルのために開始する前に
シェルスクリプトを持っていると仮定すると、ちょうどタイムスタンプをキャプチャし、ETLロジックが、そのテーブルのために終了した後、別のタイムスタンプをキャプチャする(のがstart
ことを呼びましょう)(さんが呼びましょうend
こと)とスクリプトの終わりに向かって違いを取る:
#!bin/sh
.
.
.
start=$(date +%s) #capture start time
#ETL Logic
[find the right csv on S3]
[check for duplicates, whether the file has already been loaded etc]
[run your ETL logic, logging to make sure that file has been processes on s3]
[copy that table to Redshift, log again to make sure that table has been copied]
[error logging, trigger emails, SMS, slack alerts etc]
[ ... ]
end=$(date +%s) #Capture end time
duration=$((end-start)) #Difference (time taken by the script to execute)
echo "duration is $duration"
PS:所要時間は秒になり、ログファイルを維持することができ、DBテーブルへのエントリなど、タイムスタンプがepoc
になり、あなたが使用することができます(ログ記録場所によって)次のような機能があります。
sec_to_time($duration)
- for
SELECT (TIMESTAMP 'epoch' + 1511680982 * INTERVAL '1 Second ')AS mytimestamp
- Amazon Redshift(そして、エポックの2つのインスタンスの違いを取る)。
このクエリを実行すると、COPYクエリの動作速度を確認できます。
select q.starttime, s.query, substring(q.querytxt,1,120) as querytxt,
s.n_files, size_mb, s.time_seconds,
s.size_mb/decode(s.time_seconds,0,1,s.time_seconds) as mb_per_s
from (select query, count(*) as n_files,
sum(transfer_size/(1024*1024)) as size_MB, (max(end_Time) -
min(start_Time))/(1000000) as time_seconds , max(end_time) as end_time
from stl_s3client where http_method = 'GET' and query > 0
and transfer_time > 0 group by query) as s
LEFT JOIN stl_Query as q on q.query = s.query
where s.end_Time >= dateadd(day, -7, current_Date)
order by s.time_Seconds desc, size_mb desc, s.end_time desc
limit 50;
あなたは/あなたは大体、それはサイズに基づいて、各ファイルがかかりますどのくらいの時間を決定することができS3からを通じてプッシュしているよどのように多くのメガバイトを見つけるたら
。