AWS redshiftに2つのテーブルがあります。詳細はRedshiftでの結合を使用する最適な方法
下記a)の感想(特定の広告のインプレッション数をカウントする)
- は、行の数(1.7億)
- 分散キー(ad_campaign)
- ソートキーとしてあります(created_on)
b)クリック(特定の広告のクリック数をカウントする)。行(8000万)
の
- 番号iは2つのスライスと単一DC1大型クラスターを有します。
私は以下のクエリを実行するために
select impressions.offer_id, count(imp_cnt) from bidsflyer.tblImpressionLog_Opt impressions full join bidsflyer.tblTrackingLinkLog_Opt clicks on impressions.offer_id=clicks.offer_id and date_trunc('week', impressions.created_on)=date_trunc('week', clicks.created_on) where impressions.created_on >= '2017-07-27 00:00:00' group by 1
をしようとしていますこのクエリを実行する8分、より多くかかります。私はこれがデータの量を考えるとかなり大きいと思いますが、それは巨大ではないと感じています。
クエリプランは、誰もが私に分散キーの正しい使用方法のガイダンスを提供し、キーをソートすることができ
XN HashAggregate (cost=2778257688268.43..2778257688268.60 rows=67 width=12) -> XN Hash Left Join DS_DIST_NONE (cost=179619.84..2778170875920.65 rows=17362469555 width=12) Hash Cond: (("outer".offer_id = "inner".offer_id) AND (date_trunc('week'::text, "outer".created_on) = date_trunc('week'::text, "inner".created_on))) -> XN Seq Scan on tblimpressionlog_opt impressions (cost=0.00..724967.36 rows=57997389 width=20) Filter: (created_on >= '2017-07-27 00:00:00'::timestamp without time zone) -> XN Hash (cost=119746.56..119746.56 rows=11974656 width=12) -> XN Seq Scan on tbltrackinglinklog_opt clicks (cost=0.00..119746.56 rows=11974656 width=12)
以下のもののように見えます。
クエリはどのように設計すればよいですか?
スピードが最優先の場合は、少なくとも2つのノードを使用することを強くお勧めします。 –