【问题标题】:Subquery and concatenation in hiveHive 中的子查询和连接
【发布时间】:2016-05-11 06:23:17
【问题描述】:

我正在尝试在配置单元中连接字符串和子查询的输出。它在使用管道进行连接时引发错误。我的查询如下。

select id, ('hello:' || (select distinct(name) from abc c1 where c1.id=c2.id and balanc=(select max(balanc) from abc  where c1.id=c2.id)) as description from pqr c2;

下面是错误堆栈:

无法识别表达式规范中 'select' 'max' '(' 附近的输入

我在这里很新。请协助。

【问题讨论】:

    标签: mapreduce hive subquery


    【解决方案1】:

    可以先指定表abc & pqr的表结构吗?

    【讨论】:

    • 表结构如下:abc(name, balanc, id) and pqr(id)
    【解决方案2】:

    因此,如果您想连接字符串并使用子查询,请尝试以下操作: SELECT id,name,balanc FROM(SELECT c1.id as id,c1.name as name,c1.balanc as balanc FROM pql c2 JOIN abc c1 WHERE c1.id=c2.id) t2;

    当您在结果中返回多于 1 列时,您无法在 MAX 等子查询中使用聚合函数。如果您只想从子查询中找出最大值,可以尝试以下查询

    SELECT balanc FROM( SELECT MAX(c1.balanc) as balanc FROM pql c2 JOIN abc c1 WHERE c1.id=c2.id) t2

    希望这对你有所帮助.. 祝你好运!!

    【讨论】:

    • 但我还必须将查询输出连接到字符串。
    • 对不起,我忘了应用 concat 函数。试试下面:SELECT id,name,balanc FROM(SELECT c1.id as id,CONCAT("HELLO:",c1.name) as name,c1.balanc as balanc FROM pql c2 JOIN abc c1 WHERE c1.id=c2。 id) t2;
    • 如果加入不起作用,请尝试以下命令。设置 hive.auto.convert.join=true;
    • 我必须找到余额最大的人的姓名,该查询的输出将成为外部表中的描述。为了描述,我在创建它之前添加了一个字符串。例如,“hello aparna”是描述。但是这里 aparna 的最大余额存在于 abc 和 pqr 中。
    • 试试这个。 : SELECT collect_set(id),collect_set(CONCAT("Hello:",name)) as desc,max(balanc) from abc
    猜你喜欢
    • 2019-03-19
    • 2020-07-24
    • 2017-09-15
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    相关资源
    最近更新 更多