开发者社区 > 大数据与机器学习 > 大数据计算 MaxCompute > 正文

大数据计算MaxCompute我开启了hive兼容,但是这个和hive、spark的有差异,为什么?

大数据计算MaxCompute我开启了hive兼容,但是这个和hive、spark的有差异,这个函数我其它两个产品都用过,别人都是连起来的字段如果中间某个字段是null,是用空白替换,整个字段数量是不变的,结果MC这里导致字段数量少了,非得加nvl判断下。。。

展开
收起
真的很搞笑 2023-12-03 19:32:28 109 0
3 条回答
写回答
取消 提交回答
  • 是的,你在MaxCompute中使用CONCAT_WS函数时,如果中间的某个字段是NULL,那么这个字段会被忽略,不会用空格替换,因此会导致字段数量减少。这是因为MaxCompute的CONCAT_WS函数的实现方式与其他数据库(如Hive和Spark)的不同。

    为了解决这个问题,你可以在CONCAT_WS函数中使用NVL函数来判断字段是否为NULL,如果是NULL,则用空格替换。这样,无论字段是否为NULL,都不会影响到其他字段的连接。

    例如,你可以这样写:

    CONCAT_WS('', NVL(field1, ''), NVL(field2, ''), NVL(field3, ''))
    

    这样,即使field1field2field3为NULL,也不会影响到其他字段的连接。

    2023-12-04 16:50:11
    赞同 展开评论 打赏
  • 看错了。 是有匹配的。 hive的concat对应的是MaxCompute的concat。我试了一下。hive返回的也是null6d537d82e0c9f2b108b9d8d10f88ab7d.png

    MaxCompute里面加不加hive兼容都是返回null370cb14661efdaa9dca5d789246569a7.png
    ,此回答整理自钉群“MaxCompute开发者社区2群”

    2023-12-04 00:38:55
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    这是因为MaxCompute的Hive兼容模式与Hive和Spark的处理方式不同。在Hive和Spark中,如果某个字段是null,会用空白替换,整个字段数量不会变。但是在MaxCompute中,如果某个字段是null,该字段会被忽略,导致字段数量减少。

    为了解决这个问题,你可以使用nvl函数来判断字段是否为null,如果为null则替换为空白或其他默认值。这样可以保证字段数量不变,同时也能处理null值的情况。

    2023-12-03 21:14:15
    赞同 展开评论 打赏

MaxCompute(原ODPS)是一项面向分析的大数据计算服务,它以Serverless架构提供快速、全托管的在线数据仓库服务,消除传统数据平台在资源扩展性和弹性方面的限制,最小化用户运维投入,使您经济并高效的分析处理海量数据。

相关产品

  • 云原生大数据计算服务 MaxCompute
  • 相关电子书

    更多
    Data+AI时代大数据平台应该如何建设 立即下载
    大数据AI一体化的解读 立即下载
    极氪大数据 Serverless 应用实践 立即下载