bigQuery ANY_VALUE недетерминированный? - PullRequest
0 голосов
/ 17 апреля 2019

Является ли bigQuery ANY_VALUE детерминированным?У меня есть запрос, который дает ~ 200 000 строк результатов, но если я отфильтрую повторяющиеся записи после запроса, они уменьшатся примерно до ~ 500.Чтобы решить эту проблему в самом запросе, я добавил GROUP BY, а затем обернул все атрибуты с помощью `ANY_VALUE (tN.fieldX) как tN_fieldX.Вывод, отсортированный, сохраненный как .csv и выполненный несколько раз, возвращает один и тот же файл результатов md5sum.

Означает ли это, что ANY_VALUE решает мою проблему с дублирующимися записями, потому что каждый раз будет давать разные значенияиз-за недетерминированности в bigQuery?

Ответы [ 2 ]

1 голос
/ 17 апреля 2019

Очевидно, что ANY_VALUE является недетерминированным - но если вы применяете функцию к значению BY, указанному в GROUP - она ​​становится детерминированной в том смысле, что она случайным образом выбирает значение из группы с одинаковыми значениями. Так что да, это помогает в решении проблемы дубликатов в таких случаях, как ваш

1 голос
/ 17 апреля 2019

Я думаю, что это довольно ясно из документации :

ANY_VALUE

ANY_VALUE(expression)  [OVER (...)]

Описание

Возвращает любое значение из ввода или NULL, если есть нулевые строки ввода.Возвращаемое значение недетерминированное , что означает, что вы можете получать разные результаты при каждом использовании этой функции.

Если вы зависите от конкретного возвращаемого значения, оноВы рискуете, чтобы он не работал в какой-то момент.

Я бы вместо этого рекомендовал использовать оконные функции:

select t.* except (seqnum)
from (select t.*,
             row_number() over (partition by . . . order by . . . ) as seqnum
      from t
     ) t
where seqnum = 1;

Это гарантирует, что все значения относятся к одинаковым row, и вы можете контролировать, из какой они строки - при условии, что у вас есть что-то, чтобы уникально идентифицировать каждую строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...