当前位置:首页 > 问答 > 正文

DB2里能用的那些外部文件格式到底有哪些,怎么支持的简单聊聊

关于DB2里能用的外部文件格式和支持方式,我们直接聊聊,这个话题其实挺有意思,因为它涉及到怎么把DB2数据库里面的数据和外面世界(比如一个文本文件、一个Excel表格)的数据打通,DB2提供了一些工具和命令,让你能比较方便地把外部文件的数据“灌”到数据库表里,或者反过来,把表里的数据“倒”到外部文件中。

根据IBM的官方信息,DB2主要支持几种常见的外部文件格式,最经典、最常用的就是定界ASCII文件,也就是我们常说的CSV文件或者以制表符分隔的TXT文件,这种文件格式非常普遍,几乎任何系统都能生成和读取,比如用Excel另存为CSV格式得到的文件,DB2对它的支持也是最好的,另一种是非定界ASCII文件,也就是固定宽度的文件,这种文件里,每个字段的长度是固定的,如果内容不够长,会用空格补齐,这种格式现在见得相对少一些,但在一些老旧的大型机系统或者银行等特定行业的报表中还能遇到,DB2还能处理PC版IXF格式的文件,IXF是DB2自家的一种数据交换格式,它是二进制格式的,好处是不仅能交换数据本身,还能把表的结构信息(比如列名、数据类型)也一并打包带走,所以用它来在不同DB2数据库之间迁移数据特别方便。

DB2里能用的那些外部文件格式到底有哪些,怎么支持的简单聊聊

DB2是怎么支持对这些文件进行读写的呢?主要靠两个核心的命令行工具:EXPORTIMPORT,以及一个更强大、更灵活的 LOAD 工具,我们可以把它们想象成不同功率和用途的“水泵”。

先说EXPORT,它的作用是从数据库表里把数据“抽出来”,写入到一个外部文件中,这个过程很简单直接,你想把员工表(EMPLOYEE)里所有销售部门员工的数据备份出来,你就可以用EXPORT命令,指定目标文件格式是CSV(DEL格式),DB2就会帮你生成一个包含所需数据的.csv文件,这个操作一般不会锁表,或者锁的时间很短,对线上业务影响小。

DB2里能用的那些外部文件格式到底有哪些,怎么支持的简单聊聊

反过来,IMPORT命令是用来把外部文件的数据“灌入”到一个已存在的数据库表中的,它比较适合数据量不大、在灌入数据的同时可能还需要进行一些数据更新或插入操作的场景,IMPORT命令在执行时,会记录日志,所以如果中途失败了,是可以回滚的,但正因为每一步操作都记日志,当数据量非常大的时候,IMPORT就会比较慢。

当需要处理海量数据时,LOAD工具就是首选了,LOAD的设计目标就是高速,它的速度通常比IMPORT快得多,因为它采用的是一种近乎“直接写入”数据页的机制,绕过了很多常规的日志记录和检查环节,像一条高速数据传输带,也正因为如此,LOAD操作默认是不记日志的(当然也可以强制它记),这就带来一个特点:一旦LOAD过程开始,它是不能被回滚的,如果LOAD中途失败了,表空间可能会处于“暂挂”状态,你需要使用LOAD命令自带的RESTART或TERMINATE选项来恢复或终止操作,才能使表恢复正常,LOAD通常用于数据仓库、批处理等允许中断、追求极致速度的场景。

除了这些基本的格式,DB2还通过一些扩展功能支持更复杂的数据源,DB2 Federation 功能允许DB2像查询本地表一样去查询远程数据库(如Oracle、SQL Server)里的数据,或者甚至可以直接查询Hadoop分布式文件系统(HDFS)里的数据,这相当于把外部数据源“虚拟”成了一个DB2表,你可以用SQL直接操作,非常强大。

值得一提的是,DB2的INGEST工具也能用于从文件实时流式接收数据,特别适合持续不断产生日志或事件的场景。

DB2对外部文件的支持是分层级的,最基础的是通过EXPORT/IMPORT/LOAD这“三驾马车”来处理本地的平面文件(CSV、IXF等),这是最基本也是最常用的功能,往上走,则可以通过联邦技术等高级功能,去连接和整合更广泛、更异构的外部数据源,选择哪种方式,完全取决于你的具体需求:数据量大小、对性能的要求、对事务一致性的要求,以及数据源的本身格式。

DB2里能用的那些外部文件格式到底有哪些,怎么支持的简单聊聊