在5.2.1版本上将 AWS EMR用作数据处理环境,当处理具有包含许多嵌套字段的复杂架构的巨大JSON文件时,Hive无法处理它,并且由于当前达到4000个字符的限制而出错列长。



查看文档,尽管尚未解决 [12],但已经存在许多与此问题或类似问题有关的问题。在这种情况下,建议将Metastore的几个字段更改为不同的值,以允许更长的结构定义长度。

  • COLUMNS_V2.TYPE_NAME
  • TABLE_PARAMS.PARAM_VALUE
  • SERDE_PARAMS.PARAM_VALUE
  • SD_PARAMS.PARAM_VALUE

  • 如第一期所述,建议的解决方案提到:



    但是,在任何地方都没有指定必须在DB值旁边配置的内容。

    因此,在将当前本地Metastore(在本例中为mysql)从string更新为mediumtext并重新启动Metastore进程后,由于尝试加载JSON继续失败并出现相同错误,因此仍然无法获得任何进展。

    我是否缺少某些东西,或者有人找到替代解决方法来解决此问题?

    最佳答案

    查看与Hive issue HIVE-15249相关的MetaStore源代码,除了在MetaStore表中设置的参数约束之外,还需要进行其他检查。

    特别是在HiveMetaStoreUtils.java文件中,以下声明似乎是执行错误的原因:

    public static final int MAX_MS_TYPENAME_LENGTH = 2000; // 4000/2, for an unlikely unicode case
    

    因此,仅更改MetaStore中提到的值是不够的,因为代码约束将引发异常。

    10-08 20:19