我正在尝试读取SQL查询输出,并使用Python创建SAS数据集。我的SQL查询正在正确执行,但由于数据移动,仅将列名导入SAS数据集中。这是一个编码问题,我想要一些关于如何解决这个问题的指导。下面是我的代码:
with open ('Query.sql', mode = 'r', encoding='utf-8-sig') as sql_input:
sql_input = sql_input.read()
My_string = str('mssql+pyodbc://USER:Pass' + server + '/' + database + '?driver=SQL+Server+Native+Client+11.0')
engine = My_engine(My_string)
df = pd.read_sql_query(sql_input,engine)
Viya = saspy.SASsession(omruser='User', omrpw='PWD', cfgfile='cfgfile.py')
Viya.submit('libname lib "path";')
Viya.df2sd(df=df3, table='Test', libref='lib')
然后创建SAS Viya会话,并使用路径和数据集名称提交。当我检查SAS数据集时,我只看到创建的列
Error : INPUT statement exceeded record length. INFILE CARDS OPTION STOPOVER specified.
有什么建议吗
首先,我猜数据中可能嵌入了一些换行符
请参阅this github issue,其中包含与您相同的错误消息。(还要注意初始帖子中的细节——这是关于您的初始帖子应该是什么样子的!)
如果您至少有SASPy版本3.1.4,您应该有一个选项
embedded_newlines=true
可以设置,示例代码:(顺便说一下,这是
df2sd
的别名)。希望这在维亚能起作用;SASPy主要运行base(MVA)SAS,所以我不知道Viya有什么不同(也没有Viya)。如果您没有3.1.4或更新版本,请更新您的SASPy另一种选择是在Python中删除换行符(
\n
),然后再将数据传输到其他位置。这就是github问题中的用户所做的第二,如果你在Viya运行,考虑使用{a2},它是Python中的SAS Viya脚本库。它将内容提交为CAS操作,这可能对您更有利
最后,第三个选项是在SAS中运行数据库连接块。当然,除非你没有授权访问ODBC,但是如果你授权它,那么我会考虑把这一块移动到SAS,并告诉SAS输入文件本身。p>
相关问题 更多 >
编程相关推荐