2017 Year End Review

2017-12-30 0 Comments

Another year of blogging has come and gone. Thank you to everyone that's dropped by! For many other technical bloggers, one post per week is a common goal. After a few years, I'm pretty sure I won't hit that target, at least not for the duration of a year. For 2017 I managed to write 42 posts. Averaging more than 3 posts per month for a year is pretty good, I'd say.


Thoughts On Technical Interviews

2017-12-20 0 Comments

For a long time, I have wanted to share my experiences with technical interviews, but the time never seemed right. Until now. A few months back I left a company where I was a full time employee. There have been many interviews since then that pushed me to write this post. Although I have been on the other side of the table as an interviewer many times, and I think I have a healthy understanding of what it's like from both perspectives, much of this is born out of my recent experiences as a candidate. Interviewing can be an emotional (and frustrating) process. I hope my thoughts presented here are received as sensible and reasoned.


Machine Learning Services and Result Sets part 3

2017-12-13 0 Comments

Dave Mason SQL Server Machine Learning Services sp_execute_external_script WITH RESULT SETS

To quickly recap the last couple of posts, the set of data returned by sp_execute_external_script has no column names by default. The column names (and data types) can be defined by using the WITH RESULT SETS options of the EXECUTE statement. But you have to know the result sets definition (number of columns, column names, and data types) at design time (before running the query). And that's a shame: there are column names for R and Python data frames, but SQL Server doesn't have a built-in way to access that metadata dynamically at runtime.

Perhaps in a future version of SQL Server, there will be a new parameter for WITH RESULTS SETS or a way to specify the result sets definition without having to hard code it. Until then, we have to do without, or get creative. Let's take a look at one possible solution.