查看原文
其他

软件应用 | 如何将政府部门提供的数据库文件转化为STATA可用的数据表

启研学社 数据Seminar 2022-12-31


作为一名在读研究生,常常需要和导师一起承接课题项目,而作为课题的承担方,也就需要向地方政府提出一些必要的数据需求,以便进行后续的数据分析和描述。


但是对于政府机构的信息管理部门来说,能够操作这些数据的工程师或程序员们往往无法准确理解学者进行数据分析前对数据格式的要求。而出于工作便利的需要,他们会提供一份或多份带有导出日志的Dump数据文件,这些Dump文件既不能被直接打开预览,也无法导入STATA操作,因此我们需要对拿到手的Dump文件进行格式转化。


作为一名sql的初学者,虽然无需进行增删改查等操作,但进行一次数据的导入导出也需要一定的学习成本,网上提供的代码也只能解决某一个步骤中的一个具体问题。因此,本文基于网上公开的开源代码和自身实践,提出了一个解决政府部门提供的数据库文件向STATA分析可用的数据表转换问题的整体方案。

以便各位有相应数据格式转换需求的教师、学者们浏览,以备不时之需。



问题实质

将地方政府数据信息管理部门从Oracle服务器导出的Dump文件转化为可被Excel或Stata处理的csv等格式文件,既能方便预览数据变量信息,也能进行后续的数据分析和回归等操作。

总体思路

Dump文件是由Oracle服务端导出的数据格式之一,不能被Excel或Stata直接处理,因此需要进行文件格式的转换。我们需要将其重新导入Oracle数据库,再通过sql命令将其以csv或sql格式导出。


01

下载必要的数据库和执行软件


  • Oracle 11g版:用于存放数据

  • Sql Developer:用于执行数据转化操作


02

将Dump文件导入到Oracle数据库


(1)打开cmd进入sqlplus
(2)输入用户名和密码
(3)创建bigfile tablespace,用于存放数据
sqlplus
*yoursusername*yourspassword
CREATE BIGFILE tablespace DATAloggingdatafile 'yours file route'size 8000mautoextend onnext 50m maxsize UNLIMITEDextent management local;**表空间已创建**需要注意的是,表空间一旦创建,将占据电脑硬盘的实际存储空间,因此若您获得的数据集量并不大,就无必要设置很大的表空间
create or replace directory dataroute as 'yours file route';**目录已创建
alter database datafile 'yours file route' resize 20000m;**因为后续导入出现了表空间不足的问题,因此这里重新设置表空间
(4)在cmd中输入导入指令
impdp yours username/yours password DIRECTORY=dataroute DUMPFILE=file1.dump,file2.dump,file3.dump,file4.dump REMAP_SCHEMA = ‘Oracle服务端执行导出命令的用户名:您的用户名’
**因为我这里导出的dump是一整个文件分割开的多个表格,所以这里的文件把所有的表都写上了,否则会报错

03

将导入的Dump文件导出为CSV文件


(1)打开sql developer并创建连接,这里的步骤在CSDN社区上查找即可,不再赘述
(2)找到表中的对应数据文件,选择需要导出的行
(3)选择导出为csv格式

04

其   他


其实在数据导入导出的转化过程中,远远没有上述过程描述的这么简单,经常会遇到表空间不足或导出进程莫名中止的问题,因此这里附上相应代码,以便各位读者根据自身实际情况取用修改。
另外必须注意的是,如果发现数据导入或导出时候有问题,千万不要手动直接删除自己创建的表空间或强制关闭Oracle进程,很有可能导致整个Oracle不可用或基础数据库文件损坏,需要重新下载安装Oracle。(别问我是怎么知道的……)

(1)修改、删除表空间的办法
1、增加数据文件ALTER TABLESPACE ***_TRD ADD DATAFILE‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M;
2、增加数据文件并允许自动增长ALTER TABLESPACE ***_TRD ADD DATAFILE‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD_2.DBF’ SIZE 1024M AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;
3、允许已存在的数据文件自动增长ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’AUTOEXTEND ON NEXT 8M MAXSIZE 10240M;
4、手工改变已存在数据文件的大小ALTER DATABASE DATAFILE ‘D:\ORACLE\PRODUCT\10.2.0\ORADATA\DBFILE\TRD.DBF’RESIZE 10240M;

--删除空的表空间,但是不包含物理文件drop tablespace tablespace_name;--删除非空表空间,但是不包含物理文件drop tablespace tablespace_name including contents;--删除空表空间,包含物理文件drop tablespace tablespace_name including datafiles;--删除非空表空间,包含物理文件alter tablespace tablespace_name offline;drop tablespace tablespace_name including contents and datafiles;--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTSdrop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;
(2)查看表空间使用状态的办法
SELECT Upper(A.TABLESPACE_NAME) "表空间名", D.TOT_GROOTTE_MB "表空间大小(M)", D.TOT_GROOTTE_MB - A.TOTAL_BYTES "已使用空间(M)", To_char(Round((D.TOT_GROOTTE_MB - A.TOTAL_BYTES) / D.TOT_GROOTTE_MB * 100, 2), '990.99') || '%' "使用比", A.TOTAL_BYTES "空闲空间(M)", A.MAX_BYTES "最大块(M)", D.AUTOEXTENSIBLE "是否自增长", D.incrementSize "自增长大小(M)", D.CREATE_TIME "创建时间" FROM (select T.TABLESPACE_NAME, Round(Sum(T.BYTES) / (1024 * 1024), 2) AS TOTAL_BYTES, Round(Max(T.BYTES) / (1024 * 1024), 2) AS MAX_BYTES from SYS.DBA_FREE_SPACE t group by t.TABLESPACE_NAME) A, (SELECT B.autoextensible, Round(Sum(B.BYTES) / (1024 * 1024), 2) TOT_GROOTTE_MB, Round(B.increment_by * (select value from v$parameter where name = 'db_block_size') / (1024 * 1024), 2) AS incrementSize,--自增长大小为数据库中数据块的个数,一个数据块一般为8k B.TABLESPACE_NAME, min(C.CREATION_TIME) CREATE_TIME--获取创建时间,如果有多个数据文件,获取到最初时间 FROM SYS.DBA_DATA_FILES B, v$DATAFILE C WHERE B.file_id = C.FILE# group by B.TABLESPACE_NAME, B.autoextensible, B.increment_by) D WHERE A.TABLESPACE_NAME = D.TABLESPACE_NAME order by D.CREATE_TIME;





点击阅读原文进入CCAD数据库



·END·


星标⭐我们不迷路!

想要文章及时到,文末“在看”少不了!


点击搜索你感兴趣的内容吧

往期推荐


机器学习 | 在线推理和在线学习,从两大层级看实时机器学习的应用现状

好享学丨熬夜制图做了个寂寞!这些错误让设计师疯狂承伤

学术前沿丨2020年《food policy》中国相关文章(文末送数据)

软件应用 | 只要两步,用Python将地址标记在地图上!

新世野丨传音万里,远在非洲的财富密码,你收到了吗






数据Seminar




这里是大数据、分析技术与学术研究的三叉路口



供稿丨在读打工人

来源丨启研学社



    欢迎扫描👇二维码添加关注    

点击下方“阅读全文”了解更多

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存