精华内容
下载资源
问答
  • 文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。...

    场景

    昨天系统自动备份了某一个数据库的全部表数据,名dbAll.sql.gz。文件较大(如40G)

    今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。

    操作方案

    1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。不推介,因为数据量太大,很耗时

    2.解压dbAll.sql.gz后,通过Java代码读取dbAll.sql中的关于tableA的CREATE语句及INSERT语句等到文件tableA.sql,然后通过tableA.sql导入临时数据库即可进行比较。

    3.参见(没试过):mysqldump 导出的是全库 alldb.sql 导入的时候可不可以只导其中的一个表

    法1:

    perl extract_sql.pl -t mytable -r mydumpfile > mytable.sql

    法2:

    cat test1db.sql | sed -n ‘/Table structure for table .test1./,/Table structure for table .test2./p'>/tmp/xxx.sql

    法3:

    awk ‘/Table structure for table .test1./,/Table structure for table .test2./{print}' src_bake_db.sql.gz > targetdb.sql

    法3说明:将src_bake_db.sql.gz压缩文件中的test1、test2表的数据导出到targetdb.sql中

    补充知识:mysql命令行导出整个库里面所有表的前一百条数据

    如下所示:

    mysqldump -uysp -pYspxxx db_name --where="1=1 limit 100" >/mnt/share/paxxx.com/backup.sql

    直接在命令行运行就可以了,不需要登陆mysql客户端。

    mysqldump -h 服务器名 -u 账号名-p 数据库名 --where="true limit 100"> /tmp/supports_launch.sql

    phpmyadmin导出php脚本:

    http://local.phpmyadmin.com/export.php

    以上这篇mysql实现从导出数据的sql文件中只导入指定的一个表就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持聚米学院。

    展开全文
  • select 'select ''' || table_name || ''' ' || '||' || ' count(*) from ' || owner || '.' || table_name || '@db...
    select 'select ''' || table_name || ''' ' || '||' || ' count(*) from ' ||
           owner || '.' || table_name || '@dblink' || chr(10) || 'union all' ||
           chr(10) || 'select ''' || table_name || '''' || '||' ||
           ' count(*) from ' || owner || '.' || table_name || ';'
      from sync_table@dblink
     where table_name like 'TAB\_SYNC\__\__' escape '\';

    来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25148509/viewspace-715096/,如需转载,请注明出处,否则将追究法律责任。

    转载于:http://blog.itpub.net/25148509/viewspace-715096/

    展开全文
  • 脚本下载:CheckEncryptionCertificates.zip http://gallery.technet.microsoft.com/scriptcenter/Check-SQL-Server-4feff69f/...本脚本用于确认未被备份TDE(透明数据加密)中使用的证书,之后将被影响的数据库列出。

    脚本下载:CheckEncryptionCertificates.zip
    http://gallery.technet.microsoft.com/scriptcenter/Check-SQL-Server-4feff69f/

    本脚本可以用于检查您的SQLServer加密证书没有备份问题。

    本脚本用于确认未被备份TDE(透明数据加密)中使用的证书,之后将被影响的数据库列出。



    您可以在 微软一站式脚本示例库 中找到更多的脚本示例资源:http://aka.ms/onescriptingallery


    展开全文
  • 在上一篇我们讲解了如何通过python的pandas包 的merge方法对比两个表的数据。但它的数据来源于SQL执行后的数据导出的excel或者csv文件。这会让我们增加人工操作的工作内容...Python数据核对系列之1——一个偷懒的开...
    在上一篇我们讲解了如何通过python的pandas包 的merge方法对比两个表的数据。但它的数据来源于SQL执行后的数据导出的excel或者csv文件。这会让我们增加人工操作的工作内容。本篇我们将解决这个人工导数问题。直接通过python连接数据库,获取数据库对应表里的数据,加载到pandas的DataFrame中,然后进行merge对比。Python数据核对系列之1——一个偷懒的开始Python数据核对系列之2—power query VS pandas

    建立数据库连接-单独连接

    af2c01dd5dd138944340f01ae538472f.png

    要想完成这个操作,我们首先需要通过python建立与数据库的连接。从而可以从数据库中SQL数据。对于不同的数据库,有不同的包用以建立连接。我们列举一下常见的关系型数据库的连接库。

    oracle:cx_Oracle
    https://cx-oracle.readthedocs.io/en/latest/index.html这是oracle官方开发的python操作oracle数据库的库。这个网址里大家可以看到整个库的使用教程,还可以下载pdf等版本。

    # 官方给出的案例 https://cx-oracle.readthedocs.io/en/latest/user_guide/connection_handling.htmluserpwd = ". . ." # Obtain password string from a user prompt or environment variable# hr:用户名;userpwd:密码;dbhost.example.com/orclpdb1:数据库地址,例如192.168.0.1:1521/orcl。oracle的默认端口为1521,默认数据库名称orclconnection = cx_Oracle.connect("hr", userpwd, "dbhost.example.com/orclpdb1", encoding="UTF-8")
    import cx_Oracle # 导入oracle操作库conn = cx_Oracle.connect("user",                         "password",                         "IP:1521/orcl",                         encoding="UTF-8")

    MySQL:pymysql
    https://pymysql.readthedocs.io/en/latest/
    这是用于操作mysql数据库的库。从它的目录来看显得比oracle的内容少很多了。

    import pymysqlconn = pymysql.connect(host="localhost",                       user="user",                       password="passwd",                       db="db",                       charset="utf-8")

    sqlserver:pymssql
    https://pymssql.readthedocs.io/en/latest/index.html
    这是用于操作sqlserver数据库的库。

    import pymssqlconn = pymssql.connect('IP',                       'user',                       'password',                       'database')                       # 例如:conn = pymssql.connect('192.168.0.1','user','123456','dbname')

    当然除了不同数据库对应的不同python库之外,还有个数据库连接库sqlalchemy可以完成对不同数据库的连接。
    https://docs.sqlalchemy.org/en/13/

    99fb83ec71482722fa4fdcef7a12a747.png

    本篇文章主要涉及oracle和sqlserver,因此我们使用cx_Oracle和pymssql来完成python和数据库的连接。

    建立数据库连接-连接池连接

    af2c01dd5dd138944340f01ae538472f.png

    利用上面的方法我们可以建立python跟数据库之间的连接,但是在进行大量的数据库操作时,单个连接可能会引发连接超时等问题。因此更好的方法是为数据库建立连接池,通过连接池中预定义好的连接进行快速数据库操作,可以消除单个连接超时问题,还可以带来以下几个好处。

    1. 较少了网络开销

    2. 系统的性能会有一个实质的提升

    3. 没了麻烦的TIME_WAIT状态

    python建立连接池的方法可以使用DBUtils的PooledDB来完成。

    class PooledDB(creator,  # 数据库接口,上面提到的cx_Oracle、pymssql、pymysql               mincached=0, # 启动时开启的空连接数量               maxcached=0, # 连接池最大可用连接数量               maxshared=0, # 连接池最大可共享连接数量               maxconnections=0, # 最大允许连接数量               blocking=False, # 最大允许连接数量               maxusage=None, # 单个连接最大复用次数               setsession=None, # 用于传递到数据库的准备会话,如 [”set name UTF-8″] 。               reset=True               failures=None               ping=1               *args,                **kwargs)# After you have created the connection pool, # you can use connection() to get pooled, # steady DB-API 2 connectionsfrom DBUtils.PooledDB import PooledDBpool = PooledDB(cx_Oracle,                mincached=2,                maxconnections=6,                user='user',                password='123456',                dsn='192.168.0.1:1521/orcl')conn = pool.connection() # 通过连接池建立连接
    对于oracle数据库来说,cx_Oracle库有自己专有的建立数据库连接池的方法。https://cx-oracle.readthedocs.io/en/latest/user_guide/connection_handling.html#connection-strings    

    3ebdda5b18af6b2d4a09e4a7ebf96bf4.png

    cx_Oracle的SessionPool()方法可以为oracle建立连接池。
    import cx_Oracle# 创建连接池pool = cx_Oracle.SessionPool("user",  # 用户名                             "123456", # 密码                             "192.168.0.1:1521/orcl"# 数据库地址                             min=2, # 最小连接数                             max=5, # 最大连接数                             increment=1,  # 需要建立连接时的连接数增加数,1代表每次增加1个连接                             encoding="UTF-8")# 从连接池获取连接connection = pool.acquire()# 通过连接创建cursor对象cursor = connection.cursor()for result in cursor.execute("select * from tablename"):    print(result)# 释放连接pool.release(connection)# 关闭连接池pool.close()

    cursor方法读取数据库

    af2c01dd5dd138944340f01ae538472f.png

    数据库连接建立之后就是需要进行数据库数据查询或者进行增删改操作了。读取数据库数据的方法我们有两种,第一种便是通过cursor游标来获取数据库的数据。游标可以理解为SQL执行后得到的表格的一个行号的指针。它会从第一行开始移动。
    # 先sql = '''  select *   from tablename''' # 三引号可以编辑文本块with conn.cursor() as cur:    cur.execute(sql) # 让数据库执行SQL语句    # SQL执行后,cursor默认是在第一条数据上    cur.fetchone() # 获取SQL执行后的表的一条数据。执行后cursor移动到第2条数据上。    cur.fetchmany(100)     # 获取SQL执行后的表的100条数据。    # 此时是从第2条数据开始读取的,读到101条结束。    # cursor移动到102条数据上    cur.fetchall() # 获取第102及之后的所有数据    cur.description # 获取SQL执行结果的列信息    cur.commit() # 如果sql是insert/delet/update操作必须进行commit操作,不然操作不会入库。

    b6b63806fa12d3d6eb51312d75f9a652.png

    cur.description返回的信息是cursor执行的sql之后获取到的表数据的列信息。是7个项目组成的列表,包含:name(列名称), type(列数据类型), display_size, internal_size, precision, scale, null_ok。我们需要的就是name这个值。通过for循环遍历description结果我们可以获取SQL查询得到的数据的列名信息。
    column = []for i in range(len(colunms)):    column.append(colunms[i][0])print(column)
    而要获取SQL执行之后的数据内容的话,可以通过cursor的fetchone()、fetchmany()、fetchall()方法。执行之后同样得到的是包含每一行数据的列表。

    fe530a9af712ba731a7bb9f927c07da9.png

    列和数据获取之后我们需要把他们放入到pandas的DataFrame数据结构中。
    import pandas as pdclass DataFrame(data=None, # 要放入DataFrame的数据,可以是2维数组、字典或者DataFrame数据                indexOptional[Axes]=None, # 索引列名称                columns: Optional[Axes]=None, # 各列名称                dtype: Optional[Dtype]=None, # 各列数据类型                copy: bool=False) # df = pd.DataFrame(data=data,columns=column)

    486cc49ff7a4bad5c3ea3ae0d4732417.png

    放入DataFrame之后我们就可以进行后续处理了。

    pd.read_sql()获取数据库数据

    af2c01dd5dd138944340f01ae538472f.png

    上面是通过conn获取cursor对象,然后通过cursor对象的操作来获取数据并存入DataFrame中,整个过程相对比较复杂,需要写的代码较多。read_sql()整个方法简单直接。一行代码就搞定上啰里啰嗦那么多行代码才能搞定的事。
    pandas.read_sql(sql,  # 要执行的sql                con,  # 数据库连接对象                index_col='None', # 索引列                coerce_float='True', # 是否将非字符串、非数字对象(如decimal.Decimal)的值转换为浮点值,这对SQL结果集很有用。                params='None',                 parse_dates='None', # 要解析为date类型的数据列                columns='None', # 列名称                chunksize: None = 'None')  # 执行SQL查询生成DataFrame,如果chunksize不为None,                # 则生成可迭代的DataFrame对象,每个DataFrame块包含chunksize设置的行数的数据。                # 也就是通过chunksize将SQL执行后的数据分成几块。df2 = pd.read_sql(sql,BI_conn)

    5361753f61f6377d3e2e226618d797c9.png

    类似pandas.read_sql的方法还有
    • read_sql_table

      • 网址:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql_table.html#pandas.read_sql_table

      • 直接读取数据库中的表数据放入DataFrame。读取的是整个表数据。

      • pd.read_sql_table("tablename",conn)
    • read_sql_query

      • 网址:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_sql_query.html#pandas.read_sql_query

      • 读取SQL查询得到的结果数据放入DataFrame

    read_sql可以看成是上面这俩方法的组合。

    到此为止,我们就建立完成python与数据库的连接,并通过执行SQL获取到了我们想要的数据了。

    人生苦短,我用Python!一切皆是信息,万物源自比特!

    数字化必定会深刻革命我们的办公和生活!

    简道云,中小企业数字化之路的绝佳伴侣!

    本公众号将分享数字化的实践、学习、思考。也许涉及信息化系统设计、各种办公软件、数据分析、理论知识、实践案例…… 感谢你与我一同成长……

    如果有关企业数字化的疑问、思考和讨论 或者 关于简道云的应用搭建、数据工厂、仪表盘等疑问咨询或者合作,欢迎与我联系。(关注公众号,可以找到我的联系方式)

    展开全文
  • 今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。 操作方案 1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。不推介,因为...
  • 也就是我们要开始的一个小系列——Python个数据核对。问题描述:对比两个表主键字段数据的一致性,查看是否源数据的主键都存在于数据仓表里面,把没有的标记出来。(也就是excel里的VLOOKUP,SQL里的left/right join)...
  • 做开发过程中,经常会用到将Excel中数据导出到SQL Server中的情况,你可以利用SQL SERVER 中自带的导入数据的方式,但这种方式,有时会发现数据导入后,可能为空,可能开头少个零,此种情况多出现于数值型的列,今天...
  • 在上一篇我们讲解了如何通过python的pandas包 的merge方法对比两个表的数据。但它的数据来源于SQL执行后的数据导出的excel或者csv文件。这会让我们增加人工操作的工作内容...Python数据核对系列之1——一个偷懒的开...
  • 文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。...
  • 今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。   操作方案 1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。不推介...
  • 文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。...
  • mysql从导出数据sql文件中只导入指定的一个表发布...文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.g...
  • SQLServer用COMPUTE 和 COMPUTE BY 汇总数据

    千次阅读 2017-09-29 17:13:13
    使用compute可以在一次查询中同时输出数据明细和汇总结果,这个方法不仅在程序使用时很方便,并且方便进行数据核对
  • 在前面的文章中我们介绍了如何通过python连接数据库然后读取到我们需要的数据,然后放入pandas的DataFrame中进行...1.to_sql一步到位前面我们讲解pandas获取数据库数据的时候提到过利用pandas的read_sql来读取数据库...
  • 文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。...
  • 文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。...
  • 日常开发中经常会验证spark生成的数据是否和源oracle库中... oracle sql 执行结果一致即可,比如我们需要核对201907月的数据: (1)在测试oracle中执行sql select st.sst_code, sum(case when o.order_type ='1072102...
  • 也就是我们要开始的一个小系列——Python个数据核对。问题描述:对比两个表主键字段数据的一致性,查看是否源数据的主键都存在于数据仓表里面,把没有的标记出来。(也就是excel里的VLOOKUP,SQL里的left/right join)...
  • HIVE数仓数据血缘分析工具-SQL解析

    万次阅读 多人点赞 2015-10-27 16:05:42
    1、两个数据报表进行对比,结果差异很大,需要人工核对分析指标的维度信息,比如从头分析数据指标从哪里来,处理条件是什么,最后才能分析出问题原因。 2、基础数据表因某种原因需要修改字段,需要评估其对数仓的...
  • 文件较大(如40G)今天因发现某一个表tableA的一条数据存在问题,需核对两条记录的变化。需从dbAll中找回tableA的数据,以便比较该记录。操作方案1.将dbAll.sql.gz导入待比较的数据库(临时数据库)中,然后比较tableA。...
  • 如果你在MySQL从服务器上遇到类似下面的错误信息,那么恭喜你中招了:mysql>SHOWSLAVESTATUS\GLast_Error:Error'Duplicateentry'...'forkey...'...出现此类错误的时候,很多人会用sql_slave_skip_counter操作...
  • 前几天做BI Tabular表格模型的时候,数据中心核对数据发现模型展现数据比实际数据要多,经过核查之后,发现原来我是一个不经意,在做数据选取的时候,inner join的字段CITY_NAME_CN选取错误。 首先对比事实表和我...
  • 1、打开PL/SQL Developer,选择工具栏中的”Tools” 2、选择Tools下的TextImporter,如下: 3、点击open data file图标,导入文件,具体如下: 4、选择导入的目标表,具体如下: 5、文件中的列和表中的段核对上,...
  • 如上,这行代码并没有把数据插入到相应的表中,RelationTab是表名,相应列名也都核对过,传入数据也都进行的数据类型的转换。 在上述代码之后重新声明了新的SqlCommand对象: SqlCommand cmd3 = new SqlCommand...
  • 如果你在MySQL从服务器上遇到类似下面的错误信息,那么恭喜你中招了:mysql>SHOWSLAVESTATUS\G Last_Error:Error'Duplicateentry'...'forkey...'onquery....出现此类错误的时候,很多人会用sql_sla...
  • ...在使用Excel的时候,常常会遇到这样的问题:有2个数据表,数据表1中记录了大量的信息,比如人员的培训的...通常在表内的数据量不大的时候,手工一条条核对数据也是可以的,但遇到数据表非常庞大的时候,手工
  • 导读:郑松华,知数堂SQL 优化班老师现任 CCmediaService DBA,主要负责数据库优化相关工作擅长SQL优化 ,数据核对想阅读更多内容请点击订阅专栏大家好,我是知数堂SQL 优化班老师 网名:骑龟的兔子背景说明:今天在...
  • 在使用Excel的时候,常常会遇到这样的问题:有2个数据表,数据表1...通常在表内的数据量不大的时候,手工一条条核对数据也是可以的,但遇到数据表非常庞大的时候,手工核对就费时费力还容易出错了。这里给大家介绍一种
  • 数据块,数据库表空间段,区,块灰数据Sql执行过程客户端将sql语句发到服务器进行解析检查SQL语句的合法性检查SQL语言含义获得对象解析锁数据访问权限的核对sql语句进行解析(软解析和硬解析)确定最佳执行计划SQL...
  • SQL 优化案例一则

    2019-10-09 00:06:52
    导读:郑松华,知数堂SQL 优化班老师现任 CCmediaService DBA,主要负责数据库优化相关工作擅长SQL优化 ,数据核对想阅读更多内容请点击订阅专栏大家好...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 201
精华内容 80
关键字:

数据核对sql