Azure 将大型数据帧传输到SQL Server表
我正在尝试将一个具有15亿行的DF大容量复制到SQL Server表中。它只有5列,但行的数量是巨大的。我正在尝试这种方法Azure 将大型数据帧传输到SQL Server表,azure,apache-spark,azure-sql-database,Azure,Apache Spark,Azure Sql Database,我正在尝试将一个具有15亿行的DF大容量复制到SQL Server表中。它只有5列,但行的数量是巨大的。我正在尝试这种方法 import com.microsoft.azure.sqldb.spark.bulkcopy.BulkCopyMetadata import com.microsoft.azure.sqldb.spark.config.Config import com.microsoft.azure.sqldb.spark.connect._ val bulkCopyConfig =
import com.microsoft.azure.sqldb.spark.bulkcopy.BulkCopyMetadata
import com.microsoft.azure.sqldb.spark.config.Config
import com.microsoft.azure.sqldb.spark.connect._
val bulkCopyConfig = Config(Map(
"url" -> "mysqlserver.database.windows.net",
"databaseName" -> "MyDatabase",
"user" -> "username",
"password" -> "*********",
"dbTable" -> "dbo.Clients",
"bulkCopyBatchSize" -> "100000",
"bulkCopyTableLock" -> "true",
"bulkCopyTimeout" -> "600"
))
df.bulkCopyToSqlDB(bulkCopyConfig)
我将按照下面链接中的示例进行操作
它持续运行数小时,但从不将DF中的任何内容复制到表中。思想?建议?谢谢
顺便说一句,如果我试着复制一个小得多的DF,大约1.5米的行,它工作得很好 根据我的经验,我认为您的问题是由
bulkCopyBatchSize
参数的值引起的,正如下面的官方文档所述,但不是批量越大,性能越好
批量复制大量行时,组成批处理的行数可能会对性能产生显著影响。批量大小的建议取决于正在执行的批量复制的类型
- 批量复制到SQL Server时,请指定TABLOCK批量复制提示并设置大批量。
- 未指定TABLOCK时,将批大小限制为小于1000行
作为参考,请参阅SO线程的答案,为
bulkCopyBatchSize
参数设置5000
值以重试。我认为它的性能会比您当前的更好,因为更大的批量将花费更多的时间在一批中发送网络数据包(包括更多重试数据包),以等待成功的响应。事务是否完成或取消?表中有索引吗?建议您在导入时查看sys.dm_exec_请求,看看发生了什么。或者,您可以启动XE或探查器会话并观察命令完成情况,以了解发生了什么。在目标数据库上安装whoisactive
,然后查看发生了什么。这有一个scala限制。有没有关于蟒蛇式的方法来达到这个目的的想法?