我正在使用平面文件目標將我的數據導出到文本文件。我需要將輸出文件大小限制爲1 MB。可能嗎?在SSIS中限制輸出平面文件大小
1
A
回答
0
如果數據超過文件大小,則必須決定要忽略哪些數據。這只是你或你的顧客可以決定的。
然後編寫查詢以僅返回所需的數據。
0
一些想法:
使用腳本轉換,你必須擁有對你的邏輯「獲取下一行」的方法生成的類 - 這個類的添加計數器,並在每一行,你得到鍛鍊行的數據大小並將其添加到計數器。如果計數器的行數超過1mb,則不要將該行放入輸出緩衝區。
在控制流上使用腳本組件,調用.Net IO方法讀取文件的1mb並僅寫入該文件(這意味着您正在創建一個大文件然後縮小它)。
真的,SSIS不會做這兩個好。如果是我,我會選擇「SELECT TOP X」方法。
0
沒有任何東西可以在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
要寫入) - 用戶:: TargetFileNamePattern(
String
用的命名模式輸出文件;例如SampleOutput{0}.csv
) - 用戶:: MaxFileLength(含有每個文件字符)
這樣創建您的數據流:
和惡意代碼的腳本轉換正是如此:
/* 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. 限制Python輸出文件大小
- 2. 在SSIS從平面文件
- 3. SSIS格式輸入從平面文件
- 4. ispac文件大小在SSIS中變大
- 5. 數限制 - 平面文件
- 6. 將json流寫入文件限制輸出大小
- 7. Scalding限制減速器輸出文件大小
- 8. tesseract-ocr輸出是否有字符或文件大小限制?
- 9. 限制Kismet PCAP輸出文件的大小?
- 10. C#文件大小限制
- 11. AsyncFileUpload文件大小限制
- 12. Perl文件大小限制
- 13. SSIS包文件是否有任何大小限制?
- 14. SSIS需要平面文件輸出與2列標題相同
- 15. SSIS - 輸出到平面文件的各種列數
- 16. XQuery - 輸出平面文件
- 17. SSIS平面文件到FTP
- 18. 限制文件流的文件大小?
- 19. FPDI輸出文件大小
- 20. writeRaster輸出文件大小
- 21. Umbraco輸出文件大小
- 22. 在SSIS平面文件連接中列出列
- 23. Magento:文件大小限制在Varien_File_Uploader
- 24. 限制上傳文件大小在PHP
- 25. Github頁面大小限制?
- 26. ASP頁面大小限制
- 27. np.fromfile文件大小的最大限制?
- 28. 平面文件中的SSIS列數
- 29. 複雜平面文件在SSIS
- 30. SSIS正在平面文件源導入
你打算如何處理缺失的行? 你可以使用* SELECT TOP x ROWS WHERE ToExport = 1 * – jazzytomato 2013-02-27 13:03:55