版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/SunWuKong_Hadoop/article/details/83618929
python3脚本:
#mysql
for i in range(len(table_name)):
sql1 = """SELECT
CONCAT('create table ','%s','(')
UNION ALL
SELECT
CONCAT(
COLUMN_NAME,
' ',
CASE
WHEN DATA_TYPE in ('varchar','longtext','char','datetime','timestamp','varbinary','bit','mediumtext','set','longblob','text','blob','time','date') THEN
'string'
WHEN DATA_TYPE = 'decimal' THEN
COLUMN_TYPE
WHEN DATA_TYPE = 'float' THEN
'double'
ELSE
DATA_TYPE
END -- 数据类型转换
,
' comment ',
'\\'',
CASE
WHEN COLUMN_COMMENT is NULL THEN
COLUMN_NAME
ELSE
replace(COLUMN_COMMENT,';',',')
END,
'\\','
)
FROM
information_schema. COLUMNS t1
WHERE
t1.table_schema = 'lqioc_ioc_yw'
and t1.TABLE_NAME = '%s'
UNION ALL
SELECT
concat(
')',
'COMMENT \\'',
COALESCE (t2.TABLE_COMMENT ,'%s'),
'\\'
-- PARTITIONED BY (DATE STRING COMMENT \\'日期分区\\') -- 分区表取消注释
ROW FORMAT DELIMITED FIELDS TERMINATED BY \\',\\' STORED AS TEXTFILE;'
)
FROM
information_schema. TABLES t2
WHERE
t2.table_schema = 'lqioc_ioc_yw'
and t2.table_name = '%s'
union all
""" % (table_name[i],table_name[i],table_name[i],table_name[i])
#oracle
for i in range(len(table_name)):
sql1 = """SELECT 'create table lqioc_ioc_ods.' || '%s' || ' (' FROM dual UNION ALL
SELECT
col
FROM
(
SELECT
T .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) || ']',
''
) || ''',' col
FROM
all_COL_COMMENTS T,
all_TAB_COLUMNS c
WHERE
c.column_name = T .column_name
AND c. OWNER = T . OWNER
AND c.TABLE_NAME = T .TABLE_NAME
AND c. OWNER = 'SJGJ'
AND c.TABLE_NAME = '%s'
ORDER BY
c.COLUMN_ID
)
UNION ALL
SELECT
')ROW FORMAT DELIMITED FIELDS TERMINATED BY ''\001'' TBLPROPERTIES(''creator''=''sunruzi'',''create_at''=''' || TO_CHAR (
SYSDATE,
'yyyy-MM-dd hh24:mi:ss'
) || ''');'
FROM
all_tab_comments T
WHERE
OWNER = 'SJGJ'AND table_name = '%s'
union all """ % (table_name[i],table_name[i],table_name[i])
在MySQL中生成hive建表语句:
SELECT
CONCAT('create table ',@tbl_name,'(')
UNION ALL
SELECT
CONCAT(
COLUMN_NAME,
' ',
CASE
WHEN DATA_TYPE in ('varchar','longtext','char','datetime','timestamp','varbinary','bit','mediumtext','set','longblob','text','blob','time','date') THEN
'string'
WHEN DATA_TYPE = 'decimal' THEN
COLUMN_TYPE
WHEN DATA_TYPE = 'float' THEN
'double'
ELSE
DATA_TYPE
END -- 数据类型转换
,
' comment ',
'\'',
CASE
WHEN COLUMN_COMMENT is NULL THEN
COLUMN_NAME
ELSE
replace(COLUMN_COMMENT,';',',')
END,
'\','
)
FROM
information_schema. COLUMNS t1
WHERE
t1.table_schema = @tbl_schema
and t1.TABLE_NAME = @tbl_name
UNION ALL
SELECT
concat(
'etl_update string COMMENT \'数据同步时间\') ',
'COMMENT \'',
COALESCE (t2.TABLE_COMMENT ,@tbl_name),
'\'
-- PARTITIONED BY (DATE STRING COMMENT \'日期分区\') -- 分区表取消注释
ROW FORMAT DELIMITED FIELDS TERMINATED BY \',\' STORED AS TEXTFILE;'
)
FROM
information_schema. TABLES t2
WHERE
t2.table_schema = (@tbl_schema := 'XXX')
and t2.table_name = (@tbl_name := 'XXX')
在Oracle中生成建表语句:
--根据oracle元数据生成hive建表语句
select 'create table bigdata_ods.' || &tb_name || ' ('
from dual
union all
select col
from (select t.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) || ']',
'') || ''',' col
from all_COL_COMMENTS t, all_TAB_COLUMNS c
where c.column_name = t.column_name
and c.owner = t.owner
and c.TABLE_NAME = t.TABLE_NAME
and c.owner = &schm_name
and c.TABLE_NAME = &tb_name
order by c.COLUMN_ID)
union all
select 'etl_time string comment ''etl时间'') comment ''' || t.comments ||
''' ROW FORMAT DELIMITED FIELDS TERMINATED BY ''\001'' TBLPROPERTIES(''creator''=''zhangfan'',''create_at''=''' ||
to_char(sysdate, 'yyyy-MM-dd hh24:mi:ss') || ''');'
from all_tab_comments t
where owner = &schm_name
and table_name = &tb_name;
原文地址:https://blog.csdn.net/fanlying/article/details/78683360