Как Dask читает с SQL Сервера на Python - PullRequest
1 голос
/ 10 апреля 2020

Я должен использовать dask dataframe, потому что мои данные огромные 150 миллионов строк и 50000 столбцов

Я пытался использовать

conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=DELL;'
                      'Database=DB;'
                      'Trusted_Connection=yes;')
df_features = dd.read_sql_table(table="Features" , con=conn , index_col="ID")

Я получил эту ошибку

TypeError: read_sql_table() missing 1 required positional argument: 'uri'

Итак, я попробовал это

df_features = dd.read_sql_table(table="Features" , uri="mssql+pyodbc:///?odbc_connect=Driver={SQL Server}; Server=DELL; Database=DB; Trusted_Connection=yes;", index_col="ID")

и получил эту ошибку

OperationalError: (pyodbc.OperationalError) ('08001', '[08001] [Microsoft][ODBC SQL Server Driver]Neither DSN nor SERVER keyword supplied (0) (SQLDriverConnect)')
(Background on this error at: http://sqlalche.me/e/e3q8)

как подключиться к SQL Серверу в dask dataframe?

Ответы [ 2 ]

1 голос
/ 10 апреля 2020

Windows ODB C Диспетчер драйверов не требует пробелов между ключевым словом и =


Следующие действия должны помочь:

df_features = dd.read_sql_table(
    table="Features",
    uri="mssql+pyodbc:///?odbc_connect=DRIVER={SQL Server};SERVER=my.db.server;DATABASE=DB;Trusted_Connection=yes;",
    index_col="ID"
)
1 голос
/ 10 апреля 2020

@ Giorgos-Myrianthous находится в правильных строках: вам нужен URI, а не какой-либо объект соединения. Формат этого URI должен быть понятен SQLalchemy, поэтому прочитайте их документацию, чтобы узнать, как форматировать ODB C.

Документы: https://docs.sqlalchemy.org/en/13/dialects/mysql.html#module -sqlalchemy.dialects. mysql .pyodb c

Причина в том, что Dask должен иметь возможность сериализации и передачи задач, но объекты соединения не могут быть сериализованы. Однако, если вы работаете только с потоками, вы можете передать объект механизма SQLalchemy (это в master).

...