datax_utils.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. # -*- coding:utf-8 -*-
  2. from typing import Dict, List
  3. from dw_base import NORM_GRN, NORM_YEL
  4. from dw_base.database.mysql_utils import MySQLColumn
  5. from dw_base.utils.log_utils import pretty_print
  6. def convert_mysql_column_types(columns: List[MySQLColumn]) -> Dict[str, str]:
  7. column_types = {}
  8. bool_types = ['bool', 'bit']
  9. double_types = ['float', 'double']
  10. string_types = ['text', 'longtext', 'mediumtext', 'time']
  11. timestamp_types = ['datetime', 'timestamp']
  12. for mysql_column in columns:
  13. column_name = mysql_column.COLUMN_NAME
  14. origin_type = mysql_column.COLUMN_TYPE
  15. datax_type = None
  16. if origin_type.startswith('bigint'):
  17. datax_type = 'bigint'
  18. elif origin_type.__contains__('int'):
  19. datax_type = 'int'
  20. elif timestamp_types.__contains__(origin_type):
  21. datax_type = 'timestamp'
  22. elif origin_type == 'date':
  23. datax_type = 'date'
  24. elif bool_types.__contains__(origin_type):
  25. datax_type = 'boolean'
  26. elif double_types.__contains__(origin_type) or origin_type.startswith('decimal'):
  27. datax_type = 'double'
  28. elif string_types.__contains__(origin_type) or origin_type.startswith('varchar') or origin_type.startswith(
  29. 'char') or origin_type.startswith('enum'):
  30. # string不用管
  31. pass
  32. else:
  33. pretty_print(f'{NORM_YEL}遇到了未处理MySQL——DataX类型映射的MySQL类型:{NORM_GRN}{origin_type}')
  34. if datax_type is not None:
  35. column_types[column_name] = datax_type
  36. return column_types