1

我正在处理从雪花进入 dbt 的数据,其中一些 NULL 未被识别为 NULL。我很高兴简单地用案例陈述来解决它们,但是我如何识别它们呢?

是否有设置或我们需要切换以解决这些问题?

这是我的查询:

select distinct call_direction
    , case 
        when call_direction is null then true
        else false
      end as flag
 from {{ ref('fct_phone_logs')}}

和输出

在此处输入图像描述

4

3 回答 3

2

您必须将其中一个作为 SQL NULL,而另一个则不是。如果它不是 SQL NULL,则不会将其标识为 NULL。请运行以下命令,您就会知道我想说什么。

CREATE TABLE NULL_CHECK(VALUE VARCHAR);

SELECT * FROM NULL_CHECK;
INSERT INTO NULL_CHECK VALUES (NULL);  -- This is SQL null
INSERT INTO NULL_CHECK VALUES ('NULL'); -- This is not

SELECT * FROM NULL_CHECK WHERE VALUE is null;

尝试如下查询。我相信它会起作用

select distinct VALUE
    , case 
        when VALUE is null OR EQUAL_NULL(VALUE,'NULL') then true
        else false
      end as flag
      from NULL_CHECK;
于 2020-10-29T02:22:31.297 回答
1

我相信问题出在你的distinct关键词上。

试试这个:

select
  call_direction,
  case when call_direction is null then true else false end as flag
from {{ ref('fct_phone_logs')}}
group by 1,2
于 2020-10-29T02:09:59.000 回答
0

dbt 将空白文本(在文本值的意义上:'')视为与实际空值不同的类型“空值”。

感谢 @Mike Walton 建议在雪花 UI 中运行此查询。

在此处输入图像描述

因此,我将查询更改为以下内容:

select distinct call_direction
    , case 
        when call_direction is null then 'true'
        when call_direction = 'NULL' then 'text null'
        when call_direction = '' then 'text blank'
        when EQUAL_NULL(call_direction, 'NULL') then 'not SQL null'
        else 'false'
      end as flag
 from {{ ref('fct_phone_logs')}}

现在我可以识别所有状态。

于 2020-10-29T22:09:50.413 回答