- 博客(160)
- 资源 (2)
- 问答 (6)
- 收藏
- 关注
原创 图数据库neo4j进阶(一):csv文件导入节点及关系
导入到图数据库时,class_id,match_teacher,english_teacher,chinese_teacher都是节点的属性,Class为节点的标签。导入到图数据库时,会生成两条关系:如300 -[belong]->1,301 -[belong]->2,name、age为student的属性。进入终端以后就可以执行导入命令了。
2025-02-13 11:00:40
1008
原创 SQL进阶:如何跳过多个NULL值取第一个非NULL值?
如上述代码所示,按照产品分组,销售日期排序,用了coalesce()函数,表示若是amount为空,则取lag(),默认是取上一条,上一条若也为空,则用IGNORE NULLS语法忽略NULL值,再取上一个填充,直到找到非NULL值。某产品当天sale_date为空的销售价格取上一天的填充,最终想展示的如下述表格所示。
2024-11-25 09:29:31
1355
原创 SQL进阶:字段中包含CSV,如何通过Sql解析CSV成多行多列?
prior条件指的是当前递归在哪个层级下运行,比如上述例子一个csv字段描述的是一个班级的事情,递归是在这个班级下运行,所以prior条件要加上prior class_no = classno,不然会造成数据重复。需要把上述clob类型的csv字段用Sql的方式展开,如上述csv字段有三行三列,就需要把上述字段转成实际的三行三列,如下所示。Oracle数据库中某个字段value是CLOB类型,存的是csv格式的数据,如下所示。则不会循环进行拆分,只会拆分第一段,比如我那个例子,只会获取到。
2024-11-15 11:18:30
944
1
原创 ORACLE批量插入更新如何拆分大事务?
上述语句中若test_tmp数据量比较大,merge到test的时候就会引起大事务,可以考虑对test_tmp的数据进行拆分,采用分页的思路,如下所示。说明了Mysql如何拆分,本篇文章探讨Oracle或OceanBase批量插入更新拆分大事务的问题。
2024-11-07 15:36:04
523
原创 python进阶:连接操作各种数据库
连接OceanBase稍微复杂一点,需要准备个jar包,我这里用的如下所示,连接的是Oceanbase4.2版本。本篇文章python连接操作各种数据基于python3.8版本。
2024-10-31 13:41:44
430
原创 OceanBase4.2授权INSERT ANY TABLE,插入某用户的表仍然报错:ORA-00942:table or view does not exists
当时排查了好久都没发现原因,后面在测试的过程中发现:去掉上述id列是可以正常insert的,上述ID列是OCEANBASE的自增ID设置语法,OCEANBASE没有类似于Mysql的auto increment,只能通过创建序列来实现自增。2、如何授权对指定用户表(授权前已存在、授权后新建表)的增删改查权限?1、OceanBase如何授权对指定用户表的增删改查权限?,后续对序列授权就可以了。
2024-10-31 11:12:03
273
原创 血缘解析<三>:如何解析DML语句?
上述insert语句的加工过程实际上是select部分,可单独获取select部分传入之前写好的解析select语句模块,详情可看。获取目标表、源表、源字段的方式和上述简单update语句的获取方式一样,区别是获取源表,这里的处理方式和上篇文章。上述代码可以获取到简单update语句的字段血缘关系,针对一些较复杂的语句,比如下述语句,应该如何处理呢?上述sql是Mysql中最简单的用一张表更新另一种表字段的语句。上述sql是Mysql的一段upsert逻辑。最后可以通过递归获取最原始的血缘关系。
2024-09-25 16:47:35
727
原创 血缘解析<二>:如何解析带CTE语句的Sql
上述sql在解析的时候会获取到源表是tmp1,而不是cte中的personinfo和classinfo,原因是:com.alibaba.druid.sql获取getSelect().getQuery()只能获取到不包含cte的select语句,如下所示。介绍了血缘解析的思路,但是对于带CTE语句的sql解析不到。
2024-09-11 11:18:56
636
原创 我的创作纪念日
一直以来都坚信一个观点:学习是一个输入输出的过程,当学到某个新知识的时候,能够说出来讲清楚或者用文章描述清楚是判断有没有掌握的一个重要方式
2024-06-25 10:58:52
217
2
原创 Mysql:事务
当一条update语句发送给Mysql后,Mysql server会根据where条件,读取第一条满足条件的记录,然后innodb引擎调用读取数据接口,返回这条记录,并加锁,会再发起一条update请求,更新这条记录,因此update操作内部包含了一个当前读,同理,delete操作也是如此,insert稍微有些不同,简单来说,insert的时候会触发unique key的冲突检查,也会进行一个当前读。与redo log常用来比较的是binlog,binlog主要是用来做备份的,下面是它们的一些区别。
2024-04-30 16:43:21
1646
1
原创 Mysql:常见问题
4、optimize table、analyze table、alter table这三种方式新建表的区别?2、查询缓存和缓冲池的区别。2、delete删表。
2024-04-29 15:04:01
670
1
原创 Oracle数据库Bug:相关子查询多层嵌套报错:标识符无效
把这条Sql拿到Oracle去执行,是报错的,报date标识符无效,这明显不大合理,在我的印象中,oracle是支持这种写法的,而且一般Mysql支持的特性Oracle也支持,后面发现是oracle版本的问题。我把这条Sql语句拿到Oracle 19c执行是没有问题的,而报错的oracle版本是11.2.0.3.0。因为oracle不支持limit,所以必须改写为row_number()或者rownum,如下所示。把上述代码改成keep语句,只用一层嵌套子查询。
2024-04-19 10:10:25
1234
原创 Rabbitmq基础
fanout和headers类型都不需要路由键routeKey,交换时通过Headers头部来将消息映射到队列的,Hash结构中要求携带一个键"x-match",这个键的Value可以是Any或者All,这代表消息携带的Hash是需要全部匹配(all),还是仅匹配一个键Any就可以了,相比直连交换机,首部交换机的优势是匹配的规则不被限定为字符串(string)而是Object类型。
2024-04-11 09:59:46
1187
原创 数据库误删库、表怎么办?
闪回表就是对表的数据做回退,回退到之前的某个时间点,其利用的是undo的历史数据,与undo_retention设置有关,默认是14400分钟(1天)2)、drop时使用purge(彻底删除)或清空回收站是无法再恢复的。1)、若有多次drop记录,默认会恢复最新的一次drop记录。首先可以了解下binlog的三种格式。
2024-04-02 11:26:47
1110
原创 图数据库neo4j入门
首先要有对应的java环境,我的是。3、删除全部节点以及关系(慎用!注:若节点有关系需先删除关系。2、创建带属性的节点。
2024-02-05 15:01:37
1899
原创 血缘解析<一>:血缘解析的思路
1、先传入Sql到解析入口,判断Sql是单独select语句还是包含union的select语句,若是包含union,通过 SQLUnionQuery.getLeft()和getRight()方法拆分union语句,再把拆分的语句放到解析的入口。4、解析表达式,上一步getExpr可能得到的字段是有多个字段加工而来,需要进行处理,解析表达式有如下种类,针对不同的类型有不同的处理方法,最终调用setSourceColumnName。比如说一段Sql传进来后,会先解析为AST抽象语法树。
2024-01-16 14:30:19
957
原创 python进阶:常见问题
也就是说import在导入文件的时候,会自动把暴露在外面的代码全都执行一遍,因此,如果你要把一个东西封装成模块,又想让它可执行的话,必须要将执行的代码放在 if __ name__ == '__ main__'下。在功能方面,用if和assert似乎没什么差异,但是需要注意assert的检查是可以被关闭,比如运行python程序的时候,加入-O选项就会让assert失效。在对一些重要的功能进行判断的时候,假如使用了assert,并且不小心失效的时候,会给程序带来巨大的安全漏洞。会输出:testint和3。
2024-01-03 16:46:18
403
原创 Python进阶:Asyncio并发编程
和其它Python程序一样,是单线程的,只有一个主线程,但是可以进行多个不同的任务(task),这里的任务,就是特殊的future对象,这些不同的任务,被一个叫做event loop的对象所控制。可以把这里的任务,类比多线程版本里的多个线程上述代码是爬虫的简单示例,四个url一共用了10s的时间,如何用协程进行优化呢?async:声明异步函数,上面的crawl_page和main都成了异步函数await:协程的关键字,后面接异步函数1、当遇到 await 关键字时,协程会暂停自己的执行。
2024-01-03 15:50:01
1647
原创 Python进阶:Futures并发编程
在上述代码中,ProcessPoolExecutor()表示创建进程池,使用多个进程并行,这里,通常省略参数workers,因为系统会自动返回CPU的数量作为可以调用的进程数,但是使用多进程效果并不一定显著,因为并行的方式一般用在CPU heavy的场景中,而上述场景是I/O heavy。上述代码表示,创建了个线程池,总共有5个线程可以分配使用,map高阶函数表示并发的对sites的每一个元素调用函数download_one()也可以通过并行的方式运行上述代码。3、详解Futures。
2023-12-28 17:51:34
969
原创 python进阶:装饰器
上述代码是描述装饰器可以接受原函数任意类型和数量的参数,此外,它还可以接受自己定义的参数print('打印参数:{}'.format(name))函数还是原函数吗?#打印出来是wrappergreet()函数被装饰之后,元信息就变了,不再是greet()函数,而是wrapper()函数为了解决这个问题,通常使用内置的装饰器@functools.wrap,会帮助我们保留原函数的元信息(也就是将原函数的元信息,拷贝到对应的装饰器函数里)print('打印参数:{}'.format(name))
2023-12-19 14:28:54
1024
原创 python进阶:函数
如上述代码所示,外部函数nth_power()返回值,是函数exponent_of(),而不是一个具体的数值,需要注意的是在执行square = nth_power(2)和cube = nth_power(3)后,外部函数的参数exponent仍然会被内部函数exponent_of()记住。闭包是一种特殊情况,如果外函数在结束的时候发现有自己的临时变量将来还会在内部函数中用到,就把这个临时变量绑定给了内部函数,然后自己再结束。1、为什么要使用匿名函数?
2023-12-18 16:56:53
995
原创 python进阶:深入理解迭代器和生成器
可以简单理解为函数运行到yield这一行的时候,程序会从这里暂停,然后生成一个值跳出程序,每次next()函数被调用的时候,暂停的程序又复活了,会把yield生成的值返回给调用者,周而复始;从代码层面上说,迭代器是实现了迭代器协议的对象,即具有__iter__()和__next__()方法,它用于提供一种顺序访问容器中元素的方式,而无需了解容器的内部实现细节。上述代码是生成一个包含一亿元素的列表,迭代器是用[]括起来的,每个元素在生成后都会保存在内存中,此时内存占用大概是迭代器对象 + 元素占用的内存。
2023-12-15 14:22:04
880
原创 python进阶:异常处理
上述代码是用来处理某个文件夹下的json文件,假如某个json文件格式不正确,程序就会终止并退出,但是其它json文件格式是正确的,我想让它不管格式有问题的json文件,从而处理其它正确的json文件,有什么办法呢?不过,很多时候,我们很难保证程序覆盖所有的异常类型,更通常的做法,是在最后一个except block,声明其处理的异常类型是Exception.Exception是其他所有非系统异常的基类,能够匹配任意非系统异常。也可以在except后面省略异常类型,表示与任意异常匹配。
2023-12-14 16:34:35
935
原创 python进阶:上下文管理器和with语句
需要注意的是,当使用类来创建上下文管理器时,必须保证类包括’__ enter__’ 和 ’__ exit__'方法。也可以用try except finally语句处理。就和我们使用with open() as f一样。2、打开、关闭数据库操作。1、打开、关闭文件操作。
2023-12-14 14:12:11
425
原创 python进阶:浅拷贝与深拷贝详解
而’is’操作符比较的是对象的身份标识是否相等,即它们是否是同一个对象,是否指向同一个内存地址,在python中,每个对象的身份标识,都能通过id(object)获得,因此’is’操作符,相当于比较对象之间的id是否相等。相当于l2会重新开辟一块内存区域,会存储1,2,3,但是不会存储[4,5],只是存储[4,5]对象的引用,如下图所示。我们知道,对于不可变数据类型,没有提供修改它的方法,是不是可以理解为无论是浅拷贝还是深拷贝返回的结果都是一样的。= id(b),即a is b返回的是False。
2023-12-12 16:38:33
1120
原创 Vertica学习:基础语法
全部分段将数据均匀地分布到各个节点上。1、order by 后面插入的数据是有序的,因此一般order by的列就源于where条件后的列,例如,如果子句查询中有where x = 1 and y = 2,那么使用order by (x,y)查询的时候就会迅速定位到符合条件的数据。SEGMENTED BY [column_name] [ON [SUB]CLUSTER cluster_name]:在指定的子集群或特定的集群上进行分段。2、group by后面的字段,出现在order by中也可以优化查询。
2023-11-29 15:27:43
1431
原创 如何理解Python中一切皆对象?
Python中一切皆对象,如常见的加(+)、减(-)、乘(*)、除(/)、相等(==)都是调用类中的某个方法。当删除对象时,python解释器也会默认调用__del __()方法。__xx __()的函数叫做魔法方法,指的是具有特殊功能的函数。
2023-11-22 10:07:00
245
原创 Mysql:RC隔离级别下如何提高并发?
意思是插入意向锁准备插入之前遇到了间隙锁,但是隔离级别是RC,按照网上的说法和文档,RC隔离级别是不会出现Gap Lock的,后面发现表中若有唯一索引,RC隔离级别下并发也会导致Gap Lock,去掉唯一索引,跑批就没问题了。Mysql是支持行锁的,但是行锁只是针对索引列,若删除条件未加索引会导致走表锁,这样就会造成死锁。索引建了之后运行还是报错死锁,打开死锁日志。
2023-11-09 09:28:35
307
原创 Mysql:锁
3、间隙锁(Gap Lock):是在索引范围间隙上设置的锁,用于防止其它事务在这个范围内插入新的记录,间隙锁可以避免幻读问题。6、设置锁等待超时参数:innodb_lock_wait_timeout(默认50s)4、尽量以相同顺序访问索引记录和表(两条Sql的加锁顺序不一致)Mysql引擎InnoDB支持表级锁和行级锁共存,默认为行级锁。3、避免大事务,将大事务拆分成多个小事务。1、记录锁(Record Lock)2、临键锁(Next-Key 锁)1、正常的读(S)写(X)表锁。
2023-11-07 09:00:19
280
原创 数仓删数方案
源头有逻辑删除标志的话,数仓直接同步过来,推数的时候可限制isvalid = 1。a、数仓中所有表加上是否有效标志,如isvalid,第一次默认全为1。b、找出已删除数据,插入这张临时表。b、更新逻辑删除标志。
2023-11-02 19:04:44
343
原创 如何快速从Oracle迁移到Mysql?
通过navicat同步oracle表结构到mysql,其它类型都能转换,但是oracle的number和Integer类型到了Mysql这边就会变成decimal(65,30),数据会自动补0。navicat是通过oracle的客户端连接oracle的,报这个错是因为navicat for oracle的oci文件和远程/本地的oracle数据库不一致。可以在本地下载oracle客户端,然后把navicat的oci文件指定到oracle客户端目录下的oci文件。1、选择工具中的数据传输。
2023-10-22 15:14:11
724
oceanbase建分区表
2024-10-18
Mysql读已提交隔离级别问题
2024-02-28
图数据库neo4j显示问题
2024-02-06
mysql间隙锁和插入意向锁
2023-11-08
mysql数据库数据加工
2023-09-06
mysql数据库存储过程
2023-09-04
Flink的Watermark
2023-03-28
Java中的return不是整个程序结束?
2022-06-23
到底什么是哈希冲突呢?
2022-05-27
IDE打包scala代码
2022-05-10
windows下hadoop运行环境
2022-04-13
Java面向接口编程
2022-04-09
win10通过WSL2安装docker
2022-03-01
TA创建的收藏夹 TA关注的收藏夹
TA关注的人