日期格式不断变化的Azure Synapse外部表位置参数化

fnvucqvd  于 2023-03-31  发布在  其他
关注(0)|答案(3)|浏览(98)

是否可以将参数(文件夹/文件路径)传递到Azure Synapse外部表的位置?
LOCATION=/Windows/Folder/YYYY/MM/DD/File_name_YYYYMMDD.csv
我想将YYYY/MM/DD和File_name_YYYYMMDD.csv参数化为每天更改的参数。.我可以将值从Azure数据工厂发送到Azure Synapse吗
先谢了

li9yvcax

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 );')}

  1. ADF将帮助我们在复制活动之前创建外部表。
ruoxqz4g

ruoxqz4g2#

遗憾的是,在synapse中没有直接参数化选项来定义正常的外部表,因此为了实现您的场景,您需要在运行时通过动态SQL创建外部表,使用查找活动或存储过程活动,其中您将位置值作为参数传递,并基于该参数通过动态SQL创建外部表

ffx8fchx

ffx8fchx3#

您可以将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

相关问题