阿里云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
-- hive
from_unixtime(unix_timestamp(concat(translate(order_date, '/','-'),' 00:00:00')),'yyyy-MM-dd') as order_date,
-- odps
date_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。
相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
13天前
|
弹性计算 运维 Linux
阿里云白辉万:ECS多场景迁移上云最佳实践
CloudOps云上运维系列课程第四节由阿里云弹性计算技术专家白辉万主讲《ECS多场景迁移上云最佳实践》,点击下方链接进入【CloudOps云上运维】课程专题页即可观看课程回放,还可了解最新课程资讯。
|
1月前
|
域名解析 缓存 网络协议
平滑迁移DNS到阿里云的方案
本文主要介绍当前DNS服务器在未使用云解析场景下,如何使用云解析(平滑迁移)。
|
1月前
|
SQL 分布式计算 Java
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
|
2月前
|
大数据 数据管理 数据安全/隐私保护
市政务系统迁移上阿里云,通用型高效解决方案
本文主要分享HyperMotion第三方云迁移工具,帮助某市政务系统迁移归集上云的通用型高效解决方案。该方案可解决政务系统过于老旧无法重装改造、硬件系统过时与大部分工具无法适配、政务系统部署复杂、数量庞大、跨地域分布人员协调难度大等问题。
|
2月前
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
2月前
|
弹性计算 Java 芯片
阿里云张伟分享 | 软件跨架构迁移(x86->ARM)的原理及实践
2023年8月31日,系列课程第四节《软件跨架构迁移(X86 -> ARM)的原理及实践》正式上线,由阿里云弹性计算架构师主讲,内容涵盖:ARM与x86架构的差异分析;软件跨架构迁移的原理;软件迁移策略制定、环境准备、执行、测试优化及持续部署与维护等;以及软件迁移的全流程解读。
阿里云张伟分享 | 软件跨架构迁移(x86->ARM)的原理及实践
|
3月前
|
弹性计算 人工智能 算法
阿里云张伟:软件跨架构迁移(X86 -> ARM)的原理及实践|阿里云弹性计算技术公开课直播预告
针对阿里云倚天实例的软件迁移,阿里云为开发者提供了迁移工具EasyYitian和性能调优工具KeenTune,能够帮助用户解决软件迁移评估分析过程中人工分析投入大、准确率低、代码兼容性人工排查困难、迁移经验欠缺、反复依赖编译调错定位等痛点,实现业务在ARM ECS的快速适配。EasyYitian支持主流开发语言,通过系统自动化扫描可以一键生成分析报告。KeenTune通过AI算法与专家知识库的有效结合,为软件应用提供动态和静态协同调优的能力。
阿里云张伟:软件跨架构迁移(X86 -> ARM)的原理及实践|阿里云弹性计算技术公开课直播预告
|
开发者
阿里云开发者社区Markdown语法
阿里云开发者社区Markdown语法
16808 4
|
运维 CDN
阿里云CDN边缘脚本EdgeScript公测:简单语法完成CDN复杂配置
CDN可编程配置开发工具EdgeScript已经开放公测,用户可以通过专题页中的公测入口进行申请,或者提交工单进行申请,申请通过后即可免费试用EdgeScript并获得1v1的技术专家支持,期待各位运维工程师和开发者参与公测。
13708 0
|
NoSQL Redis
阿里云Redis集群兼容cluster语法
阿里云Redis集群兼容社区cluster相关语法,允许jedis client等客户端访问cluster nodes等命令,用户在开通兼容功能后,可以将自建的cluster集群无缝迁移到阿里云上的Redis集群,无须修改业务代码。
2740 0
相关产品
云原生大数据计算服务 MaxCompute
推荐文章
更多