我们使用MS SQL Server作为解决方案,使用外部python脚本每天早上查询一个统计数据库,该数据库返回一个JSON-Stat。然后,我们通过来自_JSON_Stat()的Pyjstat库函数运行该JSON Stat,将其从JSON Stat转换为MS SQL Server可以读取的数据帧
在这个国家统计数据库中最大的表上,这可能需要7-10分钟,我们的想法是使用python的多处理至少从_json_stat开始加速。但是,在python中运行代码可以完美地工作,然后,当我们通过Microsoft的SQL Management Studio运行代码时,我们在试图加速的函数上遇到了一个pickle错误
这是相关的代码,它在python中工作,我们在最大的查询上获得了主要的加速,但不是通过SSMS的python外部脚本
def run_pyjstat(result_list):
return pyjstat.from_json_stat(result_list.json(object_pairs_hook=OrderedDict), naming="id")[0]
def post_query():
meta_data = meta_filter()
result_list = []
for variables in meta_data:
query = build_query(variables)
data = requests.post(ssb_table.metadata_url, json=query)
result_list.append(data)
time.sleep(5.0)
return result_list
def master():
dataframes = []
x = post_query()
pool = multiprocessing.Pool(processes=multiprocessing.cpu_count())
dataframes = pool.map(run_pyjstat, x)
pool.close()
pool.join()
big_df = pd.concat(dataframes, ignore_index=True)
return big_df
if __name__ == "__main__":
ssb_table = SSBTable(TableNumber)
klass = RegionKLASS(["131", "104", "214", "231"])
r = master()
这是我们得到的错误,也是我们一直得到的错误
Error in execution. Check the output for more information.
Traceback (most recent call last):
File "<string>", line 5, in <module>
File "D:\SQL-MSSQLSERVER-ExtensibilityData-PY\MSSQLSERVER01\0ECB2A7F-0698-4FA7-86E6-76EF41292E20\sqlindb.py", line 691, in transform
r = master()
File "D:\SQL-MSSQLSERVER-ExtensibilityData-PY\MSSQLSERVER01\0ECB2A7F-0698-4FA7-86E6-76EF41292E20\sqlindb.py", line 667, in master
dataframes = pool.map(run_pyjstat, x)
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\multiprocessing\pool.py", line 260, in map
return self._map_async(func, iterable, mapstar, chunksize).get()
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\multiprocessing\pool.py", line 608, in get
raise self._value
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\multiprocessing\pool.py", line 385, in _handle_tasks
Msg 39019, Level 16, State 2, Line 2
An external script error occurred:
put(task)
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\multiprocessing\connection.py", line 206, in send
self._send_bytes(ForkingPickler.dumps(obj))
File "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\PYTHON_SERVICES\lib\multiprocessing\reduction.py", line 50, in dumps
cls(buf, protocol).dump(obj)
AttributeError: Can't pickle local object 'transform.<locals>.run_pyjstat'
SqlSatelliteCall error: Error in execution. Check the output for more information.
我们两人都是大三学生,主要在学校使用Java。在这个前提下,我们没有其他开发者可以询问,谷歌上的搜索在这个特定问题上不会产生很多结果。也许我的谷歌搜索技能很差
我们已经考虑过不再使用MS SQL Server外部_脚本,而是使用Java,但目前它可以在没有多处理的情况下工作,尽管速度比我们希望的要慢
有什么方法可以让python外部脚本起作用吗
目前没有回答
相关问题 更多 >
编程相关推荐