一、配置文件 :config 参数说明:
[Path]
#脚本解压目录
Path = /home/kettle/PyETL/
[Url]
#源URL:支持Oracle / Msql
#Oracle 源
SrcUrl = {'dbtype':'oracle','user': '用户名','passwd': '密码', 'tns': 'ip:1521/server_name', 'encoding': 'utf-8'}
#mysql源
#SrcUrl = {'dbtype':'mysql','user': '用户名','passwd': '密码','dbname': '库名', 'host': 'IP','port':3306}
#目标URL 仅支持greenplum
DstUrl = {'dbtype':'greenplum','user': '用户名','passwd': '密码', 'dbname': '库名','host':'ip','port':'5432'}
#Tab1 : 名字随意起,支持写多个
[Tab1]
#'Exp':'y' 导出:y/n | 'Imp':'y' 导入:y/n
ExpImp = {'Exp':'y','Imp':'y'}
#需要导出表的列表:
#Tab=表1,表2,........
#或
#Tab=表1:分区名1:分区名2,表2:分区名1:分区名2......
Tab= test
#column = '列1','列2','列3','列4'
#或
#column = * -- 所有列
#需要导入的列:与greenplum里的列一致
Column = *
#查询条件:
#Condition=<唯一索引列或主键>:条件
Condition= id:last_update_date > trunc(sysdate - 1) and last_update_date < trunc(sysdate)
二、修改main.py里的代码:
三、注意事项:
1、支持按分区导入:
参数设置:
#tables=表1:分区名1:分区名2,表2:分区名1:分区名2......
2、数据中存在的“;”转换为“|”,避免与生成的csv格式的";"冲突
代码位置:
py_tool=>脚本:DataBase.py=>函数:WriteCSV:
d.DataFrame(dat.replace(';','|',regex = True)).to_csv(csv_dir,sep=';',quoting=3,header = False,index=False,encoding='utf-8')
3、脚本运行环境python3.6
因为环境为python3.6,如果使用crontab,需要写入shell脚本:如下:
#!/bash/bin
#因为需要连接Oracle需要安装客户端:
export ORACLE_HOME=/u01/oracle/instantclient_11_2
export SQLPATH=/u01/oracle/
export TNS_ADMIN=/u01/oracle/
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
export LD_LIBRARY_PATH=$ORACLE_HOME:$LD_LIBRARY_PATH
export PATH=$PATH:$ORACLE_HOME
#调用python3脚本
python3 /home/kettle/PyETL/py_main/Main.py config1.ini Log1 1> /dev/null 2>&1
crontab -l
#日志清理脚本,每天第一个执行:
02 00 * * * sh /home/kettle/PyETL/py_sh/PyClearLog.sh
#上面写的shell脚本:可以写多少,实现并行
03 00 * * * sh /home/kettle/PyETL/py_sh/py1.sh
04 00 * * * sh /home/kettle/PyETL/py_sh/py2.sh
四、目录说明:
tree PyETL/
PyETL/
├── CheckETLRecord.sh #监控脚本
监控脚本:异常输出说明:
表 |D:目标(S:源):少300条记录
test|D:-300
├── py_CheckRecord #数据验证目录
│ ├── CheckRecord #数据验证日志输出
├── py_conf #配置目录
│ ├── config1.ini #配置文件01
│ ├── config2.ini #配置文件02
├── py_CsvDat #按日期目录存储将数据以csv格式存放。
│ └── 2022-02-28 #导入成功会删除,导入失败还会存在,为空代表全部成功导入
├── py_log #日志输出目录
│ └── 2022-02-28 #按日期存放
│ ├── Log1 #并行1日志文件
│ │ ├── py_etl_finish.log #操作成功日志
│ │ ├── py_etl.log #操作全部日志
│ │ └── py_etl_warning.log #操作报警日志
│ ├── Log2 #操作成功日志
│ │ ├── py_etl_finish.log
│ │ ├── py_etl.log
│ │ └── py_etl_warning.log
│ └── PyClearLog.log #每天操作的日志清理日志
├── py_main
│ └── Main.py #主程序代码
├── py_sh #shell 代码目录
│ ├── py1.sh #shell 脚本里调用python程序
│ ├── py2.sh
│ └── PyClearLog.sh #日志清理脚本
└── py_tool
├── DataBase.py #数据库操作代码
├── DB_Conn.py #数据库连接池
├── Log.py #日志代码
五、执行:
配置文件 日志文件名
python3 Main.py config1.ini Log1