Don't get me started on how I keep seeing people jump into Azure SQL DW without thinking about the parallel paradigm. SQL DW is to PDW, the way that Azure SQL DB is to SQL Server. If you were happy using SQL Server for your data warehouse, then SQL DB may be just fine. Certainly you should get your head around the MPP (Massively Parallel Processing) concepts before you try implementing something in SQL DW. Otherwise you're simply not giving it a fair chance, and may find that MPP is a hindrance rather than a help. Mind you, if you have worked out that MPP is for you, then SQL DW is definitely a brilliant piece of software.
One of the biggest frustrations that people find with SQL DW is that you need (or rather, needed) to use SSDT to connect to it. You couldn't use SSMS. And let's face it – while the 'recommended' approach may be to use SSDT for all database development, most people I come across tend to use SSMS.
But now with the July 2016 update of SSMS, you can finally connect to SQL DW using SQL Server Management Studio. Hurrah!
…except that it's perhaps not quite that easy. There's a few gotchas to be conscious of, plus a couple of things that caused me frustrations perhaps more than I'd've liked.
First I want to point out that at the time of writing, SSMS is still not a supported tool against PDW. You've always been able to connect to it to write queries, so long as you can ignore some errors that pop up about NoCount not being supported, but Object Explorer simply doesn't work, and without Object Explorer, the overall experience has felt somewhat pained.
Now, when you provision SQL DW through the Azure portal, you get an interface in the portal that includes options for pausing, or changing the scale, as per this image:
And you may notice that there's an option to "Open in Visual something" there. Following this link gives you a button that will open SSDT, and connect it to SQL DW. And this works! I certainly had a lot more luck doing this than simply opening SSDT and putting in some connection details. Let me explain…
In that image, notice the "Show database connection strings" link. That's where you can see a variety of connection strings, and from there, you can extract the information you'll need to make a connection in either SSDT or SSMS. You know, in case you don't want to just hit the button to "Open in Visual something".
When I first used these settings to connect using SSDT (rather than using the "Open in…" button), it didn't really work for me. I found that when I used the "New Query" button, it would give me a "SQLQuery1.sql" window, rather than a "PDW SQLQuery1.dsql" window, and this wasn't right. Furthermore, if I right-clicked a table and chose the "View Code' option, I would get an error. I also noticed that when I connected using the "Open in…" button, it would tell me I was connected to version 10.0.8408.8, but when I tried putting the details in myself, it would say version "12.0.2000". I've since found out that this was my own doing, because I hadn't specified the database to connect to. And this information turned out to be useful for using SSMS too.
There is no "Open in SSMS" button in Azure. But you can connect using the standard Connect to Database Engine part of SSMS.
And it works! Previous versions would complain about NOCOUNT, and Object Explorer would have a bit of a fit. There's none of that now – terrific.
And you get to see everything in the Object Explorer too, complete with an icon for the MPP database. But the version says 12.0.2000.8 if you connect like this.
To solve this, you need to use the "Options >>>" button in that Connect to Server dialog, and specify the database. Then you'll make the right connection, but you'll lose the "Security" folder in Object Explorer.
Now, it's not perfect yet.
When I look at Table Properties, for example, I can see that my table is distributed on a Hash, but it doesn't tell me which column it is. It also tells me that the server I'm connected to is my own machine, rather than the SQL Azure instance.
I can see what the distribution column is within the Object Explorer, because it's displayed with different icon, but still, I would've liked to have seen it in the Properties window as well. It's not going to get confused by having a golden or silver key there, as it might in a non-parallel environment, because those things aren't supported. If they do become supported, I hope they manage to come up with another way of highlighting the distributed column.
One rather large frustration is the very promising link on the database to "Open in Management Portal",
, which opens a browser within SSMS (not exactly my preferred browser, but it seems like a good use for that feature). I'm okay with this, but following the link to the Query Performance Insight page, I'm immediately disappointed:
I get that SSMS doesn't host the most ideal browser for this kind of thing, and that I'm probably going to be running a separate browser anyway, but I'm would like this to be addressed in a future update.
Probably my biggest frustration is that when I start a new query, I get this set of warnings:
…which suggests that it doesn't really know about SQL DW. I can tell them to be suppressed, so that the dialog doesn't re-appear, but I don't like the feeling that the system is attempting them at all.
It's certainly a lot less painful than it was in the past though. I love the fact that I can use the Object Explorer window. I love that I can script objects, in a way that feels way more natural to me than in SSDT.
This is SSDT:
This is SSMS:
, although oddly the SSMS script includes the USE statement at the top, which isn't supported in SQLDW (I'm sure this won't be the case for much longer).
Overall, I'm really pleased that the team has put things in place to make SSMS talk to SQL DW at all. I was beginning to think that SSMS wasn't going to come to this particular party. This release, despite having some way to go just yet, suggests that I'll soon be using SSMS more when I'm using SQL DW.
And therefore, this topic worthy for Chris Yates' T-SQL Tuesday blog party this month – celebrating the new things that have come along in the SQL world recently.