Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Внешняя таблца / 24 сообщений из 24, страница 1 из 1
12.07.2019, 10:27
    #39836694
shadow432
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Ребята, туплю уже второй день. Подскажите пожалуйста как такое реализовать. Или ткните где почитать.
Есть файл с тучей строк вида:

A;B;C;D;E;F;G;H
A;B;C;D;E;F;G;H
A;B;C;D;E;F;G;H
......................

Нужно создать внешнюю таблицу чтобы в ней было 3 поля и загрузилось в нее тоже 3 поля из файла (остальные пропустить).

A E G
A E G
A E G
.......

В обычном лодере для этого есть FILLER. Не пойму как это решить в случае с внешней таблицей.
...
Рейтинг: 0 / 0
12.07.2019, 11:21
    #39836725
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Поиск .

Первая ссылка .

5 минут на написание и проверку.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE tt (
  A VARCHAR2(10),
  B VARCHAR2(10),
  C VARCHAR2(10)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY TEMP
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ';'
    MISSING FIELD VALUES ARE NULL
    (
      A CHAR(10),
      B CHAR(10),
      C CHAR(10)
    )
  )
  LOCATION ('table.txt')
)
REJECT LIMIT UNLIMITED;

...
Рейтинг: 0 / 0
12.07.2019, 11:46
    #39836748
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
dmdmdm5 минут на написание и проверку.А теперь ещё погуглигли FILLER, помогатый.
...
Рейтинг: 0 / 0
12.07.2019, 11:58
    #39836756
shadow432
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
dmdmdm Поиск .

Первая ссылка .

5 минут на написание и проверку.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE TABLE tt (
  A VARCHAR2(10),
  B VARCHAR2(10),
  C VARCHAR2(10)
)
ORGANIZATION EXTERNAL (
  TYPE ORACLE_LOADER
  DEFAULT DIRECTORY TEMP
  ACCESS PARAMETERS (
    RECORDS DELIMITED BY NEWLINE
    FIELDS TERMINATED BY ';'
    MISSING FIELD VALUES ARE NULL
    (
      A CHAR(10),
      B CHAR(10),
      C CHAR(10)
    )
  )
  LOCATION ('table.txt')
)
REJECT LIMIT UNLIMITED;




Все верно создаст таблицу из трех полей, но ведь и загрузит в нее первые три поля из файла. А мне надо 1, 5, 7 поля. А остальные пропустить.
...
Рейтинг: 0 / 0
12.07.2019, 11:59
    #39836757
shadow432
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Elicdmdmdm5 минут на написание и проверку.А теперь ещё погуглигли FILLER, помогатый.

Elic, подскажи пожалуйста как прикрутить FILLER к внешней таблице.
...
Рейтинг: 0 / 0
12.07.2019, 12:08
    #39836764
dmdmdm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Виноват, был невнимателен.

Вариант перечислить поля явно

Код: plsql
1.
select A,C from tt



не подходит?
...
Рейтинг: 0 / 0
12.07.2019, 12:29
    #39836775
shadow432
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
dmdmdm,

Именно так это сейчас и работает. Но это не кузяво - грузит из файла в таблицу 20 полей, когда нужно только 3.
...
Рейтинг: 0 / 0
12.07.2019, 12:56
    #39836796
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
shadow432,

Препроцессор из awk print $1, $5, $7
...
Рейтинг: 0 / 0
12.07.2019, 12:59
    #39836799
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
shadow432грузит из файла в таблицу 20 полей, когда нужно только 3.Что и сколько ты надеешься сэкономить от этого "грузит".
...
Рейтинг: 0 / 0
12.07.2019, 13:06
    #39836803
shadow432
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
-2-shadow432грузит из файла в таблицу 20 полей, когда нужно только 3.Что и сколько ты надеешься сэкономить от этого "грузит".


Я имел ввиду загружат ь в таблицу 20 полей. Дело не в экономить, а в том зачем делать не правильно, если возможно сделать правильно.
...
Рейтинг: 0 / 0
12.07.2019, 13:10
    #39836806
shadow432
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
В общем понял что у этой задачи нет "поверхостного" решения. Будем грузить по старинке. Спасибо всем откликнувшимся.
...
Рейтинг: 0 / 0
12.07.2019, 13:13
    #39836808
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
shadow432,

вообще вместо awk лучше perl, тогда это будет кроссплатформенное решение, т.к. перл всегда поставляется с самим ораклом, так что будет работать и на винде
...
Рейтинг: 0 / 0
12.07.2019, 13:17
    #39836812
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
shadow432В общем понял что у этой задачи нет "поверхостного" решения. Будем грузить по старинке. Спасибо всем откликнувшимся.

Чекча не читатель... 21925593

Specifying Filler Fields
...
Рейтинг: 0 / 0
12.07.2019, 13:46
    #39836834
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Vadim Lejnin,


"Чекча не читатель"?
его первое же сообщение: 21925505
shadow432В обычном лодере для этого есть FILLER. Не пойму как это решить в случае с внешней таблицей.

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sutil/examples-using-oracle-external-tables.html#GUID-9D3ED2AE-192D-435A-833E-97899778929E
авторExternal tables do not support filler fields
...
Рейтинг: 0 / 0
12.07.2019, 13:49
    #39836835
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
препроцессор на перле:
1. для винды
Код: powershell
1.
%ORACLE_HOME%\perl\bin\perl -ne "print \"$1;$3;$5\n\" if (/^(\w+);(\w+);(\w+);(\w+);(\w+);(\w+)/)" %1



2. для *nix:
Код: powershell
1.
perl -ne 'print "$1;$3;$5\n" if (/^(\w+);(\w+);(\w+);(\w+);(\w+);(\w+)/)' $1
...
Рейтинг: 0 / 0
12.07.2019, 13:55
    #39836838
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
shadow432зачем делать не правильноСубъективные хотелки объективно ограничиваются способностью воспринимать документацию.

xtenderпрепроцессорНафига козе препроцессор. Просто не указывать поле в декларации чем-то не то?
...
Рейтинг: 0 / 0
12.07.2019, 14:18
    #39836848
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
-2-Нафига козе препроцессорбыстрее и гибче
...
Рейтинг: 0 / 0
12.07.2019, 14:52
    #39836873
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
xtender-2-Нафига козе препроцессорбыстрее и гибчеГибкость в том, что помимо чисто sql нужно еще и исполняемый файл создавать?
Код: 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.
os> for (( i=1; i<=99999; i++ )) do printf "1%05d;2%05d;3%05d;4%05d;5%05d;6%05d\n" $i $i $i $i $i $i; done > file.csv
os> cat filex.perl 
#!/usr/bin/perl -n

print "$1;$3;$5\n" if (/^(\w+);(\w+);(\w+);(\w+);(\w+);(\w+)/)

sql> create table ext2 (
  f1 number,
  f3 number,
  f5 number
) organization external (
  default directory oracle_tmp
  access parameters (
    records delimited by newline
    preprocessor 'filex.perl'
    fields terminated by ';'
    ( f1, f3, f5)
  )
  location ('file.csv')
);

sql> declare
   t timestamp with time zone;
   n number;
begin for i in 1..3 loop
   n := 0;
   t := systimestamp;
   for e in (select * from ext1) loop
      n := n + e.f3;
   end loop;
   dbms_output.put_line('nopreproc: '||(systimestamp - t)||' '||n);
   n := 0;
   t := systimestamp;
   for e in (select * from ext2) loop
      n := n + e.f3;
   end loop;
   dbms_output.put_line('preproc..: '||(systimestamp - t)||' '||n);
end loop; end;
/

nopreproc: +000000000 00:00:00.468283000 34999650000
preproc..: +000000000 00:00:00.960613000 34999650000
nopreproc: +000000000 00:00:00.495077000 34999650000
preproc..: +000000000 00:00:00.984496000 34999650000
nopreproc: +000000000 00:00:00.483021000 34999650000
preproc..: +000000000 00:00:00.981991000 34999650000
...
Рейтинг: 0 / 0
12.07.2019, 15:21
    #39836881
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
-2-Гибкость в том, что помимо чисто sql нужно еще и исполняемый файл создавать?в том, что можно, что угодно обработать как надо.


-2-
Код: plsql
1.
preproc..: +000000000 00:00:00.960613000 34999650000

awk пробовал?
awk -F';' {print $1 $3 $5}
...
Рейтинг: 0 / 0
12.07.2019, 15:31
    #39836887
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
xtenderможно , что угодно обработать как надо"что" - не союз, а "как" - наоборот.
...
Рейтинг: 0 / 0
12.07.2019, 15:37
    #39836890
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Elic,

спасибо, конечно, но я в курсе просто опечатка при правке - перемещал ctrl+x/ctrl+v
...
Рейтинг: 0 / 0
12.07.2019, 15:57
    #39836898
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
А мне не смешно …
...
Рейтинг: 0 / 0
12.07.2019, 16:19
    #39836916
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
Elic,

Ну и насколько интересно выискивать ошибки именно в моих сообщения? Причем вполне очевидные опечатки. Свои не хочешь проверить?
...
Рейтинг: 0 / 0
12.07.2019, 22:51
    #39837021
кит северных морей
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Внешняя таблца
shadow432В общем понял что у этой задачи нет "поверхостного" решения. Будем грузить по старинке. Спасибо всем откликнувшимся.
структура колонок, соответствующая структуре файла - нормальное решение, не надо чинить то, что не сломано. завтра понадобится четвертая колонка - будете таблицу пересоздавать, или препроцессор переписывать?
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Внешняя таблца / 24 сообщений из 24, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]