Как загрузить в Oracle при отметке времени> 12345678900 - PullRequest
0 голосов
/ 12 февраля 2010

У меня довольно большой файл (50 МБ), где первое поле - это метка времени Unix. Однако я не хочу загружать весь файл, мне нужна только половина, где отметка времени> some_parameterized_timestamp.

Казалось бы, sqlldr допускает только условия = и <> в условии when. Загрузка файла занимает слишком много времени, а затем удаляются ненужные записи.

Возможно, есть альтернатива использованию sqlldr, которая все еще имеет сопоставимую производительность? (Я уже использую прямой = true.)

Я подумываю об использовании awk для создания копии файла с нужными мне данными, и awk достаточно эффективен в этом, но прежде чем идти по этому пути, я подумал, что попрошу здесь лучшие предложения

1 Ответ

0 голосов
/ 12 февраля 2010

Эта заметка о 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;
...