I am currently working on a project to analyse the usage of dimension/measures on one of our cubes using extended events. As we are on SQL Server 2012, the extended events GUI is not available. I am using sys.fn_xe_file_target_read_file to return the file in XML format, one event per row.
I am then parsing key elements from the XML into a staging table.
select xe.TraceFileName
, xe.TraceEvent
, xe.EventDataXML.value('(/event/data[@name="EventSubclass"]/value)[1]', 'int') as EventSubclass
, xe.EventDataXML.value('(/event/data[@name="ServerName"]/value)[1]', 'varchar(50)') as ServerName
, xe.EventDataXML.value('(/event/data[@name="DatabaseName"]/value)[1]', 'varchar(50)') as DatabaseName
, xe.EventDataXML.value('(/event/data[@name="NTDomainName"]/value)[1]', 'varchar(50)') as NTDomainName
, xe.EventDataXML.value('(/event/data[@name="NTUserName"]/value)[1]', 'varchar(50)') as NTUserName
, xe.EventDataXML.value('(/event/data[@name="NTCanonicalUserName"]/value)[1]', 'varchar(50)') as NTCanonicalUserName
, xe.EventDataXML.value('(/event/data[@name="ConnectionID"]/value)[1]', 'int') as ConnectionID
, xe.EventDataXML.value('(/event/data[@name="StartTime"]/value)[1]', 'datetime') as StartTime
, xe.EventDataXML.value('(/event/data[@name="EndTime"]/value)[1]', 'datetime') as EndTime
, xe.EventDataXML.value('(/event/data[@name="Duration"]/value)[1]', 'bigint') as Duration
, xe.EventDataXML.value('(/event/data[@name="TextData"]/value)[1]', 'varchar(max)') as TextData
into #List
from
(
select [file_name] as TraceFileName
, object_name as TraceEvent
, convert(xml, event_data) as EventDataXML
from sys.fn_xe_file_target_read_file('path\filename*.xel', null, null, null)
) xe;
The .xel files is appended to every day. I need to set up a mechanism (using SSIS) package to archive the file daily and apply the sql logic above to read the data into a temp/staging table/
However, I am struggling to find a suitable connector on SSIS. None of them allow me to pick up the .xel file from its folder.
TSQL is handling the reading of the file via
sys.fn_xe_file_target_read_file
so I think you're looking at a Data Flow Task. The source there will be an OLE DB Source component with the above query as your starting point.That'll add those N columns to a data flow and then you can land them wherever you please. If it's all on the same server, I'd skip the data flow and use an Execute SQL Task instead.
This is part of my XE monitoring, perhaps it's of use to you
Changing out the file location and the session name, it stop the XE so we don't have to worry about the file being locked. I parse the data out of the XE and into my table and then delete any XE files left in the folder.
Oh, but now my XE session is stopped, I should restart it. That's this procedure
So now my SSIS package would be a single Execute SQL Task with two statements inside