提问人:Charles 提问时间:11/16/2023 最后编辑:Charles 更新时间:11/17/2023 访问量:116
ADF 使用标头将数据从表复制到 Azure BlobADF Copy data from Table to Azure Blob with headers
ADF Copy data from Table to Azure Blob with headers
问:
我正在使用 ADF 将数据从 Snowflake 表(源)复制到 Azure Blob CSV 文件(接收器)。
接收器数据集选中了“第一行作为标题”。
如果源表包含数据,则效果很好。
但是,如果源表为空,则生成的文件为空,没有标头。
请参阅屏幕截图以获取设置。
我想知道如何使生成的文件带有标头,而不管源表是否为空。
谢谢。
答:
0赞
Rakesh Govindula
11/17/2023
#1
您可以尝试以下解决方法,将标头复制到目标文件中。
- 首先,使用查找活动检查表计数。然后使用 if activity 检查计数是否为。
0
- 添加两个复制活动,一个在 if 的 True 活动中,另一个在 false 活动中。
- 对于这两个复制活动,您需要使用具有相同目标文件路径的不同目标数据集。
- 一个复制活动是复制标头,如果计数不是,另一个活动是定期复制到目标文件。
0
在查找中使用以下查询来获取表的计数。
select count(*) as count from emp
然后在 if 活动中给出以下表达式。
@equals(activity('Lookup1').output.value[0].COUNT,0)
在 if 的 True 活动中,使用以下查询获取复制活动的源。
select listagg(column_name,',') from information_schema.columns
where table_schema ilike 'public' and table_name ilike 'emp'
如果目标文件中的列分隔符是 ,则需要在上面的查询中使用而不是这样。|
|
,
listagg(column_name,'|')
这将使 Delimiter(,) 分隔的列名为一行,列名如下所示。LISTAGG(COLUMN_NAME,',')
LISTAGG(COLUMN_NAME,',')
Id,name
但在这里,我们只想要具有必需标题的行,而不是列名。
因此,在此复制活动的接收器数据集中,取消选中 并提供以下配置。这就是对两个复制活动使用不同数据集的原因。First row as header
您可以根据需要更改列分隔符,但还需要在查询中更改该分隔符。
在 if 的 False 活动中,使用另一个目标数据集提供常规复制活动。
执行管道,标头将按如下所示复制到 Blob 中。
评论