我正在进入 Hive 并学习 Hive。我在 teradata 中有客户表,使用 sqoop 在 hive 中提取完整的表,效果很好。
请参阅 Teradata 和 HIVE 中的以下客户表。
在 Teradata 中:
select TOP 4 id,name,'"'||status||'"' from customer;
3172460 Customer#003172460 "BUILDING "
3017726 Customer#003017726 "BUILDING "
2817987 Customer#002817987 "COMPLETE "
2817984 Customer#002817984 "BUILDING "
在 hive 中:
select id,name,CONCAT ('"' , status , '"') from customer LIMIT 4;
3172460 Customer#003172460 "BUILDING "
3017726 Customer#003017726 "BUILDING "
2817987 Customer#002817987 "COMPLETE "
2817984 Customer#002817984 "BUILDING "
当我尝试从表 customer 中获取具有字符串类型的列匹配的记录时。我在不同的环境中对相同的查询得到不同的结果。
查看下面的查询结果..
在 Teradata 中:
select TOP 2 id,name,'"'||status||'"' from customer WHERE status = 'BUILDING';
3172460 Customer#003172460 "BUILDING "
3017726 Customer#003017726 "BUILDING "
在 hive 中:
select id,name,CONCAT ('"' , status , '"') from customer WHERE status = 'BUILDING' LIMIT 2;
**<<No Result>>**
看起来 Teradata 在实际比较陈述值之前正在做一些修剪。但 Hive 会按原样匹配字符串。
不确定,这是预期的行为或错误,或者可以作为增强来提出。
我看到以下可能的解决方案: * 转换为前后带有通配符的like运算符表达式
期待您对此的回应。在hive中如何处理/实现。
最佳答案
您可以使用rtrim
函数,即:
select id,name,CONCAT ('"' , status , '"') from customer WHERE rtrim(status) = 'BUILDING' LIMIT 2;
但是这里出现了一个问题,Hive 在字符串比较中使用什么标准?根据 ANSI/ISO SQL-92 'BUILDING' == 'BUILDING ',这里是 link阅读有关它的文章。
关于sql - Teradata 和 HIVE 之间的字符串匹配存在差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29295589/