t动态位置路径SQL外部表



我尝试做的是通过Azure Synapse从数据湖接收数据,并将其导出到另一个数据湖。这种转移已经起作用了。我遇到的问题是,当我想在同一位置存储第二组数据时。我收到错误";外部表位置已存在"我的第一次尝试是获取已经存储的数据,将其与新的集合连接起来,并将其存储回数据湖中的容器中。不幸的是,我收到了同样的错误。因此,我想将我(每天(的新数据集存储在不同的目录中。作为这些目录的名称,我想使用一个时间戳。我的声明:

DECLARE @timestamp varchar(42);
SET @timestamp = CONVERT(date, SYSDATETIME());
DECLARE @path varchar(42);
SET @path = CONCAT ( '/myMainFolder/' , @timestamp , '/');
CREATE EXTERNAL TABLE export
WITH ( LOCATION = @path
,DATA_SORUCE = [historicalexport]
,FILE_FORMAT = MY_CSV
)
AS
SELECT TOP 1000 *
FROM dbo.anExternalTable

执行此操作将导致一个错误;"@path"附近的语法不正确"但为什么呢?有人知道吗?当打印出@path时,它完全是我想要的,没有空格等。@path='/myMMainFolder/TODAYSDATE/'

提前感谢您的帮助!Thomas

动态位置失败,因为它需要用引号('(括起来。我解决问题的方法是在@路径周围添加引号。引号也必须转义。

CREATE EXTERNAL TABLE export
(
column varchar(20)
)  
WITH ( 
LOCATION = ''''@path''''
,DATA_SORUCE = [historicalexport]
,FILE_FORMAT = MY_CSV
)

我用了类似的东西,它对我很有效。随意使用你需要的引号。我使用了三个,因为我使用的是动态sql。希望能有所帮助。尝试

你可以试试这种方法,它对我有效。

DECLARE @timestamp varchar(42);
SET @timestamp = CONVERT(date, SYSDATETIME());
DECLARE @path varchar(42);
--SET @path = CONCAT ( '/myMainFolder/' , @timestamp , '/');
DECLARE @QUERY AS NVARCHAR(MAX);
SET @QUERY ='
CREATE EXTERNAL TABLE export
WITH ( LOCATION = ''/myMainFolder/'+@timestamp+'/''
,DATA_SORUCE = [historicalexport]
,FILE_FORMAT = MY_CSV
)'
EXECUTE (@QUERY)

最新更新