powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Внешняя таблца
24 сообщений из 24, страница 1 из 1
Внешняя таблца
    #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
Внешняя таблца
    #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
Внешняя таблца
    #39836748
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm5 минут на написание и проверку.А теперь ещё погуглигли FILLER, помогатый.
...
Рейтинг: 0 / 0
Внешняя таблца
    #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
Внешняя таблца
    #39836757
shadow432
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elicdmdmdm5 минут на написание и проверку.А теперь ещё погуглигли FILLER, помогатый.

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

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

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



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

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

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


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

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

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

Specifying Filler Fields
...
Рейтинг: 0 / 0
Внешняя таблца
    #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
Внешняя таблца
    #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
Внешняя таблца
    #39836838
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shadow432зачем делать не правильноСубъективные хотелки объективно ограничиваются способностью воспринимать документацию.

xtenderпрепроцессорНафига козе препроцессор. Просто не указывать поле в декларации чем-то не то?
...
Рейтинг: 0 / 0
Внешняя таблца
    #39836848
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
-2-Нафига козе препроцессорбыстрее и гибче
...
Рейтинг: 0 / 0
Внешняя таблца
    #39836873
Фотография -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
Внешняя таблца
    #39836881
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
-2-Гибкость в том, что помимо чисто sql нужно еще и исполняемый файл создавать?в том, что можно, что угодно обработать как надо.


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

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

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

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


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