Hadoop 如何在同一配置单元表中使用派生列?

Hadoop 如何在同一配置单元表中使用派生列?,hadoop,hive,subquery,bigdata,derived-column,Hadoop,Hive,Subquery,Bigdata,Derived Column,你能在下面帮我查询一下吗 假设有表employee和列A、B和日期列 我必须使用下面的转换将数据从employee表加载到另一个emp表 Employee表中的转换 列A的绝对值-(emp中的列名称为ABS_A) B列的绝对值-(emp中的列名称为ABS_B) 查找给定日期列的总和(ABS_A) 4.查找给定日期列的总和(ABS_b) 查找sum(ABS\u A)/sum(ABS\u B)-列名为平均值 因此,最终的emp表将包含以下列 1.A 2.B 3.ABS_A 4.ABS_B 5.

你能在下面帮我查询一下吗

假设有表employee和列A、B和日期列

我必须使用下面的转换将数据从employee表加载到另一个emp表

Employee表中的转换

  • 列A的绝对值-(emp中的列名称为ABS_A)

  • B列的绝对值-(emp中的列名称为ABS_B)

  • 查找给定日期列的总和(ABS_A)

  • 4.查找给定日期列的总和(ABS_b)

  • 查找
    sum(ABS\u A)/sum(ABS\u B)
    -列名为平均值
  • 因此,最终的emp表将包含以下列

    1.A

    2.B

    3.ABS_A

    4.ABS_B

    5.平均

    如何在配置单元中处理此类派生列

    我尝试了下面的查询,但现在正在工作。谁能给我指点路吗

    insert overwrite into emp
    select 
    A,
    B,
    ABS(A) as ABS_A,
    ABS(B) as ABS_B,
    sum(ABS_A) OVER PARTION BY DATE AS sum_OF_A,
    sum(ABS_B) OVER PARTTION BY DATE AS sum_of_b,
    avg(sum_of_A,sum_of_b) over partition by date as average
    from employee
    

    配置单元不支持在同一子查询级别中使用派生列。使用子查询或函数代替列别名

    insert overwrite table emp 
    select A, B, ABS_A, ABS_B, sum_OF_A, sum_of_b, `date`, sum_OF_A/sum_of_b as average
    from      
    (
    select A, B, ABS(A) as ABS_A, ABS(B) as ABS_B, `date`,
           sum(ABS(A)) OVER (PARTTION BY DATE) AS sum_OF_A, 
           sum(ABS(B)) OVER (PARTTION BY DATE) AS sum_of_b
      from employee
    )s;
    

    提示:“Find sum(ABS_A)/sum(ABS_B)”与查询中的内容不匹配。在你的理解中,什么是平均值还不清楚。请提供一些数据示例和预期输出部分您的问题与派生列,平均计算似乎是错误的,它不应该是(按日期划分),因为已在同一分区上计算了_A和_B的和(假设它工作),换句话说,每个日期组已具有相同的_A和_B的和。因此,请澄清您期望的输出是什么,并且最终输出中不存在日期列,这看起来很奇怪,因为总和是为日期分区计算的。如果最终输出中没有日期,您将得到整个日期组的重复总和。更好地提供数据输入和所需输出示例感谢您的回答@leftjoin:我已将表格截图附在问题后面。“预期输出”应该与“Emp表”中的类似。感谢@leftjoin-在最终输出表“Emp”中,以下两列“sum_OF_A,sum_OF_b”不是必需的。那么,我们需要一个临时表来计算平均值吗===“我还用公式更新了截图”。@smp97你是说子查询?你可以在(按日期划分的部分)上做的总数(ABS(A))和在(按日期划分的部分)上做的总数(ABS(B))和在(按日期划分的部分)。我刚才解释了工艺available@smp97_A的和已经是日期分区中的和。求和=C11+C12,在这种情况下,您所需要的只是除法如何处理0除法。我是否可以在(按日期划分的部分)上使用如下总和(ABS(A))/NULLIF(总和(ABS(B))在(按日期划分的部分))上使用。您能不能指导@smp97用例语句,比如当sum\u of_b>0时,那么sum\u of_A/sum\u of_b else。。。。以平均值结束