使用Python将SQL输出读取到SAS数据集中时出现问题

2024-06-01 05:28:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试读取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.

有什么建议吗


Tags: 数据编码dfreadinputsqlstringmy
1条回答
网友
1楼 · 发布于 2024-06-01 05:28:04

首先,我猜数据中可能嵌入了一些换行符

请参阅this github issue,其中包含与您相同的错误消息。(还要注意初始帖子中的细节——这是关于您的初始帖子应该是什么样子的!)

如果您至少有SASPy版本3.1.4,您应该有一个选项embedded_newlines=true可以设置,示例代码:

sas.dataframe2sasdata(df=problematic_data,table='via_sas_test_prob',libref='OUT', 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>

相关问题 更多 >