#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. Большое спасибо за ваш ответ. Я столкнулся с несколькими проблемами с моим кодом, и я еще не смог протестировать ваше предложение. Как только я протестирую, я поделюсь результатами.