Создать таблицу как - занимает очень много времени - PullRequest
0 голосов
/ 26 февраля 2019

Я создаю таблицу, используя:

create table tbl_data_separated as
    with DTE as
    (
        select file_name, 
               to_char(file_content) as file_content -- preconvert the clob to a varchar
        from tbl_data
    )
    SELECT file_name,
           file_content,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 1, NULL, 1) r_id,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 2, NULL, 1) p_id_,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 3, NULL, 1) batch_num,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 4, NULL, 1) service_id,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 5, NULL, 1) id_qualifier,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 6, NULL, 1) flag,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 7, NULL, 1) n_code,
            REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 8, NULL, 1) p_name
    FROM dte

В file_content разделитель канала содержит более 150 таких значений, которые мне нужно сравнить с помощью REGEX.

Таблица - tbl_dataимеет более 400К строк.Когда я запускаю приведенный выше запрос, его расчетное время составляет 36 часов.

Можно ли оптимизировать его, чтобы оно могло быть выполнено быстрее?Я думаю о создании таблицы и вставке строк.Что было бы лучшим способом ускорить его?

1 Ответ

0 голосов
/ 26 февраля 2019

Глядя на ваш код .. почему бы не создать напрямую

create table tbl_data_separated as
SELECT file_name,
        to_char(file_content),
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 1, NULL, 1) r_id,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 2, NULL, 1) p_id_,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 3, NULL, 1) batch_num,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 4, NULL, 1) service_id,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 5, NULL, 1) id_qualifier,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 6, NULL, 1) flag,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 7, NULL, 1) n_code,
        REGEXP_SUBSTR(file_content, '(.*?)(\||$)', 1, 8, NULL, 1) p_name
from tbl_data 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...