我正在寻找以下情况的解决方案: 我必须提取我在流程中收到的一些员工的所有经理(按层次结构)(我们有一个文件,其中包含有关所有员工的所有信息,另一个文件表示流程的当前增量)、文件上下文它们存储在数据湖(csv 文件)中,我正在使用 Synapse 的 Azure SQL 池来查询文件。我无法使用递归表 (CTE),因为 Synapse 不支持它。 您还有其他想法可以让每个员工的上级都参与其中吗?谢谢你
Azure Synapse Analytics 不支持递归 CTE。您可以使用 While 循环 来实现与递归 CTE 相同的要求。 Azure Synapse Analytics 专用 SQL 池支持 While 循环。
为存储在 Data Lake 中的文件创建外部表。
对于此演示,我创建了一个示例外部表,如下所示。
员工_id | 经理_id |
---|---|
E12345 | M123 |
M123 | M456 |
M456 | M789 |
M789 |
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 |