create_temp

DBHose.create_temp()

Создает таблицу для промежуточного хранения данных.

Описание:

Метод создает таблицу в целевой СУБД, которая используется как промежуточное хранилище данных перед их переносом в целевую таблицу. Таблица создается на основе DDL (Data Definition Language) целевой таблицы.

Сигнатура:

def create_temp(self) -> None:
    """Create temporary table."""

Процесс выполнения:

  1. Получение DDL целевой таблицы:

    query_ddl = read_text(ddl_path.format(self.dumper_dest.dbname))
    reader = self.dumper_dest.to_reader(
        query_ddl.format(table=self.table_dest)
    )
    
  2. Извлечение метаданных:

    self.ddl, self.temp_ddl, self.table_temp = tuple(*reader.to_rows())
    
  3. Валидация:

    if not self.ddl:
        msg = f"Table {self.table_dest} not found!"
        raise ValueError(msg)
    
  4. Создание таблицы:

    self.dumper_dest.cursor.execute(self.temp_ddl)
    
    # Для PostgreSQL/Greenplum - коммит транзакции
    if self.dumper_dest.__class__ is not NativeDumper:
        self.dumper_dest.connect.commit()
        self.dumper_dest.copy_buffer.query = None
    

Атрибуты, обновляемые методом:

Обновляемые атрибуты

Атрибут

Описание

ddl

DDL (Data Definition Language) целевой таблицы

temp_ddl

DDL временной таблицы

table_temp

Имя созданной временной таблицы

Примеры использования:

Базовый пример
from dbhose_airflow import DBHose

dbhose = DBHose(
    table_dest="public.users",
    connection_dest="postgres_target",
)

# Создание временной таблицы
dbhose.create_temp()

print(f"Имя временной таблицы: {dbhose.table_temp}")
print(f"DDL целевой таблицы: {dbhose.ddl[:100]}...")
print(f"DDL временной таблицы: {dbhose.temp_ddl[:100]}...")

Логирование:

Метод логирует ключевые этапы выполнения.

Особенности для разных СУБД:

Ошибки и исключения:

Возможные исключения

Исключение

Причина

ValueError

Целевая таблица не существует

Практические рекомендации:

  1. Проверка прав доступа:

    # Перед созданием проверьте права
    if not has_table_create_permission(dbhose.connection_dest):
        raise PermissionError("Нет прав на создание таблиц")
    
  2. Отладка с сохранением таблицы:

    # Для отладки оставьте таблицу
    dbhose = DBHose(
        table_dest="my_table",
        connection_dest="my_db",
        drop_temp_table=False,  # Не удалять автоматически
    )
    dbhose.create_temp()
    # Проверьте созданную таблицу в БД
    

Примечания:

  • Имя промежуточной таблицы наследуюется от целевой с постфиксом _temp

  • Убедитесь в достаточности дискового пространства

  • Для больших таблиц PostgreSQL/Greenplum с партиционированием процесс может занимать больше времени

См. также:

  • drop_temp - Удаление промежуточной таблицы