jaydebeapi

JayDeBeApi

一般来说,不同的数据库针对Python都有对应的Module去访问,他们基本上都使用统一的Python DB-API,除了连接上会有点区别,别的使用方式都基本一样。

数据库 模块
mysql pymysql
sql server pymssql
Oracle cx_Oracle
Teradata teradatasql
etc… etc…

但不可避免的,有些库需要系统安装一些依赖,比如Oracle,就需要安装有对应的oralce client,cx_Oracle才能正常使用。 此外很多数据库提供odbc driver,那么就可以在安装driver之后,统一使用pyodbc去连接。在PA的写的在windows下query hive和impala数据的小工具,使用的就是pyodbc的方式。

但是当需要安装除模块本身外的依赖都会显得有些麻烦,今天主要是记录一下在python中使用jdbc(jar包)的方式连接sql server例子,使用的module就是JayDeBeApi

The JayDeBeApi module allows you to connect from Python code to databases using Java JDBC. It provides a Python DB-API v2.0 to that database.

It works on ordinary Python (cPython) using the JPype Java integration or on Jython to make use of the Java JDBC driver.

In contrast to zxJDBC from the Jython project JayDeBeApi let’s you access a database with Jython AND Python with only minor code modifications. JayDeBeApi’s future goal is to provide a unique and fast interface to different types of JDBC-Drivers through a flexible plug-in mechanism.

Read more

NanHu

监工

今天天气还不错,好久没有出去放放风了。

到崇贤还是有点距离的,高架上堵了一会儿,半个小时才到。

总体和上次来看的时候差不多,还是要看内部的进度,还有一年呢,早着。
home

Read more

Folder Tree Info DFS/BFS

深度优先与广度优先遍历文件(夹)信息

最近做了一个对系统目录进行管理的页面,涉及到了对目录中的文件夹和文件的信息读取的问题,刚好回顾了一下文件夹遍历的算法。

由于需要在页面中体现目录层级关系,需要返回的json中有parent_id这样标志符。当时第一个想法就是用递归的方式来遍历,就可以得到对应的关系,但是这样的话,同一目录的文件(夹)的id就不能连续了,如果使用广度优先遍历的话就可以解决这个问题。

Read more

Pandas + Openpyxl process excel

更新

date update
2021-03-11 1. Initial

背景

最近帮同学写了一个数据处理的小程序,用python开发,用来处理excel数据。

其实excel本身就能实现大部分功能,并不一定要用程序处理,但用代码的话更灵活一些。

功能

数据本身不能share,但是计算逻辑应该无所谓,所以代码已经放在haredata

程序主要用到了python库pandas + openpyxl,写了非常简单的ui界面来选择输入的文件,处理完之后数据输出写入到新的文件里。

为了使用方便,最后打包成了exe。

Read more

Cut and Combine Tiktok Videos

更新

date update
2021-02-17 1. 修复了不同视频大小的压缩算法 2. 修改代码结构并支持并发预处理文件
2021-02-21 1. 调整代码结构,封装到类中
2. 优化对文件夹的批处理
3. 视频最后合成的分辨率由视频本身自动决定

背景

最近看到tiktok上有许多有意思的视频,所以想下载下来。但下过来的视频会有水印,主要是视频后3秒会有抖音的视频水印,很影响观感。

对于文字水印,需要用别的方式来下载,不太方便,后面可以再想办法。

现在的需求是:我在手机上下了n个视频,copy到电脑上之后,希望能去掉片尾的视频水印,并合并成一个大的视频。

Read more

Query hive data

背景

有Hue可以用来查询hive和impala的数据,但是使用起来不是特别方便,尤其想要同时把数据导出来的时候。

原来想尝试用java的方式,也向同事要了demo,但是需要keytab,而且还是倾向于用python。

最后尝试了一些python库失败(主要是这些module依赖的东西比较多,需要很多环境的配置,但是都没有权限,比较麻烦),从同事那得知他们的Tableau本地用的是odbc的连接方式。

之前试过用pyodbc去连接sql server数据库,而且理论上使用odbc,只要数据源配置好就可以了,api的使用是共通的,不管什么语言都可以用odbc的方式去访问。

Read more

My Diary 2020-09-06

COVID-19

2020真的很特殊,年初的疫情,让整个世界陷入了混乱。

好在国内的抗疫还是卓有成效,现在都已经恢复正常的工作生活了。

但是因为美国的疫情,道富还是实行AB组的方式, 两周两周的轮换在家和在公司办公,现在大家都习惯了。

如果国内的asg site也建立起来的话,那在家办公也就会很流畅了。

不得不说这场疫情给改变了我们的很多生活方式。

Read more

HDFS Space Usage

背景

需要统计HDFS的空间使用情况,有命令hadoop fs -du /path支持查看(hdfs dfs等效)。

但这样子只能看一个目录的情况,如果想要遍历所有的目录没有直接支持的。

Read more

Pandas Data Concat

背景

最近生成的报表比原来的逻辑多了些字段,想要老的报表也加上,所以用 python 写了脚本去处理,需要用来一些 mapping 的数据。pandas 有许多合并数据的方法,Concat 可以横向与纵向的合并,merge 可以实现横向的合并类似 sql 中的 join,append 则是纵向的合并。

Read more

Not in replacement

背景

最近解决了一个 hive 中报错的问题。HY 从最底层的 view 开始检查,最后发现在当前的 Sandbox/UAT2 环境中,对于 not in 中使用子查询的支持有问题。

这个问题导致了后续引用的 view 在建立时解析出错,会出现 Range Error 和 hive sql 解析出错。

解决的办法是使用别的语句替换,比如 not exists。

今天就想记录一下一些可行的替换方法,主要还是 not exists 和用 join

Read more