0

MySQL では問題なく動作する SQL スクリプトがありますが、Google BigQuery では動作しません。bq のドキュメントを読んだ後、いくつかの調整を行いました (たとえば、select ステートメントごとに複数の結合を行わないようにするなど) が、スクリプトは依然として失敗します。どんな助けでも大歓迎です。bq sql とその他の sql に関して優れたリソースを知っている場合は、それも大歓迎です。ありがとう。

SELECT 
T1.action_date AS action_date,
T1.ad_campaign_category AS ad_campaign_category,
T1.campaign_id AS campaign_id,
T2.total_sends AS total_sends, 
count(*) AS clicks_per_category
FROM ( 
    SELECT action_date, campaign_id, ad_campaign_category
    FROM projectX.email_action
    WHERE action_date > '2009-04-01' AND action_date < '2011-05-01') T1,

    (
    SELECT action_date, campaign_id, ad_campaign_category, count(*) AS total_sends
    FROM projectX.email_action
    WHERE action_type = 'send' AND action_date > '2009-04-01' AND action_date < '2011-05-01'
    GROUP BY action_date, campaign_id) T2

WHERE T1.action_date = T2.action_date 
    AND T1.campaign_id = T2.campaign_id
GROUP BY action_date, campaign_id, ad_campaign_category
4

1 に答える 1

3

JOINは明示的である必要があります。つまり、使用するのではなくSELECT ... FROM (...) t1, (...) t2 WHERE t1.x = t2.y、フォームを使用する必要がありSELECT ... FROM (...) t1 JOIN (...) t2 ON t1.x = t2.y ます。この例では、次のようになります。

SELECT 
T1.action_date AS action_date,
T1.ad_campaign_category AS ad_campaign_category,
T1.campaign_id AS campaign_id,
T2.total_sends AS total_sends, 
count(*) AS clicks_per_category
FROM ( 
    SELECT action_date, campaign_id, ad_campaign_category
    FROM projectX.email_action
    WHERE action_date > '2009-04-01' AND action_date < '2011-05-01') T1
JOIN (
    SELECT action_date, campaign_id, ad_campaign_category, count(*) AS total_sends
    FROM projectX.email_action
    WHERE action_type = 'send' AND action_date > '2009-04-01' AND action_date < '2011-05-01'
    GROUP BY action_date, campaign_id) T2
ON T1.action_date = T2.action_date 
AND T1.campaign_id = T2.campaign_id
GROUP BY action_date, campaign_id, ad_campaign_category

テーブルの1つが大きすぎるというエラーが発生した場合は、のJOIN EACH代わりにを使用してみてくださいJOIN

于 2013-02-27T22:44:43.843 に答える