Azure 将大型数据帧传输到SQL Server表

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 =

我正在尝试将一个具有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 = 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限制。有没有关于蟒蛇式的方法来达到这个目的的想法?