问:将所有数据导入表的时候如何解码?例如,我有一个.CSV 文件,有两个列,例如: Name Address selva addr1-addr2-addr3 &nb……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
问:将所有数据导入表的时候如何解码?例如,我有一个.CSV 文件,有两个列,例如:
Name Address
selva addr1-addr2-addr3
joy asd1-asd2-asd3
当我使用SQL loader 来加载数据到表的时候,我需要一个CTL 文件。我怎么才能将这个日期解码为连字符或者逗号分割的列值呢?
答:控制文件中的insert, APPEND, REPLACE, truncate 对应数据库中的指令:
1、 在一个已经空的表中插入行;当表非空的时候,这个操作失败。
2、 在非空表中插入行。
3、 替换或者截断表中的行,并且在数据文件或者控制文件中插入数据。数据可以作为控制文件的一部分通过语句BEGINDATA 来优先插入。
为了反便你用连字符来替换表中行的逗号,你需要创建一个插入之前的触发器,如下所示:
表称为TEST,具有如下的描述:
NAME VARchar2(100)
ADDRESS VARchar2(200)
触发器内容如下,可以帮助你达到目标:
create OR REPLACE TRIGGER REPLACE_DASHES_WITH_COLUMN
BEFORE insert ON TEST
FOR EACH ROW
BEGIN
:NEW.ADDRESS := REPLACE(:NEW.ADDRESS,’-’, ’,’);
END;
/
控制文件(test.ctl) 列表如下:
LOAD DATA
INFILE *
INTO TABLE TEST
REPLACE
FIELDS TERMINATED BY ’,’ OPTIONALLY ENCLOSED BY ’"’
(NAME, ADDRESS)
BEGINDATA
Sonali Bendre, c/o Azim Fahmi-Somewhere outthere-Bollywood
Preity Zinta, "c/o Azim Fahmi-In your dreams-None of your business"
"George Bush", 1600 Pennsylvania Avenue-Whitehouse-Washington D.C.
Tony Blair, 10 Downing Street-London-UK-POSTALCODE HERE
Telaram Thakur, 10 Shabzi Mandi-Jackson Heights-New York
如果你在命令行中输入一下的命令:
sqlldr USERID=/{@db_name} control=test.ctl log=test.log bad=test.bad
where @db_name is optional
短横线就可以被逗号替代因为在用户触发之前就被编译了。
作者
相关推荐
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。
-
如何通过格式良好的SQL提高效率和准确性
格式良好的SQL并不会比乱七八糟的SQL运行效果更好。数据库其实不怎么关心SQL语句中你把逗号放到了字段名的前面还是后面。