我想根據一個IF條件來設定一個新的列,其中一個值是在一個選擇查詢中。
例如,
SELECT
request_id,
charge_click_cnt。
IF(
uuid in (
SELECT
設備ID
來自的
t1
where
dt between '20210908'
和 '20210915'之間
),
'shop_user'。
'non_shop_user')
) as shop_user
FROM[/span
t2
但似乎有一些錯誤,如:
。
org.apache.spark.sql.catalyst.analysis.CheckAnalysis$class#failAnalysis:41 org.apache.spark.sql.catalyst.analysis.Analysis#failAnalysis:91 org.apache.sql.catalyst.analysis.CheckAnalysis$anonfun$checkAnalysis$1#apply:316
所以我想知道是否有一個更好的方法,像前面的代碼那樣設定一個條件值。 謝謝你的建議。
uj5u.com熱心網友回復:
如果spark允許帶有existence子句的case陳述句,下面的陳述句應該可以作業。
SELECT request_id,
charge_click_cnt,
CASE WHEN EXISTS(SELECT 1)
FROM t1
WHERE dt between '20210908'AND '20210915'
AND uuid=deviceid) THEN'shop_user'
ELSE'non_shop_user'
END
FROM t2;
uj5u.com熱心網友回復:
如果你想試試spark dataFrame api,也許你可以試試這個:
import org.apache.spark.sql.function._
val df1 = spark.sql("select deviceid as uuid, 1 as tag from t1 where dt between '20210908' and '20210915'")
val df2 = spark.sql("select requst_id, charge_click_cnt, uuid from t2" )
val resultDf = df2.join(df1, Seq("uuid"), "left") 。 withColumn("IF", when(col("a") === 1, "shop_user") . otherwise("non_shop_user")).drop("標簽")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/306823.html
標籤:
上一篇:sql用觸發器防止重復預訂
