Перенос огромных данных в таблицу SQL Server - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь массово скопировать DF со строками 1,5B в таблицу 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)

Я следую примеру по ссылке ниже.

https://docs.microsoft.com/en-us/azure/sql-database/sql-database-spark-connector

Он продолжает работать, в течение нескольких часов, но никогда не копирует что-либо из DF в таблицу. Мысли? Предложения? Спасибо.

Кстати, если я попытаюсь скопировать гораздо меньший DF, с примерно 1,5M строк, он работает просто отлично.

1 Ответ

0 голосов
/ 29 октября 2019

Судя по моему опыту, ваша проблема была вызвана значением параметра bulkCopyBatchSize, как указано в официальном документе Управление размерами группового копирования , как указано ниже, но чем больше размер пакета, тем лучшепроизводительность.

Количество строк, составляющих пакет, может существенно повлиять на производительность при массовом копировании большого количества строк. Рекомендации по размеру пакета зависят от типа выполняемой массовой копии.

  • При массовом копировании в SQL Server укажите подсказку для массовой копии TABLOCK и задайте большуюразмер партии.

  • Если TABLOCK не указан, ограничьте размеры партии не более 1000 строк.

Для справки см. Ответ потока SO Какой рекомендуемый размер пакета для SqlBulkCopy? , чтобы установить значение 5000 для параметра bulkCopyBatchSize, чтобы повторить попытку. Я думаю, что он получит лучшую производительность, чем ваш текущий, потому что больший размер пакета будет стоить больше времени для отправки сетевых пакетов (включая большее количество повторных пакетов) в пакете, чтобы дождаться успешного ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...