ADF将数据从表复制到带有标头的Azure Blob

vu8f3i0k  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(90)

我正在使用ADF将数据从 snowflake 表(源)复制到Azure Blob CSV文件(接收器)。
接收器数据集已选中“第一行作为标题”。
如果源表中包含数据,则它可以正常工作。
但是,如果源表为空,则生成的文件将为空,没有标题。
请查看设置的屏幕截图。
我想知道,不管源表是否为空,如何使生成的文件带头。
谢谢
100d1x


的字符串

pb3s4cty

pb3s4cty1#

您可以尝试以下解决方法,将头文件复制到目标文件中。

  • 首先使用lookup活动检查表计数。然后使用if活动检查计数是否为0
  • 添加两个复制活动,一个在if的True活动中,另一个在false活动中。
  • 对于两个复制活动,您需要使用具有相同目标文件路径的不同目标数据集。
  • 一个复制活动是复制头,如果计数不是0,另一个是常规复制到目标文件。

在查找中使用下面的查询来获取表的计数。

select count(*) as count from emp

字符串


的数据
然后在if活动中给予下面的表达式。

@equals(activity('Lookup1').output.value[0].COUNT,0)


在if的True activities中,使用以下查询复制活动的来源。

select listagg(column_name,',') from information_schema.columns
where table_schema ilike 'public' and table_name ilike 'emp'



如果您的目标文件中的列x1是|,则需要使用|,而不是像上面查询中的listagg(column_name,'|')这样的,
这将给予分隔符(,)分隔的列名作为一行,列名为LISTAGG(COLUMN_NAME,','),如下所示。

LISTAGG(COLUMN_NAME,',')
Id,name


但在这里,我们只需要具有必需标题的行,而不是列名。
因此,在此复制活动的接收数据集中,取消选中First row as header并给予以下配置。这就是为两个复制活动使用不同数据集的原因。


您可以根据自己的需求更改列名称,但也需要在查询中更改列名称

在ifFalse活动中,给予您对另一个目标数据集的常规复制活动。
执行管道,你的头将被复制到Blob中。


相关问题