【问题标题】:Azure Derived Column - Create another column from the value of a column based on the value of another columnAzure 派生列 - 根据另一列的值从一列的值创建另一列
【发布时间】:2021-07-08 08:14:47
【问题描述】:

我有一张类似这样的桌子:

Country 2018 2019 2020 LastKnownYear
Spain 1 2 3 2019
Germany 4 5 6 2018
Italy 7 8 9 2020

我想添加另一列“latestKnownValue”

Country 2018 2019 2020 LastKnownYear latestKnownValue
Spain 1 2 3 2019 2
Germany 4 5 6 2018 4
Italy 7 8 9 2020 9

我已经简化了示例,虽然我使用的是年份,但该表的实际情况是源表中有很多年份(全部作为列)。

如何使用 Azure 中的“派生列”活动来执行此操作。或者在 Azure 中有其他方法吗?

【问题讨论】:

    标签: azure azure-data-factory azure-synapse


    【解决方案1】:

    ADF 数据流派生列中更简单的示例:

    创建一个名为“latestKnownValue”的新列并使用此表达式:

    toInteger(byName('LastKnownYear'))

    【讨论】:

      【解决方案2】:

      一个简单的 T-SQL CASE 语句就足够了:

      IF OBJECT_ID('tempdb..#tmp') IS NOT NULL DROP TABLE #tmp;
      
      CREATE TABLE #tmp (
          Country         VARCHAR(20) PRIMARY KEY,
          [2018]          INT NOT NULL,
          [2019]          INT NOT NULL,
          [2020]          INT NOT NULL,
          LastKnownYear   INT NOT NULL
      );
      
      INSERT INTO #tmp
      SELECT 'Spain', 1,  2,  3,  2019
      UNION ALL
      SELECT 'Germany',   4,  5,  6,  2018
      UNION ALL
      SELECT 'Italy', 7,  8,  9,  2020;
      
      
      SELECT *,
          CASE LastKnownYear
              WHEN '2018' THEN [2018]
              WHEN '2019' THEN [2019]
              WHEN '2020' THEN [2020]
              ELSE NULL
          END AS latestKnownValue--,
          --CHOOSE ( LastKnownYear - 2017, [2018], [2019], [2020] ) AS chooseExample
      
      FROM #tmp;
        
      
      ;WITH cte AS (
      SELECT *
      FROM #tmp
      UNPIVOT ( xvalue for xyear In ( [2018], [2019], [2020] ) ) upvt
      )
      SELECT 
          t.Country, t.[2018], t.[2019], t.[2020], t.LastKnownYear, 
          c.xvalue AS lastKnownValue
      FROM #tmp t
          INNER JOIN cte c ON t.Country = c.Country
              AND t.LastKnownYear = c.xyear;
      

      您现在无法访问 Azure Synapse Analytics 专用 SQL 池中的 CHOOSE,但它实际上是相同的东西,语法糖。另一种选择是 UNPIVOT 您的列,然后按照我的上一个示例加入。

      【讨论】:

      • 这有什么更新吗?如果您的表已经在一个专用的 SQL 池中,那么使用 T-SQL 来更新它是有意义的。如果您正在加载文件,请考虑按照 Mark 的回答映射数据流。
      猜你喜欢
      • 2023-02-23
      • 1970-01-01
      • 2021-12-02
      • 1970-01-01
      • 1970-01-01
      • 2015-07-11
      • 1970-01-01
      • 1970-01-01
      • 2020-04-16
      相关资源
      最近更新 更多