azure - 具有不同标题的文件以复制 azure dwh 表中的数据
问题描述
我是 Azure 数据仓库和 Azure 数据工厂 V2 的新手。
我有一个文件夹,在 azure blob 中有 10 个文件,每个文件都有不同的标题,但所有文件中都有一个共同的 5 个标题。
我尝试过的事情,
为文件创建了 10 个链接服务器,并使用复制数据任务将数据移动到特定表中。但我只需要这些表中的 5 列
问题
有什么方法可以让我拥有一个包含 5 列的表和一个动态文件连接来从 5 个文件中加载数据。
示例: File1:10 个标头 File2:11 个标头 File3:7 个标头。. . . File10:15 个标题
这些文件中共有 5 列,并且必须将数据加载到具有 5 列的公用表中。
解决方案
在使用 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 可以为您完成大部分工作。
推荐阅读
- amazon-web-services - 使用自定义 SAML 2.0 应用程序实施 AWS SSO
- php - PHP Laravel 按周从 db 获取数据
- angular - Angular observable 没有从烧瓶服务器捕获新值
- gradle - Gradle 排除一项任务的资源,但不排除第二项任务的资源
- awk - 如何使用 awk 命令查找第二列的总数?
- python - 如何抑制以下横幅,身份验证(公钥)成功!和连接版本 2.0,客户端 OpenSSH_6.6.1 on Python 2.7
- angular - 无法将输入文本字段设为只读 angular 6
- android - 无法检测 adb 版本,Android Studio 3.3.2 中的 adb 输出
- c++ - 如何用成员函数初始化成员函数指针
- ios - 将圆形裁剪应用于 UIImage 或 UIImageView