Точно такой же запрос завершается с ошибкой или успешно с разными используемыми псевдонимами

Ниже две версии одного и того же запроса

Версия 1 (использует k как псевдоним во внутреннем SELECT):

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 (использует l как псевдоним во внутреннем SELECT):

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)

введите здесь описание изображения

Я ожидал, что результат будет одинаковым независимо от того, какой псевдоним используется - это просто псевдоним!

Вопрос. Почему я постоянно получаю отказ для версии 1 и "успешно" для версии 2?


person Mikhail Berlyant    schedule 21.04.2016    source источник
comment
Это самая странная ошибка в BigQuery, которую я когда-либо видел. Рассмотрю его более подробно и сообщу завтра.   -  person Mosha Pasumansky    schedule 22.04.2016
comment
Спасибо Моша! Я провел всю прошлую ночь, чтобы изолировать проблему и представить ее воспроизводимым образом - этот, а также другой - stackoverflow.com/q /36781049/5221944   -  person Mikhail Berlyant    schedule 22.04.2016
comment
Спасибо, что нашли это! У меня сложилось впечатление, что ошибка возникает только с псевдонимом k и только с двумя разными окнами разделов. (Я могу воспроизвести ошибку при замене count(*) на row_number(), но не при выравнивании предложений order by.)   -  person oulenz    schedule 22.04.2016
comment
«k» — не единственный псевдоним, когда это происходит. и это также зависит от имен реальных полей — пока просто попробуйте «x» в качестве псевдонима, чтобы проверить мое утверждение.   -  person Mikhail Berlyant    schedule 22.04.2016
comment
Мне бы очень хотелось узнать, что особенного в k и x вызывает ошибку.   -  person oulenz    schedule 25.04.2016
comment
Если все пойдет хорошо, в среду утром я смогу дать вам решение.   -  person Mosha Pasumansky    schedule 26.04.2016
comment
Обновленный диалект SQL, похоже, не имеет этой проблемы - по крайней мере, я не воспроизводю его так просто, как это было для устаревшего. Но без объяснений от Google - как мы можем знать, что это на самом деле исправлено в новом диалекте, а во-вторых - это всего лишь альфа-версия, поэтому мы все еще довольно долго привязаны к устаревшему диалекту - было бы здорово понять, что это такое, и, надеюсь, не получите клише о природе «порядка по», которое известно любому/самому новичку   -  person Mikhail Berlyant    schedule 27.04.2016


Ответы (2)


Я думаю, что это пример ошибки, которую я зарегистрировал как проблема 403. Ошибка возникает при объединении псевдонимов с окнами разделов разной области. Член команды, который ответил, предполагает, что это будет исправлено в предстоящем капитальном ремонте их диалекта sql.

Тем не менее, для меня новым является то, что эта ошибка возникает только с определенными псевдонимами. Мне не удалось воспроизвести вашу ошибку ни с каким другим псевдонимом, кроме k. Было бы здорово, если бы кто-нибудь из команды BigQuery мог подтвердить, действительно ли это та же проблема и будет ли она исправлена ​​в обещанном обновлении.

person oulenz    schedule 22.04.2016
comment
«k» — не единственный псевдоним, когда это происходит. и это также зависит от имен реальных полей — пока просто попробуйте «x» в качестве псевдонима, чтобы проверить мое утверждение. - person Mikhail Berlyant; 22.04.2016
comment
Да, это исправлено в новом диалекте. - person Jeremy Condit; 23.04.2016

Это довольно интересная ошибка, но хорошая новость заключается в том, что она исправлена ​​в стандартном SQL BigQuery. Чтобы узнать, как это попробовать, посетите https://cloud.google.com/bigquery/sql-reference/enabling-standard-sql

person Mosha Pasumansky    schedule 27.04.2016
comment
я вижу - нет реального ответа :o(. В любом случае, спасибо, Моша. Можете ли вы хотя бы проверить, может ли та же интересная ошибка объяснить stackoverflow.com/questions/36781049/ - person Mikhail Berlyant; 27.04.2016
comment
Что ж, ответ заключается в том, что это ошибка. Вот почему. Как и в случае с вашим другим вопросом, это не делает ответ неправильным. На самом деле, это единственный реальный ответ. Проблема в том, что фактическое поведение не соответствует ожидаемому или желаемому поведению, а место для внесения изменений — Отслеживание ошибок BigQuery. - person Adam; 08.05.2016