<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>SQLGardner</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/sqlgardner/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/sqlgardner/feed.xml</link>
    <description>Lisa Gardner - Senior Premier FIeld Engineer for SQL Server and APS</description>
    <lastBuildDate>Fri, 30 Sep 2016 11:09:57 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>SSIS The version number in the package is not valid</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/ssis-the-version-number-in-the-package-is-not-valid</link>
      <pubDate>Fri, 30 Sep 2016 11:09:57 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/?p=345</guid>
      <description><![CDATA[In a previous blog post, I showed you how you can set a target server version for an SSIS project in...]]></description>
      <content:encoded><![CDATA[<p>In a <a href="https://blogs.msdn.microsoft.com/sqlgardner/2016/08/17/ssdt-vs2015-gotcha-target-server-version-new-feature/">previous blog post</a>, I showed you how you can set a target server version for an SSIS project in SSDT on VS2015 in order to deploy packages to multiple versions of SSIS catalogs.  This is pretty cool, but if you deploy a project with a version that is newer than your SSIS catalog, you will get an error stating "The version number in the package is not valid. The version number cannot be greater than the current version number."  This all has to do with the PackageFormatVersion of the dtsx file.  If you open one of your packages in notepad, you can see the version.  A package that is SQL 2014 or SQL 2016 will be version 8 as shown below.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion1.png" alt="" />
	</p><p>
 </p><p>For this use case, the SSIS project needed to deployed to a SQL 2012 instance.  In SSDT the project was configured for SQL 2012 and all seemed well. 
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion2.png" alt="" />
	</p><p>
 </p><p>If you viewed the dtsx file in notepad, the PackageFormatVersion reflected the change that was made to the project.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion3.png" alt="" />
	</p><p>
 </p><p>To deploy the project, the ISPAC file to deploy to a SQL 2012 SSIS Catalog.  Note that the client machine had SQL 2014 client tools running on it.  It will be pretty common for DBAs to have the version of SQL client tools that reflect the highest version in their environment.  While we would all love to have all our SQL instances on the latest and greatest version of SQL Server, that is simply not realistic in most companies. Here you can see the package was deployed to a SQL 2012 instance
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion4.png" alt="" />
	</p><p>
 </p><p>After the project was deployed, an attempt was made to run the package and it failed. The error message states the version number is not valid and shows the PackageFormatVersion is version 8, even though it was version 6 when the project was built.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion5.png" alt="" />
	</p><p>You can also see the PackageFormatVersion in the internal.packages table in SSISDB on the SQL 2012 version… it is set to version 8.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion6.png" alt="" />
	</p><p>
 </p><p>Getting around this problem is pretty easy.  Copy the ISPAC file to the server hosting SQL2012.  You can then run the ISPAC file from an RDP session on the SQL 2012 server in order to use SQL 2012 client tools.  You can see that now the package is using the PackageFormatVersion of 6.  Note that since  SSIS versions packages, that is why you see 2 entries for the package.
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion7.png" alt="" />
	</p><p>
 </p><p>
 </p><p>The package ran successfully!
</p><p><img src="https://msdnshared.blob.core.windows.net/media/2016/09/092916_2115_SSISversion8.png" alt="" />
	</p><p>I hope if you stumble across this error, you will find this blog post and get an easy resolution to the problem.
</p><p>Lisa
</p>]]></content:encoded>
    </item>
    <item>
      <title>Learn SQL 2016 Polybase with HDP – Part 2 – Learning Polybase along with Hadoop Tutorials</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/learn-sql-2016-polybase-with-hdp-part-2-learning-polybase-along-with-hadoop-tutorials</link>
      <pubDate>Fri, 02 Sep 2016 18:33:19 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/?p=335</guid>
      <description><![CDATA[In part 1, I showed you how you can create a Hortonworks sandbox and a SQL 2016 instance with...]]></description>
      <content:encoded><![CDATA[In <a href="https://blogs.msdn.microsoft.com/sqlgardner/2016/08/31/learn-sql-2016-polybase-with-hdp-part-1-build-the-environment/">part 1</a>, I showed you how you can create a Hortonworks sandbox and a SQL 2016 instance with Polybase. In this post, I will show you how to query Hadoop data with Polybase as well as how you can follow along with some of the Hortonworks tutorials and mimic some of the same actions within Polybase.

First, you will want to make sure you can connect to Ambari from to ensure that Hadoop is running on your sandbox VM.

Then you can utilize some sample data already on the sandbox to validate that Polybase is configured properly.

I created a database called PolybaseSandbox on my SQL 2016 VM. In order to connect to a data source with Polybase you basically need 3 objects, an external data source, an external file format, and an external table. The data source is what points you to hdfs in this case. The file formats describe what type of files you will be querying within hdfs. Then the external table puts those 2 together along with a URI to the specific data you want to query in Hadoop.
<pre>[sql]
USE [PolyBaseSandbox]
GO
 
--create external data source to the hadoop sandbox
--here I used the internal IP address 
CREATE EXTERNAL DATA SOURCE [HDP24] WITH (TYPE = Hadoop, LOCATION = N'hdfs://10.0.0.4:8020')
GO
 
 
-- create file format for the sample within the hadoop sandbox
CREATE EXTERNAL FILE FORMAT [TSV] WITH (FORMAT_TYPE = DelimitedText, FORMAT_OPTIONS (FIELD_TERMINATOR = N'\t', DATE_FORMAT = N'MM/dd/yyyy', USE_TYPE_DEFAULT = False))
GO
 
 
 
--create the external table to the sample data in the sandbox
CREATE EXTERNAL TABLE [dbo].[sample_07]
(
[code] [nvarchar](255) NULL,
[description] [nvarchar](255) NULL,
[total_emp] [int] NULL,
[salary] [nvarchar](255) NULL
)
WITH (LOCATION = N'/apps/hive/warehouse/sample_07', DATA_SOURCE = HDP24, FILE_FORMAT = TSV)
 
GO
 [/sql]</pre>
Then you can select the data to confirm that you can get query results like the screenshot below:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0050_LearnSQL2011.png" />

Looking in HIVE view in Ambari, you can see the same data:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0050_LearnSQL2012.png" />

Pretty cool that you can use SSMS and TSQL that you know and love to query data in Hadoop!

Now let's look at the labs. There is a great set of tutorials that go along with the Hortonworks sandbox. Note, that I am skipping forward a little in the tutorials, but I highly suggest you start from the beginning. I am starting at tutorial 2, lab 1 here. <a href="https://hortonworks.com/hadoop-tutorial/hello-world-an-introduction-to-hadoop-hcatalog-hive-and-pig/">https://hortonworks.com/hadoop-tutorial/hello-world-an-introduction-to-hadoop-hcatalog-hive-and-pig/#section_3</a>

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0050_LearnSQL2013.png" />

I am not going to walk through all the tutorial labs in this post, but you will need that data in order to do the next lab and mimic the same result set in Polybase.

Once you get through lab 2.6.2, you have the truck_mileage table with data. Here is how you would create an external file format and external table and query that same data. You do not need to create an external data source, as you will use the same one that you created with the previous script:
<pre>[sql]
USE [PolyBaseSandbox]
GO

--create a new file format since this table is in ORC
CREATE EXTERNAL FILE FORMAT [ORC] WITH
(FORMAT_TYPE = ORC)

GO


--create table using the new file format but existing data source from previous script
CREATE EXTERNAL TABLE[dbo].[truck_mileage]
(
[truckid] nvarchar(255) NULL,
[driverid] nvarchar(255) NULL,
[rdate] nvarchar(255) NULL,
[miles] bigint  NULL,
[gas] bigint  NULL,
[mpg] float NULL
)
WITH (LOCATION = N'/apps/hive/warehouse/truck_mileage', DATA_SOURCE = HDP24, FILE_FORMAT = ORC)


select top 100 * from truck_mileage order by trucked;
[/sql]</pre>
Just like with the previous sample data, you can see the same results in SSMS and in HIVE.

SSMS:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0050_LearnSQL2014.png" />

Hive:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0050_LearnSQL2015.png" />

Lab 2.6.3 in the tutorial shows you how to calculate an aggregate from the data within HIVE. Here is where you can do the same thing with Polybase, but then store it as a table to be used later.
<pre>[sql]
--Similar to lab 2.6.3 - select the data just to see it
SELECT truckid, avg(mpg) avgmpg FROM truck_mileage GROUP BY truckid;


--Create a table to persist the data
CREATE TABLE [dbo].[truck_mpg](
[truckid] [nvarchar](50) NULL,
[avgmpg] [float] NULL
) ON [PRIMARY]

GO

--Insert data into the table by querying the external table
--Now you have the aggregate data that you need persisted locally in SQL Server
--There is no need to store all the sensor data if you don't need all the details
INSERT INTO truck_mpg
SELECT truckid, avg(mpg) avgmpg FROM truck_mileage GROUP BY trucked;
[/sql]</pre>
What this allows you to do, for example, is that you may have more data on the truck inventory in a database. This allows you to join your structured data about your truck inventory to the unstructured truck mileage data which is received from truck sensors. This could allow a company to figure out which truck models/years get the best mileage and/or which drivers and/or routes tend to get better gas mileage, etc. All kinds of analysis could be done to help make the fleet more efficient. As a best practice, it is a good idea to persist data from the external tables into tables in SQL Server if you plan to access it more than once (like I did in the sample above). <span style="color: #375623">
</span>

This has been a bit of a long blog post, but I hope it helps you understand what Polybase can do for you and how it can really help be a bridge between your structured and unstructured data. If you have a Hadoop environment at your company, I suggest you play around with Polybase as there can be a lot of insight that can be gained by combining this data. You can also use Polybase almost like an ETL tool. With Polyabse scaleout, it can perform much faster than doing this ETL with SSIS in many cases.

Take the time to understand other technologies in your organization. It will help your employer and your career to be able to bridge the gap between them and unlock more opportunities to learn about your business.<code></code>]]></content:encoded>
    </item>
    <item>
      <title>Learn SQL 2016 Polybase with HDP - Part 1 - Build the Environment</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/learn-sql-2016-polybase-with-hdp-part-1-build-the-environment</link>
      <pubDate>Wed, 31 Aug 2016 11:47:31 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/?p=326</guid>
      <description><![CDATA[I have been working with Polybase in Parallel Data Warehouse for a few years now, so I was quite...]]></description>
      <content:encoded><![CDATA[I have been working with Polybase in Parallel Data Warehouse for a few years now, so I was quite excited to hear about this great feature making it into SQL 2016. It is a great was to use tools and a language you already know (TSQL) to be able to access data stored in Hadoop. In this article, I am going to walk you through how I set up my own environment in Azure to test Polybase, and learn a little more about Hortonworks Hadoop.

You read correctly…..I am using Hortonworks Hadoop. Polybase is a great feature to use to bridge between SQL Server databases and Azure Blob Storage or HDInsight. Many customers already have huge investments in on prem Hadoop utilizing other Hadoop installations like Cloudera or Hortonworks. In order to provide the best guidance to my customers, I need to understand their whole environment. Therefore, I put together my own environment using my Azure benefits with my MSDN Subscription. Luckily, Azure has a VM template for a Hortonworks sandbox.

Here are some tips and resources on how to create the environment to use Polybase to connect to the Hortonworks sandbox. Once this is complete, you can use the test data in the sandbox to practice using Polybase. In my next post, I will show you how you can mimic some of the Hortonworks Sandbox labs with Polybase to get an idea of how it works.
<ol>
<ol>
 	<li>Create a Resource Group: I find that it is best to create everything I need for a particular lab setup within 1 resource group in Azure. That way when I am done with it, I can just delete the entire resource group and everything in it. I named mine RG_Polybase</li>
 	<li>Create Windows Server 2012 R2 VM with SQL 2016 within RG_Polybase.</li>
 	<li>
<div>Install the Polybase feature on the SQL VM. Note the SQL install media will be in a folder on the C drive. For this version it is c:\SQLServer_13.0_Full\ . Since this is a test environment, I just used the install GUI and default options for Polybase. There is a prerequisite of installing Java Runtime . You will need to make sure and install the 64bit Java runtime. The default download on the Java download site will be a 32 bit, so you will need to make sure you select the correct one.</div>
<p style="margin-left: 18pt"><img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0056_LearnSQL2011.png" /></p>
</li>
 	<li>
<div>Configure Polybase for Hortonworks Hadoop: (<a href="https://msdn.microsoft.com/en-us/library/mt143174.aspx"><span style="color: blue;text-decoration: underline">hadoop connectivity reference</span></a>)</div>
<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0056_LearnSQL2012.png" /></li>
 	<li>Restart SQL Server (and Polybase services) for the configuration change to take effect.</li>
 	<li>
<div>Create HW Sandbox VM within RG_Polybase resource group. This will ensure that the 2 VMs will easily be able to connect to one another.</div>
<p style="margin-left: 18pt">This link from Hortonworks walks you right through the process: <a href="https://hortonworks.com/hadoop-tutorial/deploying-hortonworks-sandbox-on-microsoft-azure/"><span style="color: blue;text-decoration: underline">https://hortonworks.com/hadoop-tutorial/deploying-hortonworks-sandbox-on-microsoft-azure/</span></a></p>
</li>
</ol>
</ol>
<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0056_LearnSQL2013.png" />

The sandbox has a maria_dev user for you to use along with the demos. Also, notice the address that I used is a 10.0.0.X address. To keep things simple and local to the Azure Resource Group, I am using the local IP addresses for the VMs.

<strong>NOTE:</strong> If you want to log into the Ambari portal as an admin, you will need to do the following:
<ul>
 	<li>ssh into the VM and run the following command as the root user (sudo): ambari-admin-password-reset</li>
</ul>
<ul>
 	<li>You will be prompted to enter the password. Ambari server will restart.</li>
</ul>
Your command window will look something like this when it is complete:

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0056_LearnSQL2014.png" />

You can then log in to the Ambari portal as the admin user. To connect to Ambari you just browse using the IP of the sandbox and specify port 8080

<strong>TIP:</strong> I downloaded Putty on my SQL 2016 VM and use that and IE within my RDP session on that VM to do anything I need on the Hadoop sandbox. That way I can use the internal IPs, which will be faster.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080916_0056_LearnSQL2015.png" /><strong>
</strong>

<strong>NOTE: </strong>If you want to have everything on premises, you can build your own SQL 2016 VM and download a Hortonworks Sandbox VM, but I have personally switched to using Azure for all my lab environment needs as it is so easy to create/destroy/recreate lab environments at will.

In my next post… I will show you how you can use the sandbox and SQL 2016 to test Polybase queries against Hadoop data sources.]]></content:encoded>
    </item>
    <item>
      <title>What Does Installing Polybase Add to My SQL Server?</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/what-does-installing-polybase-add-to-my-sql-server</link>
      <pubDate>Mon, 29 Aug 2016 12:22:31 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/?p=316</guid>
      <description><![CDATA[In this post, I want to show you some of the components that are added to your SQL Server when you...]]></description>
      <content:encoded><![CDATA[In this post, I want to show you some of the components that are added to your SQL Server when you install the Polybase feature and where they reside.
<h2><span style="color: black">Introduction:
</span></h2>
Polybase is a new feature with SQL 2016 that allows you to query external Hadoop data and data in Azure Blob Storage. It has been around for a little while in the Analytics Platform System appliance as a feature in Parallel Data Warehouse, but it now can be installed on SQL Server 2016. There are a number of resources to help you learn a lot more (like the <a href="https://msdn.microsoft.com/en-us/library/mt143171.aspx">MSDN Polybase Guide</a>), and I will be following up with more posts about Polybase. Here I will describe some of the components you will see when you install the feature.
<h2><span style="color: black">Java and Polybase Services:
</span></h2>
One of the First things you may notice when you go to install the Polybase feature is that it has a prerequisite for installing Java Runtime. This must be done before the installer will allow you to continue. Make sure you install the 64bit Java Runtime.

There are 2 services created for Polybase.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080816_2314_WhatDoesIns1.png" />

<strong>Polybase Engine:</strong> This is the brains of the operation. The engine service is the core service that parses TSQL into requests to the external data source, sends results to the client, coordinates with compute nodes (in a scale out scenario). If you have Polybase configured in a scale-out group, there will be 1 Engine service that is the control node for all the other included nodes (referred to as compute nodes.

<strong>Data Movement:</strong> If the Engine is the brain, then this is the brawn. This service (often just called DMS for Data Movement Service), temporarily moves data from the external source to SQL Server. In a scale-out scenario, you will have multiple nodes running DMS tasks in parallel to spread out the load to multiple SQL Servers. This is similar to a Hadoop data node. In order to fulfill queries, there may also be a need to shuffle some of this temporary data between various nodes in the scale-out group. This service performs that function as well.

When in a scale-out scenario, you can see the members of the group via SSMS as seen below. More info about scale-out groups can be found in the Polybase Guide linked at the beginning of this post.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080816_2314_WhatDoesIns2.png" />
<h2><span style="color: black">Files:
</span></h2>
<span style="color: black">For the most part, all the files required for the services are installed in the &lt;InstanceRoot&gt;\MSSQL\Binn\Polybase, and for the most part, you will not touch these files. The exception will be the &lt;instanceRoot&gt;\Binn\Polybase\Hadoop\conf directory. Here you will see config files that you can modify to enter path information from your Hadoop environment to enable predicate pushdown and Kerberos authentication.
</span>

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080816_2314_WhatDoesIns3.png" /><span style="color: black">
</span>

<span style="color: black">You will find log files in a subfolder where you have the SQL Server log files installed. In my case it is &lt;InstanceRoot&gt;\MSSQL\Log\Polybase. There are log files for both the Engine and Data Movement services. They log all activity for these services and data will roll over based on the size of the files, therefore there will be varying history based on activity level. Errors also log to error specific files which will have a longer retention. Along with the DMVs, these will be your best tools in troubleshooting both performance and failures with Polybase. Describing the contents separate topic all itself, and I plan to follow up with a post on that at a later date.
</span>

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080816_2314_WhatDoesIns4.png" /><span style="color: black">
</span>
<h2><span style="color: black">System Databases:
</span></h2>
There are 3 databases created by Polybase. While they are not really system databases in the sense that they are in the "System Databases" in SSMS, I consider them system dbs similar to how I like to consider SSISDB a system database. It is not a db you want to mess with the schema or data. The three databases are DWConfiguration, DWDiagnostics, and DWQueue. For the most part, their name pretty well describes their usage, but they are not databases you will ever be querying unless directed to by Microsoft Support while troubleshooting a support case. Even then, typically log files and DMV data are all that will be requested. I suggest you leave these dbs alone. Back them up along with the other system databases, but most likely it would be easier to uninstall/reinstall Polybase then to worry about ever restoring these dbs.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/08/080816_2314_WhatDoesIns5.png" />
<h2><span style="color: black">Database objects:
</span></h2>
After Polybase is installed, you will have 4 new object types that you can create, and all three are needed to successfully query external sources supported by Polybase.

<strong>External Data Source: </strong>This is the pointer to the data source. The type of information required depends on the data source. For example, Hadoop data sources require a name node IP address and port.

<strong>External File Format: </strong>This defines the file format that you will be accessing (examples are ORC, RCFILE, DELIMITED)

<strong>External Table: </strong>This is where you define the columns that you want and specify the external data source, file format, and the location within the external data source (path to folder). This is the object that you will select just as if it is a table within a SQL Server database.

<strong>Database Scoped Credential:</strong> This will only be used when configuring the external data source for Kerberos authentication.

This has been a fairly lengthy post, and it really just touches the surface of Polybase. It is a complex feature that has grown and been used for a number of years in the Parallel Data Warehouse product, but is now available in SQL Server 2016. It is very powerful, but it is also very different for a DBA. I will be posting a 2 part series here in the next few weeks on how you can build your own environment to learn and test Polybase.]]></content:encoded>
    </item>
    <item>
      <title>SSDT VS2015 Gotcha - Target Server Version - new feature</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/ssdt-vs2015-gotcha-target-server-version-new-feature</link>
      <pubDate>Wed, 17 Aug 2016 12:31:23 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/?p=306</guid>
      <description><![CDATA[If you are upgrading your SSIS packages to SSDT on Visual Studio 2015, you may not notice the...]]></description>
      <content:encoded><![CDATA[If you are upgrading your SSIS packages to SSDT on Visual Studio 2015, you may not notice the TargetServerVersion project property that is new. There may be some odd side effects due to this, so I wanted to present awareness of this new feature. Please note that the sample below is just showing one particular use case where this new property, if unknown, can cause some confusion.

After installing the latest version of SSDT, I was creating a data flow task to load data into a Parallel Data Warehouse environment. The nuance in this use case is that it requires special SSIS Destination adapters that work with SQL 2012 or SQL 2014 SSIS packages. I had downloaded and installed the destination adapter to my workstation after installing the VS2015 version of SSDT. What I noticed was that the "SQL Server PDW Destination Adapter" did not exist in my list of destinations even though it was installed in my system.

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/07/070616_1221_SSDTBIGotch1.png" />

This is due to the fact that the Target Server Version defaults to SQL Server 2016, and the destination adapter I installed is specific to SQL 2014 only.

Right click on the project &gt;&gt; Properties &gt;&gt; configuration properties &gt;&gt; general

Target version is listed as SQL 2016

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/07/070616_1221_SSDTBIGotch2.jpg" />

Change it to SQL 2014 and click OK

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/07/070616_1221_SSDTBIGotch3.jpg" />

Now open the Data Flow Task back up and look at the toolbox: TADA my destination adapter is now there!

<img alt="" src="https://msdnshared.blob.core.windows.net/media/2016/07/070616_1221_SSDTBIGotch4.png" />

This is an example using a custom destination adapter, but this can also affect you if you create a project with the default Target Server Version and try to deploy the project to a SQL 2014 SSIS Catalog. There has been a lot of confusion with various versions of SSDT and the SQL Server versions that it can support, so this new project property will help make that more clear. If you are not aware of it, though, it can cause some confusion too.]]></content:encoded>
    </item>
    <item>
      <title>Dogfood Conference 2015 Session Materials</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/dogfood-conference-2015-session-materials</link>
      <pubDate>Thu, 08 Oct 2015 12:44:00 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/2015/10/08/dogfood-conference-2015-session-materials/</guid>
      <description><![CDATA[I would like to thank everyone who attended the Dogfood conference this week in Columbus,...]]></description>
      <content:encoded><![CDATA[<p>I would like to thank everyone who attended the Dogfood conference this week in Columbus, OH.&nbsp;Being born and raised in central Ohio, I feel a strong&nbsp;connection with the local community.&nbsp;I love getting the chance to participate in local IT events.&nbsp;&nbsp; The team did a great job organizing a wonderful conference! I hope to present next year as well.</p>
<p>I know this is a super short post, but I wanted to get my slides from my 2 sessions up here pronto.&nbsp;There is even bonus material from my "Why is My Query Slow?" session! (by "bonus material" I mean stuff I didn't get to because I talk to much)</p>
<p>I packaged both PPTs and some scripts used in demos from "Why is My Query Slow" and "SQL 2014 SSIS Catalog"&nbsp; presentations into 1 zip file.&nbsp; Have at it!&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/64/66/63/LisaGDogfoodSessionSlides.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-64-66-63/LisaGDogfoodSessionSlides.zip">LisaGDogfoodSessionSlides.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>SSIS Tip: Using a File Path Parameter for Multiple Flat Files</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/ssis-tip-using-a-file-path-parameter-for-multiple-flat-files</link>
      <pubDate>Thu, 18 Jun 2015 12:35:21 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/2015/06/18/ssis-tip-using-a-file-path-parameter-for-multiple-flat-files/</guid>
      <description><![CDATA[SSIS with SQL 2012 and SQL 2014 brought a lot of great enhancements to SSIS that ease deployment and...]]></description>
      <content:encoded><![CDATA[<p>SSIS with SQL 2012 and SQL 2014 brought a lot of great enhancements to SSIS that ease deployment and reconfiguration of packages. The project deployment model, SSIS Catalog, and parameters make it a lot easier to manage SSIS . It also helps decouple environmental configurations from the SSIS code. This way DBAs don’t need to be modifying packages or worry about config files on the filesystem that may have passwords with plain text in them. It is awesome and as someone who managed hundreds of SSIS packages at a previous role, this is a big win!</p>  <p>Note: I am going to assume that you readers are at least slightly aware of project and package parameters and how they work. If not, that's ok, you will still get something out of this. You may just need to go do a little more research to better understand it.</p>  <p>Anyway, I have a package where I have 8 files I plan to load into 8 tables. This means that I have 8 flat file connection managers in my SSIS package. This is a quick and dirty package I am making for my internal team to use which means we will be taking these 8 files that we have generated and load them into a db on our local SQL instances to do some brief analysis. I want to parameterize the package so I can just hand over the dtsx file to my colleagues to reuse for themselves. This is not a traditional SSIS use case, but the problem is common….</p>  <p>I right click on the connection manager for one of the flat files and select &quot;parameterize&quot;. I create a new parameter with the filepath and filename</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/1856.clip_image001_343E3104.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/1856.clip_5F00_image001_5F00_343E3104.jpg"><img title="clip_image001" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/2626.clip_image001_thumb_68725A4A.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/2626.clip_5F00_image001_5F00_thumb_5F00_68725A4A.jpg" width="420" height="467" /></a></p>  <p>This is great! Just a few clicks and I created a parameter. Now here is the problem…. I create 8 of these for all the flat file connection managers. </p>  <p>Problem: Now when I hand the package off to a team member, he/she will need to modify 8 parameters for their environment. Since I know that all 8 files will be in the same directory, that just seems silly.</p>  <p>Solution: First of all, do not right click on the connection manager and select &quot;parameterize&quot;. Sounds silly but it will eventually be parameterized.</p>  <p>Create a parameter at the package or project level. For my use case, I am using package level for portability, but I highly recommend using the project deployment model and project level parameters. You can see my example here:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/4035.clip_image002_7F4A6589.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/4035.clip_5F00_image002_5F00_7F4A6589.jpg"><img title="clip_image002" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/6507.clip_image002_thumb_0186EE46.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/6507.clip_5F00_image002_5F00_thumb_5F00_0186EE46.jpg" width="614" height="126" /></a></p>  <p>Now you go within each connection manager in the properties window and click on the ellipse button next to Expressions (highlighted).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/4382.clip_image003_27E8D191.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/4382.clip_5F00_image003_5F00_27E8D191.png"><img title="clip_image003" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/3755.clip_image003_thumb_17DC938B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/3755.clip_5F00_image003_5F00_thumb_5F00_17DC938B.png" width="209" height="366" /></a></p>  <p>You will then select &quot;Connection String&quot; as the property and click on the ellipse again to get into the expression builder.</p>  <p>For the expression, you drag and drop the InputFilePath parameter, then add the plus sign and the filename in quotes.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/1488.clip_image004_2A78C98C.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/1488.clip_5F00_image004_5F00_2A78C98C.jpg"><img title="clip_image004" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/8764.clip_image004_thumb_2C491F53.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/8764.clip_5F00_image004_5F00_thumb_5F00_2C491F53.jpg" width="826" height="395" /></a></p>  <p>Then click on OK and notice you will now see the F(x) now with the connection manager icon. You see this same icon after you parameterize the connection manager via the GUI with right click &quot;parameterize&quot;. This different method simply allows you to apply a parameter and an expression.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/7180.clip_image005_09347857.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/7180.clip_5F00_image005_5F00_09347857.png"><img title="clip_image005" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/2630.clip_image005_thumb_3DD4D492.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/2630.clip_5F00_image005_5F00_thumb_5F00_3DD4D492.png" width="210" height="58" /></a></p>  <p>Now simply repeat this process for all other connection managers. The only difference in the expression will be the file name.</p>  <p>Whether you run the package in SSDT or configure the package in the SSIS Catalog, you just need to modify the file path in 1 place to alter all 8 of my connection managers. You can see this in SSMS:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/5873.clip_image006_5D83AE5A.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/5873.clip_5F00_image006_5F00_5D83AE5A.jpg"><img title="clip_image006" style="border-top: 0px; border-right: 0px; border-bottom: 0px; border-left: 0px; display: inline" border="0" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/47/55/metablogapi/2063.clip_image006_thumb_18D71419.jpg" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-47-55-metablogapi/2063.clip_5F00_image006_5F00_thumb_5F00_18D71419.jpg" width="517" height="63" /></a></p>  <p>So when you are creating SSIS packages, think about ways to minimize the number of configurations needed. This will help minimize configurations needed during deployment.</p>  <p>The drawback to this approach is that you are now assuming that all those files will always be in the same directory. Make sure you consider whether or not that is what you want to require within your process. Rarely is there a solution that is ideal for every use case, but depending on your needs, this can be another solution to help simplify your package parameters.</p>]]></content:encoded>
    </item>
    <item>
      <title>Index Rebuild Enhancements with Newer SQL Versions</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/index-rebuild-enhancements-with-newer-sql-versions</link>
      <pubDate>Mon, 02 Feb 2015 09:01:16 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/2015/02/02/index-rebuild-enhancements-with-newer-sql-versions/</guid>
      <description><![CDATA[&#160;  Wow! It has been a long time since I have blogged. Microsoft is firing on all cylinders...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>Wow! It has been a long time since I have blogged. Microsoft is firing on all cylinders lately and keeping us Premier Field Engineers very busy. I am going to try very hard to get back to some regular blogging about topics that I feel are good points for customers. The other day I had to go back and remind myself about index rebuild option changes. I have customers that run varying versions of SQL as I am sure many of you are as well. They are also upgrading to newer versions. With version changes, sometimes the general database maintenance does not always get updated. This is not always required, but it can really help improve uptime and impact of index maintenance when you look at new enhancements. When working with multiple versions we can all get confused on which version includes which feature. I came up with a little chart to help show index rebuild enhancements as it pertains to online/offline, partition level, and LOB data types.</p>  <p>&#160;</p>  <table cellspacing="0" cellpadding="0" border="1"><tbody>     <tr>       <td valign="top" width="117">&#160;</td>        <td valign="top" width="329">         <p><b>SQL 2008R2</b></p>       </td>        <td valign="top" width="154">         <p><b>SQL 2012</b></p>       </td>        <td valign="top" width="159">         <p><b>SQL 2014</b></p>       </td>     </tr>      <tr>       <td valign="top" width="117">         <p><b>Table Level</b></p>       </td>        <td valign="top" width="329">         <p>Online for non-LOB data</p>       </td>        <td valign="top" width="154">         <p>Online for some LOB data</p>       </td>        <td valign="top" width="159">         <p>Online for some LOB data </p>       </td>     </tr>      <tr>       <td valign="top" width="117">         <p><b>Partition Level</b></p>       </td>        <td valign="top" width="329">         <p>Offline Only</p>       </td>        <td valign="top" width="154">         <p>Offline Only</p>       </td>        <td valign="top" width="159">         <p>Online for some LOB data </p>       </td>     </tr>      <tr>       <td valign="top" width="117">         <p><b>LOB data</b></p>       </td>        <td valign="top" width="329">         <p>image, ntext, text, varchar(max), nvarchar(max), varbinary(max), and xml offline only</p>       </td>        <td valign="top" width="154">         <p>image, ntext, and text offline only</p>       </td>        <td valign="top" width="159">         <p>image, ntext, and text offline only</p>       </td>     </tr>      <tr>       <td valign="top" width="117">         <p><b>Managed Lock Priority</b></p>       </td>        <td valign="top" width="329">         <p>No</p>       </td>        <td valign="top" width="154">         <p>No</p>       </td>        <td valign="top" width="159">         <p>Yes</p>       </td>     </tr>   </tbody></table>  <p><b>Here is a short explanation on what you can/cannot do with the different versions:</b></p>  <p><b>SQL 2008R2:</b> You cannot do online index rebuilds at the partition level and you cannot do online index rebuilds of a clustered index with LOB data types (varchar(max), text, image, etc)</p>  <p><b>SQL 2012:</b> You cannot do online index rebuilds at the partition level.&#160; You CAN, however, do online index rebuilds of the whole index of all data types except text, ntext, image.&#160; This means that tables with varchar(max), nvarchar(max), and varbinary(max) columns can be rebuilt online in SQL 2012</p>  <p><b>SQL 2014:</b> You CAN do online index rebuilds at the partition level.&#160; You CAN do online index rebuilds of varchar(max), nvarchar(max), and varbinary(max) data types.&#160; Just like with SQL 2012, text, ntext, image are not included.&#160; These are legacy data types which really should not be phased out over time.</p>  <p><b>Key difference between online and offline index rebuilds</b></p>  <p><b>Offline:</b> A Sch-M lock is placed at the table level throughout the rebuild.&#160; This is a Schema Modification lock as if the schema is getting modified.&#160; The same type of lock when you add a column, etc. This blocks any DML or DDL operation.</p>  <p><b>Online:</b> A Sch-S lock is placed at the table level throughout the rebuild. This is a Schema Stability lock.&#160; Any select also gets a Sch-S lock. This just makes sure that the table is not getting changed while it is doing its work.&#160; At the end of the online index rebuild there is a quick Sch-M lock in order to publish the rebuild changes. This typically takes less than a second, but this request can get blocked as well as block others (while it is waiting).&#160; This is where Managed Lock Priority comes into play to help tweak what you want to happen in those cases.&#160; It can allow other processes to jump in front of it in line and not get blocked while the index rebuild is waiting for a lock.</p>  <p><b>TIP: Don't let partition level rebuild confuse you when it comes to locking:</b></p>  <p>In SQL 2012 and below, even though you may be only rebuilding 1 partition, there is a Schema Modification lock (sch-m) at the TABLE level.&#160; This blocks other DML operations for the entire table.&#160; The benefit of the partition level index rebuild here is that it takes less time to do only 1 partition, but the entire table is still inaccessible during the rebuild.&#160; You may think that you are rebuilding the index of an old partition that none of your queries will be using, therefore there should be no blocking, right? This is not the case</p>  <p>Also keep in mind that online index rebuild options are only available in Enterprise Edition of SQL Server!</p>  <p>Here is a link with some good guidelines on online index rebuilds. Note that with any BOL article, you can click on the &quot;other versions&quot; link. That is a great way to compare and see how a particular feature differs between SQL Server versions.</p>  <p><a href="https://msdn.microsoft.com/en-us/library/ms190981(v=sql.120).aspx">https://msdn.microsoft.com/en-us/library/ms190981(v=sql.120).aspx</a></p>  <p>I know I touched upon Managed Lock Priority, but I did not explain it. That will be a follow up blog post.</p>  <p>Lisa Gardner</p>]]></content:encoded>
    </item>
    <item>
      <title>Dogfood Conference</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/dogfood-conference</link>
      <pubDate>Mon, 25 Nov 2013 17:15:30 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/2013/11/25/dogfood-conference/</guid>
      <description><![CDATA[Last week I had the opportunity to give 2 sessions at a local IT conference in my hometown of...]]></description>
      <content:encoded><![CDATA[<p>Last week I had the opportunity to give 2 sessions at a local IT conference in my hometown of Columbus, Ohio.&#160; I gave a talk on using SQL Server Data Tools and another on SQL Server File Management.&#160; I always enjoy getting to speak at community events, and especially local ones that are free for attendees.&#160; If you are in the central Ohio area, keep a look out for the conference next year.&#160; Attendance sold out in 2 days this year.&#160; We had a number of Microsoft PFEs speaking as well as other local tech resources.&#160; I love supporting local organizations when I can!&#160; For more info on the conference, go to <a title="https://www.dogfoodcon.com/" href="https://www.dogfoodcon.com/">https://www.dogfoodcon.com/</a> .&#160; I can’t wait to speak again next year!</p>]]></content:encoded>
    </item>
    <item>
      <title>SQLSaturday 242</title>
      <link>https://docs.microsoft.com/archive/blogs/sqlgardner/sqlsaturday-242</link>
      <pubDate>Sat, 10 Aug 2013 17:24:00 GMT</pubDate>
      <dc:creator><![CDATA[SQLGardner]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/sqlgardner/2013/08/10/sqlsaturday-242/</guid>
      <description><![CDATA[It has been a little while since I have done some public presentations, and today I had the...]]></description>
      <content:encoded><![CDATA[<p>It has been a little while since I have done some public presentations, and today I had the opportunity to present at SQLSaturday in Indianapolis.&nbsp; I want to that the Indy crew for putting on a very smooth and well organized event.&nbsp; I also want to thank the sponsors as without them, SQLSaturday would not exist.&nbsp; It is a great day of free training for local IT folks to give them a taste of what the PASS Summit it like.&nbsp; It also helps people like myself get an opportunity to present, which I really enjoy.</p>
<p>One of my fellow PFEs, Joe McTaggart&nbsp; gave an awesome presentation on how to use XPerf to troubleshoot IO issues!&nbsp; My presentation was showing some free performance analysis and troubleshooting tools available from Codeplex.&nbsp; I have to thank another one of my fellow PFEs Tim Chapman for working on it with me! I am attaching the slides and scripts that a few folks requested.</p>
<p>Lisa</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/10/44/08/85/SQLDiagAndSQLNexus.zip" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-44-08-85/SQLDiagAndSQLNexus.zip">SQLDiagAndSQLNexus.zip</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>