Я использую Flat File Destination для экспорта моих данных в текстовый файл. Мне нужно ограничить выходной размер файла до 1 МБ. Является ли это возможным?Предельный выходной размер плоского файла в SSIS
ответ
Если данные превысят размер файла, вы должны принять решение о том, какие данные следует опустить. Это то, что может решить только вы или ваш клиент.
Затем напишите запрос, чтобы вернуть только те данные, которые необходимы.
Некоторые идеи:
Используя сценарий преобразования, нужно иметь сгенерированный класс, который имеет метод «получить следующую строку» для вашей логики - На этом классе добавить счетчик, и на каждой строке вы получаете работать размер данных строки и добавление ее в счетчик. Если счетчик превышает 1 000 строк, не помещайте строку в выходной буфер.
Используйте компонент сценария в потоке управления, вызовите методы .Net IO, чтобы читать 1 мб файла и писать только обратно (это означает, что вы создаете большой файл, а затем уменьшаете его).
Действительно, SSIS не собирается делать это хорошо. Я бы пошел с подходом «SELECT TOP X», если бы это был я.
Нет ничего лишнего, что сделает это в SSIS; однако довольно просто закодировать трансформацию сценария, которая может выступать в роли адресата потока данных и ограничивает размер его выходного файла. Не сложнее добавить код для создания нескольких файлов (каждый меньше указанного размера) по мере необходимости для хранения всех результирующих данных.
Например, предположим, что ваш исходный запрос
SELECT
TABLE_CATALOG,
TABLE_SCHEMA,
TABLE_NAME,
COLUMN_NAME,
ORDINAL_POSITION,
COLUMN_DEFAULT,
IS_NULLABLE,
DATA_TYPE,
CHARACTER_MAXIMUM_LENGTH
FROM INFORMATION_SCHEMA.COLUMNS
и вы пытаетесь записать это на один или несколько файлов CSV, не превосходящих некоторого определенного размера каждого файла.
Определить три переменного уровень пакета следующим образом:
- пользователя :: TargetFolder (
String
, содержащее имя папки, вы хотите написать) - User :: TargetFileNamePattern (
String
с рисунком наименований выходные файлы; напримерSampleOutput{0}.csv
) - пользователя :: MaxFileLength (
Int32
, содержащий максимальное количество символов в файле)
Создать свой поток данных, как это:
И код преобразования сценарий таким образом:
/* Microsoft SQL Server Integration Services Script Component
* Write scripts using Microsoft Visual C# 2008.
* ScriptMain is the entry point class of the script.*/
using System;
using System.Data;
using System.IO;
using System.Text;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;
[Microsoft.SqlServer.Dts.Pipeline.SSISScriptComponentEntryPointAttribute]
public class ScriptMain : UserComponent
{
private int _fileCounter;
private int _bytesWritten;
private TextWriter _tw;
private TextWriter CurrentWriter
{
get
{
if (_tw == null)
{
string fileName = String.Format(this.Variables.TargetFileNamePattern, _fileCounter);
string filePath = Path.Combine(this.Variables.TargetFolder, fileName);
_tw = File.CreateText(filePath);
}
return _tw;
}
}
public override void PreExecute()
{
base.PreExecute();
_fileCounter = 1;
_bytesWritten = 0;
_tw = null;
}
public override void PostExecute()
{
base.PostExecute();
if (_tw != null)
{
_tw.Flush();
_tw.Close();
}
}
public override void Input0_ProcessInputRow(Input0Buffer Row)
{
string thisLine = String.Format(
"{0},{1},{2},{3},{4},{5},{6},{7},{8}",
Row.TABLECATALOG,
Row.TABLESCHEMA,
Row.TABLENAME,
Row.COLUMNNAME,
Row.ORDINALPOSITION,
Row.COLUMNDEFAULT_IsNull ? "NULL" : Row.COLUMNDEFAULT,
Row.ISNULLABLE,
Row.DATATYPE,
Row.CHARACTERMAXIMUMLENGTH_IsNull ? "NULL" : Row.CHARACTERMAXIMUMLENGTH.ToString());
if (_bytesWritten + thisLine.Length > this.Variables.MaxFileLength)
{
_tw.Flush();
_tw.Close();
_tw = null;
_fileCounter += 1;
_bytesWritten = 0;
}
this.CurrentWriter.WriteLine(thisLine);
_bytesWritten += thisLine.Length;
}
}
Для каждой строки в запросе источника, это будет построить строку, которая будет написана и затем убедитесь, что добавление этой строки в текущий TextWriter
приведет к тому, что файл будет слишком большим. Если это так, текущий файл очищается на диск и закрывается; следующий вызов this.CurrentWriter
создаст новый объект TextWriter
для следующего файла в последовательности.
- 1. SSIS-анализ нерегулярного плоского файла?
- 2. Чтение иерархическую плоского файла в SSIS
- 3. Преобразование данных в SSIS из плоского файла
- 4. SSIS Экспорт в преобразование данных плоского файла
- 5. Количество столбцов SSIS из плоского файла
- 6. Удаление нижнего колонтитула из плоского файла SSIS
- 7. SSIS Импорт плоского файла - данные качения
- 8. SSIS Форматирование ввода из плоского файла
- 9. Обработка плоского файла с использованием SSIS
- 10. SSIS - Сохранение плоского файла на другом сервере
- 11. SSIS - Назначение плоского файла имеет запятую?
- 12. SSIS Ошибка чтения с плоского файла
- 13. Пропустить строки ошибок из плоского файла в ssis
- 14. Неверное изменение значений плоского файла SSIS в потоке данных
- 15. Предельный размер UIAlertView
- 16. Предельный размер репозитория Subversion
- 17. Разбор плоского файла uniprot
- 18. Загрузка данных в БД OLB из плоского файла в SSIS
- 19. Вставка строк Unicode в SSIS из плоского файла
- 20. Добавить специальный Charachter в заголовке столбца плоского файла SSIS
- 21. Как проверить наличие плоского файла в пакете SSIS?
- 22. Как пропустить неправильную информацию заголовка плоского файла в SSIS?
- 23. Импорт плоского файла, содержащий многострочные поля в SSIS
- 24. Задача потока данных SSIS. Нет записей в адресе плоского файла.
- 25. данных предельный размер загрузки в API
- 26. Извлечь размер файла SSIS C#
- 27. Предельный размер экрана для приложения
- 28. Предельный размер wget можно скачать
- 29. Предельный выходной сигнал полезной нагрузки в службе CXF JAX-RS
- 30. Разделение строк плоского файла на несколько плоских файлов SSIS
Как вы планируете обрабатывать недостающие строки? Вы можете использовать * SELECT TOP x ROWS WHERE ToExport = 1 * – jazzytomato