|
|
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
Камрады! Столкнулся с такой ситуацией. CSV файл с данными содержит даты, причем есть даты вида '2018-05-05 24:00:00.000000', которые при загрузке sqlldr закономерно вызывают ошибку ORA-01850: hour must be between 0 and 23. Есть ли возможность корректно загрузить такие данные? Стандартных способов я не нашел. Самый простой вариант - заменить в файле " 24:00:00.000000" на " 23:59:59.000000", но менять данные, хоть и не значительно, - плохо. Заменить на 00:00:00 нельзя, так как тогда должна измениться дата ('2018-05-05 24:00:00.000000' -> '2018-05-06 00:00:00.000000') а это уже не сделаешь простым реплейсом в редакторе. Файл формируется из БД DB2 (которая допускает такой формат даты) сотрудниками другого отдела. По поверхностной разведке и чтению интернетов - исправить эту ситуацию на стороне DB2 в момент экспорта нельзя (если неправда - поправьте, пожалуйста). Буду рад любым идеям. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 14:11 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
Пока мне видится только вариант написать скрипт или программку, которая в файле будет изменять для таких значений время на 00:00:00 и добавлять день к дате соответственно. В такой случае может быть у кого то есть подобные наработки) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 14:17 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
alwan, View с replace поверх external table. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 14:19 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
alwan....написать скрипт или программку, которая в файле будет изменять для таких значений время на 00:00:00 и добавлять день к дате соответственно... Если не удобно файлы обрабатывать, то можно на PL/Sql-e функцию написать и вызывать про загрузке. Можно создать виртуальную колонку на её основе: сохраните исходные данные с 24:00:00. Если есть ещё другие преобразования, то я бы так делал. ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 14:27 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
alwan, лоадер может(мог) вызывать ф-цию гляньте "кляузу" EXPRESSION https://docs.oracle.com/cd/A97630_01/server.920/a96652/ch06.htm#1008669 ф-ция вернет нужную дату ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 14:33 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
alwanменять данные, хоть и не значительно, - плохоИ что же значит 24:00 в источнике, високосную секунду? Тогда должно быть 23:59:60. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 15:11 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
2.3.1 Дата и время в DB2 В DB2 для представления даты и времени имеются следующие типы данных: DATE - значение, состоящее из трех частей (год, месяц, день). Допустимые значения даты - в пределах от 1 января 0001 г. до 31 декабря 9999 г. TIME - значение, состоящее из трех частей (часы, минуты, секунды). Допустимые значения для часов - от 0 до 24, для двух других частей - от 0 до 59. Если часы установлены в 24, то минуты и секунды могут быть только 0. TIMESTAMP - значение, состоящее из трех частей (год, месяц, день, часы, минуты, секунды, микросекунды). Допустимые значения для микросекунд - от 0 до 999999. http://khpi-iip.mipk.kharkiv.edu/library/extent/dbms/sql/23.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 15:35 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: plsql 1. 2. 3. 4. 5. Код: plsql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 16:08 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
И можно чуть посложнее, но потенциально побыстрее Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 16:55 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
AmKad, Vladimir Filin Не написал одно обстоятельство. Выгрузкой из файла будет заниматься другой отдел и сам процесс изменить я не могу. Могу только, например, "обработать" исходный файл с данными или, как посоветовал Stax: Staxгляньте "кляузу" EXPRESSION Идея, кстати, очень хорошая, я поначалу тоже глянул в ее сторону, но что-то отпугнуло. С другой стороны, в expression можно реализовать практически любую логику. И... Пока писал решил попробовать. Все получилось, спасибо большое!) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 17:41 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
[quot andrey_anonymous] Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Всем спасибо! Вопрос закрыт ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 17:47 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
Напортачил с тегами для кода и цитат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 17:48 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousИ можно чуть посложнее, но потенциально побыстрее Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. Интересная конструкция... Но в моей ситуации она немного неудобна, так как подобное встречается в нескольких таблицах с большим количеством полей, а операция разовая, поэтому +- в скорости не критичен. Я правильно понимаю, что в этой ситуации файл будет читаться 2 раза? Потенциальное преимущество будет если строк с 24 часами будет много за счет "terminated by whitespace"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2018, 18:12 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
alwan, Не стоит объединять извлечение данных из файла и приведение типов, сначала прочитай все как строки, сохрани, затем применяй поэтапно трансформации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2018, 17:27 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
XMLer, зачем заливать в промежуточную, если есть возможность сразу штатно обработать входной лоадером ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2018, 17:33 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
Stax, например, при возникновении ошибки на одном из этапов, начать с последнего успешного. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2018, 17:41 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
XMLer, я не утверждаю что никогда не надо заливать в промежуточную в данном случе(и во многих других), имхо, ето излишне ..... stax ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2018, 17:45 |
|
||
|
Цифра 24 в разряде часов при загрузке данных из файла
|
|||
|---|---|---|---|
|
#18+
XMLeralwan, Не стоит объединять извлечение данных из файла и приведение типов, сначала прочитай все как строки, сохрани, затем применяй поэтапно трансформации. Если строится постоянно действующий расклюквистый ETL, то рекомендация часто оправдана. Если речь о разовой/эпизодической загрузке одной-двух таблиц, то овчинка выделки не стоит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2018, 20:45 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39662573&tid=1883814]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 527ms |

| 0 / 0 |
