使用 Azure Synapse Analytics 按层次结构提取员工的父级

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

我正在寻找以下情况的解决方案: 我必须提取我在流程中收到的一些员工的所有经理(按层次结构)(我们有一个文件,其中包含有关所有员工的所有信息,另一个文件表示流程的当前增量)、文件上下文它们存储在数据湖(csv 文件)中,我正在使用 Synapse 的 Azure SQL 池来查询文件。我无法使用递归表 (CTE),因为 Synapse 不支持它。 您还有其他想法可以让每个员工的上级都参与其中吗?谢谢你

azure t-sql recursion recursive-query azure-synapse-analytics
1个回答
0
投票

Azure Synapse Analytics 不支持递归 CTE。您可以使用 While 循环 来实现与递归 CTE 相同的要求。 Azure Synapse Analytics 专用 SQL 池支持 While 循环。

  • 为存储在 Data Lake 中的文件创建外部表。

  • 对于此演示,我创建了一个示例外部表,如下所示。

员工_id 经理_id
E12345 M123
M123 M456
M456 M789
M789

  • 为了获取给定员工的所有后代,您可以遵循以下 T-SQL 脚本。
DECLARE @EmployeeID VARCHAR(10) = 'E12345';
DECLARE @ManagerID VARCHAR(10);
DECLARE @ManagerHierarchy VARCHAR(MAX) = '';

SELECT @ManagerID = Manager_id
FROM ext_EmployeeHierarchy
WHERE Employee_id = @EmployeeID;

WHILE @ManagerID IS NOT NULL
BEGIN
    SET @ManagerHierarchy = CONCAT(@ManagerHierarchy, ' -> ', @ManagerID);
    SELECT @ManagerID = Manager_id
    FROM ext_EmployeeHierarchy
    WHERE Employee_id = @ManagerID;
END

SELECT SUBSTRING(@ManagerHierarchy, 4, LEN(@ManagerHierarchy) - 1) AS ManagerHierarchy;

此处的 WHILE 循环通过重复查询 EmployeeHierarchy 表中当前员工 ID 的经理 ID 来迭代层次结构。它将每个管理器 ID 附加到 @ManagerHierarchy 变量,并用分隔符 (

->
) 分隔。

输出:

经理层次结构
M123 -> M456 -> M789
© www.soinside.com 2019 - 2024. All rights reserved.