Непоследовательная логическая оценка с «x is true» в Amazon Redshift - PullRequest
0 голосов
/ 03 декабря 2018

Использование Amazon Redshift.У меня есть логическое поле, которое имеет 3 различных значения - true, false и null.

Когда я пытаюсь оценить (x is true), я получаю сообщение об ошибке Not implemented.Попытка оценить (x = true) работает просто отлично.

dataeng=# with bool_vals as (select distinct val::boolean as x from my_table) select * from bool_vals;
 x
---
 f

 t
(3 rows)

dataeng=# with bool_vals as (select distinct val::boolean as x from my_table) select *, (x is null) from bool_vals;
 x | ?column?
---+----------
 f | f
 t | f
   | t
(3 rows)

dataeng=# with bool_vals as (select distinct val::boolean as x from my_table) select *, (x is true) from bool_vals;
ERROR:  Not implemented
DETAIL:
  -----------------------------------------------
  error:  Not implemented
  code:      1001
  context:   'false' - project naming - 330
  query:     114596
  location:  cg_main.cpp:1265
  process:   padbmaster [pid=7556]
  -----------------------------------------------

dataeng=# with bool_vals as (select distinct val::boolean as x from my_table) select *, (x = true) from bool_vals;
 x | ?column?
---+----------
 t | t
 f | f
   |
(3 rows)

Как ни странно, я не могу воспроизвести его, используя тривиальный пример:

dataeng=# with bools as (select true as x union select false union select null) select *, (x is true) from bools;
 x | ?column?
---+----------
 f | f
 t | t
   | f
(3 rows)

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

1 Ответ

0 голосов
/ 04 декабря 2018

В Redshift синтаксис IS {TRUE|FALSE|UNKNOWN} не поддерживается в части SELECT запроса.Это только поддерживается как предикат WHERE.

Мы добавили примечание и новый пример, чтобы прояснить это в нашей документации.https://docs.aws.amazon.com/redshift/latest/dg/r_Boolean_type.html

...