2017-11-17 6 views
1

私はamazonからのデータを格納するためにGoogle Big Queryを使用しています。 csvファイルは、毎日の使用、クリック、インプレッションを含むデータベースにロードされます。Amazon AMSの集計データを分割するSQLクエリ

date_uploaded,campaign,spend,impressions,clicks 
2017-11-02,product a,75,600,25 
2017-11-02,product b,50,500,30 
2017-11-03,product a,75,600,35 
2017-11-03,product b,50,500,30 

があります:私は毎日の支出(前の日の間の差)を表示するので、最終的な結果は次のようになり、このデータを変換したい

date_uploaded,campaign,spend,impressions,clicks 
2017-11-01,product a,100,1000,50 
2017-11-01,product b,50,500,20 
2017-11-02,product a,175,1600,75 
2017-11-02,product b,100,1000,50 
2017-11-03,product a,250,2200,110 
2017-11-03,product b,150,1500,80 

:データは次のようになりますこの方法でデータをパーティション分割するためにBQを照会する方法はありますか?

答えて

1

lagでこれを行うことができます。パーティション内の最初の行の差分はnullで、where節フィルタで除外できます。これは、日付、キャンペーンごとに1つの行を前提としています。複数の行がある場合は、特定の日の値を合計し、lagを使用します。

select * from (
select date_uploaded,campaign, 
spend-lag(spend) over(partition by campaign order by date_uploaded) as spend_diff, 
impressions-lag(impressions) over(partition by campaign order by date_uploaded) as impressions_diff, 
clicks-lag(clicks) over(partition by campaign order by date_uploaded) as clicks_diff 
from tbl 
) t 
where spend_diff is not null and impressions_diff is not null and clicks_diff is not null