在'INSERT OVEWRITE'上获取ValidationFailureSemanticException

时间:2017-03-20 18:22:27

标签: apache-spark apache-spark-sql spark-dataframe

我正在创建DataFrame并使用temp将该DataFrame注册为df.createOrReplaceTempView('mytable')视图。之后,我尝试使用以下查询将'mytable'中的内容写入Hive表(它具有分区)

insert overwrite table
  myhivedb.myhivetable
partition(testdate) // ( 1) : Note here : I have a partition named 'testdate'
select
  Field1, 
  Field2,
  ...
  TestDate //(2) : Note here : I have a field named 'TestDate' ; Both (1) & (2) have the same name
from
  mytable

当我执行此查询时,我收到以下错误

Exception in thread "main" org.apache.hadoop.hive.ql.metadata.Table$ValidationFailureSemanticException: Partition spec
{testdate=, TestDate=2013-01-01}

由于字段名称相同,我看起来遇到此错误;即testdate(Hive中的分区)& TestDate(临时表'mytable'中的字段)

如果我的分区名称testdate与字段名称不同(即TestDate),则查询将成功执行。实施例...

insert overwrite table
  myhivedb.myhivetable
partition(my_partition)  //Note here the partition name is not 'testdate'
select
  Field1, 
  Field2,
  ...
  TestDate 
from
  mytable

我的猜测是它看起来像Spark中的Bug ...但是想得到第二意见......我在这里错过了一些东西吗?

1 个答案:

答案 0 :(得分:0)

@DuduMarkovitz @dhee;为回应迟到而道歉。我终于能够解决这个问题了。之前我使用cameCase(在CREATE语句中)创建表,这似乎是Exception的原因。现在我使用DDL创建了表,其中字段名称是小写的。这解决了我的问题