阻止SSIS import excel時的默認行爲

爲何SSIS老是錯誤地獲取Excel數據類型,以及如何解決它!

Concentra發佈 2013年5月15日app

分享此頁面

 

發現Concentra的分析解決方案

 


Concentra的分析和商業智能團隊將信息轉化爲洞察力,從而爲您提供數據優點。學到更多。編輯器

 

做爲具備Microsoft工具堆棧的BI開發人員,我常常處理多個數據源,其中一個是Excel,這是Data Warehousing項目中很是常見的數據源。正如大家中的一些人可能知道的那樣,在SSIS(SQL Server Integration Services)中使用Excel會遇到問題,若是你知道這些,這篇文章將更詳細地幫助人們併爲你提供一些可能的解決方案來幫助你一段時間ide

此博客還將幫助回答有關如下問題:工具

  • 使用Excel做爲源時,爲何SSIS沒有正確獲取個人數據類型
  • 當excel文件包含數據時,爲何個人某些列爲NULL
  • 如何解決個人Excel源代碼問題
  • Excel SSIS驅動程序問題

咱們在使用SSIS和Excel時遇到的問題的主要驅動因素源於SSIS自動肯定鏈接到Excel源時的數據類型。SSIS Excel驅動程序根據讀取前8行的值肯定每列的數據類型。spa

  • 若是前8個記錄包含相同數量的數字和字符類型 - 則優先級爲數字圖1和2中的 column2 
  • 若是大多數前8個記錄都是數字,那麼它將數據類型指定爲數字,全部字符值都讀爲NULL 圖1和2中的 column3 ) 
  • 若是大多數前8個記錄都是字符類型,那麼它將數據類型指定爲字符串,並將全部數值讀取爲NULL 圖1和2中的 column4 
Concentra  -  Excel輸入數據

 

圖1:Excel輸入數據excel

 

Concentra  -  SSIS Excel源組件元數據

 

圖2:SSIS Excel源組件元數據code

 

Concentra  -  SSIS Excel源組件中的輸出預覽窗口

 

圖3:SSIS Excel源組件中的「輸出預覽」窗口orm

 

從上面的屏幕截圖中能夠看出,咱們在目標表中收到NULL,咱們有數據要加載,這不是所需的輸出。那麼,咱們該如何解決這個問題呢?blog

經過將IMEX = 1(導入導出模式)屬性添加到鏈接字符串,excel正確讀取數據(參見圖4)。ci

設置鏈接字符串屬性以下:

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:Folder1Book1.xls; Extended Properties =「EXCEL 8.0; HDR = YES; IMEX = 1」;

Concentra  -  SSIS Excel鏈接管理器鏈接字符串屬性

 

圖4:SSIS Excel鏈接管理器鏈接字符串屬性

 

添加此屬性後,excel驅動程序將具備混合類型的列讀取爲Unicode String數據類型(請參見圖5)並正確讀取數據(請參見圖6)。

Concentra  -  SSIS Excel源組件元數據,IMEX = 1

 

圖5:SSIS Excel源組件MetadatA

 

  Concentra  -  SSIS Excel源組件中的輸出預覽窗口,IMEX = 1

 

圖6:SSIS Excel源組件中的輸出預覽窗口,IMEX = 1

 

此外,在excel文件中前8行爲NULL的狀況下,咱們須要編輯註冊表設置並將TypeGuessRows屬性設置爲0,以便讓excel驅動程序使用文件中的全部行來正確地肯定數據類型(請參閱圖7)經過對全部行而不是第1行進行採樣。此屬性容許的值範圍爲0-16。所以,咱們能夠將1-16行或全部行做爲容許的樣本大小。

須要更改的密鑰的位置以下:

HKEY_LOCAL_MACHINE - > SOFTWARE - > Wow6432Node - > Microsoft - > Jet - > 4.0 - > Engines - > Excel - > TypeGuessRows的值爲0.(默認狀況下包含8)

Concentra  - 註冊表編輯器 -  Excel驅動程序TypeGuessRows屬性圖7:註冊表編輯器 - Excel驅動程序TypeGuessRows屬性
相關文章
相關標籤/搜索