【发布时间】:2020-07-25 19:34:14
【问题描述】:
我在 Azure 存储帐户(带 ADLS Gen2 功能)上使用 Spark(Databricks)生成了一个 ORC 表(使用 Snappy 压缩)。这个 ORC 代表大约 12 GB 的数据(12 亿行)。此表有 32 列。
生成后,我使用 Polybase 将该文件加载到 Synapse Analytics 表内的内部表中。
这是我使用不同配置的结果:
- DW100c / smallrc = 3h52
- DW400c / smallrc = 1h50
- DW400c / xlargerc = 1h58
- DW1000c / xlargerc = 0h50
- DW1500c / xlargerc = 0h42
当我查看存储帐户入口/出口时,我看到了几分钟内的活动(可能是为了在 Synapse 节点之间复制 ORC 文件)......然后 Synapse 资源开始受到压力。我看到一段时间的 CPU 活动,然后内存慢慢增加,缓慢,...
这里是内存(红色)和 CPU 最大百分比(蓝色)示例:
我需要再次扩大规模吗?我认为这不是网络吞吐量的 pb。或者可能是配置问题?关于 Polybase,我不明白为什么这么慢。 Polybase 应该能够快速摄取 TB 的 ORC 数据!
BR, A.
编辑:DWU 用法
【问题讨论】:
-
你能发布你的代码吗?
-
@GregGalloway 它是从外部表中选择的。我们在外部数据源上使用托管服务身份 (SCOPE CREDENTIAL)。我的外部文件格式正在使用 ORC 和 Snappy
-
所以没有 CAST 函数?什么是数据类型?您是否选择了可能的最小字符串宽度?
-
我们使用具有最大值的 NVARCHAR,因为这是非结构化数据
-
意味着您正在导入 JSON 数据或可能是任意长度的数据,您稍后将在存储过程中对其进行解析?可能值得测试一下最大实际长度,看看缩小字符串列的宽度是否会提高加载性能。我担心内部数据移动缓冲区的大小将被调整为允许宽数据,并且会比常规大小的列表现更差。至少这是 Azure DW 中一个常见的最佳实践,有据可查。
标签: orc azure-sql-data-warehouse polybase azure-synapse