雪花转换中的数据类型(算术运算符)

时间:2017-11-10 07:55:24

标签: etl snowflake

美好的一天我对我的非功能性代码有疑问。如您所见,我想将一些表与union连接起来。我想有营销应用程序的记录,但我需要使用一些算术运算符。问题是,即使我将数据类型设置为数字,代码不起作用(但在另一个转换中没有问题)并报告错误“数字值''无法识别”我发送完整代码,但问题是这一行:

   var elements = new[] {
     new { Value = 1, Type = typeof(Color) },
     new { Value = 2, Type = typeof(Theme) },
     ... 
   };

或者这个:

(case when skl."impressions_sklik" = 0 then 0
  when skl."clicks_sklik" = 0 then 0
  when skl."clicks_sklik" = '' then 0
  when skl."impressions_sklik" = '' then 0
  ELSE (iff(skl."clicks_sklik" = 0 or skl."clicks_sklik" IS NULL or 
     skl."clicks_sklik" = '', 0, skl."clicks_sklik")  / 
    iff(skl."impressions_sklik" = 0 or skl."impressions_sklik" IS NULL 
     or 
    skl."impressions_sklik" = '', 0, skl."impressions_sklik"))
    END) as "CTR"
    FROM "sklik" skl

或者说,没有任何作用:

(case when skl."impressions_sklik" = 0 then 0
   when skl."clicks_sklik" = 0 then 0
   when skl."clicks_sklik" = '' then 0
   when skl."impressions_sklik" = '' then 0
   when skl."clicks_sklik" IS NULL then 0
   WHEN skl."impressions_sklik" IS NULL then 0
   ELSE (skl."clicks_sklik" / skl."impressions_sklik")
   END) as "CTR"

你能帮我解决这个问题吗?

完整代码:

(case when skl."impressions_sklik" = 0 or skl."clicks_sklik" = 0 then 
skl."clicks_sklik" / skl."impressions_sklik" = 0
   when skl."clicks_sklik" = '' or skl."impressions_sklik" = '' then 
skl."clicks_sklik" / skl."impressions_sklik" = 0
   when skl."clicks_sklik" IS NULL or skl."impressions_sklik" IS NULL 
then skl."clicks_sklik" / skl."impressions_sklik" = 0
   ELSE (skl."clicks_sklik" / skl."impressions_sklik")
END) as "CTR"
FROM "sklik" skl

1 个答案:

答案 0 :(得分:0)

这里有两个不同的问题。

首先,如果" impressions_sklik"和" clicks_sklik"被定义为NUMERIC,将它们与文本值'进行比较是无效的。这就是您获得"数字值未识别消息"

的地方

其次,如果" impressions_sklik"为NULL,您将在CASE语句中遇到被零除的问题。

要解决这两个问题,请重写为更简单的以下表达式:

(case 
    when skl.impressions_sklik = 0 or skl.impressions_sklik IS NULL then 0
    when skl.clicks_sklik = 0 or skl.clicks_sklik IS NULL then 0
    ELSE ( skl.clicks_sklik  / skl.impressions_sklik)
END) as CTR