hive - 通过 OOZIE 的配置单元操作中的参数类型不匹配
问题描述
我在 oozie 中运行 hive 操作,其中 hive.sql 脚本具有下面提到的 hive 查询。
议程:
目标是将此查询的结果插入到 hive 集成的 hbase 表中,其中主要目标是通过 transaction_dt 列检索最新的时间戳。
但是,当我通过 OOZIE 中的配置单元操作运行相同的查询时,它失败了
错误信息:
org.apache.hadoop.hive.ql.parse.SemanticException:第 0 行:-1 参数类型不匹配“行”:EQUAL 的第一个参数应为原始类型,但找到了列表
似乎这里不需要 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 一起使用。
解决方案
我不确定这是否会导致异常,但显然没有 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
推荐阅读
- azure-devops - SonarQube in Azure Pipeline - java.lang.OutOfMemoryError: GC overhead limit exceeded
- reason - 如何将以下钩子移植到reasonml
- c++ - c++ 如何创建一个存储 lambdas 并且可以作为指定初始化器传递给函数的聚合
- flutter - 如何防止对齐以舍入 Flutter 中的 X 和 Y 值?
- python - 如果变量可以按连续顺序排列,则熊猫组
- docker - 我有一个 docker alphine 容器,但是所有 curl 调用都因 curl 失败:(6) 无法解析主机
- android - RxAndroid + Retrofit callTimeout 不会触发 onError
- python - 正则表达式:如何匹配包含特殊字符的大写单词
- javascript - 我正在尝试使用 axios 发布表单数据,但遇到错误“网络错误”并且响应是“无法识别的 FormData 部分”
- python - Python 项目在 Docker 中找不到模块