您当前的位置:首页 > 计算机 > 软件应用 > 数据库 > Oracle

Oracle 导入 txt (oracle 10) 百万数据导入 txt

时间:04-17来源:作者:点击数:

1.1.1,Oracle 百万数据导入 txt

1.1.2,准备工作

用到的数据,软件,环境

100万+手机号 txt;

oracle 10;

sqlldr ;

plsqldev.exe ;

python 3.6;

windows 10;

数据量大动手比较难受

这个txt 有很多垃圾数据 用oracle来弄的话还真没试过 正好手头有python环境 正则加list处理挺方便的

1.1.3,首先我们创建个测试账户

--创建用户
create user spring
identified by spring;
--分配管理员权限
grant dba to spring;
--回收权限
--revoke dba from pring;

效果图

在这里插入图片描述

#1.1.4,写个测试表

// 新建一张名叫表phone的表
create table phone
(
  id       NUMBER,--//id
  phone    VARCHAR2(11)--//手机号
)

效果图

在这里插入图片描述

1.1.5,编写自动入库脚本 ctl

#1.首先说下SQL*LODER>ctl语法几个参数:

用法 含义
load data 把load data写开头 "加载数据" “在日常运维中,会经常遇到将文件中数据导入到数据库中,如果是.sql文件,直接采用source方式即可;如果是.csv、.txt文件,可以采用 load data 方式。这两种方式都十分熟悉,这里说一种特殊情况:”
characterset utf8 字符集utf8" “表的存储格式”
INFILE INFILE 'I:/NavicatforMySQL/phone.txt' “你要导入的文件放哪了?用的时候 记得 路径是被单引号包起来的”
Append into table [表名] Append into table phone “字面意思,如果表有数据就在他后表追加新的数据。。。 追加数据到什么表”
fields terminated by fields terminated by ""匹配空格 文本文件是没有格式的,“”的意思是告诉oracle,这个前面是一个字段,后面是另一个字段,整个一行是一个记录。这样导入的数据表才不会乱 要是 1,2,3 这样的数据 就这样写 “,”

1.1.6,示例1 编写.ctl 控制器

--编写 insert.ctl 文件
load data
characterset utf8
INFILE 'I:/NavicatforMySQL/phone.txt'
Append into table phone
fields terminated by ""
(
phone
)

效果图

在这里插入图片描述

mermaid语法说明

1.1.7,执行脚本

语法

userid=用户名/密码@数据库实例名control=脚本名

sqlldr userid=spring/spring@orcl control=insert.ctl

示例

在这里插入图片描述

执行结果

在这里插入图片描述

1.1.8从新测试

清空数据库

truncate table [表名];

delete from [表名];

用到的sql

用truncate、delete都可以清空表中数据。
SQL如下:
truncate table [表名];
delete from [表名];

delete与truncate的区别:
delete:会产生rollback,如果删除大数据量的表速度会很慢,同时会占用很多的rollback segments。
truncate: 是DDL操作,不产生rollback,速度快
  
  
  truncate table phone

1.1.9python处理数据

部分代码 – 这是去重

Python数据结构之一——list(列表)

集合:由一个或多个确定的元素所构成的整体。若x是集合A的元素,则记作x∈A。

集合中的元素有三个特征:

1. 确定性:集合中的元素必须是确定的;

2. 互异性:集合中的元素互不相同,例如:集合A={1,a},则a不能等于1);

3. 无序性:集合中的元素没有先后之分,例如:集合{3,4,5}和{3,5,4}算作同一个集合。

Python 3.x中的set特征与数学中类似。我们之前学过list、tuple以及dict。其实,set与dict大致相同,但set没有Value,只有key。因此,set只是一组key的集合。由于key不能重复,所以,在set中,没有重复的key。

import shutil
readPath='20170912.txt'
writePath='cnews.test2.txt'
phone=set()  #list
outfiile=open(writePath,'a+',encoding='utf-8')
f=open(readPath,'r',encoding='utf-8')
for line in f: #逐行读取
    if line not in phone:  #看phone里有没有这行
        outfiile.write(line) #没有就写
        phone.add(line)  #加上
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门