BI-SQL丨MEGRE

作者: Fabric丨白茶 | 来源:发表于2022-12-02 10:29 被阅读0次

MEGRE

MEGRE语句,在SQL的生态圈中,一直都隶属于一个比较重要的位置。

要知道,在实际的项目应用中,我们经常需要从上游数据源,进行原始数据的抽取、清洗、存储、分析等操作,特别是在存储这一环节,MEGRE的作用尤为突出。

举个例子:

我们需要完成对上游维度信息的抽取,根据我们的设定,数仓在每日执行抽取任务之前,需要对数仓已有的维度信息进行判断,如果已有的,要核对是否与最新的数据相匹配,不匹配则进行更新操作;如果是没有的,则需要执行插入操作。

常规的实现方法需要分别编写SQL语句进行条件判断,分别执行更新和插入操作,这样会显得代码非常的臃肿,性能也不是特别好,针对这种情况,使用MEGRE语句尤为的适合。

函数介绍

MEGRE语法如下:

MERGE 目标表
USING 源表
ON 匹配条件
WHEN MATCHED
THEN 语句
WHEN NOT MATCHED BY TARGET --如何和目标表不匹配
THEN 语句
WHEN NOT MATCHED BY SOURCE --如何和源表不匹配
THEN 语句;

注意:

1.最后语句的分号不可以被省略;

2.源表可以是一个物理表,也可以是一个子查询语句。

使用实例

案例数据:

在白茶本机的数据库中,存在名为”CaseData”的数据库,执行下面的语句,生成我们需要的源表和目标表。

CREATE TABLE TargetTable (
    UserID INT PRIMARY KEY,
    UserName VARCHAR(255) NOT NULL,
    Amount DECIMAL(10, 2)
);
INSERT INTO TargetTable(UserID, UserName, Amount)
VALUES(1, '张三', 15000),
      (2, '李四', 25000),
      (3, '王五', 13000),
      (4, '陈六', 10000);
--------------上面生成目标表,下面生成源表--------------
CREATE TABLE SourceTable (
    UserID INT PRIMARY KEY,
    UserName VARCHAR(255) NOT NULL,
    Amount DECIMAL(10, 2)
);
INSERT INTO SourceTable(UserID, UserName, Amount)
VALUES(1, '张三', 15000),
      (3, '王五', 14000),
      (4, '陈六', 20000),
      (5, '赵七', 10000),
      (6, '钱九', 10000);

结果如下:

我们来查看一下表的数据。

假设TargetTable表是数仓目前已有的数据,SourceTable表是每日更新的上游数据,我们现在要根据SourceTable表对TargetTable进行数据更新。

更新规则如下:

1.若TargetTable表和SourceTable表都有的数据,则需要更新为SourceTable表中的记录;

2.若TargetTable表有的记录,且SourceTable表没有,则这些记录需要被清除掉;

3.若TargetTable表没有记录,且SourceTable表有,则需要将SourceTable表中的记录插入到TargetTable表中。

根据上述要求,我们可以编辑如下SQL语句:

MERGE TargetTable
USING SourceTable
ON (TargetTable.UserID = SourceTable.UserID)
WHEN MATCHED THEN
UPDATE
SET TargetTable.UserName = SourceTable.UserName,
    TargetTable.Amount = SourceTable.Amount
WHEN NOT MATCHED BY TARGET THEN
INSERT (UserID, UserName, Amount)
VALUES (
        SourceTable.UserID,
        SourceTable.UserName,
        SourceTable.Amount
    )
WHEN NOT MATCHED BY SOURCE THEN 
DELETE;

结果如下:

这里是白茶,一个PowerBI的初学者。


相关文章

  • BI-SQL丨MEGRE

    MEGRE MEGRE语句,在SQL的生态圈中,一直都隶属于一个比较重要的位置。 要知道,在实际的项目应用中,我们...

  • BI-SQL丨AND & OR & IN

    AND函数 & OR函数 & IN函数 AND函数、OR函数和IN函数都可以理解是WHERE函数的补充,当然也可以...

  • BI-SQL丨WITH AS

    WITH AS 在DAX函数中,有些时候我们写的DAX逻辑引用次数过多,或者是性能过差,我们都会选择使用VAR来定...

  • BI-SQL丨INSERT INTO

    INSERT INTO语句 INSERT INTO语句通常可以用来在SQL的查询中针对表插入某些行数据。 看到这里...

  • BI-SQL丨ORDER BY

    ORDER BY语句 ORDER BY语句,在SQL中通常可以用来作为查询结果的排序依据。当然在PowerBI的D...

  • BI-SQL丨WHERE

    WHERE函数 WHERE函数,属于常用函数之一,通常可以用来进行条件查询。 其用途类似于DAX函数中的Filte...

  • BI-SQL丨SELECT

    白茶之前介绍过,无论是从PowerBI的角度来看,还是从职业发展规划的角度来讲,一个不会SQL的PowerBI分析...

  • BI-SQL丨DISTINCT

    DISTINCT函数 在SQL中,DISTINCT函数也是常见函数之一,通常可以用来进行对表或者列进行去重操作。 ...

  • BI-SQL丨TOP

    TOP函数 TOP函数,属于高级函数之一,通常可以用来返回固定数量的行数。 对于一定数据量级的事实表来说,此函数可...

  • BI-SQL丨JOIN

    JOIN JOIN在SQL Server中是一个很重要的概念。 JOIN经常用于将两个表或者多个表通过主外键关联进...

网友评论

    本文标题:BI-SQL丨MEGRE

    本文链接:https://www.haomeiwen.com/subject/ngoivrtx.html