无论如何我们可以直接从sas服务器读取sas数据吗?

Posted

技术标签:

【中文标题】无论如何我们可以直接从sas服务器读取sas数据吗?【英文标题】:is there anyway we can read sas data directly from sas server? 【发布时间】:2021-12-30 07:20:29 【问题描述】:

我正在尝试使用 pyreadstat 直接从 sftp 服务器读取 sasdataset,因为我无法下载数据,我正在尝试这种方法:

import pysftp


class My_Connection(pysftp.Connection):
    def __init__(self, *args, **kwargs):
        try:
            if kwargs.get('cnopts') is not None:
                return
            kwargs['cnopts'] = pysftp.CnOpts()
            kwargs['cnopts'].hostkeys = None
        except pysftp.HostKeysException as e:
            self._init_error = True
            print('Warning Failed to load Host-keys')
        else:
            self._init_error = False

        self._sftp_live = False
        self._transport = None
        super().__init__(*args, **kwargs)

    def __del__(self):
        if not self._init_error:
            self.close()
with My_Connection(SFTP_HOST,username=SFTP_USER,password=SFTP_PASSWORD,) as conn:
    conn.cwd('/sas/sasdata/sasdev/sasdatasets')
    with open("/sas/sasdata/sasdev/sasdatasets/statfile.sas7bdat", 'r') as fp:
        df = pyreadstat.read_sas7bdat(fp)

当文件很大时,谁能帮助我如何在服务器中直接读取 sasdataset?

【问题讨论】:

你能用 SASpy 代替吗? sassoftware.github.io/saspy 它是 SFTP 服务器还是 SAS 服务器?这些是非常不同的用例。 这是您有权访问(或可以访问)的 SAS 服务器吗?如果是这样,那么 Reeza 建议的 SASPy 或 SWAT(SASPy 用于 9.4,SWAT 用于 Viya)​​是迄今为止的最佳选择。 @Reeza 在我的组织中,我们不在本地运行,主要在远程服务器中,我们如何在本地连接到 saspy,我试图通过 swat 连接它不占用我通常的端口 22使用 htpps url 登录到 sas,但我尝试了另一个端口无法正常工作,您对此有任何想法,请提出建议,非常感谢您对此的想法。 【参考方案1】:

open 函数仍会加载本地文件,无论您之前尝试过什么魔法。

你需要使用pysftp Connection.open:

with conn.open("statfile.sas7bdat", 'r') as fp:

虽然 pysftp 似乎是死项目。考虑改用 Paramiko。

Paramiko 还有它的openSFTPClient.open。例如:Reading .csv file to memory from SFTP server using Python Paramiko


你的hostkeys 魔法似乎也很可疑。确保您知道自己在做什么,而不是让您的连接不安全。见Verify host key with pysftp

【讨论】:

以上是关于无论如何我们可以直接从sas服务器读取sas数据吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何让SAS从第二行数据读取

如何使用 .net 中的 SAS 密钥从 Azure Blob 读取数据

使用 SAS 令牌从 Azure 阶段读取时出现雪花错误

如何在WLATIN1编码的SAS会话中使用UTF-8编码的文件?

从多个 Z/OS 磁带读取的 SAS 数据集。磁带卷数限制?

将 SAS sas7bdat 数据读入 R