Udostępnij za pośrednictwem


Lesson Learned #11: Connect from Azure SQL DB using an external table where the source of the data is a SQL Datawarehouse

One of our customer tries to connect from Azure SQL DB using an external table where the source of the data is a SQL Datawarehouse database.

  • This first question was if there is supported or not and I received the confirmation from Azure Product Team that there is not supported and they are working on it.
  • The second question was, why our customer, after configuring the External Table, is facing the error message during the select query: 'Setting Language to N'us_english' is not supported.' ? I tried to reproduce the issue and I was able to find why.
  • I created a table in my SQL DW database.

CREATE TABLE [Order]( [SourceOrderArticleId] [int] NULL, [SourceOrderId] [int] NULL,  [BrandId] [tinyint] NULL) WITH (  DISTRIBUTION = ROUND_ROBIN,    CLUSTERED COLUMNSTORE INDEX)

  • Connected to my Azure SQL DB, I executed the following steps:

CREATE MASTER KEY ENCRYPTION BY PASSWORD='xxxxxxxxxx';

CREATE DATABASE SCOPED CREDENTIAL AppCredDW WITH IDENTITY = 'UserDW',  SECRET = 'PasswordDW';

CREATE EXTERNAL DATA SOURCE RemoteReferenceDataDW WITH (  TYPE=RDBMS,

                LOCATION='serverdw.database.windows.net',

DATABASE_NAME='dwsource',

CREDENTIAL= AppCredDW);

 

CREATE EXTERNAL TABLE [dbo].[Order]( [SourceOrderArticleId] [int] NULL, [SourceOrderId] [int] NULL,       [BrandId] [tinyint] NULL) WITH ( DATA_SOURCE = RemoteReferenceDatadw);

    • Every time that I executed the query: select * from [dbo].[Order] , I got the same issue that our customer, event trying to change the setting in the context I got the same problem.

 

    • Enabling SQL Auditing for the SQL DataWarehouse database, I found the reason that our customer is getting the error message 'Setting Language to N'us_english' is not supported.'

 

    • Every time that Azure SQL DB (using Elastic Database component) tries to connect to Azure SQL Datawarehouse, this component change the context of the connection running the following TSQLs statements:

DECLARE @productVersion VARCHAR(20)

SELECT @productVersion = CAST(SERVERPROPERTY('ProductVersion') AS VARCHAR(20))

IF CONVERT(INT, LEFT(@productVersion, CHARINDEX('.', @productVersion) - 1)) >= 12

    EXEC sp_executesql N'SET CONTEXT_INFO 0xDEC7E180F56D3946A2F5081A9D2DAB3600004F8F6CF3AC0205674E2CB44811FA5D45B64057F43BDF17E8'

SET ANSI_NULLS ON;

SET ANSI_WARNINGS ON;

SET ANSI_PADDING ON;

SET ARITHABORT ON;

SET CONCAT_NULL_YIELDS_NULL ON;

SET NUMERIC_ROUNDABORT ON;

SET DATEFIRST 7;

SET DATEFORMAT mdy;

SET LANGUAGE N'us_english';

SELECT [T1_1].[SourceOrderArticleId] AS [SourceOrderArticleId],

       [T1_1].[SourceOrderId] AS [SourceOrderId],

       [T1_1].[BrandId] AS [BrandId]

FROM   [dbo].[Order] AS T1_1

 

    • The statement SET LANGUAGE N'us_english' is not supported in SQL Datawarehouse as it, but if you change, to SET LANGUAGE us_english there is possible. If you executed the command SET LANGUAGE N'us_english' is supported in Azure SQL DB.

 

    • Most probably, this could have any other implications, but, if the Elastic Database component use SET LANGUAGE us_english instead of SET LANGUAGE N'us_english' we may able to use a SQL Datawarehouse as external table from Azure SQL DB.