Предоставляет ли BigQuery `ANY_VALUE` какие-либо гарантии того, что значения находятся в одной строке? - PullRequest
0 голосов
/ 28 апреля 2020

Рассмотрим следующий запрос:

with abc as (
  select 1 as a, 1 as b, 2 as c  
  union all select 1, 3, 4  
  union all select 1, 5, 6  
  union all select 2, 7, 8  
  union all select 2, 9, 10
)

select
  a,
  any_value(b),
  any_value(c)
from abc
group by a

Существуют ли какие-либо гарантии относительно того, будут ли значения b и c, выбранные ANY_VALUE, из той же строки? Другими словами, могу ли я быть уверен, что , если , значения, выбранные для b, равны 1 и 9 (да, я знаю, что нет никаких гарантий, что это будет так, или что будет одинаковым каждый раз) тогда c равно 2 и 10 соответственно?

1 Ответ

1 голос
/ 28 апреля 2020

Ниже для BigQuery Standard SQL

ANY_VALUE возвращает выражение для некоторой строки в группе. недетерминирован c какую строку выбрать

Чтобы убедиться, что b и c взяты из одной строки - используйте подход ниже

#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM abc t
GROUP BY a   

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

#standardSQL
SELECT AS VALUE ARRAY_AGG(t ORDER BY b,c LIMIT 1)[OFFSET(0)]
FROM abc t
GROUP BY a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...