SAS SpeedyStore 는 Viya 4 와 함께 배포되는 SingleStore 기반 저장소다. CAS 에서는 SpeedyStore 데이터 커넥터로 CASLIB 을 만들어 붙는다. 커넥터 키워드는 singlestore 이고, 일반 SAS/ACCESS LIBNAME 과는 경로가 다르다.
CAS 로 데이터를 올려 분석하는 것이 목적이면 CASLIB 을 쓴다.
caslib speedy
datasource=(
srctype='singlestore'
database='mydb'
host='svc-sas-singlestore-cluster-dml'
port='3306'
user='${DB_USER}'
password='${DB_PASSWORD}'
)
global;
각 옵션의 뜻은 다음과 같다.
| 옵션 | 내용 |
|---|---|
srctype |
singlestore 로 고정한다. |
database |
접속할 SingleStore 데이터베이스 이름. |
host |
child aggregator 엔드포인트. 클러스터 안에서는 서비스 이름을 쓴다. |
port |
기본 3306. |
user · password |
접속 계정. SSO 가 켜져 있으면 user · password · authenticationDomain 을 모두 빼고 쓴다. |
epDatabase |
SAS Embedded Process 가 메타데이터를 둘 데이터베이스. 생략하면 database 값을 쓴다. |
srctype 을 빼면 안 된다. 커넥터 이름을 datasource=() 안에 그냥 나열하는 형태가 아니라 srctype='singlestore' 로 명시해야 한다.
database 는 필수다. 생략하고 쿼리에서 지정하면 된다는 설명이 돌아다니지만 공식 구문에서는 database= 를 요구한다. database 파라미터를 알 수 없다 는 오류는 대개 커넥터 키워드를 틀리게 써서 옵션 자체가 해석되지 않은 경우다.
Viya 와 SingleStore 가 같은 Kubernetes 클러스터에 있으면 서비스 이름을 쓴다. 실제 이름은 배포마다 다르므로 확인하고 쓴다.
kubectl -n <네임스페이스> get svc | grep -i singlestore
DML(child aggregator) 서비스를 써야 한다. master aggregator 로 붙이면 쓰기 부하가 한 노드에 몰린다.
proc casutil;
list files incaslib='speedy';
quit;
proc fedsql sessref=casauto;
select count(*) from speedy.sales;
quit;
테이블을 CAS 메모리로 올린다.
proc casutil;
load casdata='sales' incaslib='speedy' outcaslib='casuser' casout='sales' promote;
quit;
CASLIB 정의에 평문 비밀번호를 넣으면 프로그램과 로그에 그대로 남는다. Viya 의 자격 증명 도메인에 등록하고 CASLIB 에서는 도메인만 참조한다.
caslib speedy
datasource=(
srctype='singlestore'
database='mydb'
host='svc-sas-singlestore-cluster-dml'
port='3306'
authenticationDomain='SpeedyStoreAuth'
)
global;
global 을 붙이지 않으면 그 세션에서만 보이는 CASLIB 이 된다. 다른 사용자도 써야 하면 global 과 함께 접근 권한을 준다.promote 와 세션·전역 범위.