2016-11-16 12 views
0

今年のファイルと比較するクエリを作成しています。このコマンドをBigQueryで使用していますstring((year(current_date())))
(d.month) = String(Month((order.order_timestamp)))のために" ON clause must be AND of = comparisons of one field name from each table, with all field names prefixed with table name. ."というエラーが発生しています。タイムスタンプの月を使用しているのではなく、テーブルの列を比較していないためです。回避策はありますか?BigQueryのstandardsqlモードでの年機能

#standardSQL 
SELECT 
    INTEGER(SUM(order2.demand_amount_usd)), 
    order2.quarter_name, 
    order2.year 
FROM (
    SELECT 
    order1.demand_amount_usd, 
    order1.order_timestamp, 
    d1.quarter_name, 
    d1.year 
    FROM 
    [datamart.order_item_lifecycle] AS order1 
    INNER JOIN EACH [datamart.date_dim] AS d 
    ON 
    (d.month) = STRING(MONTH((order.order_timestamp)))) AS order2 
INNER JOIN EACH [datamart.date_dim] AS d2 
ON 
    d2.year = INTEGER(YEAR(order2.order_timestamp)) 
WHERE 
    order2.year = STRING(YEAR(CURRENT_DATE())) 
GROUP BY 
    order2.year, 
    order2.quarter_name; 

答えて

1

ここでの主な問題は、あなたが標準にSQLモードを設定するレガシーSQL
と標準SQLを混合していることである魔法のように標準SQLにレガシーSQLを変換しません。たとえば、INNER JOIN EACH、[dataset.table]、YEAR()、INTEGER()などはすべてLegacy SQLのものであり、標準SQLではサポートされていません。

実際にコードをStandard SQL - 詳細はMigrating from legacy SQLをご覧ください。

関連する問題