全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1579 2
2020-09-10
方法一:libname逻辑库做为桥梁连接SAS与MYSQL(不适合数据特别大,100亿条记录3个多小时)

1.下载安装MySQL. http://www.mysql.com/

2.修改环境变量path.增加路径(自己mysql 安装路径“C:\Program Files\MySQL\MySQL Server 5.7\bin”),路径下面包含 libmysql.dll

3.重启电脑

4.连接代码

libname '链接名' mysql user='用户名' password='密码' database='数据库名' server='数据库IP地址'  DBCONINIT='set names GBK';   /*编码设置可不写*/;

libname  myquant MYSQL USER="root"  PASSWORD="XXXXX"  DATABASE="XXX" server="localhost" DBCONINIT="set names utf8";

---------------------------------------------------------------------------

方法二:通过odbc 直接连通 pass through 适合数据特别大,100亿条记录40多分钟

1.odbc配置:在window搜索框搜索ODBC,进入ODBC数据源管理器,添加MySQL用户数据源(系统DSN 中)。

也可以在管理工具->odbc数据源(根据自己电脑是32位还是64位配置)->系统DSN->添加->mysql odbc x.x Unicode Driver(根据自己安装的odbc版本选择).

2.odbc data source confguration 配置

3.pass-through 方式执行 sql 的语句


PROC SQL noprint;
CONNECT TO ODBC (DSN="Mysql_odbc_qxxx" USER="root"  PASSWORD="xxxxx" );
CREATE TABLE quant.test AS
SELECT * FROM CONNECTION TO ODBC (SELECT * FROM stock_financia);
QUIT;

---------------------------------------------------------------------------

也可以:

Libname odbcdb odbc user="root" password="xxxxx" datasrc="Mysql_odbc_qxxx";
proc contents data=odbcdb.stock_fin;run;




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-9-10 02:09:18
dm "log;clear;odsresult;clear;output;clear;";
options validvarname=ANY;  /*变量名的命名规则拓展;可以用中文等*/
options validmemname=extend;/*数据集的命名规则拓展;可以用中文等*/
options compress=yes;/*压缩数据集的大小*/

/*1、建立逻辑库*/
libname  quant  "F:\xxxx2020\data";
/*2、逻辑库做为桥梁连接SAS与MYSQL*/
libname  mysqldb MYSQL USER="root"  PASSWORD="xxxxx"  DATABASE="db_qxxx" server="localhost" DBCONINIT="set names gbk";


data  quant.stock_fin;/*3、建立数据集*/
set   mysqldb.stock_financia;/*4、引用数据库中的数据表*/
run;
proc contents data=quant.stock_fin;run;
proc print data=quant.stock_fin(obs=5);run;


/*驱动为:odbc,datasrc为在ODBC中配置的用户数据源名称。*/
Libname odbcdb odbc user="root" password="xxxxx" datasrc="Mysql_odbc_qxxx";
proc contents data=odbcdb.stock_fin;run;


PROC SQL noprint;
CONNECT TO ODBC (DSN="Mysql_odbc_qxxx" USER="root"  PASSWORD="xxxxx" );
CREATE TABLE quant.test AS
SELECT * FROM CONNECTION TO ODBC (SELECT * FROM stock_financia);
QUIT;
proc contents data=quant.test;run;
proc print data=quant.test(obs=5);run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-9-10 15:15:58
pass-through 这种代码是提交到远程执行,速度就是服务器执行速度,相比于libname来说效率高很多, libname这种方式,程序执行过程会有大量数据交换,千兆万兆光纤也未必够,
我这测试通过数据库端口直连 或者 ODBC 传输数据集(没有网络带宽影响),接口速度没办法再提升,不知道lz有没有什么好办法?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群