阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 阿里云MaxCompute-Hive作业迁移语法兼容性踩坑记录

1. MaxCompute兼容模式

背景:CDH Hive作业迁移到MaxCompute,SQL语法多数相同,但是部分函数存在行为差异,使用compatible模式可以以Hive模式运行SQL,达到平迁、最小化改动、快速上云降低成本的目的。

相关hint:set odps.sql.hive.compatible=true;

相关参考文档:https://help.aliyun.com/zh/maxcompute/user-guide/differences-in-sql-statements-between-the-maxcompute-v1-0-data-type-edition-and-hive-compatible-data-type-edition?spm=a2c4g.11186623.0.i1

2. 函数行为不同

2.1. unix_timestamp

  1. 【报错】Semantic analysis exception - function unix_timestamp cannot match any overloaded functions with (STRING)
  2. 【解决】Hive兼容模式运行或者更改函数的入参类型

2.2. udf

  1. 【报错】FAILED: ODPS-0130071:[9,8] Semantic analysis exception - invalid type org.apache.hadoop.io.Text for function UDF definition
  2. 【解决】Hive兼容模式运行或者重写udf

2.3. date_format

  1. 【报错】FAILED: ODPS-0121125:Not Support DatetimeFunc date_format(string, string) yet, please run in hive compatible mode
  2. 【解决】Hive兼容模式运行或者更改函数的入参类型

2.4. 除0溢出

  1. 【报错】FAILED: ODPS-0121145:Data overflow - Div result is nan, two params are 0.000000 and 0.000000
  2. 【解决】Hive兼容模式返回INF,落表为null,ODPS则会报错如上所示。可以无脑加compatible保持原hive逻辑执行的策略。

2.5. from_unixtime

  1. odps与hive语法参数不同,hive可以通过第二个参数指定format返回string,odps默认ymd-hms的返回,要根据format看下是否要添加date_format(, string ),或者直接无脑compatible模式
  2. odps与hive函数返回类型不同,odps为datetime,hive为string,这个不用管,datetime类型落表会转换为string
-- hivefrom_unixtime(unix_timestamp(concat(translate(order_date,'/','-'),' 00:00:00')),'yyyy-MM-dd')as order_date,-- odpsdate_format(from_unixtime(unix_timestamp(concat(translate(order_date,'/','-'),' 00:00:00'))),'yyyy-MM-dd')as order_date,

2.6. ucase

  1. 【报错】FAILED: ODPS-0010000:System internal error - fuxi job failed, caused by: StdException:ScalarFnCall::doCodegen fail, scalar function name: UCASE, funcSig: S_S_
  2. 【解决】hive ucase同toupper
-- hive,ucase(t.store_no)-- odps,toupper(t.store_no)

2.7. 正则相关,如:regexp_replace

  1. 从报错信息看,} 前面的四个转义符 \\\\,转义之后还有两个\\,实际是不需要4个转义符的,2个即可。如图二所示。原脚本中使用4个转义符,目前判断和set -e方式执行SQL有关系,那种方式相当于转义两次,故需要4个转义符。
  2. MaxCompute正则表达式规范及注意事项参考:https://help.aliyun.com/zh/maxcompute/user-guide/regular-expressions?spm=a2c4g.11186623.0.i14

image.png

2.8. substring

  1. hive的起始index是0,odps的起始是1,如果为0,则返回null,sql不会报错,但是数据结果会不符合预期,主要表现在截取字段进行关联时,inner join后input size为0。
相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
相关文章
|
2月前
|
SQL 缓存 分布式计算
【跨国数仓迁移最佳实践5】MaxCompute近线查询解决方案助力物流电商等实时场景实现高效查询
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第5篇,解析跨国数仓迁移背后的性能优化技术。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
171 8
|
3月前
|
SQL 分布式计算 运维
【跨国数仓迁移最佳实践3】资源消耗减少50%!解析跨国数仓迁移至MaxCompute背后的性能优化技术
本系列文章将围绕东南亚头部科技集团的真实迁移历程展开,逐步拆解 BigQuery 迁移至 MaxCompute 过程中的关键挑战与技术创新。本篇为第3篇,解析跨国数仓迁移背后的性能优化技术。 注:客户背景为东南亚头部科技集团,文中用 GoTerra 表示。
241 0
|
4月前
|
分布式计算 DataWorks 大数据
阿里云ODPS的个人收获思考
在接触阿里云ODPS过程中,我深入了解了MaxCompute和DataWorks等产品。MaxCompute强大的数据处理能力显著提升了我的工作效率,而DataWorks的一站式开发与治理平台简化了数据流程管理。通过实践,我不仅掌握了高效的SQL编写与数据挖掘技巧,还提升了团队协作意识与大数据思维,为未来挑战打下了坚实基础。
107 3
|
4月前
|
存储 分布式计算 大数据
【赵渝强老师】阿里云大数据存储计算服务:MaxCompute
阿里云MaxCompute是快速、全托管的TB/PB级数据仓库解决方案,提供海量数据存储与计算服务。支持多种计算模型,适用于大规模离线数据分析,具备高安全性、低成本、易用性强等特点,助力企业高效处理大数据。
241 0
|
4月前
|
数据采集 人工智能 大数据
10倍处理效率提升!阿里云大数据AI平台发布智能驾驶数据预处理解决方案
阿里云大数据AI平台推出智能驾驶数据预处理解决方案,助力车企构建高效稳定的数据处理流程。相比自建方案,数据包处理效率提升10倍以上,推理任务提速超1倍,产能翻番,显著提高自动驾驶模型产出效率。该方案已服务80%以上中国车企,支持多模态数据处理与百万级任务调度,全面赋能智驾技术落地。
498 0
|
7月前
|
数据采集 机器学习/深度学习 人工智能
面向 MoE 和推理模型时代:阿里云大数据 AI 产品升级发布
2025 AI 势能大会上,阿里云大数据 AI 平台持续创新,贴合 MoE 架构、Reasoning Model 、 Agentic RAG、MCP 等新趋势,带来计算范式变革。多款大数据及 AI 产品重磅升级,助力企业客户高效地构建 AI 模型并落地 AI 应用。
|
2月前
|
人工智能 分布式计算 DataWorks
阿里云大数据AI产品月刊-2025年8月
阿里云大数据& AI 产品技术月刊【2025年 8 月】,涵盖 8 月技术速递、产品和功能发布、市场和客户应用实践等内容,帮助您快速了解阿里云大数据& AI 方面最新动态。
301 1

热门文章

最新文章

相关产品

  • 云原生大数据计算服务 MaxCompute