Azure 突触中的外部表性能非常慢

问题描述 投票:0回答:2

我有一个镶木地板文件并创建了一个新的外部表,但与突触中的普通表相比,性能非常慢。你能告诉我如何克服这个问题吗?

azure azure-synapse external-tables
2个回答
2
投票

非常广泛的问题。所以我会给出广泛的答案:

  1. 使用普通桌子。外部表的“普通表”的性能很难被超越。 “普通表”是指使用
    CREATE TABLE
    在专用 SQL 池中创建的表。如果您重复查询一个或多个表中的数据,并且每个查询都不同(分组、联接、选定列),那么您无法获得带有外部表的“普通”表的性能。
  2. 了解并应用基本的最佳实践
    • 使用您正在做的镶木地板格式。

    • 选择正确的分区列并通过将分区存储到不同的文件夹或文件名来对数据进行分区。

    • 如果查询针对单个大文件,您将受益于将其拆分为多个较小的文件。

    • 尝试将 CSV(如果使用 csv)文件大小保持在 100 MB 到 10 GB 之间。

    • 使用正确的数据类型。

    • 手动创建 CSV 文件的统计信息

    • 使用 CETAS 增强查询性能和联接

      ...还有更多。


0
投票

a) 第一步是使用相关分区列(例如年、月和日期)对 Parquet 文件进行分区。

b) 我建议使用视图而不是外部表作为第二个建议。外部表不支持分区修剪,并且不会在读取过程中使用分区列来消除不必要的文件。

c) 确保强制执行数据类型,并且正确使用字符串类型。

d) 如果可能,将 Parquet 文件转换为 Delta 格式。 Synapse 能够从 Delta 读取分区列,而无需使用

filepath()
filename()
函数。外部表不支持 Delta,仅支持视图。

注意:外部表不支持 Parquet 分区列。

SELECT *,
  CAST(fct.filepath(1) AS SMALLINT) AS SalesOrderPathYear,
  CAST(fct.filepath(2) AS TINYINT) AS SalesOrderPathMonth,
  CAST(fct.filepath(3) AS DATE) AS SalesOrderPathDate
  FROM 
   OPENROWSET
   (
      BULK 'conformed/facts/factsales/*/*/*/*.parquet',
      DATA_SOURCE = 'ExternalDataSourceDataLake',
      FORMAT = 'Parquet'
   ) AS fct
  WITH
  ( 
    ColA as String(10),
    ColB as Integer,
    ColC as ... 
  )

参考:https://www.serverlesssql.com/certification/mastering-dp-500-exam-querying-partitioned-sources-in-azure-storage/

© www.soinside.com 2019 - 2024. All rights reserved.