我在配置单元中创建一个外部分区表。
在日志中,它显示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
}
可能是什么问题?我听不懂。
答案 0 :(得分:1)
您的流式作业正在将新分区写入table_location。但是,Hive Metastore对此并不了解。
当您在表上运行选择查询时,Hive会检查元存储以获取表分区的列表。由于Metastore中的信息已过时,因此数据不会显示在结果中。
您需要运行-
ALTER TABLE <TABLE_NAME> RECOVER PARTITIONS
Hive / Spark的命令以使用新的分区信息更新元存储。
答案 1 :(得分:1)
msck repair table tablename
它放手检查表的位置,并在新表退出时添加分区。
在您的Spark流程中添加此步骤,以便从配置单元中进行查询。