- pycharm的\OneMake30\auto_create_hive_table\cn\itcast\utils目录中编辑OracleMetaUtil.py
| |
| |
| __coding__ = "utf-8" |
| __author__ = "itcast" |
| |
| |
| import sys |
| sys.path.append("/tmp/pycharm_project_178/") |
| sys.path.append("/tmp/pycharm_project_178/auto_create_hive_table/") |
| |
| import logging |
| import cx_Oracle |
| |
| from auto_create_hive_table.cn.itcast.entity.ColumnMeta import ColumnMeta |
| |
| from auto_create_hive_table.cn.itcast.entity.TableMeta import TableMeta |
| |
| def getTableMeta(oracleConn, tableName) -> TableMeta: |
| """ |
| 用于读取Oracle中表的信息【表名、列的信息、表的注释】封装成TableMeta |
| :param oracleConn: Oracle连接对象 |
| :param tableName: 表的名称 |
| :return: |
| """ |
| |
| cursor = oracleConn.cursor() |
| try: |
| |
| oracleSql = f"""select columnName, dataType, dataScale, dataPercision, columnComment, tableComment from |
| (select column_name columnName,data_type dataType, DATA_SCALE dataScale,DATA_PRECISION dataPercision, TABLE_NAME |
| from all_tab_cols where '{tableName}' = table_name) t1 |
| left join (select comments tableComment,TABLE_NAME from all_tab_comments WHERE '{tableName}' = TABLE_NAME) t2 on t1.TABLE_NAME = t2.TABLE_NAME |
| left join (select comments columnComment, COLUMN_NAME from all_col_comments WHERE TABLE_NAME='{tableName}') t3 on t1.columnName = t3.COLUMN_NAME |
| """ |
| |
| logging.warning(f'query oracle table {tableName} metadata sql:\n{oracleSql}') |
| |
| cursor.execute(oracleSql) |
| |
| resultSet = cursor.fetchall() |
| |
| tableMeta = TableMeta(f'{tableName}', '') |
| |
| for line in resultSet: |
| |
| columnName = line[0] |
| dataType = line[1] |
| dataScale = line[2] |
| dataScope = line[3] |
| columnComment = line[4] |
| tableComment = line[5] |
| if dataScale is None: |
| dataScale = 0 |
| if dataScope is None: |
| dataScope = 0 |
| |
| columnMeta = ColumnMeta(columnName, dataType, columnComment, dataScope, dataScale) |
| |
| tableMeta.addColumnMeta(columnMeta) |
| |
| tableMeta.tableComment = tableComment |
| |
| return tableMeta |
| |
| except cx_Oracle.Error as error: |
| print(error) |
| |
| finally: |
| if cursor: |
| cursor.close() |
| |
| if __name__ == '__main__': |
| orclConn = cx_Oracle.connect('ciss', '123456', cx_Oracle.makedsn('192.168.128.100', '1521', None, 'helowin')) |
| |
| tableMeta = getTableMeta(orclConn,"CAP_USER") |
| print( tableMeta) |
- 上传到服务器,Tools -> Deployment -> Upload
| # 进入如下目录 |
| cd /tmp/pycharm_project_178/auto_create_hive_table/cn/itcast/utils |
| |
| # 执行 |
| [root@node1 utils]# python3 OracleMetaUtil.py |
| WARNING:root:query oracle table CAP_USER metadata sql: |
| select columnName, dataType, dataScale, dataPercision, columnComment, tableComment from |
| (select column_name columnName,data_type dataType, DATA_SCALE dataScale,DATA_PRECISION dataPercision, TABLE_NAME |
| from all_tab_cols where 'CAP_USER' = table_name) t1 |
| left join (select comments tableComment,TABLE_NAME from all_tab_comments WHERE 'CAP_USER' = TABLE_NAME) t2 on t1.TABLE_NAME = t2.TABLE_NAME |
| left join (select comments columnComment, COLUMN_NAME from all_col_comments WHERE TABLE_NAME='CAP_USER') t3 on t1.columnName = t3.COLUMN_NAME |
| |
| TableMeta: |
| tableName: CAP_USER, tableComment: None, |
| columnMetaList: |
| ['ColumnMeta: columnName: OPERATOR_ID, dataType: NUMBER, columnComment: None, dataScope: 18, dataScale: 0', 'ColumnMeta: columnName: TENANT_ID, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: USER_ID, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: PASSWORD, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: INVALDATE, dataType: DATE, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: USER_NAME, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: AUTHMODE, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: STATUS, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: UNLOCKTIME, dataType: TIMESTAMP(6), columnComment: None, dataScope: 0, dataScale: 6', 'ColumnMeta: columnName: MENUTYPE, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: LASTLOGIN, dataType: TIMESTAMP(6), columnComment: None, dataScope: 0, dataScale: 6', 'ColumnMeta: columnName: ERRCOUNT, dataType: NUMBER, columnComment: None, dataScope: 10, dataScale: 0', 'ColumnMeta: columnName: STARTDATE, dataType: DATE, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: ENDDATE, dataType: DATE, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: VALIDTIME, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: MACCODE, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: IPADDRESS, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: EMAIL, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: CREATEUSER, dataType: VARCHAR2, columnComment: None, dataScope: 0, dataScale: 0', 'ColumnMeta: columnName: CREATETIME, dataType: TIMESTAMP(6), columnComment: None, dataScope: 0, dataScale: 6'] |
- 复制生成的sql到datagrip,连接oracle测试

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?