|
|
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
доброе утро, проблема: В датаваренхауз читаем 100 external таблиц. В результате получаем сколько то bad файлов. Хочется через sql посчитать сколько bad строчек в каждом файле. Я хочу сделать external таблицу и через нее считать все bad файлы в один раз. таблица должна содержать: имя bad файла и bad рекорд (как одну колонку) Нюансы: 1. все bad файлы имеют только общее оканчание .bad 2. каждый день разные bad файлс, т.е от 0 до 100 3.дата файлы не содержат имени датафайла, т.е если в bad файле нельзя найти откуда рекорд была сброшена 4.database 12.1.0.2.0 Linux x86 64-bit 5.мои юникс скилс очень ограничены, я аналист Пока нацарапал не много :(, таблица читает конкретные bad файлс, а хочется чтоб читала все *.bad и не получается выцепить имя bad файла чтоб выдать в каждой строке. Можно ли решить это без препроцесса? Без юникса скрипта? Если препроцесс необходим, может ли кто нибудь дать примерчик. Я думаю надо в начале склеить все бадфайлы и в каждую строку добавить имя откуда рекорд приехала. Большое спасибо, Ром create table stg.ext_top_roman_err_test ( data_rec varchar2(4000) ) organization external ( type oracle_loader default directory stg_file_top access parameters ( records delimited by "\r\n" badfile stg_file_top:'roman_err_test.bad' discardfile stg_file_top:'roman_err_test.dsc' logfile stg_file_top:'roman_err_test.log' skip 1 fields terminated by '~' missing field values are null reject rows with all null fields ( data_rec char ) ) location (stg_file_top:'Voorziening.bad','Problematiek.bad') ) reject limit unlimited / ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 10:46 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
dbmsoutput, cat ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 12:31 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
preprocessor, нацарапал скрипт: MergeBad.sh for file in /transfer/grd-cjg/dwhont/*bad; do /bin/cat $file >> /transfer/grd-cjg/dwhont/bad_totaal.csv; done сделал внешнюю таблицу: create table stg.ext_top_roman_err_test ( data_rec varchar2(4000) ) organization external ( type oracle_loader default directory stg_file_top access parameters ( records delimited by newline disable_directory_link_check preprocessor stg_file_top:'MergeBad.sh' badfile stg_file_top:'roman_err_test.bbd' logfile stg_file_top:'roman_err_test.log' characterset utf8 skip 1 fields terminated by '¥' optionally enclosed by '"' missing field values are null reject rows with all null fields ( data_rec char ) ) location (stg_file_top:'Wijkteam_meta.txt') ) reject limit unlimited / проблеммы: 1.если в location стоит bad_totaal.csv, но его еще нет в директории то получаю ошибку что файл не найден. заменяю датафайл в location на другой (см. таб скрипт). если удаляю preprocessor то таблица показывает строчки. Если preprocessor вставляю и делаю селект из таблицы: нет ошибок, bad_totaal.csv появляется в директории, Но таблица пустая :( Как починитъ? Другой вопрос: как в каждуй строчку нового файла (bad_totaal.csv) вставить имя файла (как первый столбик) откуда строчка скопирована(один из bad файлов)? спасибо, Ром ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.11.2016, 15:54 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2016, 06:12 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
Пустые строки не попадают, естественно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2016, 06:18 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, Спасибо. Я только не совсем понимаю решения. Моя задача: 1.после загрузки датаваренчауза (через внешние таблицы) у меня может появится от 0 до N bad files 2.В строчках bad files нет указания на датафайл. 3.Я хочу сделать новую внешнюю таблицу и через нее читать все (от 0 до N) bad files 4.Конечная цель селект в котором я показываю сколько строчек в каждом bad файле. Администратор связывается с поставщиком даты и тд. Для выше описанного: 1.делаю таблицу внешнюю ext_top_roman_err_test ( filename varchar2(100), data_rec varchar2(4000) ) organization external.... 2.нужен unix скрипт ('MergeBad.sh') который 'клеит' все bad файлы в один - bad_totaal.csv. Помимо клеинья скрипт добавляет в каждую строчку bad_totaal.csv имя bad файла откуда строчка пришла. 3.'MergeBad.sh' всавляю в preprocessor: preprocessor stg_file_top:'MergeBad.sh' таблицы ext_top_roman_err_test 4.Таблица ext_top_roman_err_test читает файл который делается во время исполнения preprocessor - bad_totaal.csv 5. результат: select filename, count(1) from ext_top_roman_err_test group by filename; Главная проблема - нехватка тех экспертизы, особено юникса :( Если можете помогите пожалуйста. спасибо, Роман create table stg.ext_top_roman_err_test ( filename varchar2(100), data_rec varchar2(4000) ) organization external ( type oracle_loader default directory stg_file_top access parameters ( records delimited by newline preprocessor stg_file_top:'MergeBad.sh' badfile stg_file_top:'roman_err_test.bbd' discardfile stg_file_top:'roman_err_test.dsc' logfile stg_file_top:'roman_err_test.log' fields terminated by ';' missing field values are null reject rows with all null fields (filename char data_rec char ) ) location (stg_file_top:'bad_totaal.csv') ) reject limit unlimited ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2016, 15:35 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
Первая, и самая неприятная проблема -- ты пришел спрашивать совета на форуме, но не ознакомился с его правилами об оформлении сообщений. Поверь, читать твое творчество в сплошном потоке совершенно не интересно Второе, ты не понял как работает директива PREPROCESSOR https://docs.oracle.com/cd/E11882_01/server.112/e22490/et_params.htm#SUTIL1384 The preprocessor program converts the data to a record format supported by the access driver and then writes the converted record data to standard output (stdout), which the access driver reads as input Ну и третье -- дальше жевать уже просто не педагогично, думай сам ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2016, 15:45 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
И да, по поводу Юникса Я использовал команду grep '.' (вместо cat) навскидку просто потому, что у нее такое поведение -- подставлять имя файла (в случае, если он не один) Возможно, есть смысл использовать awk (это вообще универсально) или что-нибудь другое Но это уже в подфорум с Юниксами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2016, 15:53 |
|
||
|
external table с неопределенным количеством дата файлов
|
|||
|---|---|---|---|
|
#18+
Вячеслав Любомудров, Спасибо. вы действительно правы, учту. Я не совсем технарь, поэтому глупые вопросы. Ваша версия работает прекрасно. Препроцесинг вроде тоже понял :) Попробую посмотреть akw чтобы и в случае с одним bad файлом работало. если не разберусь то сделаю dummy bad file. который будет всегда и который не буду учитывать в контрольном селекте.... из за нехватки скилз приходится извращаться. с уважением, ром ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.11.2016, 21:10 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=190&tid=1887028]: |
0ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
63ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 274ms |
| total: | 406ms |

| 0 / 0 |
