Hello,
Has anyone worked with firebase yet? (www.firebase.com)
I need to push data from an automated SAS egp to firebase.
This will allow me to request it easily from a web app and set user permissions on it.
https://www.firebase.com/docs/rest/guide/saving-data.html
Beause it's still new, I cannot find a single article/post/question about this.
Many thanks,
EDIT: I have SAS 9.3 and I'm working in Enterprise Guide 5.1 on Windows7
This is working for me:
%let firebaseURL = https://YOURFIREBASEAPP.firebaseio.com/; %let filePath = \\FILESERVER\BLA\BLA\BLA\; %let jsonFile = MYDATA.json; filename resp TEMP; filename headout TEMP; filename input "&filePath.&jsonFile"; proc http method="PUT" url="&firebaseURL.&jsonFile" in=input out=resp headerout=headout ;run;
(POST is also working but adds a random id to your data.)
I have no experience with this. But since firebase supports a REST Interface you might be able to use Proc HTTP
I forgot to say that I'm working on SAS 9.3 and with Enterprise guide 5.1
I don't think I have proc json, but I already have created the json file with a data step.
It worked!
I'll post the code here when I'm back at work Tuesday.
This is working for me:
%let firebaseURL = https://YOURFIREBASEAPP.firebaseio.com/; %let filePath = \\FILESERVER\BLA\BLA\BLA\; %let jsonFile = MYDATA.json; filename resp TEMP; filename headout TEMP; filename input "&filePath.&jsonFile"; proc http method="PUT" url="&firebaseURL.&jsonFile" in=input out=resp headerout=headout ;run;
(POST is also working but adds a random id to your data.)
I created a JAVA adapter for Firebase. Check it out!
https://github.com/FriedEgg/firebase4sas
filename fbase "/path/to/firebase-client-jvm-2.3.1.jar"; /*https://cdn.firebase.com/java/firebase-client-android-2.3.1.jar*/ filename fb4sas "/path/to/firebase4sas.jar"; /*https://github.com/FriedEgg/firebase4sas/releases*/ /* create a file reference for the classes we are going to compile below with PROC GROOVY*/ filename cp temp; proc groovy classpath=cp; /* add the two dependent libraries*/ add classpath=fbase; add classpath=fb4sas; /* create a Model for the objects we are going to load. */ submit load; public class Person { private String sex; private double age; private double height; private double weight; public Person(String sex, double age, double height, double weight) { this.sex = sex; this.age = age; this.height = height; this.weight = weight; } public String getSex() { return sex; } public double getAge() { return age; } public double getHeight() { return height; } public double getWeight() { return weight; } public String toString() { return "Person: Sex=" + sex + ", Age=" + age + ", Height" + height + ", Weight" + weight; } } endsubmit; /* create a class from the abstract to perform the load of our model */ submit load; import java.lang.InterruptedException; public class PersonLoader extends AbstractFirebase4Sas { public PersonLoader(String firebase, String dsn, String name, String sex, double age, double height, double weight) { setFirebase(firebase); Person p = new Person(sex, age, height, weight); setLoaderObject(p); addChild(dsn); addChild(name); try { loadObject(); } catch (InterruptedException e) { e.printStackTrace(); } } } endsubmit; /* you can test it in PROC GROOVY */ /* submit; lp = new LoadPerson("MYFIREBASE", "class", "Frog", "F", 14.1, 15.1, 16.1); endsubmit; */ quit; /* add compiled classes from PROC GROOVY to session CLASSPATH */ options set=classpath "%sysfunc(pathname(cp,f))"; /* use data step JavaObject Component to load our data set to Firebase */ data _null_; set sashelp.class indsname=dsn; declare javaObj lp; lp = _new_ javaObj ("LoadPerson","MYFIREBASE",scan(dsn,2,'.'),name,sex,age,height,weight); lp.flushJavaOutput(); lp.delete(); run;
You can create you own model and loader classes simply enough to load any table. It should work with SAS 9.3+
I've made a macro that takes a sas dataset and writes it to firebase with parametrable variable names
https://gist.github.com/mathiasleroy/f22face83d696b45c17a
%macro pushFirebase(dataset,firebaseName,fbObject,variables); /* ! change temporaryFilePath to fit your environement dataset = sas data set to push to firebase firebaseName= name of your firebase app name (xxx.firebaseio.com) fbObject = name of the firebase object to create variables = list of variables to include, separated by dashes - */ /* CONSTANTS */ %let temporaryFilePath = \\sas9xbi\Data2\tmp\; /* VARIABLES */ %let firebaseURL = https://&firebaseName..firebaseio.com/; %let fileName = &fbObject..json; %let variablesLength = %sysfunc(count(&variables,-)); /******************************************************************** CREATE JSON OBJECT ********************************************************************/ data _null_; set &dataset nobs=nobs end=end; file "&temporaryFilePath.&fileName"; if _n_=1 then put '{'; put '"' %scan(&variables,1,-) +(-1) '":{'; %do i = 1 %to &variablesLength+1; variable = %sysfunc(strip("%scan(&variables,&i,-)")); *this is a repetition, but it makes json cleaner; if (&i ne 1) then put ',"' variable +(-1) '":' %scan(&variables,&i,-) ; else put '"' variable +(-1) '":' %scan(&variables,&i,-) ; %end; put '}'; if not end then do; put ','; end; if end then do; put '}'; end; run; /******************************************************************** PUSH TO FIREBASE ********************************************************************/ filename resp TEMP; filename headout TEMP; filename input "&temporaryFilePath.&fileName"; proc http method="PUT" url="&firebaseURL.&fileName" in=input out=resp headerout=headout ;run; %mend; %pushFirebase(xxx.xxx,xxx,xxx,xxx-xxx-xxx-xxx);
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
Need to connect to databases in SAS Viya? SAS’ David Ghan shows you two methods – via SAS/ACCESS LIBNAME and SAS Data Connector SASLIBS – in this video.
Find more tutorials on the SAS Users YouTube channel.