在 Synapse 管道中编写 SQL 查询查找活动返回错误消息

Posted

技术标签:

【中文标题】在 Synapse 管道中编写 SQL 查询查找活动返回错误消息【英文标题】:Writing SQL Query Lookup Activity in Synapse Pipeline Returns Error Message 【发布时间】:2021-12-28 18:25:03 【问题描述】:

当我尝试使用 Lookup 活动在 Synapse 中创建视图时,它返回一个错误。

我的代码是:

CREATE OR ALTER VIEW view_name AS 
SELECT * FROM OPENROWSET(BULK 'https://datalake/container/Delta folder/', FORMAT='DELTA') AS result; 
SELECT 1

我收到如下错误消息:

数据库操作失败并出现以下错误:“关键字 'SELECT' 附近的语法不正确。”关键字“SELECT”附近的语法不正确。

问题是我只需要在增量文件之上创建一个视图,以便我的 SSMS 和 Power BI 可以访问它。 (现在看来,如果我只是在 Delta 文件上在 Spark DB 中创建表/视图,按需 SQL 无法查询它们。)这就是我使用查找活动来执行 SQL 查询的原因。

知道为什么会这样吗?

【问题讨论】:

【参考方案1】:

我尝试在之后添加GO 语句,以及切换SELECTCREATE 语句的顺序(无论如何都是愚蠢的尝试),但有效的解决方案是用@ 包装CREATE 语句987654325@,使用EXEC执行,然后执行SELECT 1

DECLARE @SQLQUERY NVARCHAR(MAX)
SET @SQLQUERY = 

CONCAT('CREATE OR ALTER VIEW <view_name> AS
SELECT
    *
FROM
    OPENROWSET(
        BULK ''https://','@pipeline().parameters.DataLakeAccountName','.dfs.core.windows.net/<folder_location>/'',
        FORMAT=''DELTA''
    ) AS [result]')

EXEC(@SQLQUERY)

SELECT 1

请注意,我确实有一个管道参数来设置数据湖实例名称,这就是我在动态查询生成部分中使用参数值的原因。

【讨论】:

【参考方案2】:

试试

CREATE OR ALTER VIEW view_name AS SELECT * FROM OPENROWSET(BULK 'https://datalake/container/Delta folder/', FORMAT='DELTA') AS result

GO

SELECT 1

我不太确定您为什么需要 SELECT 1 部分,但这应该可以。

【讨论】:

嘿,有一个 select 1 的原因是因为查找活动最终需要一个输出值,所以放一个 select 1 来欺骗活动本身。这种方法也失败了,但我确实找到了解决方法。我会在自己下面写下答案

以上是关于在 Synapse 管道中编写 SQL 查询查找活动返回错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Azure Synapse 管道:如何将增量更新从 SQL Server 移动到 Synapse 以处理数字

如何在 Azure 数据工厂中执行 SQL 查询

为啥这个 T-SQL 查询在 Synapse 中不起作用?

如何从 Synapse 管道触发 ADF 管道

Azure Synapse 无服务器 SQL 池 - 查询执行失败

将数据从 Azure SQL 数据库实时复制到 Synapse