#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 . Я понимаю, почему он может потреблять огромный объем памяти. Мы попытаемся создать конкретный запрос для больших таблиц в качестве вашего совета. Спасибо.