2016-04-21 9 views
2

を使用まったく同じクエリが正確にクエリ同一の2つのバージョンの下

を失敗、または異なる別名で「成功」

バージョン1(内側のSELECTで別名としてKを使用):

SELECT k as [year], w_vol, 
    ROW_NUMBER() OVER (ORDER BY k DESC) AS rank1, 
    ROW_NUMBER() OVER (ORDER BY w_vol DESC) AS rank2 
FROM (
    SELECT w_vol, c_date AS k FROM 
    (SELECT 1590 AS c_date, 1 AS w_vol), 
    (SELECT 1599 AS c_date, 1 AS w_vol), 
    (SELECT 1602 AS c_date, 1 AS w_vol), 
    (SELECT 1609 AS c_date, 2 AS w_vol), 
    (SELECT 1610 AS c_date, 1 AS w_vol), 
) 
ORDER BY 1 

バージョン2(インナーSELECTで別名としてLを使用):

SELECT l as [year], w_vol, 
    ROW_NUMBER() OVER (ORDER BY l DESC) AS rank1, 
    ROW_NUMBER() OVER (ORDER BY w_vol DESC) AS rank2 
FROM (
    SELECT w_vol, c_date AS l FROM 
    (SELECT 1590 AS c_date, 1 AS w_vol), 
    (SELECT 1599 AS c_date, 1 AS w_vol), 
    (SELECT 1602 AS c_date, 1 AS w_vol), 
    (SELECT 1609 AS c_date, 2 AS w_vol), 
    (SELECT 1610 AS c_date, 1 AS w_vol), 
) 
ORDER BY 1 
以下は

は私が一貫両方のクエリのために取得していた出力(No Cached Resultsが使用されている注意してください)

enter image description here

である私は、結果は関係なく使用されているものの別名と同じになることはありませ期待 - それだけですべてのエイリアスです!

質問質問:なぜバージョン1では常に失敗し、バージョン2では「成功」していますか?

+1

これは私がしばらく見てきたBigQueryの中で最も奇妙なバグです。明日詳細を見て更新します。 –

+0

Moshaありがとう!私は最後の夜を過ごして、この問題を分離して、反復可能な方法で提示しました - この1つだけでなく、もう1つ - http://stackoverflow.com/q/36781049/5221944 –

+0

これを見つけるための名誉!私の印象は、エイリアスは 'k'エイリアスと2つの異なるパーティションウィンドウでのみ発生するということです。 ( 'order() 'を' row_number() 'に代入するとエラーを再現できますが、' order by'句を揃えていないときはエラーを再現できます)。 – oulenz

答えて

0

これは私がissue 403として提出したバグの例だと思います。エイリアスを異なるスコープのパーティションウィンドウと組み合わせるとエラーが発生したようです。回答したチームメンバーは、SQLの方言の近々の見直しでこれが修正されることを示唆しています。

つまり、このエラーは特定のエイリアスでのみ発生するということです。 k以外のエイリアスでエラーを再現できませんでした。 BigQueryチームの誰かが、これが本当に同じ問題であるかどうか、そして約束されたアップデートで修正されるかどうかを確認できれば幸いです。

+0

これが起きたときに 'k'は唯一のエイリアスではありません。これは実際のフィールドの名前にも依存します - \t \t私のステートメントをテストするためのエイリアスとして 'x'を試してください –

+0

はい、これは新しい方言で修正されています。 –

1

これは非常に興味深いバグですが、良いことはBigQueryの標準SQLで修正されていることです。それを試してみる方法の詳細については、https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql

+0

私は本当の答えはない:o(とにかく、Moshaに感謝します。同じ "興味深いバグ"が説明できるかどうか少なくとも確認できますか?http://stackoverflow.com/questions/36781049/different-aliases-produce-different-結果が完全一致のクエリ –

+1

これはバグだということですが、それは「理由」です。他の質問と同様に、これは答えが間違っているわけではありません。問題は、実際の動作が期待された動作または望ましい動作とインラインではなく、変更を行う場所が[BigQuery issue tracker](https://code.google.com/p/google-bigquery/issues/list)であることです。 )。 – Adam

関連する問題