如何在Python中远程查询sas7bdat文件

时间:2015-12-29 14:59:05

标签: python pandas ssh sas paramiko

我正在尝试使用Python查询以SAS的sas7bdat文件格式存储的数据库(我没有SAS)。 sas7bdat文件存储在一个远程服务器上,我可以通过SSH连接访问paramiko,但是太大了,不能简单地用Python的sas7bdat模块读取或在本地下载。

有人能想到一种方法来使用SSH连接来查询 sas7bdat文件,并将查询结果加载到Python(Pandas DataFrame等)中吗?或者也许是一种完全不同的方法?

2 个答案:

答案 0 :(得分:0)

.sas7bdat是一种专有的数据库格式,必须进行反向工程才能访问。如果您没有安装sas7bdat Python模块,则在没有创建可以读取文件的自定义脚本的情况下,您将无法查询它。这假设文件是​​未压缩的;如果它被压缩,你将有更难以阅读它。

我建议您阅读Python sas7bdat scriptR code,以了解如何阅读该文件。

更简单的解决方案是获得安装sas7bdat文件的权限;如果它对你正在做的工作至关重要,你的管理员会给你许可。

答案 1 :(得分:0)

您可以尝试Carolina S-JDBC来查询sas7bdat文件。它支持SQL语法,因此您可以对数据进行子集化,并在包括Python在内的不同语言环境中正常运行:

import jaydebeapi

conn = jaydebeapi.connect('com.dullesopen.jdbc.Driver',
         'jdbc:carolina:v2:libnames=(dir=\'./mydata\')',
         'sjdbc/carolina-jdbc-2.0.4.jar')
curs = conn.cursor()
# select a subset of data
curs.execute( "SELECT * FROM big_sasfile WHERE id < 1000")
# replace with saving to a file
print curs.fetchall()

conn.close()

如果您没有jaydebeapi Python模块,并且无法在没有root访问权限的情况下安装它,您可以编写一个小型Java程序,使用驱动程序对sas7bdat文件运行查询。

S-JDBC是一个独立的jar文件,因此您不需要主目录之外的任何权限来“安装”它。

免责声明: Carolina S-JDBC是Dulles Research的商业产品,提供免费评估。我为Dulles Research工作。