Извлечь несколько миллионов записей из Teradata в Python (панды) - PullRequest
0 голосов
/ 26 июня 2018

У меня есть данные за 6 месяцев электронных писем (свойства электронной почты, такие как дата отправки, строка темы плюс сведения о получателе, такие как возраст, пол и т. Д., Всего около 20 столбцов) в моей таблице teradata.В общей сложности он составляет около 20 миллионов, и я хочу, чтобы его внедрили в Python для дальнейшего прогнозного моделирования.

Я пытался выполнить запрос выбора, используя соединитель 'pyodbc', но он просто работал часами.Затем я остановил его и изменил запрос, чтобы получить данные за 1 месяц (может быть 3-4 миллиона), но все еще занимает очень много времени.

Есть ли лучший (более быстрый) вариант, чем 'pyodbc' иликакой-то другой подход вообще?

Любой вклад приветствуется.спасибо

1 Ответ

0 голосов
/ 26 июня 2018

При обмене данными между Python и Teradata я рекомендую использовать пакет Teradata (pip teradata; https://developer.teradata.com/tools/reference/teradata-python-module).. Он использует ODBC (или REST) ​​для подключения.

Кроме того, вы можете использовать JDBC черезJayDeBeApi. Иногда JDBC может быть несколько быстрее, чем ODBC.

Оба параметра поддерживают спецификацию API базы данных Python, поэтому нет необходимости прикасаться к другому коду. Например, pandas.read_sql прекрасно работает с соединениями сверху.

Ваши проблемы с производительностью похожи на некоторые другие проблемы:

  1. сетевое подключение

  2. Обработка памяти Python (Pandas)

ad 1) пропускная способность может быть заменена только большей пропускной способностью

ad 2) вы можете попытаться сделать как можно больше в базе данных (разработка функций) + ваша локальная машина должна иметьОЗУ («практическое правило панд: иметь в 5–10 раз больше ОЗУ, чем размер вашего набора данных») - возможно, Apache Arrow поможет решить некоторые проблемы с локальной памятью

Проверить:

...