在hive中比较这两个具有不同格式的列

时间:2018-04-09 14:03:59

标签: if-statement hive case string-comparison

我有源表:b_ACCOUNT.b_curreny和目标表account.currency。 来源表b_ACCOUNT.b_curreny货币格式是' c'和' U'目标表account.currency格式为'CAD'和'USD'

我用案例改变' c'和' U'格式化为' CAD'和' USD'并比较这两列。我使用以下查询,此查询仍将目标列acc.CURRENCY(CAD)与源列b.b_curreny(c)'

进行比较

SELECT count(*)count,

情况下 当b_curreny =' C'那么' CAD'

当b_curreny =' U'那么' USD'

ELSE NULL END

FROM ACCOUNT acc

在acc.account_NUMBER = b.account_NUMBER

上加入b_ACCOUNT b

和acc.CURRENCY<> b.b_curreny

如果我使用以下查询,则会收到错误消息无效的表别名或列引用' souce_currency':

SELECT count(*)count,

情况下 当b_curreny =' C'那么' CAD'

当b_curreny =' U'那么' USD'

ELSE NULL END assource_curreny

FROM ACCOUNT acc

在acc.account_NUMBER = b.account_NUMBER

上加入b_ACCOUNT b

和acc.CURRENCY<> source_curreny

你能帮我用不同的格式比较这两列吗?

1 个答案:

答案 0 :(得分:0)

source_curreny 是在查询的select子句中创建的,并在同一查询中使用。因此,这个错误。您可以使用外部查询来引用此别名。

如果您对不匹配计数感兴趣,可以尝试以下查询。 (我还没有测试过它)

SELECT sum (case WHEN b.b_curreny ='C' and acc.CURRENCY!='CAD' THEN 1 
             WHEN b_curreny ='U' and  acc.CURRENCY!='USD' THEN 1 
             ELSE 0
            END) as mismatch_count
FROM ACCOUNT acc
join b_ACCOUNT b  
on acc.account_NUMBER=b.account_NUMBER;