无法从spark插入配置单元分区表

5uzkadbs  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(402)

我在配置单元中创建了一个外部分区表。在日志中它显示numinputrows。这意味着查询正在工作并发送数据。但当我用直线和查询连接到Hive时, 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
  }

有什么问题吗?我无法理解。

23c0lvtd

23c0lvtd1#

msck repair table tablename

它会检查表的位置,如果存在新的分区,则会添加分区。
在spark过程中,添加此步骤以便从配置单元进行查询。

1cosmwyk

1cosmwyk2#

流式处理作业正在将新分区写入表\u位置。但是Hive元存储库并没有意识到这一点。
在表上运行select查询时,配置单元将检查metastore以获取表分区列表。由于metastore中的信息已过时,因此数据不会显示在结果中。
你得跑了-

ALTER TABLE <TABLE_NAME> RECOVER PARTITIONS

来自hive/spark的用新分区信息更新元存储的命令。

相关问题