Эквивалентная SQL функция IFNULL и IFF в искровом кадре данных - PullRequest
1 голос
/ 18 июня 2020

Я пытаюсь использовать столбец Snowflake (который имеет такие функции, как IFFNULL и IFF) в фрейме данных Spark. Я пробовал coalesce, но он не работает. Есть ли какая-либо эквивалентная функция или logi c для использования в фрейме данных Spark?

Snowflake SQL:

SELECT P.Product_ID,
IFNULL(IFF(p1.ProductDesc='',NULL,p1.ProductDesc),
           IFNULL(IFF(p2.PrdDesc='',NULL,p2.PrdDesc),IFF(p3.Product_Desc='',NULL,p3.Product_Desc))
          ) AS Product_Description
FROM Product p
LEFT JOIN Product_table_1 p1 ON p1.Product_ID = p.Product_ID
LEFT JOIN Product_table_2 p2 ON p2.Product_ID = p.Product_ID
LEFT JOIN Product_table_3 p3 ON p3.Product_ID = p.Product_ID

Я пробовал: coalesce(p1.ProductDesc, p2.PrdDesc, p3.Product_Desc), но он не работает

1 Ответ

1 голос
/ 18 июня 2020

IIU C, вы можете попробовать coalesce + nullif :

nullif (expr1, expr2) - возвращает null, если expr1 равно expr2, или expr1 в противном случае.

Например (используя pyspark ):

df = spark.createDataFrame([(None,"","a"),("a","","b"),("",None,"c")],["desc1", "desc2", "desc3"])

df.createOrReplaceTempView("tb")

spark.sql("select *, coalesce(nullif(desc1,''), nullif(desc2,''), nullif(desc3,'')) as desc from tb").show()       
+-----+-----+-----+----+
|desc1|desc2|desc3|desc|
+-----+-----+-----+----+
| null|     |    a|   a|
|    a|     |    b|   a|
|     | null|    c|   c|
+-----+-----+-----+----+

поэтому для вашей задачи используйте следующее:

coalesce(nullif(p1.ProductDesc,''), nullif(p2.PrdDesc,''), nullif(p3.Product_Desc,'')) as Product_Description

BTW. вы также можете просто заменить все IFF в исходном SQL на IF.

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