当前位置:   article > 正文

Oracle自动生成根据源表迁移到HIVE创表语句_rtrim(xmlagg(xmlparse(content(

rtrim(xmlagg(xmlparse(content(

SQL脚本

  1. ============================================
  2. 自动生成表脚本文件
  3. ============================================
  4. select 'CREATE TABLE IF NOT EXISTS &OWNER.' || table_name || chr(13) || '(' ||
  5.        RTRIM(XMLAGG(XMLPARSE(CONTENT(column_name || chr(9) || DATA_TYPE || chr(10) || ',') WELLFORMED) order by column_id)
  6.              .GETCLOBVAL(),
  7.              ',') || ')' || 'COMMENT ' || '"' || tab_comments || '"' ||
  8.        chr(10) || 'PARTITIONED BY (col type)' || chr(10) ||
  9.        'CLUSTERED BY (col) SORTED BY(col) INTO <num> BUCKETS' || chr(10) ||
  10.        'STORED AS parquet' || chr(10) ||
  11.        'tblproperties(''parquet.compression''=''snappy'');' as sq,
  12.        table_name
  13.   from (select col.table_name,
  14.                col.COLUMN_NAME,
  15.                decode(col.DATA_TYPE,
  16.                       'NUMBER',
  17.                       'DECIMAL',
  18.                       'TIMESTAMP(6)',
  19.                       'TIMESTAMP') || CASE
  20.                  WHEN DATA_TYPE = 'NUMBER' THEN
  21.                   '(' || nvl(to_char(DATA_PRECISION), 22) || ',' ||
  22.                   to_char(NVL(COL.data_scale, 0)) || ')'
  23.                  WHEN LOWER(col.COLUMN_NAME) in ('inserttime', 'updatetime') then
  24.                   ' TIMESTAMP'
  25.                  when data_type IN ('DATE', 'TIMESTAMP(6)') THEN
  26.                   ' TIMESTAMP'
  27.                  ELSE
  28.                   ' STRING'
  29.                END || ' COMMENT ' || '''' || cms.COMMENTS || '''' || CHR(13) AS DATA_TYPE,
  30.                col.COLUMN_ID,
  31.                tms.COMMENTS as tab_comments
  32.           from all_tab_columns col
  33.           join all_col_comments cms
  34.             on col.TABLE_NAME = cms.table_name
  35.            and col.COLUMN_NAME = cms.COLUMN_NAME
  36.            AND col.OWNER = cms.OWNER
  37.           join all_tab_comments tms
  38.             on col.TABLE_NAME = tms.TABLE_NAME
  39.            AND col.OWNER = tms.OWNER
  40.          where COL.TABLE_NAME like upper('%&tab_name%')
  41.            AND regexp_substr(tms.table_name, '[0-9]+') is null
  42.            and col.OWNER = '&src_owner')
  43.  group by table_name, tab_comments
  44.  ORDER BY table_name;

测试过程

执行脚本SQL-F8

填写参数 

  1. OWNER:表示迁移到的数据库名称
  2. tab_name:要迁移的表名
  3. src_owner:表示表原来所在的数据库名称

查看结果 

 测试结果

  1. =========================================================
  2. 创建表语句
  3. =========================================================
  4. CREATE TABLE IF NOT EXISTS DEFAULT.SSA_TP_TDIVIDENDDETAIL_HIS
  5. (D_CDATE     TIMESTAMP COMMENT ''
  6. ,C_CSERIALNO     STRING COMMENT ''
  7. ,D_REGDATE     TIMESTAMP COMMENT ''
  8. ,D_DATE     TIMESTAMP COMMENT ''
  9. ,C_FUNDACCO     STRING COMMENT ''
  10. ,C_TRADEACCO     STRING COMMENT ''
  11. ,C_FUNDCODE     STRING COMMENT ''
  12. ,C_SHARETYPE     STRING COMMENT ''
  13. ,C_AGENCYNO     STRING COMMENT ''
  14. ,C_NETNO     STRING COMMENT ''
  15. ,F_TOTALSHARE    DECIMAL(16,2) COMMENT ''
  16. ,F_UNITPROFIT    DECIMAL(7,4) COMMENT ''
  17. ,F_TOTALPROFIT    DECIMAL(16,2) COMMENT ''
  18. ,F_TAX    DECIMAL(16,2) COMMENT ''
  19. ,C_FLAG     STRING COMMENT ''
  20. ,F_REALBALANCE    DECIMAL(16,2) COMMENT ''
  21. ,F_REINVESTBALANCE    DECIMAL(16,2) COMMENT ''
  22. ,F_REALSHARES    DECIMAL(16,2) COMMENT ''
  23. ,F_FARE    DECIMAL(16,2) COMMENT ''
  24. ,D_LASTDATE     TIMESTAMP COMMENT ''
  25. ,F_NETVALUE    DECIMAL(7,4) COMMENT ''
  26. ,F_FROZENBALANCE    DECIMAL(16,2) COMMENT ''
  27. ,F_FROZENSHARES    DECIMAL(16,2) COMMENT ''
  28. ,F_INCOMETAX    DECIMAL(9,4) COMMENT ''
  29. ,C_RESERVE     STRING COMMENT ''
  30. ,D_REQUESTDATE     TIMESTAMP COMMENT ''
  31. ,C_SHARECLASS     STRING COMMENT ''
  32. ,C_SENDTYPE     STRING COMMENT ''
  33. )COMMENT ""
  34. PARTITIONED BY (col type)
  35. CLUSTERED BY (col) SORTED BY(col) INTO <num> BUCKETS
  36. STORED AS parquet
  37. tblproperties('parquet.compression'='snappy');
  1. 根据自己的情况自行选择是分区还是分桶,按照哪些字段。
  2. 注意分区的话,要将分区字段注释。 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/176854
推荐阅读
相关标签
  

闽ICP备14008679号