- 博客(44)
- 资源 (2)
- 收藏
- 关注
原创 Elasticsearch分页查询实现
一、Elasticsearch三种分页技术1. from + size分页性能低最原始的分页方式,每一页数据都需要把前面的数据都查出来排序后计算出from和size。很明显,存在深分页的问题,查询的页面数越大返回数据的速度越慢。适用于少量数据分页查询。By default, you cannot use from and size to page through more than 10,000 hits. This limit is a safeguard set by the index.max
2021-11-27 21:53:31
7251
原创 Spark开发注意: collect_list、collect_set会去除Null值
今天我们踩到一个collect_list的坑,collect_list的结果不包含null值namecity张三广州null广州李四深圳对city作group by后collect_list(name)得到的结果中city='广州’为List(‘张三’),没有null值。跟踪源码: def collect_list(e: Column): Column = withAggregateFunction { CollectList(e.expr) }col
2021-11-10 08:55:17
6196
原创 Airflow2.0 Scheduler核心代码再解读
以下解读代码来源于Airflow2.0。使用非SQLite数据库的都是采用异步模式,下文讲解默认是指异步模式。Airflow Scheduler四个进程:Scheduler 主进程Executor 子进程DagFileProcessorManager 子进程DagFileProcessor 子进程(进程数量由DAG文件个数决定)Airflow Scheduler启动过程airflow控制台命令的解析与执行的代码都存放在cli目录,cli_parser.py是命令解析的入口,而启动sch.
2021-02-22 14:14:17
1531
2
原创 Airflow核心源码解读
注意:本文基于Airflow 1.10解读源码Airflow目前已经成为主流的作业调度工具,支持本地调度、分布式调度、Kubernetes调度。Airflow虽然使用Python实现,但功能依然很强大,其配置参数也多达250个。其中很多核心参数在官方文档解释的并不清楚,所以就不得不看源码。以下内容就是我讲解了Airflow Scheduler的实现原理以及相关的参数作用。正文Airflow总体架构应该可以解读为四个部分:Schelduer、Excutor、DAGFileProcessorManag.
2021-02-19 17:24:53
1442
2
原创 最好用的开源免费笔记软件IdeaNote
项目地址:https://github.com/xmings/IdeaNote.gitIdeaNoteIdeaNote是一款基于WEB的集树形目录管理、Markdown编辑、免费增量离线同步等众多优秀功能于一身的开源知识管理平台。IdeaNote开发语言是Python3.7 + Flask框架一. 设计初衷努力把IdeaNote打造成一款功能强大个人知识管理平台,是平台而不仅仅是笔记...
2019-11-25 09:11:06
8128
2
原创 Python实现超时装饰器
目标:实现一个超时自动切换当前任务到其他任务装饰器,然后还可以在其他任务完成后再切换回来的程序原计划在signal.signal的handler中触发TimeoutError,然后在用户代码的exception中捕获到异常,此时就可以切换到其他任务了。如下:import signalimport timedef timeout(seconds): def raise_timeou...
2019-08-14 13:06:14
1393
原创 TypeError: can't pickle _thread.RLock objects
"D:\Program Files\Python36\python.exe" E:/工作文件/Project/pycrontab/test.pyTraceback (most recent call last): File "E:/工作文件/Project/pycrontab/test.py", line 9, in <module>
2018-07-24 16:26:39
11981
原创 PostgreSQL JSON类型
https://www.postgresql.org/docs/10/static/functions-json.html#FUNCTIONS-JSONB-OP-TABLEPostgres支持两种JSON类型: json和jsonb. 两种类型在数据存储前都作了JSON格式的检查,但jsonb存储的是已分解的二进制格式,所以存储的时候效率稍微有些低,但在数据处理的时候可以显著提升效率。同时js...
2018-06-20 17:36:30
2633
原创 SQL格式化工具
作为一个长期从事于数据库的工作者,本人对于各种数据库管理工具的代码格式化功能SQL语句的功能相当不满,特别是除PLSQL Developer之外的工具,“美化”的SQL相当难看。笔者最近抽出来时间自己写了一个SQL格式化工具(O(∩_∩)O哈哈~不敢叫美化),放在Github上。有兴趣的同学可以看看。https://github.com/wmsgood/DataTool/blob/master...
2018-04-28 14:34:26
4131
原创 GitLab自动部署(CI)
目前GitLab已经有了CI功能,即持续集成的功能。可以实现代码提交后自动测试、编译、发布、部署等自动化工作。关于这一块的内容,网上文章都是语焉不详。最近正需要GitLab自动部署,踩了不少坑,现把配置步骤记录下来,以供大家参考。目标:代码提交到GitLab上,由GitLab的CI功能自动完成部署。原理:GitLab在接收到代码提交事件时,通过.gitlab-ci.yml的配置信息与对应节...
2018-04-20 13:22:59
13651
3
原创 Kettle处理boolean类型数据
问题描述:使用Kettle连接一些支持boolean类型的数据库(比如postgres/greenplumn时就)作输入输出时会遇到以下错误,因为当boolean类型的数据被加载到kettle中变成了字符串'Y' 或 'N' ,当再插回另一个数据库时,就提示字符串类型不能插入boolean类型。 ERROR: column “result” is of type boolean but ex...
2018-04-02 11:14:58
3650
1
原创 Linux下的权限(RWX)详解
平时没太在意Linux权限的问题,今天正好要实现一个只允许写不允许删除其它文件的功能,正好整理一下。 以下结果在Centos7.1上测试通过,如有不正确的地方,请在评论区指出! r (Read):对于文件,具有读取文件内容的权限;对于目录,具有浏览目录的权限。 w (Write):对于文件,具有新增,修改,删除文件内容的权限;对于目录,具有新建,删除,修改,移动目录内文件的权限(即...
2018-03-30 13:45:39
2683
原创 Git取消配置文件的跟踪
一般我们都是通过.gitignore文件来现实commit时不提交一编译中间文件。但.gitignore有个缺点,即当之前该文件已经被跟踪(track),那么再把这个文件名添加到.gitignore中就没有用了。不过网上有很多文章说,通过以下命令让.gitignore生效:git rm -rf --cache xxx.h但执行完该命令,再commit的时候发现remote上的该文件...
2018-03-22 14:58:33
1972
原创 Windows下获取已安装应用程序
获取WINDOWS系统已安装的所有应用程序,打开注册表,HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Compatibility Assistant\Store
2018-03-21 15:58:20
7235
原创 find与ls命令合体坑总结
作为一个高级系统工程师,当然要熟悉linux下各种命令的快速拼写。O(∩_∩)O哈哈~ 然而,find与ls命令的快捷方式我们又知道多少了? 我们可能会用find / -name xxx -type f,可能会用ls -lrt,我们知道ls中-k代表按kg显示,-s代表按块显示,-h文件大小更和谐的方式显示。但很少有时间去发现有那么内置能提高工作效率提高自己段位的参数。我们就举几个好用的例子来
2018-01-16 16:16:40
8593
2
原创 GitHub中GPG认证使用
1. 打开本地的git bash命令窗口,执行gpg –gen-key:gpg --gen-keyPlease select what kind of key you want: (1) RSA and RSA (default) (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only)Your se
2018-01-14 19:20:24
3340
原创 SQL求几几何平均数
Oracle,PostgreSQL都没有直接求几何平均数的方法,需要通过以下方式实现: power(exp(1),ln(exp(sum(ln(col_a))))/count(1)首先要知道求积如何实现:with sele as (select 3 as col_a union all select 4 as col_a)select exp(sum(ln(col_a )))
2018-01-06 16:08:20
2318
原创 Python Select socket非阻塞写日志
上一篇我们通过线程锁实现了一个简单的并发写日志功能,该篇我们通过socket来实现一个写日志的程序,代码如下:socket服务端import selectorsimport socket, timesel = selectors.DefaultSelector()def accept(sock, mask): conn, addr = sock.accept() conn.setb
2018-01-02 00:18:56
752
原创 Python通过Thread锁实现并发日志入库
使用线程锁来实现一个简单写日志到数据库的功能,通过threading锁来实现线程安全,代码如下:#-*-utf-8-*-import logging, datetime, timefrom multiprocessing import Queue, Processimport cx_Oracleimport threadingclass LogInfo(object): def __
2017-12-30 22:18:51
1151
原创 Python实例管理
Python如何实现一个类只允许被实例化一次?这就要分两种情况:在同一个脚本中实例化同一个类这种有两种方法实现,一个是利用__new__方法,需要知道的是__new__方法运行的__init__方法之前,所以我们可以控制如何实例化类,甚至返回其它类的实例。通过类方法来实现,如下getInstance方法,这种就不很完美,因为其它人依然可以直接通过Test()这种方式来实例化类。class Te
2017-12-27 23:38:40
550
原创 Pycharm取消py脚本中SQL识别
Pycharm默认可以识别py脚本中的SQL语句,本身很不错,但当SQL拼接时就显示的代码特别难看,找了好久,终于知道怎么关闭SQL识别功能了。如下图,把勾去掉就可以了。
2017-12-26 14:53:56
6156
1
原创 Postgresql发布与订阅
重点1、当Subscriber创建时会在对应的Publisher上创建一个slot,因为每一个订阅,都要消耗掉一个replication slot,需要消耗一个wal sender。 2、Publisher发生的改变都保存为wal文件,由walsender进程发送,然后Subscriber的apply进程应用后,才会删除对应的wal文件。所以断网恢复后可以自动同步。配置On the publish
2017-12-26 11:50:16
3888
原创 Oracle对象批量编译
Oracle导出导入数据后,如果新导入的有存储过程、函数、触发器、视图之类的Object就需要重新编译一下,不然他们的状态就是无效的。提供一个SQL以供大家使用。declare objowner varchar2(50) := 'scott';begin for obj in (select object_name from all_objects where status = '
2017-12-25 12:58:06
1820
原创 Oracle expdp/impdp测试库搭建过程
最近客户需要搭建一个测试库,折腾完,正好把的经验整理一下。一、测试库库创建:在windows下创建数据库最好以管理员权限运行,即使是Administrator登录也要这样操作,一般我们最好是保证使用Administrator来创建。不然后面可能监听无法创建。数据库是OLAP还是OLTP,OLAP最好修改一下数据块字符集一定要和生产库的保持一致,包括Language。同时保证nls_databa
2017-12-25 00:16:57
4033
原创 Python Json树更新
记录一段搜索Json树的代码,用于返回指定的节点并更新,因为Python返回的字典是对象引用,所以可以直接更新。class BaseJsonGenerator(object): def __init__(self): self.bmDao = BMDao() def run(self, brower, jsonFile): self.bmD
2017-12-16 21:37:16
1690
原创 Kettle日志输出到文件方法
网上有很多关于如何实现Kettle日志输出到日志文件的方法,但需要修改代码,重新编译,比较麻烦。 这里面提供的方法可以解决两个问题:1、把日志输出到文件;2、日志的时间精确到毫秒; 有时Kettle运行的很快,1 秒之内就输出好几条记录,而默认日志的时间只到秒级,这样日志的顺序就是混乱的。用这种方法就可以部分解决,因为控制台的默认日志无法去除掉,需要改代码。在Kettle的程序目录下data-
2017-12-13 13:52:32
13136
原创 一段管理实例的代码
logging中很好一段代码,在返回实例前先通过类的参数检查是否存在,存在就返回已存在的实例,不存在就实例化 def getLogger(self, name): """ Get a logger with the specified name (channel name), creating it if it doesn't yet exist
2017-12-12 11:38:58
342
原创 GitHub API Push接口
最近研究一下GItHub API,想通过API直接提交文件,先把关键信息放上来,后面再来排版。 注意: 1、需要先在GitHub上创建一个token,方法: Settings–>Developer settings–>Personal access tokens–>Generate new token,选择对应的权限即可。 2、curl命令不要回车,最后是在编写完命令
2017-12-11 23:21:45
3464
1
原创 利用七牛云解决PC端文件同步
经常有一些文档需要在公司和家里的两地电脑间手工同步,很麻烦,于是利用七牛云免费的空间来做服务端实现同步功能。 同时,为了文档内容保密,我采用cryptography模块(通过指定一个复杂的字符串)对文件加密,这样即使别人获取了七牛云上的文件也无法破解。import os, time, uuid, requestsfrom qiniu import Auth, put_file, urlsafe_
2017-12-05 23:59:47
1273
原创 Git远程仓库地址管理
查看远程仓库地址git remote -v更改远程仓库地址git remote set-url origin REPO_URL(ssh格式或http格式)删除远程仓库地址git remote rm origin 添加远程仓库地址git remote add origin REPO_URL(ssh格式或http格式)添加第二远程仓库地址git remote set-url --add origin R
2017-11-28 15:11:03
698
原创 Git免密码提交
今天要在公司的Git服务器上创建一个自己的仓库,但clone下来的项目再提交时总提示要填写username和password,导致我的SubLime Text编辑器git功能不能使用,很不甘,我记得git的可以通过密钥来验证用户的。经过几番折腾解决,记录如下:1、首先你得安装一个git程序。 2、查看系统中是否有已生成的公钥,在命令行中执行以下命令:windows(cmd命令行): type
2017-11-28 14:09:57
6778
原创 PostgreSQL时间加减
连夜声讨PG,竟然时间加减写法有坑select CURRENT_TIMESTAMP::TIMESTAMP - '5 day'以上向前减5天,一直报错:[Err] ERROR: invalid input syntax for type timestamp: “5 day” 折腾好久,网上也没有正确的说明。而改为+号就能正常执行select CURRENT_TIMESTAMP::TIMESTAM
2017-11-27 01:31:37
29534
2
原创 PyQT之QWebEngineView与JS交互
GithubWEB编辑器的项目很丰富,也都做的很好,于是想利用PyQT5的QWebEngineView来嵌入自己喜欢的WEB编辑器打造自己的编辑器,因为CSS和JS来实现样式和定义一些事件动作很灵活也很漂亮。以下是PYQT与JS交互的核心代码:class EditorOper(object): def __init__(self, parent =None): self.kC
2017-11-22 16:42:34
5193
1
原创 urllib.parse.quote与decodeURIComponent的完美配合
如何优雅的把副文本编辑器的内容(HTML格式)入库,并在之后加载回前端编辑器?我们都知道编辑器的内容经常包含很多单引号、双引号等,因此,我们需要对内容进行编码,那我们就想到了escape和unescape。b=escape(a)"%3Cp%3E%22select%20count%281%29%20%22%u603B%u6570%22%2C%3C/p%3E%3Cp%3E%26nbsp%3Bsum
2017-11-22 15:17:55
1093
原创 GitHub目录下载
有时只想下载GIthub上某个大项目下面的一个文件夹,真心麻烦,还要把整个项目clone下来,当然也有使用svn项目检出功能的。本人不喜欢安装太多软件,就用python写了一个脚本来完成。from bs4 import BeautifulSoupimport requests, os, sys, timeclass DownloadDir(object): def __i...
2017-11-15 14:17:50
771
原创 Python爬取双色球数据进行分析
突发奇想,是否可以从双色球的历史信息中分析出现次数最多的组合,那就从1+1的组合开始分析,嘿嘿,经常中这种组合也挺不错哦!现在我们开始获取数据,应该从中彩网的爬取数据比较靠谱,下面是脚本。# -*- coding:utf-8 -*-import requests, bs4import os, timeimport operatorfrom itertools import combinati
2017-11-09 15:26:05
10576
4
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人