如何处理SSAS DMV元数据中的最大字符串长度255

时间:2019-01-08 12:16:20

标签: sql ssis ssas dmv dmx-ssas

我正在尝试使用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进行直觉式思考。没有用。

1 个答案:

答案 0 :(得分:0)

尝试添加除QueryDefinition列以外的所有列的查询,然后通过以下步骤定义此列。通过此操作,我能够将OLE DB Source组件上的“外部”和“输出”列的数据类型设置为DT_WSTR,长度为4000。

  • 将Connection Manager定义为与Analysis Services 13.0提供程序类型的本机OLE DB \ Microsoft OLE DB提供程序的OLE DB连接。
  • 在“数据流任务”中,添加一个包含QueryDefinition列以外的所有列的OLE DB Source组件,并确保其他列的数据类型设置正确。
  • 然后,在OLE DB源上将ValidateExternalMetadata设置为False。
  • 打开OLE DB源的高级编辑器(单击鼠标右键,然后单击“显示高级编辑器...”)。在“组件属性”页面上的QueryDefinition字段中添加SqlCommand列。
  • 在“输入和输出属性”页上,转到“ OLE DB源输出”下的“外部列”文件夹,按“添加列”按钮,然后添加具有正确数据类型和更长长度的QueryDefinition列。在此列的ID字段中记下该值。
  • 在“输出列”文件夹中,再次使用相同的数据类型和长度添加QueryDefinition列。在ExternalMetadataColumnID字段中,输入此列在“外部列”文件夹的ID字段中具有的相同值,以将它们映射在一起。