oracle库中所有表一次性转hive表结构脚本

select to_char(substr(table_prefix || col_strs || table_subfix, 1, 4000)) con
  from (select n.table_prefix,
               wm_concat(m.col_str) as col_strs,
               n.table_subfix
          from (select a.table_name,
                       'create table if not exists ' || lower(a.table_name) || '(' as table_prefix,
                       ') comment ''' || b.comments || ''';' as table_subfix
                  from user_tables a, user_tab_comments b
                 where a.table_name = b.table_name
                 order by a.table_name) n,
               (select c.TABLE_NAME,
                       c.column_name || CASE
                         WHEN c.DATA_TYPE IN ('CHAR',
                                              'NCHAR',
                                              'VARCHAR',
                                              'VARCHAR2',
                                              'NVARCHAR2',
                                              'DATE',
                                              'TIMESTAMP',
                                              'TIMESTAMP WITH TIME ZONE',
                                              'TIMESTAMP WITH LOCAL TIME ZONE',
                                              'INTERVAL YEAR TO MOTH',
                                              'INTERVAL DAY TO SECOND',
                                              'BLOB',
                                              'CLOB',
                                              'NCLOB',
                                              'BFILE',
                                              'RAW',
                                              'LONG RAW') THEN
                          ' STRING '
                         WHEN C.DATA_TYPE = 'INTEGER' THEN
                          ' BIGINT '
                         WHEN C.DATA_TYPE = 'NUMBER' THEN
                          (CASE
                            WHEN C.DATA_SCALE IS NOT NULL AND c.DATA_SCALE <> 0 THEN
                             ' DECIMAL(' || C.DATA_PRECISION || ',' ||
                             C.DATA_SCALE || ') '
                            WHEN C.DATA_PRECISION < 3 THEN
                             ' TINYINT '
                            WHEN C.DATA_PRECISION < 5 THEN
                             ' SMALLINT '
                            WHEN C.DATA_PRECISION < 10 THEN
                             ' INT '
                            ELSE
                             ' BIGINT '
                          END)
                         WHEN C.DATA_TYPE IN
                              ('BINARY_FLOAT', 'BINARY_DOUBLE', 'FLOAT') THEN
                          ' DOUBLE '
                         ELSE
                          ' STRING '
                       END || 'comment ''' ||
                       REGEXP_REPLACE(T.comments,
                                      '[' || CHR(10) || CHR(13) || CHR(9) ||
                                      CHR(32) || ']',
                                      '') || '''' as col_str
                  from user_tab_cols c, user_col_comments t
                 where c.TABLE_NAME = t.table_name
                   and c.COLUMN_NAME = t.column_name) m
         where n.table_name = m.table_name
         group by n.table_prefix, n.table_subfix)

 

1、将oracle_to_hive.sql中的内容拷贝到oracle中执行,执行的输出结果保存下来,建议为hsql文件(结果即为hive创建表语法)
2、在hue界面上执行这些语法,或者通过命令行beeline -f 执行的hsql文件

oracle_to_hive.sql可自行优化和修改

你可能感兴趣的:(Oracle)