0

我有一个相当大的文件(50mb),其中第一个字段是 unix 时间戳。但是,我不想加载整个文件,我只需要其中的一半,其中时间戳 > some_parameterized_timestamp。

似乎 sqlldr 在 when 子句中只允许 = 和 <> 条件。加载文件然后删除不需要的记录需要很长时间。

是否有替代使用仍然具有可比性能的 sqlldr 的替代方法?(我已经在使用 direct=true。)

我正在考虑使用 awk 使用我需要的数据创建文件的副本,并且 awk 在这方面效率很高,但在我走这条路之前,我想我会在这里寻求更好的建议。

4

1 回答 1

0

这个关于 asktom 的注释(搜索“magic”)似乎表明在控制文件中使用 INFILE '-' 将允许重定向,例如:

awk [various switches] sourcefile | sqlldr [sqlldr options]

但我没有测试过。

假设您可以访问数据库服务器上的文件系统,您可以使用数据文件的外部表规范,然后使用 SQL 从外部表“加载”数据。同样,您可以将数据加载到临时表中;然后运行 ​​SQL 脚本

INSERT INTO TARGET_TABLE 
SELECT * FROM STAGING_TABLE 
 WHERE TIMESTAMP > :PARAMETER;
TRUNCATE TABLE STAGING_TABLE;
于 2010-02-12T17:03:02.813 回答