MaxCompute操作报错合集之使用spark.sql执行rename分区操作,遇到任务报错退出的情况,该怎么办

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。

问题一:使用maxcompute开发ODPS Spark任务,使用spark.sql 无法 rename分区

使用maxcompute开发ODPS Spark任务,使用spark.sql 执行rename分区 sql: alter table tableNamepartition(date=tableName partition(date='dateFrom',source_id=sourceFrom)renametopartition(date=sourceFrom) rename to partition(date='dateTo',source_id=$sourceTo), 任务报错退出。

报错信息如下:

org.apache.spark.sql.AnalysisException: ALTER TABLE RENAME PARTITION is only supported with v1 tables.
    at org.apache.spark.sql.catalyst.analysis.ResolveSessionCatalog.org$apache$spark$sql$catalyst$analysis$ResolveSessionCatalog$$parseV1Table(ResolveSessionCatalog.scala:588) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.ResolveSessionCatalog$$anonfun$apply$1.applyOrElse(ResolveSessionCatalog.scala:472) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.ResolveSessionCatalog$$anonfun$apply$1.applyOrElse(ResolveSessionCatalog.scala:48) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.$anonfun$resolveOperatorsUp$3(AnalysisHelper.scala:90) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.trees.CurrentOrigin$.withOrigin(TreeNode.scala:73) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.$anonfun$resolveOperatorsUp$1(AnalysisHelper.scala:90) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$.allowInvokingTransformsInAnalyzer(AnalysisHelper.scala:221) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.resolveOperatorsUp(AnalysisHelper.scala:86) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper.resolveOperatorsUp$(AnalysisHelper.scala:84) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.LogicalPlan.resolveOperatorsUp(LogicalPlan.scala:29) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.ResolveSessionCatalog.apply(ResolveSessionCatalog.scala:48) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.ResolveSessionCatalog.apply(ResolveSessionCatalog.scala:39) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$execute$2(RuleExecutor.scala:216) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at scala.collection.LinearSeqOptimized.foldLeft(LinearSeqOptimized.scala:126) ~[scala-library-2.12.10.jar:?]
    at scala.collection.LinearSeqOptimized.foldLeft$(LinearSeqOptimized.scala:122) ~[scala-library-2.12.10.jar:?]
    at scala.collection.immutable.List.foldLeft(List.scala:89) ~[scala-library-2.12.10.jar:?]
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$execute$1(RuleExecutor.scala:213) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$execute$1$adapted(RuleExecutor.scala:205) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at scala.collection.immutable.List.foreach(List.scala:392) ~[scala-library-2.12.10.jar:?]
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.execute(RuleExecutor.scala:205) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.Analyzer.org$apache$spark$sql$catalyst$analysis$Analyzer$$executeSameContext(Analyzer.scala:196) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Analyzer.scala:190) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.Analyzer.execute(Analyzer.scala:155) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.$anonfun$executeAndTrack$1(RuleExecutor.scala:183) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.QueryPlanningTracker$.withTracker(QueryPlanningTracker.scala:88) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.rules.RuleExecutor.executeAndTrack(RuleExecutor.scala:183) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.Analyzer.$anonfun$executeAndCheck$1(Analyzer.scala:174) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.plans.logical.AnalysisHelper$.markInAnalyzer(AnalysisHelper.scala:228) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.analysis.Analyzer.executeAndCheck(Analyzer.scala:173) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.execution.QueryExecution.$anonfun$analyzed$1(QueryExecution.scala:73) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.catalyst.QueryPlanningTracker.measurePhase(QueryPlanningTracker.scala:111) ~[spark-catalyst_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.execution.QueryExecution.$anonfun$executePhase$1(QueryExecution.scala:143) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:772) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.execution.QueryExecution.executePhase(QueryExecution.scala:143) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.execution.QueryExecution.analyzed$lzycompute(QueryExecution.scala:73) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.execution.QueryExecution.analyzed(QueryExecution.scala:71) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.execution.QueryExecution.assertAnalyzed(QueryExecution.scala:63) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.Dataset$.$anonfun$ofRows$2(Dataset.scala:98) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:772) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:96) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.SparkSession.$anonfun$sql$1(SparkSession.scala:615) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.SparkSession.withActive(SparkSession.scala:772) ~[spark-sql_2.12-3.1.1.jar:3.1.1]
    at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:610) ~[spark-sql_2.12-3.1.1.jar:3.1.1]


参考回答:

根据错误信息,ALTER TABLE RENAME PARTITION操作仅支持v1表。这意味着在MaxCompute中,Spark SQL目前可能不支持对分区表进行重命名操作。您需要考虑使用MaxCompute提供的原生命令或SDK来进行分区重命名操作。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/604644


问题二:大数据计算MaxCompute这里指定的是parquet,但是写入后不是parquet?

大数据计算MaxCompute这里指定的是parquet,但是写入后不是parquet?

写入之后的数据如下 我期待的数据格式如下


参考回答:

创建oss外部表时加上这个属性 serde_class 指定PARQUET参数,压缩用with serdeproperties属性,指定GZIP压缩。

https://help.aliyun.com/zh/maxcompute/user-guide/create-an-oss-external-table?spm=a2c4g.11186623.0.i15#section-f7w-sgc-jon


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/603376


问题三:大数据计算MaxCompute中dataworks 脚本模式下面,再查询这张表报错 怎么解决呢?

大数据计算MaxCompute中dataworks 脚本模式下面,更新完成一张数据表后,再查询这张表报错 怎么解决呢

insert into t(id1,id2) values(1,0);

update t set id2 = 1;

FAILED: ODPS-0130071:[64,51] Semantic analysis exception - cannot read table t after modification, please use variable instead: read table data into a variable before writing or access variables which represent new data


参考回答:

脚本模式会把所有SQL作为一个整体进行编译,执行。

如果你要顺序执行,得用odps SQL节点


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/603374


问题四:大数据计算MaxCompute这个函数的原理,帮忙看看这个问题?

大数据计算MaxCompute这个函数的原理https://help.aliyun.com/zh/maxcompute/user-guide/date-functions?spm=a2c4g.11186623.0.i14#section-s2l-btt-mal?

为什么我自己diff完 除以31,跟months_between的结果不一样 ,并且 20240229 到20240330 其实不满1个月,但是用months_between算出来的结果大于1,哪个大哥帮忙看看这个问题 ,是不是我哪里使用的有问题?select datediff('2024-03-30','2024-02-29'),

datediff('2024-03-30','2024-02-29')/31,

months_between('2024-03-30','2024-02-29'),

months_between('2024-03-31','2024-02-29')


参考回答:

我理解只这样的。

MONTHS_BETWEEN返回的是date1和date2之间的月数,datediff计算两个时间date1、date2的差值,不填写datepart参数,默认日期格式为天。

两个函数返回不同结果的原因在于它们计算差异的方式不同。datediff 返回一个整数的天数差,然后你手动除以 31 来得到一个近似的月份数。而 months_between 返回一个表示月数差的浮点数,它更准确地反映两个日期之间的时间跨度。MONTHS_BETWEEN函数尝试估算出从起始日期到结束日期经过了多少个完整月份,并加上剩余天数所占的月份比例。


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/603363


问题五:大数据计算MaxCompute2月29号 到 3月30号 不足一个月为啥算出来1.几?

大数据计算MaxCompute2月29号 到 3月30号 不足一个月为啥算出来1.几?


参考回答:

months_between 函数在计算月份差异时,不仅仅是简单地用天数除以 31。而是考虑到了月份中的具体日期。由于 3 月 30 日比 2 月 29 日晚一个月零一天,你实际上得到的是一个月零一天的月份数,然后那一天占据一个月的比例按 1/31 计算

1(月) + 1(天)/ 31(作为月的估算长度) = 1.032258064516129

也就是1 - (30 / 31) = 1.032258064516129


关于本问题的更多回答可点击原文查看:

https://developer.aliyun.com/ask/603362

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
4天前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用问题之如何调整改变SQL查询的严格性
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
4天前
|
分布式计算 DataWorks MaxCompute
MaxCompute操作报错合集之在Spark访问OSS时出现证书错误的问题,该如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
4天前
|
SQL 分布式计算 前端开发
MaxCompute操作报错合集之SQL脚本设置参数set odps.mapred.reduce.tasks=18;没有生效,是为什么
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
2天前
|
SQL 大数据
常见大数据面试SQL-每年总成绩都有所提升的学生
一张学生成绩表(student_scores),有year-学年,subject-课程,student-学生,score-分数这四个字段,请完成如下问题: 问题1:每年每门学科排名第一的学生 问题2:每年总成绩都有所提升的学生
|
4天前
|
SQL 分布式计算 大数据
MaxCompute操作报错合集之执行sql时,出现Cannot read properties of undefined (reading 'start')错误提示,该怎么办
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
1月前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
11天前
|
存储 分布式计算 Hadoop
Spark和Hadoop都是大数据处理领域的重要工具
【6月更文挑战第17天】Spark和Hadoop都是大数据处理领域的重要工具
81 32
|
15天前
|
分布式计算 大数据 数据处理
Apache Spark在大数据处理中的应用
Apache Spark是大数据处理的热门工具,由AMPLab开发并捐赠给Apache软件基金会。它以内存计算和优化的执行引擎著称,提供比Hadoop更快的处理速度,支持批处理、交互式查询、流处理和机器学习。Spark架构包括Driver、Master、Worker Node和Executor,核心组件有RDD、DataFrame、Dataset、Spark SQL、Spark Streaming、MLlib和GraphX。文章通过代码示例展示了Spark在批处理、交互式查询和实时数据处理中的应用,并讨论了其优势(高性能、易用性、通用性和集成性)和挑战。【6月更文挑战第11天】
44 6
|
12天前
|
分布式计算 Hadoop 大数据
大数据技术:Hadoop与Spark的对比
【6月更文挑战第15天】**Hadoop与Spark对比摘要** Hadoop是分布式系统基础架构,擅长处理大规模批处理任务,依赖HDFS和MapReduce,具有高可靠性和生态多样性。Spark是快速数据处理引擎,侧重内存计算,提供多语言接口,支持机器学习和流处理,处理速度远超Hadoop,适合实时分析和交互式查询。两者在资源占用和生态系统上有差异,适用于不同应用场景。选择时需依据具体需求。
|
16天前
|
分布式计算 Kubernetes Spark
大数据之spark on k8s
大数据之spark on k8s

相关产品

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