业务需求:在没有sqoop的基础上,将oracle归集库的数据迁移至hive作为ods数据源,mysql数据库中的指标表迁移至hive作为dw层。

在MySQL中生成hive建表语句:

#!/usr/bin/python

# -*- coding: utf-8 -*-

table_name = [

'zzlq'

,'z_zzjgdw_base_info'

,'z_zzjg_base_info'

,'z_za_base_info'

]

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])

print(sql1)

在Oracle中生成建表语句:

#!/usr/bin/python

# -*- coding: utf-8 -*-

table_name = ['ZZXXXX'

,'ZYPXXXXX'

,'ZYJQLYJDQKB'

,'ZYAZ'

,'ZXYHXX'

,'ZSJH'

]

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])

print(sql1)

看了这么多,写了这么多,后来发现一篇好文章有了灵感:

《使用pyspark模仿sqoop从oracle导数据到hive的主要功能(自动建表,分区导入,增量,解决数据换行符问题)》

迫不及待的去测试,提前说下是python2.x的,改之!我走了~~~~~~~~~~~~~~~~~~~~~~~~~~

mysql+hive+建表语句,在Oracle、MySQL中执行sql脚本生成hive建表语句相关推荐

  1. python执行oracle的sql语句_在oracledb中执行SQL脚本一次执行一条语句

    假设我有一个sql脚本,如下所示:--split statement 1 ALTER TABLE abs ADD (make VARCHAR2(2 byte), model varCHAR2(12 B ...

  2. ef 执行mysql语句_在EF中执行SQL语句

    一.为什么要在EF中执行SQL语句 使用EF操作数据库,可以避免写SQL语句,完成使用Linq实现,但为什么还要在EF中执行SQL语句呢.如果要写SQL语句,完全可以使用ADO.NET来操作数据库.这 ...

  3. 如何在mysql中执行sql脚本文件

    一.sql脚本文件 简介 xxxx.sql这种文件被称为sql脚本文件. sql脚本文件中编写了大量的sql语句. 我们执行sql脚本文件的时候,该文件中所有的sql语句会全部执行! 批量的执行SQL ...

  4. Oracle 在Sqlplus 执行sql脚本文件。

    首先在随便1个地方建立1个sql语句的文件. 例如: 执行命令为: sqlplus loginID/passwd@serverIP/servcie_name @path/file.name 例如: 见 ...

  5. oracle用命令执行sql脚本文件

    当sql命令过多(sql文件过大)时,用plsql执行时比较慢而且容易超时,此时可以用sqlplus命令直接执行sql脚本文件,方法如下: 1.sqlplus登录 >sqlplus userna ...

  6. phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句

    大家使用phpMyAdmin中常遇到这样的问题:MySQL Error Message: MySQL Query Error SQL: SELECT main.*, field.* FROM ucho ...

  7. mysql当执行delete语句时备份_mysql中,执行delete语句时出现Lock wait timeout exceeded问题...

    问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了.这时我在数据库中删除重复记录时发现该表已经被锁上了.即出现 错误.但过了一会再 ...

  8. mysql脚本文件生成工具_SqlDataToScript(sql脚本生成工具)

    SQLServer脚本生成工具是一款用于SQLServer表生成Insert脚本的工具,可以快速的为您自动生成脚本,而且格式规范,可自动生成也可以手动生成.. 相关软件软件大小版本说明下载地址 SQL ...

  9. mysql命令行执行复杂sql_mysql命令行中执行sql的几种方式总结

    1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...

  10. [转]mysql下如何执行sql脚本

    原文地址:[url]http://www.cublog.cn/u3/94597/showart_1900808.html[/url] 首要步骤(一般可省略): 开启mysql服务(默认是开机时就自动运 ...

最新文章

  1. 计算机二级一年几次湖南省,湖南省计算机二级多少分可以通过
  2. MATLAB应用实战系列(五十二)-Excel数据的读取
  3. Linux 中内核级加强型火墙的管理
  4. 从源码的角度再看 React JS 中的 setState
  5. ssm框架简单实现文件上传
  6. 2017.3.5 yveh测试
  7. 在VS2005中打造自己的Starter Kits
  8. 【分享】心理测试---家庭画像
  9. 生活随记 - 2020国庆第四天
  10. 2007最新反病毒软件工具大集合
  11. 如何查找native方法
  12. Lattice Diamond软件使用
  13. GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
  14. 软件包的依赖性关系定义
  15. 1、Canopen 轻松入门
  16. lvds单8转双8芯片_LVDS驱动芯片
  17. oracle •求几个列的平均值,并保留2位小数
  18. LTE Cognitive Femtocell scenario
  19. [bzoj5314][Jsoi2018]潜入行动_树形背包dp
  20. SessionStorage如何存放对象

热门文章

  1. 【5G核心网】 3GPP TS 系列解读
  2. 结构梁配筋最牛插件_结构设计经验总结
  3. 语音识别之语音数据预处理
  4. java/php/net/python职工请假管理系统设计
  5. amos看拟合度在哪里看_AMOS分析技术:结构方程模型的拟合度评价指标
  6. 原生 Ajax 请求
  7. Charles进行弱网测试
  8. HOG特征和Haar特征
  9. ModBus RTU和ModBus ASC
  10. spring 定时器功能