to_reader¶
- PGPackDumper.to_reader(
- query=None,
- table_name=None,
- )
- Параметры:
query (str | None) – SQL-запрос для выборки данных
table_name (str | None) – Имя таблицы для полной выборки данных
- Результат:
Объект StreamReader для потокового чтения данных в PGPack формате
- Тип результата:
- Исключение:
PGPackDumperReadError – При ошибках чтения данных
Создание потока для чтения данных из PostgreSQL/GreenPlum в виде объекта StreamReader с данными в PGPack формате.
Описание:
Метод создает объект StreamReader, который предоставляет потоковый доступ
к данным из PostgreSQL/GreenPlum в PGPack формате. Это позволяет обрабатывать большие
объемы данных без загрузки всего результата в память.
StreamReader реализует интерфейс для чтения данных в потоковом режиме и может использоваться
для передачи данных между системами или для последующей обработки в других форматах.
Ключевые особенности:
Потоковое чтение - данные читаются по мере необходимости через COPY протокол
Минимальное потребление памяти - не загружает весь результат в память
PGPack формат - данные представлены в оптимизированном бинарном формате
Метаданные - включает информацию о структуре таблицы (колонки, типы данных)
Совместимость - может использоваться с методом
write_betweenдля передачи данных
Параметры:
Параметр |
Тип |
Описание |
|---|---|---|
|
|
SQL-запрос для выборки данных. SQL-запрос имеет приоритет, поэтому, в случае передачи обоих параметров, метод проигнорирует указанную таблицу.
Пример: |
|
|
Имя таблицы для полной выборки всех данных. Используется только если |
Возвращаемое значение:
Объект StreamReader с методами для потокового чтения данных.
Примеры использования:
# Пример 1: Потоковое чтение всей таблицы
from pgpack_dumper import PGPackDumper, PGConnector
connector = PGConnector(host="localhost", port=5432, dbname="mydb")
dumper = PGPackDumper(connector=connector)
reader = dumper.to_reader(table_name="public.user_logs")
# Пример 2: Чтение данных по запросу с фильтрацией
query = """
SELECT user_id, action, timestamp, amount
FROM sales.transactions
WHERE transaction_date = CURRENT_DATE
ORDER BY timestamp DESC
"""
reader = dumper.to_reader(query=query)
Обработка ошибок:
# Пример 1: Обработка ошибок чтения
try:
reader = dumper.to_reader(query="SELECT * FROM nonexistent_table")
# Ошибка может произойти при создании reader или при попытке чтения
except PGPackDumperReadError as e:
print(f"Ошибка чтения: {e}")
# Возможные причины: таблица не существует, синтаксическая ошибка в запросе,
# недостаточно прав доступа
# Пример 2: Проверка доступности данных
try:
reader = dumper.to_reader(table_name="important.data")
# Проверка что reader создан успешно
if reader:
print("StreamReader успешно создан")
except Exception as e:
print(f"Неожиданная ошибка: {e}")
Сценарии использования StreamReader:
Потоковая передача данных - между серверами через
write_betweenОбработка больших результатов - когда данные не помещаются в память
Инкрементальная загрузка - последовательная обработка данных по частям
Промежуточное хранение - временное хранение данных в потоковом формате
Интеграция с другими системами - передача данных в совместимые форматы
Работа с метаданными:
Метод автоматически сохраняет метаданные в self._dbmeta,
включая информацию о колонках (имена и типы данных).
Производительность и память:
COPY протокол - используется для эффективной потоковой передачи
Буферизация - оптимальный размер буфера для сетевой передачи
Метаданные кеширование - метаданные сохраняются для повторного использования
Сжатие - данные могут быть сжаты в соответствии с настройками PGPackDumper
Методы StreamReader:
Созданный StreamReader предоставляет следующие основные методы:
* read() - чтение данных
* to_rows() - преобразование в итератор строк
* close() - закрытие потока и освобождение ресурсов
Пример использования StreamReader:
# Получение StreamReader
reader = dumper.to_reader(table_name="public.large_table")
try:
# Потоковая обработка данных
for chunk in reader.to_rows():
# Обработка каждой порции данных
process_data(chunk)
finally:
# Важно закрыть reader для освобождения ресурсов
reader.close()
# Использование с write_between
other_dumper.write_between(
table_dest="backup.table_copy",
dumper_src=reader # Передача reader как источника
)
Примечания:
Объект
StreamReaderтребует закрытия после использования (методclose())Данные читаются последовательно, повторное чтение невозможно
Метаданные доступны через
dumper._dbmetaпосле вызова методаДля работы с очень большими таблицами рекомендуется использовать фильтрацию в запросах
См. также:
write_between - Передача данных с использованием StreamReader
StreamReader- Документация по классу StreamReaderread_dump - Альтернативный способ получения данных в файл
metadata_reader - Извлечение метаданных таблицы