sql - Teradata 和 HIVE 之间的字符串匹配存在差异

标签 sql hadoop hive teradata

我正在进入 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/

相关文章:

sql - 在 PostgreSQL 13(通过客户端 session )上更改 "wal_level"没有得到尊重

java - 乔克 : Unable to implement Seek in Dynamic Query

sql - 从一个表到另一个表的Netezza UPDATE

python - 不要在 Spark (Python) 中写入 None 或空行

sql - 从具有数千行的表中查询最新 1000 条记录的最佳方法?

hadoop - dijkstra的最短路径算法回溯了吗?

hadoop - 使用配置单元更新表

postgresql - 将 postgresql 数组导入配置单元

hadoop - 如何删除配置单元中的分隔符

mysql - 如何在hive数据库中查找空表