是否可以将参数(文件夹/文件路径)传递到Azure Synapse外部表的位置?LOCATION=/Windows/Folder/YYYY/MM/DD/File_name_YYYYMMDD.csv我想将YYYY/MM/DD和File_name_YYYYMMDD.csv参数化为每天更改的参数。.我可以将值从Azure数据工厂发送到Azure Synapse吗先谢了
li9yvcax1#
我使用的是Azure SQL,但是我认为创建外部表和Azure Synapse是一样的。我们可以使用ADF来动态创建外部表。例如:1.在ADF中,我们可以声明几个变量来获取动态内容。
1.如果您使用的是Copy activity,我们可以将动态内容添加到@{concat('DROP EXTERNAL DATA SOURCE MyAzureInvoices CREATE EXTERNAL DATA SOURCE MyAzureInvoices WITH ( TYPE = BLOB_STORAGE, LOCATION = ',variables('ContainerStr'),variables('DateStr'),',CREDENTIAL = UploadInvoices );')}。
@{concat('DROP EXTERNAL DATA SOURCE MyAzureInvoices CREATE EXTERNAL DATA SOURCE MyAzureInvoices WITH ( TYPE = BLOB_STORAGE, LOCATION = ',variables('ContainerStr'),variables('DateStr'),',CREDENTIAL = UploadInvoices );')}
ruoxqz4g2#
遗憾的是,在synapse中没有直接参数化选项来定义正常的外部表,因此为了实现您的场景,您需要在运行时通过动态SQL创建外部表,使用查找活动或存储过程活动,其中您将位置值作为参数传递,并基于该参数通过动态SQL创建外部表
ffx8fchx3#
您可以将CETAS设置为一个变量,例如DECLARE @cetas NVARCHAR(1000),然后使用EXEC sp_executesql @cetas创建表。这里有一个例子,你可以改变一些事情,然后将其应用到你的情况。
DECLARE @cetas NVARCHAR(1000)
EXEC sp_executesql @cetas
IF OBJECT_ID('bronze.test_cetas_002') IS NOT NULL DROP EXTERNAL TABLE bronze.test_cetas_002 GO DECLARE @report_date VARCHAR(17) SELECT @report_date = REPLACE(CONVERT(VARCHAR(10), getdate()-1, 111), '/', '') + '*/*/*.csv' DECLARE @cetas NVARCHAR(1000) SET @cetas = N' CREATE EXTERNAL TABLE bronze.test_cetas_002 WITH ( LOCATION = ''bronze/test002'', DATA_SOURCE = ds_az_test, FILE_FORMAT = csv_file_format ) AS SELECT * FROM OPENROWSET( BULK ( ''' + @report_date + ''' ), DATA_SOURCE = ''ds_az_test'', FORMAT = ''CSV'', PARSER_VERSION = ''2.0'', HEADER_ROW = TRUE ) AS [result]' EXEC sp_executesql @cetas GO
3条答案
按热度按时间li9yvcax1#
我使用的是Azure SQL,但是我认为创建外部表和Azure Synapse是一样的。我们可以使用ADF来动态创建外部表。
例如:
1.在ADF中,我们可以声明几个变量来获取动态内容。
1.如果您使用的是Copy activity,我们可以将动态内容添加到
@{concat('DROP EXTERNAL DATA SOURCE MyAzureInvoices CREATE EXTERNAL DATA SOURCE MyAzureInvoices WITH ( TYPE = BLOB_STORAGE, LOCATION = ',variables('ContainerStr'),variables('DateStr'),',CREDENTIAL = UploadInvoices );')}
。ruoxqz4g2#
遗憾的是,在synapse中没有直接参数化选项来定义正常的外部表,因此为了实现您的场景,您需要在运行时通过动态SQL创建外部表,使用查找活动或存储过程活动,其中您将位置值作为参数传递,并基于该参数通过动态SQL创建外部表
ffx8fchx3#
您可以将CETAS设置为一个变量,例如
DECLARE @cetas NVARCHAR(1000)
,然后使用EXEC sp_executesql @cetas
创建表。这里有一个例子,你可以改变一些事情,然后将其应用到你的情况。