在 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
语句,以及切换SELECT
和CREATE
语句的顺序(无论如何都是愚蠢的尝试),但有效的解决方案是用@ 包装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 以处理数字