我正在尝试使用SSIS中的数据流将SSAS DMV元数据导入SQL Server。在此示例中,我尝试从$ SYSTEM.TMSCHEMA_PARTITIONS DMV导入数据。我的select语句(看起来像SQL,但不是SQL)是:
SELECT
[ID]
,[TableID]
,[Name]
,[Description]
,[DataSourceID]
,[QueryDefinition]
,[State]
,[Type]
,[PartitionStorageID]
,[Mode]
,[DataView]
,[ModifiedTime]
,[RefreshedTime]
,[SystemFlags]
,[ErrorMessage]
FROM $SYSTEM.TMSCHEMA_PARTITIONS
QueryDefinition列包含具有数千个字符的记录。但是,SSIS数据源组件的ExternalColumns部分将这些列识别为长度为255的DT_WSTR。无法更改外部列数据类型,因为它将不断恢复。根据MS文档,也不能在DMV select语句中使用CAST或CONVERT:
DMV的查询引擎是数据挖掘解析器。 DMV查询语法基于SELECT(DMX)语句。尽管DMV查询语法基于SQL SELECT语句,但它不支持SELECT语句的完整语法。值得注意的是,不支持JOIN,GROUP BY,LIKE,CAST和CONVERT。
自然,我遇到了截断错误。我的问题是,有没有办法改变SSIS解释SSAS DMV元数据数据类型的方式?
我尝试使用order by(作为测试)首先返回字符串长度> 255的记录,以强制SSIS进行直觉式思考。没有用。
答案 0 :(得分:0)
尝试添加除QueryDefinition
列以外的所有列的查询,然后通过以下步骤定义此列。通过此操作,我能够将OLE DB Source组件上的“外部”和“输出”列的数据类型设置为DT_WSTR,长度为4000。
QueryDefinition
列以外的所有列的OLE DB Source组件,并确保其他列的数据类型设置正确。ValidateExternalMetadata
设置为False。QueryDefinition
字段中添加SqlCommand
列。QueryDefinition
列。在此列的ID
字段中记下该值。QueryDefinition
列。在ExternalMetadataColumnID
字段中,输入此列在“外部列”文件夹的ID
字段中具有的相同值,以将它们映射在一起。