首页 > 解决方案 > 通过 OOZIE 的配置单元操作中的参数类型不匹配

问题描述

我在 oozie 中运行 hive 操作,其中 hive.sql 脚本具有下面提到的 hive 查询。

议程:

  1. 目标是将此查询的结果插入到 hive 集成的 hbase 表中,其中主要目标是通过 transaction_dt 列检索最新的时间戳。

  2. 但是,当我通过 OOZIE 中的配置单元操作运行相同的查询时,它失败了

错误信息:

org.apache.hadoop.hive.ql.parse.SemanticException:第 0 行:-1 参数类型不匹配“行”:EQUAL 的第一个参数应为原始类型,但找到了列表

  1. 似乎这里不需要 UDF 定义的变量,但是需要原始类型。

    当我在 hive shell 上手动运行此查询时,它运行良好。

    insert overwrite table hive_lookup_hbase

    Select lookup.card_id, lookup.UCL, lookup.postcode, lookup.transaction_dt,lookup.score
    from
    (
    SELECT ct.card_id, row_number() over ( partition by ct.card_id order by ct.transaction_dt desc ) rows,
    ct.postcode , ct.member_id, ct.transaction_dt, ms.score, c_u_look.UCL
    FROM hive_cardtrans_hbase ct 
         join cid_ucl_lookup c_u_look 
         join member_score ms on c_u_look.card_id=ct.card_id and ms.member_id=ct.member_id
    )lookup

    where rows=1;

由于它与 hive shell 一起使用,需要知道我可以进行哪些更改以使其与 oozie 一起使用。

标签: hiveoozie

解决方案


我不确定这是否会导致异常,但显然没有 ON 条件的连接是坏事,因为它是 CROSS JOIN。似乎第一次加入的 ON 条件不是它应该在的位置。应该是这样的,不是吗?

FROM hive_cardtrans_hbase ct 
         join cid_ucl_lookup c_u_look on c_u_look.card_id=ct.card_id
         join member_score   ms       on ms.member_id=ct.member_id

不是这个:

FROM hive_cardtrans_hbase ct 
         join cid_ucl_lookup c_u_look 
         join member_score   ms on c_u_look.card_id=ct.card_id and ms.member_id=ct.member_id

推荐阅读