Загрузите данные в пандас датафрейм в ms sql python - PullRequest
0 голосов
/ 26 ноября 2018

Я пытаюсь построить модель Python в MS SQL SERVER 2017. Я пытался использовать некоторые учебные пособия, но результат был далек от ожидаемого.Мне интересно, что не так с этим скриптом (загрузка таблицы SQL в кадр данных pandas):

USE PREPRESS_TMP;
GO

EXEC sp_execute_external_script
    @language=N'Python',
    @script=N'
dataset = pandas.DataFrame(input_data)  
    ',
@input_data_1 = N'Select * FROM dbo.Rests_GO'


GO

Сообщение об ошибке:

STDOUT message(s) from external script: 

Express Edition will continue to be enforced.
SqlSatelliteCall function failed. Please see the console output for more information.
Traceback (most recent call last):
  File "C:\Program Files\Microsoft SQL 
Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\computecontext\RxInSqlServer.py", line 406, in 
rx_sql_satellite_call
    rx_native_call("SqlSatelliteCall", params)
  File "C:\Program Files\Microsoft SQL 
Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\site-packages\revoscalepy\RxSerializable.py", line 291, in rx_native_call
ret = px_call(functionname, params)
RuntimeError: revoscalepy function failed.

Я буду рад принять любую помощь.

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Хотя я не могу ответить на ваши ошибки, вам нужен еще один параметр "input_data_x_name", чтобы код работал:

EXEC sp_execute_external_script
@language=N'Python',
@script=N'dataset = pandas.DataFrame(input_data)',
@input_data_1 = N'Select * FROM dbo.Rests_GO',
@input_data_1_name = N'input_data' 
0 голосов
/ 11 февраля 2019

Хотя Express Edition является одним из выпусков SQL Server, это сообщение несколько отличается и говорит о том, что клиентские библиотеки Python лицензированы в соответствии с ограничениями Express Edition SQL Server.Вы можете спокойно проигнорировать это, если не будете заботиться о масштабируемости в дальнейшем.На самом деле вы увидите одно и то же сообщение об ошибке, касающееся пределов (наборов данных в памяти и максимум двухъядерной обработки) в SQL Server Standard Edition - я видел его много раз и только что дважды проверил его на точность.Таким образом, первое сообщение является информационным сообщением, а не сообщением об ошибке, поэтому вы можете спокойно игнорировать эту часть вывода.

Вторая часть сообщения - это то, на чем вы хотите сосредоточиться (почти всегда при отладкеэтот тип кода TSQL / Python).

Следовательно, приведенное выше решение user3912517 является правильным, хотя может быть полезно понять, почему.

Простое объяснение: Python должен ссылаться на данныеset, переданный в него из SQL Server с именем.

Это осуществляется с помощью параметра @ input_data_1_name, который эффективно «именует» данные, возвращаемые запросом, определенным в @ input_data_1.

Это обеспечивает связь между набором данных, возвращаемым запросом, выполняемым в среде SQL Server, и фреймом данных, который необходим коду Python для ссылки на тот же набор данных в среде Python.

0 голосов
/ 04 января 2019

Вы используете Express Edition, верно?Смотрите это: https://docs.microsoft.com/en-us/sql/sql-server/editions-and-components-of-sql-server-2017?view=sql-server-2017. В вашем коде нет ничего плохого, хотя вы должны включить входные данные для очистки, как показано ниже

использовать AdventureWorksDW2014 go

EXEC sp_execute_external_script
@language =N'Python ', @ script = N' импортировать панд в виде pd из панд. Import DataFrame OutputDataSet = pd.DataFrame (InputDataSet.describe ()) ', @ input_data_1 = N'SELECT CAST (TotalProductCost AS float), CAST (UnitPrice AS Float)), CAST (OrderQuantity AS FLOAT) ИЗ FactInternetSales 'с наборами результатов ((Float TotalProductCost, Float UnitPrice, FLOAT OrderQuantity))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...