2

我在 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 使用

在此处输入图像描述

4

1 回答 1

0

您可以尝试几件事。Azure Synapse Analytics(以前称为 Azure SQL Data Warehosue)有一个与 DWU 相关的读取器和写入器的概念。我找不到该文档的当前版本,但我拥有的一些旧 gen1 文档表明 DWU1500 有 120 个阅读器。这强烈建议您应该将一个大文件拆分为多个文件。

我会做一些实验,从 10 个文件开始,即 10 个文件,每个文件 1.2GB,直到找到适合工作负载的最佳设置。我会说我没有用 ORC 文件对此进行过测试,我不清楚 ORC 格式是否已经固有分区。试试看。

您也可以尝试 CTAS(如果您还没有使用它)。这也将利用 Synapse 的并行工作能力。

目前还有一个新功能正在预览中,称为COPY INTO. 根据文档,它与 ORC 文件兼容,并且不需要您拆分它们:

COPY 命令加载 Parquet 或 ORC 文件的文件拆分指南是什么?无需拆分 Parquet 和 ORC 文件,因为 COPY 命令会自动拆分文件。Azure 存储帐户中的 Parquet 和 ORC 文件应为 256MB 或更大以获得最佳性能。

https://docs.microsoft.com/en-us/sql/t-sql/statements/copy-into-transact-sql?view=azure-sqldw-latest#what-is-the-file-splitting-guidance- for-the-copy-command-loading-parquet-or-orc-files

COPY INTO test_orc
FROM 'https://yourAccount.blob.core.windows.net/yourBlobcontainer/folder1/*.orc'
WITH (
    FILE_FORMAT = yourFileFormat
    CREDENTIAL=(IDENTITY= 'Shared Access Signature', SECRET='<Your_SAS_Token>')
)

通过查看门户中的 DWU 使用情况来确定您是否受 DWU 限制 - 查看它是否已被最大化/扁平化,我猜它不是。

于 2020-04-13T13:21:20.757 回答