无法从Spark插入Hive分区表

时间:2018-09-11 15:53:35

标签: apache-spark hive apache-spark-sql

我在配置单元中创建一个外部分区表。 在日志中,它显示numinputrows。这意味着查询正在工作并正在发送数据。但是当我使用蜂线连接到蜂巢并进行查询时,select * or count(*)始终为空。

def hiveOrcSetWriter[T](event_stream: Dataset[T])( implicit spark: SparkSession): DataStreamWriter[T] = {

    import spark.implicits._
    val hiveOrcSetWriter: DataStreamWriter[T] = event_stream
      .writeStream
      .partitionBy("year","month","day")
      .format("orc")
      .outputMode("append")
      .option("compression", "zlib")
      .option("path", _table_loc)
      .option("checkpointLocation", _table_checkpoint)

    hiveOrcSetWriter
  }

可能是什么问题?我听不懂。

2 个答案:

答案 0 :(得分:1)

您的流式作业正在将新分区写入table_location。但是,Hive Metastore对此并不了解。

当您在表上运行选择查询时,Hive会检查元存储以获取表分区的列表。由于Metastore中的信息已过时,因此数据不会显示在结果中。

您需要运行-

ALTER TABLE <TABLE_NAME> RECOVER PARTITIONS
Hive / Spark的

命令以使用新的分区信息更新元存储。

答案 1 :(得分:1)

msck repair table tablename

它放手检查表的位置,并在新表退出时添加分区。

在您的Spark流程中添加此步骤,以便从配置单元中进行查询。