Sql server Spark流式处理数据以更新SQL Server(事务)

Sql server Spark流式处理数据以更新SQL Server(事务),sql-server,spark-streaming,Sql Server,Spark Streaming,目前我有一些pyspark代码,它正在从kafka主题读取数据(readStream),我计划使用事务更新sqlserver表。流数据将具有所有三个插入、更新和删除事务 您能推荐实现这一点的最佳方法吗?通过Pyspark代码阅读卡夫卡主题并在SQL server中更新事件(插入、更新、删除)并不是我认为正确的方法 原因? 假设插入事件发生在卡夫卡。 在这种情况下,相应的键在目标表中不可用,可以直接写入目标表而不会出现任何问题。 但当您处理来自卡夫卡的其他事件(更新和删除)时。我们不能在不比较现有

目前我有一些pyspark代码,它正在从kafka主题读取数据(readStream),我计划使用事务更新sqlserver表。流数据将具有所有三个插入、更新和删除事务


您能推荐实现这一点的最佳方法吗?

通过Pyspark代码阅读卡夫卡主题并在SQL server中更新事件(插入、更新、删除)并不是我认为正确的方法

原因?

假设插入事件发生在卡夫卡。 在这种情况下,相应的键在目标表中不可用,可以直接写入目标表而不会出现任何问题。 但当您处理来自卡夫卡的其他事件(更新和删除)时。我们不能在不比较现有键值的情况下直接将其写入目标表。为了比较那个键值,需要将整个数据集作为数据帧或RDD(正如我们所知,pyspark正在内存中运行)带回内存中进行比较并覆盖目标表。在内存中处理整个目标表记录将不是正确的方法


替代解决方案:我们可以选择Cassandra作为此解决方案,因为C*正在向上插入模式工作。但是Cassandra数据建模与SQL server不同。

请提供进一步的信息来澄清您的问题,例如您正在使用的pyspark代码。从数据库的角度来看,最好的方法是将数据集传递给SQL,并让它计算出需要插入/更新的内容(删除是另一回事)。您能否评论一下pyspark是否可以调用T-SQL存储过程(使用某种表示数据的参数)?然后,您可以将事务和合并逻辑封装在其中,而不需要在DB和spark server之间进行频繁的数据操作。