![](/img/trans.png)
[英]Spark SQL(Hive query through HiveContext) INSERT OVERWRITE is not overwriting existing data if multiple partition is present in hive table
[英]Spark HiveContext : Insert Overwrite the same table it is read from
我想在HiveContext中使用PySpark来应用SCD1和SCD2。 在我的方法中,我正在读取增量数据和目标表。 阅读后,我将加入他们的进阶方法。 我正在对所有源数据帧执行registerTempTable。 我正在尝试将最终数据集写入目标表,并且面临一个问题,即从读取表中无法进行插入覆盖。
请为此提出一些解决方案。 我不想将中间数据写入物理表并再次读取。
是否有任何属性或方法可以存储最终数据集,而又不保留对其读取表的依赖性。 这样,可能会覆盖表。
请提出建议。
您永远不应覆盖正在读取的表。 在发生故障的情况下,这可能会导致数据损坏到数据完全丢失。
同样重要的是要指出,正确实现的SCD2永远都不应覆盖整个表,而可以将其实现为(主要是)附加操作。 据我所知,没有可变存储就无法有效地实现SCD1,因此它不太适合Spark。
当我检查Spark的文档时,当我检查那里的一个物业时,一个念头响了起来。
由于我的桌子是镶木地板,因此我使用蜂巢元存储通过将此属性设置为false来读取数据。
hiveContext.conf("spark.sql.hive.convertMetastoreParquet","false")
这个解决方案对我来说很好。
DataFrame不允许插入覆盖到相同的位置或相同的表,您可以使用下面的选项来解决您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.