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



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

非常宽泛的问题。所以我会给出一个大致的答案:

  1. 使用正常表。难以击败"普通表"的性能;使用外部表。"正常table"表示使用CREATE TABLE在专用SQL池中创建的表。如果从一个或多个表中重复查询数据,并且每个查询都是不同的(group-by, join, selected columns),那么您无法获得优于"正常"的性能。
  2. 了解并应用基本的最佳实践:
    • 使用拼花格式,你正在做的。

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

    • 如果查询的目标是单个大文件,那么将其拆分为多个较小的文件将会受益。

    • 尽量保持您的CSV(如果使用CSV)文件大小在100 MB和10 GB之间。

    • 使用正确的数据类型

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

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

      …还有更多。

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

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考试查询分区——来源——- azure storage/

相关内容

  • 没有找到相关文章

最新更新