Monday, June 23, 2008

Thoughts on Mentoring

I just finished the book The Elements of Mentoring by W. Brad Johnson and Charles R. Ridley at the suggestion of Andy Warren in his blog series on mentoring. While I’ve been fortunate enough in my career to have many people have advised, taught, and coached me, I’ve never been involved in a formal mentor-protégé relationship. After reading all of the work involved, I’m surprised anyone would want to! That statement is partly tongue-in-cheek because it is apparent after reading this book that a successful pairing can be mutually beneficial. Here are just a few thoughts on the book.

The Elements of Mentoring starts by discussing how to be a good mentor, namely that it is important to have both the right personality and the right skill set. It struck me as I read that for most of the advice, I could replace mentor/protégé with any relationship pair, i.e. parent/child, person/spouse, etc. For example, the important of bolstering the protégé’s confidence is a pillar of good parenting. The next sections of TEoM show all phases of a mentoring relationship from picking the protégé/mentor through ending the mentorship. One recurring theme in this section is to ensure that both parties are fully aware of what they are agreeing to by entering into this relationship. I would recommend that both people start out by reading this book. It would provide a common base from which to build schedules, expectations, and timelines.

As expressed in TEoM, I think it’s important to realize that being involved in a mentoring relationship is not for everyone. Just because someone is intelligent and well-respected in their field does not mean they will make a good mentor. Just because they are a good mentor does not mean they will be compatible with every protégé’s goals and personality. Just because a mentoring relationship starts out well does not mean that it will end well. Barring the difficulties in making a successful match, if it can be done, mentoring or being mentored is definitely worth it. Getting involved in a mentoring relationship from either the protégé or mentor side can be a very fulfilling role and can create a relationship that will last long past the end of the mentorship.

Thursday, June 19, 2008

VanPASS User Group

I'm excited to be making the trip up to Vancouver on June 26 to speak at the Vancouver PASS User Group on the new features of SSIS 2008. Also speaking will be Smruti Parab on SQL Server 2008 SSAS and Scott Stauffer on the new features of SSRS 2008. In my presentation, we'll take a look at the data profiler task, the new lookup transformation functionality, and whatever else strikes me before that time. :)

If you're in the area, I hope to see you there!

Tuesday, June 17, 2008

File Path Expression Tip

Expressions in SQL Server Integration Services packages allow you to dynamically change values during the execution of a package. Each time you create an expression, it's as though you're creating a little program to retrieve the desired value. One use of an expression is to split a value into chunks that can be configured and used in multiple places.

A common example is separating out file information into a file path and a file name, where the file path is the reusable piece. The file path can then be managed through a configuration and modified at any time.

The expression usually looks similar to this:
    @[User::FilePath] + @[User::FileName]
or maybe this:
    @[User::FilePath] + "\\" + @[User::FileName]

The obvious problem is that you need to remember to add (or not add) the back slash on the file path. By extending our "little program", we can handle either situation at the same time, like so:
    @[User::FilePath] +
    (RIGHT(@[User::FilePath], 1) == "\\" ? "" : "\\") +
    @[User::FileName]

This is just a fun little tip to help you in your development!

Version: SQL Server 2005 SP2

Tuesday, June 10, 2008

Small Pleasures

As well as adding new components and performance improvements to SQL Server Integration Services 2008, the team made some UI changes to the existing components to help increase developer productivity. It's the small things that can really make a difference when you're building your packages!

Here are a few examples of the additions:

Script Transformation

  • The "Script" menu is now the first/default menu that opens up when you select Edit. So rather than pushing two buttons to actually get to the meat, you only have to push one.
  • Gone are the days of having to remember the exact name, spelling, case, and namespace of your variables. Now there is a window that allows you to select which variables you want to lock for reading or writing.

Row Count Transformation

  • Another variable drop-down!

OLE DB Source

  • When using the Data Access mode: "SQL Command from variable", the value of the variable is now displayed beneath the variable name. No more digging in the Variable window to find your source query.

I know RC0 just came out, but I haven't the time yet to download and play with it. I promise not to post anything more based on CTP6 after this post!

Version: SQL Server 2008 CTP6

Tuesday, June 3, 2008

Pipeline Parallelization

One of the new features of SQL Server Integration Services 2008 is the parallelization of the pipeline. This is implemented by creating multiple execution threads that can be run on different processors, increasing the performance of the package. In SSIS 2005, this separation of threads could be emulated by using a Union All transformation to create a new buffer.

If you turn on logging in the data flow, you can see these separate execution trees in the events PipelineExecutionPlan and PipelineExecutionTrees. I created a simple package that creates a row set of integers, multicasts to a conditional split (as a terminator) and a flat file destination.

Here are the messages from those events:
User:PipelineExecutionTrees
Begin Path 0
output "Output 0" (32); component "Script Component" (29)
  input "Multicast Input 1" (53); component "Multicast" (52)
  Begin Subpath 0
    output "Multicast Output 1" (54); component "Multicast" (52)
    input "Flat File Destination Input" (64); component "Flat
      File Destination" (63)
  End Subpath 0
  Begin Subpath 1
    output "Multicast Output 2" (69); component "Multicast" (52)
    input "Conditional Split Input" (57); component
      "Conditional Split" (56)
  End Subpath 1
End Path 0


User:PipelineExecutionPlan
Begin output plan
  Begin transform plan
  End transform plan
  Begin source plan
    Call PrimeOutput on component "Script Component" (29)
      for output "Output 0" (32)
  End source plan
End output plan

Begin path plan
  Begin Path Plan 0
    Call ProcessInput on component "Multicast" (52)
      for input "Multicast Input 1" (53)
    Create new execution item for subpath 0
    Create new execution item for subpath 1
    Begin Subpath Plan 0
      Call ProcessInput on component "Flat File Destination" (63)
        for input "Flat File Destination Input" (64)
    End Subpath Plan 0
    Begin Subpath Plan 1
      Call ProcessInput on component "Conditional Split" (56)
        for input "Conditional Split Input" (57)
    End Subpath Plan 1
  End Path Plan 0
End path plan


You can see that the new log creates a subpath for both the flat file destination path and the conditional split path. The best part is that each subpath can then be executed on different processors, increasing the speed of the package!

Version: SQL Server 2008 CTP6