精华内容
下载资源
问答
  • 用EXCEPT对比两个表的数据用还是UNION

    千次阅读 2014-03-04 13:50:45
    问题描述: 今天是新系统上线之后第一次跑数据,需要和老系统跑出来的表做对比。完全一样则项目运行ok...再比较里面每一行数据是否一样的时候,先是用了如下方式: SELECT COUNT(0)  FROM  ( SELECT * FROM tab

    问题描述:

    今天是新系统上线之后第一次跑数据,需要和老系统跑出来的表做对比。完全一样则项目运行ok,新系统在时间上减少了人工干预,提高了80个百分点。先用老系统跑一次数据,导入到一个备份表。再用新系统跑一次,数量和备份表里面的一样。心里坦荡了一点。再比较里面每一行数据是否一样的时候,先是用了如下方式:

    SELECT

    COUNT(0) 

    FROM 

    (

    SELECT * FROM table_nm_bac

    UNION

    SELECT * FROM table_nm

    )  A

    表table_nm_bac和表table_nm里面的数据都是1万条,结果上述query出来的结果是9千条。


    环境:SQL SERVER 2008


    解决方法:

    因为想到不可能union出来的结果比每个表数量少,所以立马用EXCEPT的如下方式:

    SELECT

    COLUMN_NM1,

    COLUMN_NM2

    ...

    FROM

    table_nm

    EXCEPT

    SELECT

    COLUMN_NM1,

    COLUMN_NM2

    ...

    FROM

    table_nm_bac

    GO


    SELECT

    COLUMN_NM1,

    COLUMN_NM2

    ...

    FROM

    table_nm_bac

    EXCEPT

    SELECT

    COLUMN_NM1,

    COLUMN_NM2

    ...

    FROM

    table_nm

    GO

    这样两个query出来的结果都是空的。我就放心了。后来用下面的query再检查了一遍数据,结论出来了,是因为union把表里面自己的重复数据给除掉了:

    SELECT COUNT(0) FROM(
    SELECT DISTINCT * FROM table_nm) A

    GO

    SELECT
    COUNT(0)
    FROM
    (
    SELECT * FROM table_nm
    UNION
    SELECT * FROM table_nm
    )

    GO

    DISTINCT后的数据和UNION自己后的数据是一样一样的。


    结论:比对两个表数据是否一致还是用EXCEPT方式比较好, 因为两个做union会把自己表里面的重复数据也除掉。

    展开全文
  • Sheet700”sheet中的数据是否在“Sheet800”中存在,不存在标蓝色。 存在的场合,“Sheet800”sheet中的数据和“Sheet700”的2~41比较,不一样标注青色,并在最前面标注黄色。[/color] [code="VBA"]...
    [color=red]两个sheet页分别命名“Sheet700”,“Sheet800”。
    判断"Sheet700”sheet中的数据是否在“Sheet800”中存在,不存在标蓝色。
    存在的场合,“Sheet800”sheet中的数据和“Sheet700”的2~41行比较,不一样标注青色,并在最前面标注黄色。[/color]


    Sub Macro3()

    Dim tem, tem1 As String
    Dim text1, text2 As String
    Dim i As Integer, hang1 As Long, hang2 As Long, lie As Long, maxhang As Long, maxlie As Long
    '开始时间
    Dim sngStart As Single
    sngStart = Timer

    '底色恢复
    Sheets(1).Select
    Columns("A:A").Select
    With Selection.Interior
    .Pattern = xlNone
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    Range("A1").Select
    '底色恢复
    Sheets(2).Select
    Rows("2:1009416").Select
    With Selection.Interior
    .Pattern = xlNone
    .TintAndShade = 0
    .PatternTintAndShade = 0
    End With
    Range("A1").Select

    '最大行数设定
    maxhang = 250
    '最大列数设定
    maxlie = 41
    For hang1 = 2 To maxhang
    Dim a As Integer
    a = 0
    '第一个sheet中的第一列格的内容
    tem = Sheets(1).Cells(hang1, 1)
    'MsgBox ("TEM1=" & tem)
    For hang2 = 2 To maxhang
    '第二个sheet中的第一列格的内容
    tem1 = Sheets(2).Cells(hang2, 1)
    '发现相同数据的场合
    If tem1 = tem Then
    a = 1
    '黄色设定
    Sheets(2).Cells(hang2, 1).Interior.ColorIndex = 6
    'MsgBox ("TEM2=" & Sheets(2).Cells(hang2, 1))
    For lie = 4 To maxlie

    text1 = Sheets(1).Cells(hang1, lie)
    text2 = Sheets(2).Cells(hang2, lie)

    If text1 <> text2 Then
    'MsgBox ("A" & lie & "=" & Sheets(1).Cells(hang1, lie))
    'MsgBox ("B" & lie & "=" & Sheets(2).Cells(hang2, lie))
    '青色设定
    Sheets(2).Cells(hang2, lie).Interior.ColorIndex = 8
    End If
    Next
    End If
    Next
    '不存在的场合,蓝色设定
    If a = 0 Then
    Sheets(1).Cells(hang1, 1).Interior.ColorIndex = 5
    End If
    Next

    '保存文档
    Application.DisplayAlerts = False
    ThisWorkbook.Save
    Application.DisplayAlerts = True
    '输出时间差
    MsgBox ("ok,costTime:" & Timer - sngStart)
    End Sub


    展开全文
  • 今天在群里又看到了一个小伙伴问类似的问题,【jmeter如何实现数据库查询出来的结果与接口返回的结果进行对比判断,或者数据库字段的相加减与接口返回进行对比】。其实都一样,因为你把运算放在查询那里就了,...

    今天在群里又看到了一个小伙伴问类似的问题,【jmeter如何实现数据库查询出来的结果与接口返回的结果进行对比判断,或者数据库两字段的相加减与接口返回进行对比】。其实都一样,因为你把运算放在查询那里就行了,运算放beanshell脚本里面会影响性能。这事其实很简单,来理一下思路:

    1、从数据库中拿数据:用JDBC Request或beanshell后置处理器;

    2、从接口返回中拿数据:用正则表达式提取器;

    3、对比:用beanshell断言。

    ---------------------------------------------------------------------------------------------------------------------

    一、数据库查询

    添加一个【JDBC Connection Configuration】先连接上数据库(具体可看jmeter连接Mysql),然后添加【JDBC Request】写SQL语句查询出所需要的数据,如下图:

    若使用Beanshell PostProcess,可以这样写:

    Value = vars.getObject("Result_variable_name").get(0).get("margin"); //从查询结果中取出margin列的第一行值,第一行index从0开始算get(0)

    vars.put("result",Value); //将取出的值赋给变量result

    二、接口返回

    从response中拿数据,使用正则表达式提取器,这里就不啰嗦了(可以看jmeter关联),直接放图,如下:

      上述两步完成之后,可以添加一个Debug Sampler或者其他方式看看取到的参数是否正确。如果和自己的预期有出入,那么仔细检查SQL,正则表达式等。

    三、Beanshell断言

    beanshell中的代码其实是很简单的,就是一个if...else,如图:

    if("${margin_1}".equals("${uid}")) //数据库的取值与接口正则取值比对

    {

    System.out.println("OK");

    }else{

    System.out.println("fail");

    }

    数据库取到的值[margin_1]和接口返回的值[uid]进行对比,其中margin_1是指sql查询出来的第一个数据,具体用法请了解JDBC Request下面的参数,而${margin_1/uid}是jmeter调用动态参数值的方式。运行之后可以在jmeter的日志中看到结果,如下(我从数据库拿的是时间戳的相减值,接口是用户的uid,肯定是不相等的):

    -----------------------------------------------------------------分割线----------------------------------------------------------

    至此,就没了。这里只阐述了数据对比这个操作,至于成功/失败之后怎么操作,就不继续说下去了,场景很多嘛。农历年前在上海的最后一篇博客,明天就请假回家啦,各位明年见。

    ___是非功过有人心,善恶斤两问阎王

    展开全文
  • 什么是多路复用? 简单的理解就是在单线程下可以实现同时监控多个socket文件是否有IO事件到达的能力。 为什么要用多路复用? 要理解这个问题首先要先来复习一个BIO和NIO这种网络模型...读取数据时也一样,即使客户端

    什么是多路复用?

    简单的理解就是在单线程下可以实现同时监控多个socket文件是否有IO事件到达的能力。

    为什么要用多路复用?

    要理解这个问题首先要先来复习一个BIO和NIO这两种网络模型。

    BIO

    BIO称为同步阻塞模型,也就是一个线程只能监控一个socket,并且在有IO事件到达前不能做其他任何事情,线程会一直处于阻塞状态。


    调用accpet后,如果没有客户端连接,代码就会一直阻塞在这一行,直到有连接到达。

    Socket client = server.accept()
    

    读取数据时也一样,即使客户端没有发送任何数据过来,服务端也只能阻塞在这一行,等待客户端的数据请求到达。

    String str = reader.readLine()
    

    BIO的模型在Java网络编程中就是一个线程对应一个客户端。

    NIO

    在BIO网络模型中要想同时处理多个客户端就只能开启多线程,但是毕竟线程的资源有限,当客户端连接较多时BIO就不能适用了,于是就有了NIO这种网络模型。

    NIO称为同步非阻塞模型,在此模型下,连接、读/写等IO请求即使没有数据到达也不会阻塞调用了,而是会立刻返回调用者一个约定好的错误状态,调用者只需根据自己的业务逻辑处理即可。

    	while (true) {
                SocketChannel accept = serverSocketChannel.accept();
                if (accept == null) {
                    System.out.println("accept 没有阻塞,而是返回了null!");
                } else {
                    //有连接到达,可以添加到一个保存了所有到达连接的集合中
                    socketChannelList.add(accept);
                }
                //遍历集合中所有连接进来的客户端
                Iterator<SocketChannel> iterator = socketChannelList.iterator();
                while (iterator.hasNext()) {
                    SocketChannel sc = iterator.next();
                    int read = sc.read(byteBuffer);
                    if (read > 0) {
                        //有数据到达
                    } else {
                        //没数据到达
                    }
                }
            }
    

    NIO虽然可以实现非阻塞了,但是问题也很明显,服务端每次都需要遍历所有连接进来的客户端,挨个询问是否有数据到达(调用read函数),每一次的询问就会产生系统调用,造成用户态与内核态的切换,假如服务端维护着1000个客户端的连接,其中只有1个客户端有请求到达,那就意味着服务端的999次都是无效的请求。

    现在NIO也无法解决同时处理大量客户端的问题,所以就出现了多路复用,它必然能够解决NIO中的无效系统调用的问题。

    多路复用是如何解决NIO存在的问题?

    现在我们已经知道NIO中主要问题就是可能会存在大量的无效系统调用,那么在多路复用模型中,思路很简单,就是由服务端告诉内核对哪些socket的哪些事件感兴趣,那么当有对应的事件到达时,内核就会主动通知调用者,这样就避免了无效的调用了。

    select、poll、epoll对比

    在linux中多路复用存在select、poll、epoll三种实现方式,其中epoll是现在用的最多的实现方式。

    select

    在这里插入图片描述

    
           int
           main(void)
           {
               fd_set rfds;
               struct timeval tv;
               int retval;
    
               /* Watch stdin (fd 0) to see when it has input. */
               FD_ZERO(&rfds);
               FD_SET(0, &rfds);
    
               /* Wait up to five seconds. */
               tv.tv_sec = 5;
               tv.tv_usec = 0;
    
               retval = select(1, &rfds, NULL, NULL, &tv);
               /* Don’t rely on the value of tv now! */
    
               if (retval == -1)
                   perror("select()");
               else if (retval)
                   printf("Data is available now.\n");
                   /* FD_ISSET(0, &rfds) will be true. */
               else
                   printf("No data within five seconds.\n");
    
               exit(EXIT_SUCCESS);
           }
    
    

    在调用select时可以传入多个fds,并告知对这些fds的哪些事件关心,比如只关心读事件,那么一旦有读事件到达该方法就会返回,你只需遍历这些fds,获取数据即可。

    可以看出有了select函数后,只有当有IO事件到达时,你才会去遍历fds,而在之前的NIO中无论是否有数据到达都必须遍历所有fds。

    select缺点:

    • 如果fds很多时,每次都需要先把fds从用户空间复制到内核空间,事件到达时再从内核空间复制到用户空间,有一定的消耗
    • linux内核中,单个进程能够打开的fds数量有限。
    • 假设我们告诉select,关心的fds数量有1000个,那么只要有一个有事件到达,select就会返回,然而调用者还是不知道具体是哪一个fds有事件,所以还是需要从头到尾遍历一次。

    poll

    poll和select没有太大的区别,poll主要解决了select中fd数量限制的问题,其他select中存在的问题poll中依然存在。

    epoll

    epoll分为3个阶段:epoll_create、epoll_ctl、epoll_wait。

    先用epoll_create创建eventpoll对象并返回对应的epollfd,再通过epoll_ctl把需要监控的fd添加到eventpoll对象中,最后调用epoll_wait等待数据。

    		   #define MAX_EVENTS 10
               struct epoll_event ev, events[MAX_EVENTS];
               int listen_sock, conn_sock, nfds, epollfd;
    
               /* Set up listening socket, 'listen_sock' (socket(),
                  bind(), listen()) */
    
               epollfd = epoll_create(10);
               if (epollfd == -1) {
                   perror("epoll_create");
                   exit(EXIT_FAILURE);
               }
    
               ev.events = EPOLLIN;
               ev.data.fd = listen_sock;
               if (epoll_ctl(epollfd, EPOLL_CTL_ADD, listen_sock, &ev) == -1) {
                   perror("epoll_ctl: listen_sock");
                   exit(EXIT_FAILURE);
               }
    
               for (;;) {
                   nfds = epoll_wait(epollfd, events, MAX_EVENTS, -1);
                   if (nfds == -1) {
                       perror("epoll_pwait");
                       exit(EXIT_FAILURE);
                   }
    
                   for (n = 0; n < nfds; ++n) {
                       if (events[n].data.fd == listen_sock) {
                           conn_sock = accept(listen_sock,
                                           (struct sockaddr *) &local, &addrlen);
                           if (conn_sock == -1) {
                               perror("accept");
                               exit(EXIT_FAILURE);
                           }
                           setnonblocking(conn_sock);
                           ev.events = EPOLLIN | EPOLLET;
                           ev.data.fd = conn_sock;
                           if (epoll_ctl(epollfd, EPOLL_CTL_ADD, conn_sock,
                                       &ev) == -1) {
                               perror("epoll_ctl: conn_sock");
                               exit(EXIT_FAILURE);
                           }
                       } else {
                           do_use_fd(events[n].data.fd);
                       }
                   }
               }
    
    

    就绪列表

    select其中有一个问题就是在一批fds中不知道具体哪些是真正的有数据到达,只能一个个遍历,而在epoll中,当通过epoll_ctl函数添加或者删除socket时,除了使用红黑树的结构帮我们维护这些socket之外,还会向内核的中断程序注册一个回调函数,那么当fd中断时就会调用回调函数,把中断的fd放到就绪里链表中(一种双向链表的数据结构),当epoll_wait调用时,就可以直接通过这个就绪链表获取数据即可。

    这里就同时解决了两个select中的问题:

    1. 不需要遍历所有fd,挨个询问具体哪个fd数据到达了。
    2. 只会把真正有事件到达的fds从内核空间拷贝到用户空间。

    总结

    在这里插入图片描述

    展开全文
  • 2、这个存储过程不考虑表中的数据是否有唯一id,没有id一样行的通 3、表中的列一般情况下不能少于两列,少于两列的没有测试可用性 4、那个恢复数据功能有一个小问题,还没解决掉 /** *对比两张表的不同 * *...
  • 1、可以把对比后的信息详情打印出来,比如列是否相等,行是否相等; 2、在数据中如果有不相等列,那么就只比较相同的列; 3、可以设置绝对差值和相对差值,比如我们比较有浮点数的数据时,设置下绝对差值为0.01,...
  • = Y_test[:, 1]] # 确保个数字不一样 Y_test = Y_test[Y_test[:, 0] != Y_test[:, 1]] Y_test.sort(axis=1) # 排一下序,因为只比较集合,不比较顺序 # 搭建普通CNN分类模型 input_image = Input(shape=...
  • 我想做一个人证比对系统:输入是身份证照片和一个人的拍摄图像,然后对比张图像是否是一个人。基本思路是用已有的网络结构(如Alexnet去掉分类层)提取特征,...还是说和身份证里的人脸大小一样的其他数据集?
  • Excel两列比较

    2011-08-04 08:07:00
    昨天做了个数据库表的连接查询操作,发现连接以后的记录与原始数据表里面的记录不一致,但是如果去一的找这个不相同的位置,也不好找,尽管SQL能够解决这个问题,但是我想能否通过最简单的Excel来解决这个...
  • 图片相似度识别

    热门讨论 2013-03-06 13:36:24
    你可以将几张图片放在一起,也计算出他们的汉明距离对比,就可以看看张图片是否相似。 这种算法的优点是简单快速,不受图片大小缩放的影响,缺点是图片的内容不能变更。如果在图片上加几个文字,它就认不出来...
  • 中文版Excel.2007图表宝典 1/2

    热门讨论 2012-04-06 18:49:24
    11.5.2 选择要绘制的行数据/311 11.5.3 使用来自多个表单的数据/313 第12章 避免常见的制图错误/317 12.1 了解观众/317 12.2 图表精确度/318 12.2.1 根据上下文的数据绘图/319 12.2.2 夸大差异或者相似处/320 ...
  • 中文版Excel.2007图表宝典 2/2

    热门讨论 2012-04-06 19:01:36
    11.5.2 选择要绘制的行数据/311 11.5.3 使用来自多个表单的数据/313 第12章 避免常见的制图错误/317 12.1 了解观众/317 12.2 图表精确度/318 12.2.1 根据上下文的数据绘图/319 12.2.2 夸大差异或者相似处/320 ...
  • 实例004 像“开始”菜单一样漂亮的菜单 5 实例005 多彩的菜单 6 实例006 可以拉伸的菜单界面 8 1.2 工具栏设计 9 实例007 带背景的工具栏 9 实例008 浮动工具栏 10 1.3 状态栏设计 11 实例009...
  • 实例004 像“开始”菜单一样漂亮的菜单 5 实例005 多彩的菜单 6 实例006 可以拉伸的菜单界面 8 1.2 工具栏设计 9 实例007 带背景的工具栏 9 实例008 浮动工具栏 10 1.3 状态栏设计 11 实例009...
  • 然后我们可以对比不同的执行计划,比如达到同样效果,个开发人员编写的不同SQL语句谁的效率更高我们就可以对比它们的执行计划来分析。执行计划比较复杂的SQL语句质量就不是很高 我们还可以结合时间统计【set ...
  • c# 加密和解密相关代码

    热门讨论 2011-09-06 11:04:59
    对比两个二进制的值,从右向左按位对比,如果两个二进制数的相应位都为1 或两个二 进制数的相应位都为0,则返回0;如果两个二进制数的相应位中一个为1 一个为0,则返回1,最后得到的结 果为二进制值11000,该值转换...
  • (35) 检查软件产品是否符合需求定义的过程称为(A) 注:P95 A. 确认测试 B. 集成测试 C. 验证测试 D. 验收测试 (36) 下列工具中属于需求分析常用工具的是(D) 注:P67 A. PAD B. PFD C. N-S D. DFD (37) 下面不属于...

空空如也

空空如也

1 2 3 4 5
收藏数 88
精华内容 35
关键字:

对比两行数据是否一样