我正在进入Hive学习Hive。我在teradata中有customer表,使用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在实际比较stating值之前做的事情还不够。但Hive是匹配字符串,因为它是。
不确定,这是预期的行为或错误,或可以提出作为增强。
我看到下面可能的解决方案:*转换成前后带有通配符的like运算符表达式
期待你对此的回应。如何在Hive中处理/实现。
2条答案
按热度按时间1u4esq0p1#
你可以用
rtrim
功能,即:但这里出现的问题是字符串比较Hive使用什么标准?根据ansi/iso sql-92“building”==“building”,这里有一个关于它的文章链接。
xe55xuns2#
回答我自己的问题…从hive用户邮件列表中获取
hive是唯一符合sql标准的产品,
在hive中,字符串比较就像在java中一样工作
所以在 hive 里