Классика баз данных - статьи

       

Загрузка данных в сжатую таблицу


Учтите, что при указании ключевого слова COMPRESS, как показано в примерах выше, вы, фактически, никаких данных не сжимаете. Представленные выше команды изменяют только установку в словаре данных. Данные реально не сжимаются, пока не будут загружены или вставлены в таблицу.

Более того, чтобы гарантировать фактическое сжатие данных, надо использовать соответствующий метод загрузки или вставки данных в таблицу. Сжатие данных происходит только при массовой загрузке или в процессе массовой вставки, с помощью одного из следующих четырех методов:

  • Непосредственная загрузка SQL*Loader
  • Последовательные вставки INSERT с подсказкой APPEND
  • Параллельный INSERT
  • CREATE TABLE ... AS SELECT
  • Метод непосредственной загрузки SQL*Loader - наиболее удобный способ загрузки данных в таблицу, если данные доступны в текстовом файле. Пример представлен ниже:

    $sqlldr sanjay/sanjay@proddb control=sales_history.ctl direct=true

    Если данные доступны в промежуточной (staging) таблице, можно использовать последовательные операторы INSERT с подсказкой APPEND или параллельный INSERT.

    В качестве примера рассмотрим случай, когда входные данные доступны в не сжатой промежуточной таблице SALES_HISTORY. Используя метод последовательной вставки, можно использовать следующий оператор для вставки данных в сжатую таблицу:

    INSERT /*+ APPEND */ INTO SALES_HISTORY_COMP SELECT * FROM SALES_HISTORY;

    Для переноса данных из промежуточной таблицы в сжатую можно также использовать параллельный INSERT, как показано ниже:

    ALTER SESSION ENABLE PARALLEL DML; INSERT /*+PARALLEL(SALES_HISTORY_COMP,4)*/ INTO SALES_HISTORY_COMP SELECT * FROM SALES_HISTORY;

    Учтите, что при использовании параллельного INSERT надо сначала включить распараллеливание операторов DML в сеансе с помощью команды ALTER SESSION ENABLE PARALLEL DML.

    Если входные данные представлены в обычном файле, можно также обратиться к нему как к внешней таблице, а затем вставлять данные в сжатую таблицу так же, как из промежуточной таблицы. (Обсуждение внешних таблиц выходит за рамки этой статьи.)

    Можно также использовать оператор CREATE TABLE ... AS SELECT для создания сжатой таблицы и вставки в нее данных за один шаг. Вот пример:

    CREATE TABLE SALES_HISTORY_COMP COMPRESS AS SELECT * FROM SALES_HISTORY;

    Если не использовать соответствующий метод загрузки или вставки данных, данные в таблице окажутся не сжатыми, хотя для таблицы и определен атрибут COMPRESS. Например, если использовать обычную загрузку (conventional path) с помощью SQL*Loader или обычные операторы INSERT, данные не будут сжиматься.



    Содержание раздела