Вызов-Sqlcmd и экспорт-Csv потребляют огромные объемы памяти?

#sql-server #powershell #invoke-sqlcmd #export-csv

#sql-сервер #powershell #вызов-sqlcmd #экспорт-csv

Вопрос:

В настоящее время мы экспортируем CSV-файл с SQL Server с помощью команд Invoke-Sqlcmd и Export-Csv в PowerShell.

Для загрузки в Redshift нам нужно заключить данные в двойные кавычки и преобразовать в кодировку UTF8.

Итак, мы посчитали, что комбинация Invoke-Sqlcmd и Export-Csv более проста в разработке.

Вот пример команды:

 Invoke-Sqlcmd –Username $StrUserName –Password $StrPassword 
              -Query $StrQry -ServerInstance $StrSvrName 
              -IgnoreProviderContext -QueryTimeOut 3000 | Export-Csv -path $StrExpFile -Encoding UTF8
  

Для обычных операций экспорта объемов проблем нет, но когда данные целевой таблицы превышают миллион строк, они могут потреблять огромные объемы памяти.

Если у вас есть какая-либо идея по снижению стоимости или какой-либо альтернативный способ экспорта данных, заключенный в двойные кавычки с кодировкой UTF-8, пожалуйста, посоветуйте мне.

Спасибо.

Комментарии:

1. Invoke-SqlCmd заполняет DataTable в памяти перед выводом всех данных сразу, что, вероятно, является причиной здесь. Лучше всего создать запрос вручную и использовать DataReader для перечисления результатов один за другим

2. Большое спасибо, @Mathias R. Jessen . Я понимаю, почему он может потреблять огромный объем памяти. Мы попытаемся создать конкретный запрос для больших таблиц в качестве вашего совета. Спасибо.