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

标签 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:

The query engine for DMVs is the Data Mining parser. The DMV query syntax is based on the SELECT (DMX) statement. Although DMV query syntax is based on a SQL SELECT statement, it does not support the full syntax of a SELECT statement. Notably, JOIN, GROUP BY, LIKE, CAST, and CONVERT are not supported.

当然,我遇到了截断错误。我的问题是,有没有办法改变 SSIS 解释 SSAS DMV 元数据数据类型的方式?

我尝试使用order by(作为测试)首先返回字符串长度> 255的记录,以迫使SSIS直接思考。没有效果。

最佳答案

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

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

关于sql - 如何处理 SSAS DMV 元数据中最大字符串长度 255,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54091642/

相关文章:

php - 数据库查询执行时间太长

ssis - 如何调试带有 "Incorrect syntax near the keyword ' FROM'"异常的复合实体?

python - 使用 Python 从 PowerPivot 模型中提取原始数据

ssis - 处理默认(整个数据库)SSIS 任务实际上是做什么的?

ssas - 顺序和并行流程顺序

sql - 如何用另一个表的列中的值来约束一列?

mysql - 查询返回零结果

MySQL - 按非 ASC 或 DESC 的顺序排序

sql-server - 调试 SSIS 包 - debug.writeline

SSIS - 从变量设置数据流派生列值