首页 > 解决方案 > 具有不同标题的文件以复制 azure dwh 表中的数据

问题描述

我是 Azure 数据仓库和 Azure 数据工厂 V2 的新手。

我有一个文件夹,在 azure blob 中有 10 个文件,每个文件都有不同的标题,但所有文件中都有一个共同的 5 个标题。

我尝试过的事情,

为文件创建了 10 个链接服务器,并使用复制数据任务将数据移动到特定表中。但我只需要这些表中的 5 列

问题

有什么方法可以让我拥有一个包含 5 列的表和一个动态文件连接来从 5 个文件中加载数据。

示例: File1:10 个标头 File2:11 个标头 File3:7 个标头。. . . File10:15 个标题

这些文件中共有 5 列,并且必须将数据加载到具有 5 列的公用表中。

标签: azureazure-blob-storageazure-data-factory-2azure-sqldwazure-sql-data-warehouse

解决方案


在使用 Polybase 在 Azure SQL 数据仓库中创建外部表时,它们可以指向单个文件或一组文件,只要它们位于同一文件夹中且格式相同。

个人档案

WTIH (
    DATA_SOURCE = yourDataSource,
    LOCATION = N'/input/file1.txt',
    FILE_FORMAT = yourFileFormat,
    ...
    etc

文件夹

WTIH (
    DATA_SOURCE = yourDataSource,
    LOCATION = N'/input/',
    FILE_FORMAT = yourFileFormat,
    ...
    etc

所以你可以做的是为每个文件创建一个外部表。外部表只是元数据结构,数据实际上并不存在于数据库中。这些表必须包括每个表的所有列。然后在五个表上创建一个UNION语句,只选择五个列并使用 aCTAS将数据导入数据库:

CREATE TABLE dbo.yourTable
WITH
(
    DISTRIBUTION = ROUND_ROBIN,
    CLUSTERED COLUMNSTORE INDEX
)
AS
SELECT col1, col2, col3, col4, col5
FROM externalTable1

UNION ALL

SELECT col1, col2, col3, col4, col5
FROM externalTable2

UNION ALL

SELECT col1, col2, col3, col4, col5
FROM externalTable3

etc
....

我可能不会使用数据工厂,因为 Polybase 可以为您完成大部分工作。


推荐阅读