Оптимизация pandas.read_sql для teradata

#python #sql #pandas #teradata #read-sql

Вопрос:

Как можно прочитать sql teradata в tempfile? Цель состоит в том, чтобы повысить производительность при вводе данных из sql-запроса в pandas df.

На https://towardsdatascience.com/optimizing-pandas-read-sql-for-postgres-f31cd7f707ab Тристан Крокетт показывает, как это делается для постгреса.

 def read_sql_tmpfile(query, db_engine):
    with tempfile.TemporaryFile() as tmpfile:
        copy_sql = "COPY ({query}) TO STDOUT WITH CSV {head}".format(
           query=query, head="HEADER"
        )
        conn = db_engine.raw_connection()
        cur = conn.cursor()
        cur.copy_expert(copy_sql, tmpfile)
        tmpfile.seek(0)
        df = pandas.read_csv(tmpfile)
        return df
 

Я не мог понять, как переписать этот код, чтобы он работал с сервером teradata.

Комментарии:

1. Как синтаксис SQL COPY , так и cursor.copy_expert метод зависят от postgres. Вы используете teradatasql драйвер для Teradata?

2. Привет, Фред, спасибо за твой ответ. До сих пор я пытался использовать teradata, teradatasql и pyodbc для подключения к серверу. Я ищу аналогичное решение для КОПИРОВАНИЯ и copy_expert на Teradata.

3. Прямого эквивалента не существует. Существует TD_SYSFNLIB.CSV функция таблицы, которая может использоваться для преобразования базы данных в CSV, но нет метода курсора для прямой записи этого результирующего набора в файл. Вам нужно будет использовать один из методов выборки, чтобы перенести данные в память, а затем записать их в CSV. Я понятия не имею, будет ли это быстрее или медленнее в целом.

4. Хорошо, большое тебе спасибо за информацию, Фред! Могу я спросить, есть ли у вас еще одно предложение по ускорению процесса выборки больших запросов? SQL Server-это teradata vantage

5. Если медлительность заключается в извлечении миллионов строк из базы данных, то текущий teradatasql драйвер позволяет добавить {fn teradata_require_fastexport} escape перед оператором SELECT. Если медлительность заключается в преобразовании типов для панд (как в статье, которую вы связали), возможно, стоит попробовать промежуточный подход к CSV-файлам.