gpt4 book ai didi

sql - 向 Azure 数据工厂中的表添加新列

转载 作者:行者123 更新时间:2023-12-03 05:24:33 26 4
gpt4 key购买 nike

我的 Blob 存储中有一个 CSV 文件,格式如下:

**Column,DataType**
Acc_ID, int
firstname, nvarchar(500)
lastname, nvarchar(500)

我正在尝试在数据工厂中读取此文件,循环遍历列名称并检查目标表这些列是否已存在,如果不存在,我想在 SQL 表中创建缺失的列。

我知道我们可以使用以下 SQL 查询来创建不存在的列。

IF NOT EXISTS (
SELECT
*
FROM
INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = 'contact_info' AND COLUMN_NAME = 'acc_id')
BEGIN
ALTER TABLE contact_info
ADD acc_id int NULL
END;

但我不确定我们是否可以读取 CSV 文件并将列名从 CSV 文件传递​​到数据工厂管道中的上述 SQL 查询。请问对此有何建议?

最佳答案

如果列不存在,您可以使用复制数据事件中的预复制脚本创建列。

• 表列执行管道之前

SELECT TABLE_NAME, COLUMN_NAME, DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'contact_info'

enter image description here

源文件:

enter image description here

ADF 管道:

  1. 使用lookup事件,通过将源数据集连接到源文件来获取列表列和数据类型。

enter image description here

查找事件的输出:

enter image description here

  • lookup 输出连接到 ForEach 事件,以循环查找中的所有值。
  • @activity('Lookup1').output.value

    enter image description here

  • ForEach 事件中添加 Copy data 事件,并将连接到 SQL 表。在“使用查询属性”中选择查询而不是表。编写一个不会产生任何结果的查询,因为我们使用此复制事件只是为了向表中添加列(如果不存在)。
  • 从 dbo.contact_info 中选择 *,其中 1= 2

    enter image description here

  • 复制数据事件接收器中,将接收器数据集连接到 SQL 表,并在预复制脚本中编写查询以添加新列。这里使用当前的 ForEach 循环项(列、数据类型)值,而不是对值进行硬编码,如下所示。

    @{concat('IF NOT EXISTS ( SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ','''','contact_info','''',' AND COLUMN_NAME = ','''',item().Column,'''',') ALTER TABLE contact_info ADD ',item().Column,' ', item().DataType,' NULL')}
  • enter image description here

  • 执行管道时,FoEach 循环将执行,直到完成查找输出中的所有值,并在表中创建一个新列(如果不存在)。
  • 执行管道后表中的列:

    enter image description here

    关于sql - 向 Azure 数据工厂中的表添加新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70049821/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com