BigQuery - изменили значение по умолчанию для пустых полей? Как восстановить? - PullRequest
0 голосов
/ 15 марта 2020

Похоже, что BigQuery изменил свое поведение для условий на полях null: теперь они возвращают значение false, а не нуль, поскольку раньше оно было не таким длинным go. Я проверил, и поведение изменилось как для Legacy, так и для Standard SQL.

Проверьте этот код:

#standardSQL
With data as (
 SELECT safe_cast(null as int64) as int_field
   union all
 SELECT 5 as int_field
   union all
 SELECT 10 as int_field
)
SELECT *, if(int_field in (5,7),1,0) as condition 
from
data

#legacySQL
SELECT *, if(int_field < 10,1,0) as condition 
from
( SELECT *
from
 (SELECT null as int_field)
   ,
 (SELECT 5 as int_field)
   ,
 (SELECT 10 as int_field)
)

Теперь это влияет на некоторые существующие представления, избавляясь от null с - и это не желаемое поведение. Кто-нибудь знает, как я могу переопределить значения по умолчанию, не просматривая каждую строку кода и добавляя if(field is null,null,if(other conditions...?

enter image description here

1 Ответ

0 голосов
/ 16 марта 2020

Я думаю, что вы все еще можете получить желаемый nulls с немного измененным логикой c.

Что-то вроде:

#standardSQL
with data as (
 select safe_cast(null as int64) as int_field
   union all
 select 5 as int_field
   union all
 select 10 as int_field
)

select 
   *, 
   if(int_field in (5,7), 1, if(int_field is null, null, 0)) as condition
from
data

или

#legacySQL
select 
  *, 
  if(int_field is null, null, if(int_field < 10,1,0)) as condition 
from ( 
   select * from
   (select null as int_field),
   (select 5 as int_field),
   (select 10 as int_field)
)

Надеюсь, это поможет.

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