Можно ли использовать фрейм данных dask с модулем teradata python?

#python #teradata #dask

#python #teradata #dask

Вопрос:

У меня есть этот код:

 import teradata
import dask.dataframe as dd

login = login
pwd = password

udaExec = teradata.UdaExec (appName="CAF", version="1.0",
                                    logConsole=False)

session = udaExec.connect(method="odbc", DSN="Teradata",
                                  USEREGIONALSETTINGS='N', username=login,
                                  password=pwd, authentication="LDAP");

  

И соединение работает.

Я хочу получить фрейм данных dask. Я пробовал это:

 sqlStmt = "SOME SQL STATEMENT"

df = dd.read_sql_table(sqlStmt, session, index_col='id')
  

И я получаю это сообщение об ошибке:

 AttributeError: 'UdaExecConnection' object has no attribute '_instantiate_plugins'
  

У кого-нибудь есть предложения?

Заранее спасибо.

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

1. Вы можете заставить его работать?

Ответ №1:

read_sql_table ожидает строку подключения SQLAlchemy, а не «сеанс», который вы передаете. Я не слышал об использовании teradata через sqlalchemy, но, по-видимому, есть хотя бы один соединитель, который вы могли бы установить, и, возможно, другие решения, использующие общий драйвер ODBC.

Однако вы можете использовать более прямой подход, используя delayed что-то вроде

 from dask import delayed

# make a set of statements for each partition
statements = [sqlStmt   " where id > {} and id <= {}".format(bounds)
              for bounds in boundslist]  # I don't know syntax for tera

def get_part(statement):
    # however you make a concrete dataframe from a SQL statement
    udaExec = ..
    session = ..
    df = ..
    return dataframe

# ideally you should provide the meta and divisions info here
df = dd.from_delayed([delayed(get_part)(stm) for stm in statements],
                     meta= , divisions=)
  

Нам будет интересно услышать о вашем успехе.

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

1. Большое спасибо за ваш ответ. Я столкнулся с несколькими проблемами с моим кодом, и я еще не смог протестировать ваше предложение. Как только я протестирую, я поделюсь результатами.