BI(商务智能)部门一般是不能直接连接业务数据库的,因为业务数据库要优先保证企业的日常交易,我们可以通过文件接口将数据从业务数据库定时推送到BI部门。
文件接口是指在业务数据库空闲的时候(一般在凌晨),将数据(一般指前一天或者前一月数据)从业务数据库导出为文本文件,然后通过ftp等方式推送到指定的接口服务器,BI部门再定期从接口服务器获得文件,并将其导入到BI数据库。
本文通过python实现整个ftp服务。
ftp服务端
主要通过pyftpdlib包实现,官方信息请参考https://pypi.org/project/pyftpdlib/
# coding: utf-8
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
# 新建一个用户组
authorizer = DummyAuthorizer()
# 将用户名,密码,指定目录,权限 添加到里面
## 管理员
authorizer.add_user("admin", "admin123", "D:/ftpserver", perm="elradfmwMT")
## Tableau服务器http_requests日志
authorizer.add_user("tableau", "tab123", "D:/ftpserver/tableau", perm="elrd")
## 匿名用户
authorizer.add_anonymous("D:/ftpserver/FAQ")
# 初始化ftp句柄
handler = FTPHandler
handler.authorizer = authorizer
#开启服务器
server = FTPServer(("0.0.0.0", 21), handler)
server.serve_forever()
Tableau用户界面
ftp服务器文件名中文乱码问题
原因定位:pyftpdlib内部使用的编码是utf-8,Windows使用的是gbk
解决办法:编辑pyftpdlib目录下的filesystems.py文件,将两处yield line.encode('utf-8', self.cmd_chnnel.unicode_errors)中的utf-8修改为gbk
perm权限说明
读取权限:
e:更改目录,CWD、CDUP命令
l:列表文件,LIST、NLST、STAT、MLSD、MLST、SIZE命令
r:从服务器检索文件,RETR命令
写入权限:
a:将数据追加到现有文件,APPE命令
d:删除文件或目录,DELE、RMD命令
f:重命名文件或者目录,RNFR、RNTO命令
m:创建目录,MKD命令
w:将文件存储到服务器,STOR、STOU命令
M:更改文件模式、权限
T:更改文件修改时间
ftp客户端
from ftplib import FTP
ftp = FTP('127.0.0.1')
# 匿名登陆
ftp.login()
# tableau用户登录
ftp.login('tableau','tab123')
ftp.dir()
-rw-rw-rw- 1 owner group 0 Dec 27 13:51 http_requests_20181224.csv
-rw-rw-rw- 1 owner group 0 Dec 27 13:51 http_requests_20181225.csv
-rw-rw-rw- 1 owner group 0 Dec 27 13:51 http_requests_20181226.csv
# 文件下载
## 下载文件名
fname = "http_requests_20181226.csv"
## 本地下载路径
local_path = "D:\\" + fname
f = open(local_path, 'wb')
# 以二进制形式下载
ftp.retrbinary("RETR %s" %fname, f.write)
f.close()
# 删除文件
ftp.delete(fname)
欢迎扫码关注公众号
网友评论