mysql+hive+建表语句,在Oracle、MySQL中执行sql脚本生成hive建表语句
业务需求:在没有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建表语句相关推荐
- python执行oracle的sql语句_在oracledb中执行SQL脚本一次执行一条语句
假设我有一个sql脚本,如下所示:--split statement 1 ALTER TABLE abs ADD (make VARCHAR2(2 byte), model varCHAR2(12 B ...
- ef 执行mysql语句_在EF中执行SQL语句
一.为什么要在EF中执行SQL语句 使用EF操作数据库,可以避免写SQL语句,完成使用Linq实现,但为什么还要在EF中执行SQL语句呢.如果要写SQL语句,完全可以使用ADO.NET来操作数据库.这 ...
- 如何在mysql中执行sql脚本文件
一.sql脚本文件 简介 xxxx.sql这种文件被称为sql脚本文件. sql脚本文件中编写了大量的sql语句. 我们执行sql脚本文件的时候,该文件中所有的sql语句会全部执行! 批量的执行SQL ...
- Oracle 在Sqlplus 执行sql脚本文件。
首先在随便1个地方建立1个sql语句的文件. 例如: 执行命令为: sqlplus loginID/passwd@serverIP/servcie_name @path/file.name 例如: 见 ...
- oracle用命令执行sql脚本文件
当sql命令过多(sql文件过大)时,用plsql执行时比较慢而且容易超时,此时可以用sqlplus命令直接执行sql脚本文件,方法如下: 1.sqlplus登录 >sqlplus userna ...
- phpmyadmin执行mysql语句_如何在phpMyAdmin中执行sql语句
大家使用phpMyAdmin中常遇到这样的问题:MySQL Error Message: MySQL Query Error SQL: SELECT main.*, field.* FROM ucho ...
- mysql当执行delete语句时备份_mysql中,执行delete语句时出现Lock wait timeout exceeded问题...
问题描述: 当我插入一条记录时,在调用save方法的时候出现了异常(记录重复了),导致了后面的commit语句不能执行了.这时我在数据库中删除重复记录时发现该表已经被锁上了.即出现 错误.但过了一会再 ...
- mysql脚本文件生成工具_SqlDataToScript(sql脚本生成工具)
SQLServer脚本生成工具是一款用于SQLServer表生成Insert脚本的工具,可以快速的为您自动生成脚本,而且格式规范,可自动生成也可以手动生成.. 相关软件软件大小版本说明下载地址 SQL ...
- mysql命令行执行复杂sql_mysql命令行中执行sql的几种方式总结
1.直接输入sql执行 MySQL> select now(); +---------------------+ | now() | +---------------------+ | 2013 ...
- [转]mysql下如何执行sql脚本
原文地址:[url]http://www.cublog.cn/u3/94597/showart_1900808.html[/url] 首要步骤(一般可省略): 开启mysql服务(默认是开机时就自动运 ...
最新文章
- 计算机二级一年几次湖南省,湖南省计算机二级多少分可以通过
- MATLAB应用实战系列(五十二)-Excel数据的读取
- Linux 中内核级加强型火墙的管理
- 从源码的角度再看 React JS 中的 setState
- ssm框架简单实现文件上传
- 2017.3.5 yveh测试
- 在VS2005中打造自己的Starter Kits
- 【分享】心理测试---家庭画像
- 生活随记 - 2020国庆第四天
- 2007最新反病毒软件工具大集合
- 如何查找native方法
- Lattice Diamond软件使用
- GeoServer地图开发解决方案(五):基于Silverlight技术的地图客户端实现
- 软件包的依赖性关系定义
- 1、Canopen 轻松入门
- lvds单8转双8芯片_LVDS驱动芯片
- oracle •求几个列的平均值,并保留2位小数
- LTE Cognitive Femtocell scenario
- [bzoj5314][Jsoi2018]潜入行动_树形背包dp
- SessionStorage如何存放对象