如何检测 SSISDB 中的 SSIS 包组件类型?
How to detect a SSIS package component type in SSISDB?
我有一个SQL,可以帮助分析每个SSIS包组件的持续时间,它使用
- SSISDB.catalog.executions
- SSISDB.CATALOG.operations
- SSISDB.CATALOG.event_messages
事实是,我无法从该实体中的数据中理解event_messages.message_source_name
代表什么。我只有它的名字和它在包中的路径。
我需要了解每个组件类型:
- SQL 脚本任务
- 数据流
- 序列容器
- 循环容器
- 等等
例如,我有一个包含 4 个组件的 SSIS 程序包(名称 = "Test"):
- 执行Sql任务(名称="Start")
- 数据流任务(名称="Load")
- 脚本任务(名称="Check")
- 执行Sql任务(名称="Finish")
查询 SSISDB 我想得到这样的结果
Package_name |Component_name | Component_type
Test | Start | Execute Sql Task
Test | Load | Data Flow Task
Test | Check | Script Task
Test | Finish | Execute Sql Task
可能吗?
我想你是在看下面的观点:
catalog.execution_component_phases
use SSISDB
select package_name, task_name, subcomponent_name, execution_path,
SUM(DATEDIFF(ms,start_time,end_time)) as active_time,
DATEDIFF(ms,min(start_time), max(end_time)) as total_time
from catalog.execution_component_phases
where execution_id = 1841
group by package_name, task_name, subcomponent_name, execution_path
order by package_name, task_name, subcomponent_name, execution_path
如果视图为空,则将包执行的日志记录级别设置为性能或详细。
更多信息:
The fact is, I can't understand from data in this entities, what does event_messages.message_source_name stand for.
它描述了在Name
属性 中定义的生成此消息记录的对象名称。与 message_source_id
一起,它可以识别消息的来源。 IE。在您的情况下,它可以是包的名称或任务或容器或数据流的名称。
根据事件日志信息,您只能区分以下对象:
- 套餐
- 任务
- 容器
- 数据流任务
好消息 - 此 table 已填充标准日志记录级别。
没有简单的方法可以从 SSISDB 获取组件类型。要获取组件类型,您需要分析包源代码。问题是它以加密方式存储在 internal.packages
中。您可以使用 catalog.get_project
SSISDB 存储过程 export 包含您感兴趣的包的整个项目,然后将其解压缩并阅读所引用包的 XML 源代码。通过使用 message_source_id
GUID,您可以识别 XML 中的任务并读取其类型。
我有一个SQL,可以帮助分析每个SSIS包组件的持续时间,它使用
- SSISDB.catalog.executions
- SSISDB.CATALOG.operations
- SSISDB.CATALOG.event_messages
事实是,我无法从该实体中的数据中理解event_messages.message_source_name
代表什么。我只有它的名字和它在包中的路径。
我需要了解每个组件类型:
- SQL 脚本任务
- 数据流
- 序列容器
- 循环容器
- 等等
例如,我有一个包含 4 个组件的 SSIS 程序包(名称 = "Test"):
- 执行Sql任务(名称="Start")
- 数据流任务(名称="Load")
- 脚本任务(名称="Check")
- 执行Sql任务(名称="Finish")
查询 SSISDB 我想得到这样的结果
Package_name |Component_name | Component_type
Test | Start | Execute Sql Task
Test | Load | Data Flow Task
Test | Check | Script Task
Test | Finish | Execute Sql Task
可能吗?
我想你是在看下面的观点:
catalog.execution_component_phases
use SSISDB
select package_name, task_name, subcomponent_name, execution_path,
SUM(DATEDIFF(ms,start_time,end_time)) as active_time,
DATEDIFF(ms,min(start_time), max(end_time)) as total_time
from catalog.execution_component_phases
where execution_id = 1841
group by package_name, task_name, subcomponent_name, execution_path
order by package_name, task_name, subcomponent_name, execution_path
如果视图为空,则将包执行的日志记录级别设置为性能或详细。
更多信息:
The fact is, I can't understand from data in this entities, what does event_messages.message_source_name stand for.
它描述了在Name
属性 中定义的生成此消息记录的对象名称。与 message_source_id
一起,它可以识别消息的来源。 IE。在您的情况下,它可以是包的名称或任务或容器或数据流的名称。
根据事件日志信息,您只能区分以下对象:
- 套餐
- 任务
- 容器
- 数据流任务
好消息 - 此 table 已填充标准日志记录级别。
没有简单的方法可以从 SSISDB 获取组件类型。要获取组件类型,您需要分析包源代码。问题是它以加密方式存储在 internal.packages
中。您可以使用 catalog.get_project
SSISDB 存储过程 export 包含您感兴趣的包的整个项目,然后将其解压缩并阅读所引用包的 XML 源代码。通过使用 message_source_id
GUID,您可以识别 XML 中的任务并读取其类型。