SQL operators as Wolfram Language functions
by Calin Damian
Updated on 18-February-2021
by Calin Damian
Updated on 18-February-2021
Objective
Objective
New to Wolfram language I’m very impressed by its expressive power .However coming from a database background I found sometimes counterintuitive to manipulate data using Datasets.In my journey of learning Wolfram language I’m trying to implement SQL like operators in order to explore data structures with the simplicity of SQL Language .A small query example using stocks data imported from FinancialData package:sampledataSQL is a 2 dimensional list with 3 columns { symbol, time , close} whereSQL[sampledataSQL , (! MissingQ[close]) ] // groupBySQL[# , {time} ]&// summarySQL [# , Association[“maxclose” (close//Max) , “minclose” (close//Min) , “count” (table//Length) ] ]&// orderBySQL[#, {maxclose}]&// showTableSQL
Main Code
Main Code
Demo
Demo
Get demo data using FinancialData package
Get demo data using FinancialData package
(*getsdataandflattenitin2dimensionalarray*)symbols={"MSFT","TSLA","AMZN"};sampledata=(Flatten/@Tuples[{{#},FinancialData[#,{{2020}}]//Normal}])&/@symbols//Flatten[#,1]&;(*convertsdatainSQLtablestructure*)sampledataSQL=tableSQL[sampledata,{"symbol","time","close"}];(*input:2dimensionalarrayandalistofcolnames*)sampledataSQL//showTableSQL(*displayfirst10linesbydefault*)
Total Rows:759 Elapsed:1.×
-7
10
Out[]//TableForm=
symbol | time | close |
MSFT | ||
MSFT | ||
MSFT | ||
MSFT | ||
MSFT | ||
MSFT | ||
MSFT | ||
MSFT | ||
MSFT | ||
MSFT |
Lets use the new SQL operators
Lets use the new SQL operators
projectSQL
projectSQL
(*Projectsubsetsdistinctvaluesofselectedcolumns*)projectSQL[sampledataSQL,{symbol}]//(*thecolumnisreferencedasasymbolinthetablecontext*)showTableSQL
Total Rows:3 Elapsed:0.0026903
Out[]//TableForm=
symbol |
MSFT |
TSLA |
AMZN |
(*projectonmultiplecolumns*)projectSQL[sampledataSQL,{symbol,close}]//showTableSQL
Total Rows:753 Elapsed:0.0012248
Out[]//TableForm=
symbol | close |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT |
selectSQL
selectSQL
(*Selectasubsetofcolumns*)selectSQL[sampledataSQL,{symbol,close}]//showTableSQL
Total Rows:759 Elapsed:0.0008263
Out[]//TableForm=
symbol | close |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT |
close=6;(*globalsymbolshavingthesamenameascolumnsarenotimpacted*)time="r"selectSQL[sampledataSQL,{time,close}]//(*here"close"isevaluatedintablecontext*)showTableSQL
Out[]=
r
Total Rows:759 Elapsed:0.0020424
Out[]//TableForm=
time | close |
selectSQL[sampledataSQL,{3,1}]//(*youcanselectonordinalpositionsofcolumns*)showTableSQL
Total Rows:759 Elapsed:0.0021006
Out[]//TableForm=
close | symbol |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT | |
MSFT |
whereSQL, ordeBySQL
whereSQL, ordeBySQL
addColumnsSQL, rowTransformSQL , rowMapSQL
addColumnsSQL, rowTransformSQL , rowMapSQL
groupBySQL , summarySQL , summaryMapSQL
groupBySQL , summarySQL , summaryMapSQL
combining operators
combining operators
unnestSQL
unnestSQL
pivotSQL , unpivotSQL
pivotSQL , unpivotSQL
unionSQL
unionSQL
joinSQL, crossJoinSQL
joinSQL, crossJoinSQL
Contact
Contact