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

Sql SSAS DMV元数据中最大字符串长度255的处理,sql,ssis,ssas,dmv,dmx-ssas,Sql,Ssis,Ssas,Dmv,Dmx Ssas,我正在尝试使用SSIS中的数据流将SSAS DMV元数据导入SQL Server。在本例中,我试图从$SYSTEM.TMSCHEMA_分区DMV导入数据。我的select语句(看起来像SQL,但不是SQL)是: QueryDefinition列包含数千个字符的记录。但是,SSIS数据源组件的ExternalColumns部分将这些列识别为长度为255的DT_WSTR。无法更改外部列数据类型,因为它将继续恢复。也不可能根据MS文档在DMV select语句中使用CAST或CONVERT: DMV的

我正在尝试使用SSIS中的数据流将SSAS DMV元数据导入SQL Server。在本例中,我试图从$SYSTEM.TMSCHEMA_分区DMV导入数据。我的select语句(看起来像SQL,但不是SQL)是:

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

很自然,我得到了一个截断错误。我的问题是,有没有办法改变SSI解释SSAS DMV元数据数据类型的方式


我已经尝试使用ORDERBY(作为测试)首先返回字符串长度大于255的记录,以迫使SSI直截了当地思考。无效。

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

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

谢谢你的建议。我按照描述创建并配置了组件。尽管QueryDefinition列包含超过4000个字符的记录,但它毫无价值。事实上,它包含超过8000条的记录。我想最大长度大概在8500左右。因此,我不能使用DT_WSTR。然而,我应用了所有步骤,并使用DT_NTEXT而不是DT_WSTR,但它没有起作用。“检索列”QueryDefinition的长数据失败“。我已经根据其他论坛建议设置了临时存储和BLOB路径,但这没有帮助。值得一提的是,它现在不会恢复到DT_WSTR 255,因此至少我们知道可以在列上强制使用数据类型。不,截断错误已经消失。”。顺便说一下,即使使用DT_WSTR(4000),我仍然会得到截断错误。这就是我不得不离开DT_WSTR并使用DT_NTEXT的原因。现在它被配置为使用DT_NTEXT,很好。它不会恢复到DT_WSTR(255或其他),很好。但它在运行时失败了。运行时有什么错误?关于4000个字符,这只是我用作测试的一个示例,主要目的是在不切换回的情况下更改数据类型。这是一个很好的建议,非常有用,因为我需要避开DT_WSTR 255。无论如何,我将发布错误。
SELECT
[ID]
,[TableID]
,[Name]
,[Description]
,[DataSourceID]
,[QueryDefinition]
,[State]
,[Type]
,[PartitionStorageID]
,[Mode]
,[DataView]
,[ModifiedTime]
,[RefreshedTime]
,[SystemFlags]
,[ErrorMessage]
FROM $SYSTEM.TMSCHEMA_PARTITIONS