当前位置: 首页 > 知识库问答 >
问题:

AWS Athena:HIVE_BAD_DATA错误:parquet中的字段类型DOUBLE与表架构中定义的类型不兼容

阚英睿
2023-03-14

我使用AWS Athena查询存储在S3的一些数据,即使用pyarrow压缩的分区拼花文件。

我有三列包含字符串值,一列称为“key”,包含int值,另一列名为“result”,包含double和int值。

有了这些列,我创建了架构,如下所示:

create external table (
    key int,
    result double,
    location string,
    vehicle_name string.
    filename string
)

当我查询桌子时,我会得到

HIVE_BAD_DATA:镶木地板中的字段结果类型INT64与表模式中定义的类型DOUBLE不兼容

因此,我修改了一个模式,其结果数据类型为<code>INT</code>。

然后我查询这个表,

HIVE _ BAD _ DATA:parquet中的字段结果类型DOUBLE与表模式中定义的类型INT不兼容

我环顾四周,试图了解为什么会发生这种情况,但没有找到解决方案。

任何建议都非常感谢。

共有1个答案

祁飞翰
2023-03-14

在我看来,这就像你有一些文件,其中列被键入为双精度,而另一些文件则被键入为int。当您将表的列键入为双 Athena 时,Athena 最终将读取相应列为 int 的文件并抛出此错误,反之亦然,如果您将表列键入为 int,则反之亦然。

据我所知,Athena不做类型强制,但即使做了,类型也是不兼容的:Athena中的DOUBLE列不能表示一个Parquet INT64列的所有可能值,Athena中的INT列不能表示一个浮点数(对于Parquet INT64,Athena中需要一个BIGINT列)。

解决方案是确保您的文件都具有相同的模式。您可能需要在生成文件的代码中明确说明要生成什么模式(例如,让它总是使用DOUBLE)。

 类似资料:
  • 我有下面的Kotlin代码。一个名为的密封类和两个对象类和继承自密封类。我在is Cat情况下的子句中得到这个错误。 为什么会给出这个错误?如何使用Kotlin中的密封类来进行这种类型的操作?密封类是做多态的好选择吗?

  • 我的函数类似于以下简化代码示例: 当我运行Mypy(版本0.52)我得到这个错误: 错误指向代码示例中的倒数第二行。为什么mypy返回此错误?我的代码是无效的(以任何方式)还是一些mypy错误?

  • 问题内容: 我很好奇Java的类和double的原始类型之间的性能差异是什么。因此,我创建了一个基准测试,发现类类型比原始类型慢3到7倍。(在本地计算机OSX上为3x,在ideone上为7x) 这是测试: http://ideone.com/fDizDu 那么为什么Double类型要慢得多呢?为什么还要实施它以允许数学运算符? 问题答案: 那么为什么Double类型要慢得多呢? 因为该值包装在需要

  • 是否可以创建string类型的自定义字段并在显示字段描述时显示它们?我想用YouTrack实现一个bug数据库,如果字段“steps to reproduce”必须写在一个很小的列中,这是不可能做到的。 我正在使用YouTrack2018.1。

  • 我一直试图编译这个简单的警报对话框,以便在用户单击提交按钮时显示。编译代码时会弹出一条错误消息: 错误:(33,74)错误:不兼容的类型: 这个类叫做Login_Activity,它扩展了BaseActivity,它扩展了Activity。

  • //我正在尝试此代码,但它没有添加到firebase //它给出了这些错误 处理手势时引发了以下_TypeError:类型“List”不是类型“String”的子类型 抛出异常时,这是堆栈:#0个SharedReferences。getString(包:共享首选项/共享首选项。dart:98:35)#1 CheckItemInNot(包:e_shop/Store/storehome.dart:33