【问题标题】:JAVA conditional logic to Impala queryJAVA条件逻辑到Impala查询
【发布时间】:2021-01-20 12:34:28
【问题描述】:

我在 JAVA 中有一个处理数据库的条件逻辑,我想将其转换为 Impala。我对在 impala 中使用“CASE WHEN”和“IF”函数感到困惑,那么下面哪个 impala 逻辑更好用?对吗?

逻辑上发生的事情是,如果主要条件为真,我正在尝试从第一个表 (table_seller_inside) 中获取列 (seller_id)。然后检查 seller_id 是否为 null,然后我会从另一个表中获取 (table_seller_outside)

JAVA逻辑:

if(temp_table.col_1!=null && !temp_table.col_2.trim().equals("") )
{
-> table_seller_inside.seller_id

    if(seller_id==null) 
    {
    -> table_seller_outside.seller_id
    }
}

Impala 逻辑与 CASE WHEN:

SELECT CASE WHEN temp_table.col_1 IS NOT NULL THEN 
            sel_in.seller_id as seller_id,
            sel_in.seller_name as seller_name,
            sel_in.seller_number as seller_num
            CASE WHEN (seller_id IS NULL) THEN
                sel_out.seller_id as seller_id,
                sel_out.seller_name as seller_name,
                sel_out.seller_number as seller_num,
            END
       END
FROM table_seller_inside sel_in,
     table_seller_outside sel_out

IF 的 Impala 逻辑:

if(boolean condition, type ifTrue, type ifFalseOrNull)

SELECT if(temp_table.col_1 !="NULL", (sel_in.seller_id as seller_id,
                                     sel_in.seller_name as seller_name,
                                     sel_in.seller_number as seller_num),
            if(seller_id ="NULL", (sel_out.seller_id as seller_id,
                                   sel_out.seller_name as seller_name,
                                   sel_out.seller_number as seller_num)
FROM table_seller_inside sel_in,
     table_seller_outside sel_out

【问题讨论】:

    标签: if-statement case impala


    【解决方案1】:

    你可以使用下面的sql。您需要提及所有关联表之间的连接或关系。 个别情况何时会在这里工作。 JAVA代码使用if-else,所以可以使用wither case when或if()。

    SELECT CASE
               WHEN temp_table.col_1 IS NOT NULL
                    AND TRIM(temp_table.col_2)<>'' THEN sel_in.seller_id
               ELSE sel_out.seller_id
           END AS seller_id,
           CASE
               WHEN temp_table.col_1 IS NOT NULL
                    AND TRIM(temp_table.col_2)<>'' THEN sel_in.seller_name
               ELSE sel_out.seller_name
           END AS seller_name ,
           CASE
               WHEN temp_table.col_1 IS NOT NULL
                    AND TRIM(temp_table.col_2)<>'' THEN sel_in.seller_number
               ELSE sel_out.seller_number
           END AS seller_number
    FROM table_seller_inside sel_in,
         table_seller_outside sel_out,
         temp_table
    WHERE -- you need to give join condition/relations
    sel_in.id = sel_out.id
      AND temp_table.key = sel_out.key
    

    【讨论】:

    • 感谢您的帮助。但我实际上拥有的是查看seller_id,并尝试从第一个表中批量获取(seller_id,seller_name,seller_number),然后如果第一个表中不存在“seller_id”,所以我会采取第二个表中的批量(seller_id、seller_name、seller_number)。并且连接已经在原始查询中指定。
    猜你喜欢
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    • 2021-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-25
    相关资源
    最近更新 更多