[英]unable to insert into hive partitioned table from spark
我在 hive 中创建了一个外部分区表。 在日志中它显示 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
}
可能是什么问题? 我无法理解。
您的流作业正在将新分区写入 table_location。 但是 Hive Metastore 并不知道这一点。
当您对表运行选择查询时,Hive 检查元存储以获取表分区列表。 由于 Metastore 中的信息已过时,因此结果中没有显示数据。
你需要运行 -
ALTER TABLE <TABLE_NAME> RECOVER PARTITIONS
来自 Hive/Spark 的命令用新的分区信息更新元存储。
msck repair table tablename
它放弃并检查表的位置并在新分区退出时添加分区。
在您的 spark 过程中添加此步骤以便从 hive 查询。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.