倾斜连接优化

数据倾斜时,一个表的数据分区中集群分布是不均匀的。数据倾斜会严重降低性能的查询,特别是那些与连接。加入大表之间需要交换数据和倾斜会导致集群中的一个极端不平衡的工作。查询数据倾斜的影响如果查询似乎卡完成很少的任务(例如,最后3任务的200)。验证数据倾斜影响查询:

  1. 单击阶段,并验证它是做一个连接。

  2. 查询完成后,找到一个加入的阶段和检查任务持续时间分布。

  3. 排序的任务通过减少持续时间和检查前几个任务。如果一个任务比其他任务花了更长的时间来完成,有倾斜。

改善斜,三角洲湖砖SQL接受倾斜的暗示在查询。从倾斜的信息提示,砖运行时可以构造一个更好的查询计划,不存在数据倾斜。

请注意

与砖运行时7.3及以上,斜加入提示不需要。倾斜自动照顾如果自适应查询执行(AQE)和spark.sql.adaptive.skewJoin.enabled都是启用的。看到自适应查询执行

斜提示配置关系的名字

斜提示必须包含至少与倾斜的名称。一个关系表、视图或子查询。所有与这个关系连接然后使用倾斜连接优化。

——表与倾斜选择/ * +斜* /(“订单”)*订单,客户在哪里c_custId=o_custId——子查询与斜选择/ * +斜(C1) * /*(选择*客户在哪里c_custId<One hundred.)C1,订单在哪里C1c_custId=o_custId

斜提示配置关系名和列名

可能有多个连接关系,只有其中的一些将遭受倾斜。倾斜连接优化有一些开销,所以最好只在需要时使用它。为此,斜提示接受列名。只有加入这些列使用倾斜连接优化。

——单一列选择/ * +斜(“订单”、“o_custId”) * /*订单,客户在哪里o_custId=c_custId——多个列选择/ * +斜(“订单”,(“o_custId”、“o_storeRegionId”)) * /*订单,客户在哪里o_custId=c_custIdo_storeRegionId=c_regionId

斜提示配置关系名称、列名和倾斜值

您还可以指定倾斜值提示。根据查询和数据,倾斜值可能是已知的(例如,因为他们永远不会改变)或可能会很容易发现。这样做可以减少倾斜连接优化的开销。否则,三角洲湖自动检测到它们。

——单柱单斜的价值选择/ * +斜(“订单”、“o_custId”, 0) * /*订单,客户在哪里o_custId=c_custId——单一列,多个倾斜值选择/ * +斜(“订单”、“o_custId”, (0, 1, 2)) * /*订单,客户在哪里o_custId=c_custId——多个列,多个倾斜值选择/ * +斜(“订单”,(“o_custId”、“o_storeRegionId”), ((0, 1001), (1002))) * /*订单,客户在哪里o_custId=c_custIdo_storeRegionId=c_regionId