Merge branch 'main' of git.odin.cse.buffalo.edu:VizierDB/paper-Vizier-SpreadsheetOverlay

main
Boris Glavic 2023-03-19 15:14:47 -05:00
commit cd1a2329d8
6 changed files with 769 additions and 4 deletions

Binary file not shown.

View File

@ -0,0 +1,729 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="154.11223mm"
height="48.864624mm"
viewBox="0 0 154.11223 48.864624"
version="1.1"
id="svg5"
inkscape:version="1.2.2 (b0a8486541, 2022-12-01)"
sodipodi:docname="forms-of-spreadsheet.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="2.587745"
inkscape:cx="330.98316"
inkscape:cy="78.44668"
inkscape:window-width="1920"
inkscape:window-height="1011"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<marker
style="overflow:visible"
id="marker6665"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="TriangleStart"
markerWidth="8.3240004"
markerHeight="9.6231213"
viewBox="0 0 5.3244081 6.1553851"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path6663" />
</marker>
<marker
style="overflow:visible"
id="Arrow2"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Arrow2"
markerWidth="7.6999998"
markerHeight="5.5999999"
viewBox="0 0 7.7 5.6"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid">
<path
transform="scale(0.7)"
d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
id="arrow2L" />
</marker>
<marker
style="overflow:visible"
id="TriangleStart"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="TriangleStart"
markerWidth="5.3239999"
markerHeight="6.1549134"
viewBox="0 0 5.3244081 6.1553851"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid">
<path
transform="scale(0.5)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 5.77,0 -2.88,5 V -5 Z"
id="path135" />
</marker>
<marker
style="overflow:visible"
id="Arrow2-5"
refX="0"
refY="0"
orient="auto-start-reverse"
inkscape:stockid="Arrow2"
markerWidth="7.6999998"
markerHeight="5.5999999"
viewBox="0 0 7.7 5.6"
inkscape:isstock="true"
inkscape:collect="always"
preserveAspectRatio="xMidYMid">
<path
transform="scale(0.7)"
d="M -2,-4 9,0 -2,4 c 2,-2.33 2,-5.66 0,-8 z"
style="fill:context-stroke;fill-rule:evenodd;stroke:none"
id="arrow2L-3" />
</marker>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-14.571606,-10.486426)">
<g
id="g6351"
transform="translate(1.9161877)">
<g
id="g4627">
<g
id="g4338">
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect1151"
width="7.5076909"
height="7.5076909"
x="16.242188"
y="14.529357" />
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect1396"
width="7.5076909"
height="7.5076909"
x="26.825521"
y="14.529357" />
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect1398"
width="7.5076909"
height="7.5076909"
x="37.408855"
y="14.529357" />
<path
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -17.502389,-7.971314 -20.574359,0"
id="path1771"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -9.768532,-2.868862 -10.354477,0"
id="path1779"
sodipodi:nodetypes="cc" />
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect2668"
width="7.5076909"
height="7.5076909"
x="26.825521"
y="14.529357" />
<use
x="0"
y="0"
xlink:href="#rect1396"
id="use4226" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use4240" />
</g>
<use
x="0"
y="0"
xlink:href="#g4338"
id="use4380"
transform="translate(0,11.1125)" />
<use
x="0"
y="0"
xlink:href="#use4380"
id="use4382"
transform="translate(0,11.1125)" />
</g>
<g
id="g4656">
<use
x="0"
y="0"
xlink:href="#g4364"
id="use4384"
transform="translate(0,11.1125)" />
<g
id="g4364">
<rect
style="fill:none;stroke:#d40000;stroke-width:1;stroke-dasharray:none"
id="rect1400"
width="7.5076909"
height="7.5076909"
x="47.992191"
y="14.529357" />
<path
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2)"
d="M 51.673937,18.133864 H 42.78024"
id="path2554"
sodipodi:nodetypes="cc" />
</g>
<use
x="0"
y="0"
xlink:href="#g4364"
id="use4386"
transform="translate(0,22.225001)" />
<path
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
d="M 51.739837,29.366921 V 20.491576"
id="path4388"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
d="M 51.739837,40.479422 V 31.604077"
id="path4614"
sodipodi:nodetypes="cc" />
</g>
</g>
<g
id="g5802"
transform="matrix(0.7126818,0,0,0.7126818,17.510213,-6.4390366)">
<g
id="g4949"
transform="translate(-4.8674092,24.039098)">
<g
id="g4730"
transform="translate(3.1316448,-15.611894)"
inkscape:tile-cx="88.776394"
inkscape:tile-cy="24.396455"
inkscape:tile-w="19.09103"
inkscape:tile-h="8.5076929"
inkscape:tile-x0="79.230879"
inkscape:tile-y0="20.142608">
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect1151-2"
width="7.5076909"
height="7.5076909"
x="76.599236"
y="36.254505" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use4240-9"
transform="translate(60.357054,21.725146)" />
</g>
<g
id="g4883"
transform="translate(-0.11322685,-0.07422867)">
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g4730"
xlink:href="#g4730"
id="use4768" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g4730"
xlink:href="#g4730"
transform="translate(0,8.9330776)"
id="use4770" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g4730"
xlink:href="#g4730"
transform="translate(0,17.866155)"
id="use4772" />
</g>
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect4826"
width="25.165388"
height="32.153976"
x="76.080475"
y="17.178316" />
</g>
<path
style="fill:none;stroke:#d40000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 116.76997,63.460172 c 10.42317,0.698248 19.60803,1.663115 19.50948,-4.731286"
id="path5752"
sodipodi:nodetypes="cc" />
<g
id="g4967"
transform="translate(3.6876007,17.653993)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect4965"
width="36.816898"
height="32.153976"
x="76.080475"
y="17.178316" />
<g
id="g4963"
transform="translate(0.42086127,-0.07422867)">
<g
id="use4957"
transform="translate(3.1316448,-15.611894)"
inkscape:tile-x0="85.632959"
inkscape:tile-y0="40.42387"
inkscape:tile-cx="100.47014"
inkscape:tile-cy="44.677717"
inkscape:tile-w="29.674364"
inkscape:tile-h="8.5076929">
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect4969"
width="7.5076909"
height="7.5076909"
x="76.599236"
y="36.254505" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use4971"
transform="translate(60.357054,21.725146)" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use4975"
transform="translate(70.940388,21.725146)" />
</g>
<use
x="0"
y="0"
inkscape:tiled-clone-of="#use4957"
xlink:href="#use4957"
id="use4977" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#use4957"
xlink:href="#use4957"
transform="translate(0,8.9330776)"
id="use4979" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#use4957"
xlink:href="#use4957"
transform="translate(0,17.866155)"
id="use4981" />
</g>
</g>
<g
id="g5055"
transform="translate(19.562601,7.0706593)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect5037"
width="47.668419"
height="32.153976"
x="76.080475"
y="17.178316" />
<g
id="g5329"
inkscape:tile-cx="119.32509"
inkscape:tile-cy="31.373039"
inkscape:tile-w="40.221492"
inkscape:tile-h="8.5076929"
inkscape:tile-x0="99.214341"
inkscape:tile-y0="27.119193">
<g
id="g5053"
transform="translate(0.42086163,-0.0940746)">
<g
id="g5045"
transform="translate(3.1316448,-15.611894)"
inkscape:tile-x0="85.632959"
inkscape:tile-y0="40.42387"
inkscape:tile-cx="100.47014"
inkscape:tile-cy="44.677717"
inkscape:tile-w="29.674364"
inkscape:tile-h="8.5076929">
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect5039"
width="7.5076909"
height="7.5076909"
x="76.599236"
y="36.254505" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use5041"
transform="translate(60.357054,21.725146)" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use5043"
transform="translate(70.940388,21.725146)" />
</g>
<use
x="0"
y="0"
inkscape:tiled-clone-of="#use4957"
xlink:href="#use4957"
id="use5047" />
</g>
<g
id="g5204"
transform="translate(10.583333,0.01984703)">
<rect
style="fill:none;stroke:#d40000;stroke-width:1;stroke-dasharray:none"
id="rect1400-7"
width="7.5076909"
height="7.5076909"
x="101.28221"
y="20.528688" />
</g>
</g>
<g
id="g5340"
transform="translate(0.15219571)">
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g5329"
xlink:href="#g5329"
id="use5331" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g5329"
xlink:href="#g5329"
transform="translate(0,8.9330776)"
id="use5333" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g5329"
xlink:href="#g5329"
transform="translate(0,17.866155)"
id="use5335" />
</g>
</g>
<path
style="fill:none;stroke:#000000;stroke-width:0.565;stroke-linecap:butt;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 96.533022,71.500232 c 9.853508,0.929697 16.811308,3.968961 16.682788,-2.042305"
id="path5426"
sodipodi:nodetypes="cc" />
<rect
style="fill:#ffffff;stroke:none;stroke-width:0.523847;stroke-dasharray:none"
id="rect5632"
width="7.3404536"
height="7.7885733"
x="101.85653"
y="68.684906" />
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
x="102.05072"
y="75.11834"
id="text4939"><tspan
sodipodi:role="line"
id="tspan4937"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Mono';-inkscape-font-specification:'Noto Mono';stroke-width:0.264583"
x="102.05072"
y="75.11834">π</tspan></text>
<rect
style="fill:#ffffff;stroke:none;stroke-width:0.523847;stroke-dasharray:none"
id="rect5756"
width="6.5564413"
height="7.7885742"
x="119.84821"
y="58.630737" />
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;fill:#d40000;stroke-width:0.264583"
x="119.74588"
y="66.839859"
id="text4985"><tspan
sodipodi:role="line"
id="tspan4983"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-family:'Noto Mono';-inkscape-font-specification:'Noto Mono';fill:#d40000;stroke-width:0.264583"
x="119.74588"
y="66.839859">Σ</tspan></text>
</g>
<g
id="g6315"
transform="matrix(0.68076508,0,0,0.68076508,44.184283,5.8587649)">
<g
id="g4949-2"
transform="matrix(0.7126818,0,0,0.7126818,70.774401,20.538557)">
<g
id="g4730-2"
transform="translate(3.1316448,-15.611894)"
inkscape:tile-cx="88.776394"
inkscape:tile-cy="24.396455"
inkscape:tile-w="19.09103"
inkscape:tile-h="8.5076929"
inkscape:tile-x0="79.230879"
inkscape:tile-y0="20.142608">
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect1151-2-8"
width="7.5076909"
height="7.5076909"
x="76.599236"
y="36.254505" />
<use
x="0"
y="0"
xlink:href="#rect2668"
id="use4240-9-9"
transform="translate(60.357054,21.725146)" />
</g>
<g
id="g4883-7"
transform="translate(-0.11322685,-0.07422867)">
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g4730-2"
xlink:href="#g4730-2"
id="use4768-3" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g4730-2"
xlink:href="#g4730-2"
transform="translate(0,8.9330776)"
id="use4770-6" />
<use
x="0"
y="0"
inkscape:tiled-clone-of="#g4730-2"
xlink:href="#g4730-2"
transform="translate(0,17.866155)"
id="use4772-1" />
</g>
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect4826-2"
width="25.165388"
height="32.153976"
x="76.080475"
y="17.178316" />
</g>
<g
id="g6188"
transform="translate(6.0752876,0.31969252)">
<rect
style="fill:#ffffff;stroke:#000000;stroke-width:0.712682;stroke-dasharray:none"
id="rect4826-2-9"
width="48.463848"
height="38.089653"
x="127.98633"
y="8.9268599" />
<g
id="g6159"
transform="translate(-0.06946268,-0.33844343)">
<g
id="g5834"
transform="translate(116.41668)">
<g
id="g5828">
<rect
style="fill:none;stroke:#999999;stroke-width:1;stroke-dasharray:none"
id="rect5812"
width="7.5076909"
height="7.5076909"
x="16.242188"
y="14.529357" />
<rect
style="fill:none;stroke:#999999;stroke-width:1;stroke-dasharray:none"
id="rect5814"
width="7.5076909"
height="7.5076909"
x="26.825521"
y="14.529357" />
<rect
style="fill:none;stroke:#000000;stroke-width:1;stroke-dasharray:none"
id="rect5816"
width="7.5076909"
height="7.5076909"
x="37.408855"
y="14.529357" />
<path
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -17.502389,-7.971314 -20.574359,0"
id="path5818"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#2c2ca0;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#TriangleStart)"
d="m 40.819218,18.204756 c -3.660315,-8.5795686 -9.768532,-2.868862 -10.354477,0"
id="path5820"
sodipodi:nodetypes="cc" />
</g>
<use
x="0"
y="0"
xlink:href="#g5828"
id="use5912"
transform="translate(0,11.1125)" />
<use
x="0"
y="0"
xlink:href="#g5828"
id="use5916"
transform="translate(0,22.225001)" />
</g>
<g
id="g5850"
transform="translate(116.41668)">
<use
x="0"
y="0"
xlink:href="#g4364"
id="use5836"
transform="translate(0,11.1125)" />
<g
id="g5842">
<rect
style="fill:none;stroke:#d40000;stroke-width:1;stroke-dasharray:none"
id="rect5838"
width="7.5076909"
height="7.5076909"
x="47.992191"
y="14.529357" />
<path
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2)"
d="M 51.673937,18.133864 H 42.78024"
id="path5840"
sodipodi:nodetypes="cc" />
</g>
<use
x="0"
y="0"
xlink:href="#g4364"
id="use5844"
transform="translate(0,22.225001)" />
<path
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
d="M 51.739837,29.366921 V 20.491576"
id="path5846"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#d40000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2-5)"
d="M 51.739837,40.479422 V 31.604077"
id="path5848"
sodipodi:nodetypes="cc" />
</g>
</g>
</g>
<path
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker6665)"
d="m 142.21581,19.285158 c -2.50508,0.63113 -11.03133,-0.794123 -14.16314,4.695735 -1.70323,2.98566 -0.38946,5.857624 -0.38946,5.857624"
id="path6190"
sodipodi:nodetypes="csc" />
<path
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 152.74586,19.17136 c -0.16358,3.270201 -19.86514,-1.603955 -24.69319,4.809533"
id="path6250"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 152.74889,30.328748 c -0.16358,3.270201 -19.86817,-12.761343 -24.69622,-6.347855"
id="path6258"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 142.31796,30.3228 c -0.13003,4.162047 -9.43724,-12.755395 -14.26529,-6.341907"
id="path6260"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="M 152.6546,41.520854 C 150.73848,46.86171 132.88072,17.567405 128.05267,23.980893"
id="path6262"
sodipodi:nodetypes="cc" />
<path
style="fill:none;stroke:#999999;stroke-width:0.465;stroke-linecap:round;stroke-linejoin:miter;stroke-dasharray:none;stroke-opacity:1"
d="m 142.32247,41.461448 c -1.993,6.622311 -9.44175,-23.894043 -14.2698,-17.480555"
id="path6264"
sodipodi:nodetypes="cc" />
</g>
<text
xml:space="preserve"
style="font-size:8.46667px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
x="14.004339"
y="57.759315"
id="text6325"><tspan
sodipodi:role="line"
id="tspan6323"
style="font-size:8.46667px;stroke-width:0.264583"
x="14.004339"
y="57.759315">Materialized</tspan></text>
<text
xml:space="preserve"
style="font-size:8.46667px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
x="81.033951"
y="57.759315"
id="text6363"><tspan
sodipodi:role="line"
id="tspan6361"
style="font-size:8.46667px;stroke-width:0.264583"
x="81.033951"
y="57.759315">Virtual</tspan></text>
<text
xml:space="preserve"
style="font-size:8.46667px;line-height:1.25;font-family:Ubuntu;-inkscape-font-specification:Ubuntu;letter-spacing:0px;stroke-width:0.264583"
x="133.92386"
y="57.759315"
id="text6367"><tspan
sodipodi:role="line"
id="tspan6365"
style="font-size:8.46667px;stroke-width:0.264583"
x="133.92386"
y="57.759315">Overlay</tspan></text>
</g>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

View File

@ -159,6 +159,7 @@
\input{sections/introduction}
\input{sections/overview}
\input{sections/formalism}
\input{sections/system}
\input{sections/data}
\input{sections/relwork}

View File

@ -46,7 +46,9 @@ $$E = \bigcup_{\cell \in \columnDomain \times \rowDomain}
\{\;\cell \rightarrow \cell'\;|\;\cell' \in \depsOf{\spreadsheet(\cell)}\;\} $$
We use $\TDG{\spreadsheet}$ to denote the graph $\tuple{V,E^*}$ where $E^*$ is the transitive closure of $E$, i.e., $\TDG{\spreadsheet}$ stores both direct and indirect dependencies among the cells in the spreadsheet.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Compressed Updates}
We adopt a common assumption in relational data: that $\columnDomain$ is small and $\rowDomain$ is large for a typical spreadsheet.
Accordingly, we define $\rowDomain$ for a spreadsheet with $N$ rows to be the range $[1,N]$, with rows identified by their position in the spreadsheet.

View File

@ -12,11 +12,11 @@ We refer to these as the virtual and materialized approach, respectively.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{figure}
\includegraphics[width=0.6\columnwidth]{graphics/overlay.png}
\includegraphics[width=0.9\columnwidth]{graphics/forms-of-spreadsheet.pdf}
\Description{
Two layers. At the bottom, a classical relational table including column headers and miscellaneous data values. Stacked over it is a set of edits: cells with dependencies marked by arrows.
Three architectures: First, a materialized approach depicted by a 4 by 3 grid of cells with arrows indicating dependencies. The cells of the 3rd column point to cells in the same row in the 1st and 2nd columns. The cells of the 4th column are marked red and point to the cell in the 3rd column of the same row, and the cell of the 4th column in the preceding row. Second, a virtual approach depicted by three boxes: The first box contains a 2 by 3 grid of cells. An arrow labeled with a pi (projection) connects it to the second box, which contains a 3 by 3 grid of cells. An arrow labeled with a sigma (aggregation) connects it to the third box, which contains a 4 by 3 grid of cells. The sigma, its arrow, and the 4th column of cells are marked in red. Finally, an overlay approach depicted by 2 boxes. The 2nd box is nearly identical to the materialized approach, but the 1st and 2nd columns of the grid are greyed out with arrows pointing to the first box; The first box is the same 2 by 3 grid from the virtual approach.
}
\caption{Architecture of an overlay spreadsheet}
\caption{Approaches to scalable spreadsheet design}
\label{fig:overlay}
\end{figure}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

33
sections/system.tex Normal file
View File

@ -0,0 +1,33 @@
%!TEX root = ../main.tex
\section{System Design}
\label{sec:system}
\begin{figure}
\includegraphics[width=0.8\columnwidth]{graphics/systemdesign.png}
\caption{Overlay system design.}
\label{fig:systemdesign}
\end{figure}
As illustrated in \Cref{fig:systemdesign}, we decompose Overlay into several distinct layers.
The \textbf{Update Index} is responsible for storing a mutable encoded spreadsheet ($\encodedSpreadsheet$), and providing efficient access to cells, and answers to reachability queries over the dependency graph.
The \textbf{Execution} layer is responsible for evaluating cell values, and maintianing a materialized view over the spreadsheet's values.
This layer specifically overlays values computed from expressions stored in the update index, on top of a raw dataset obtained from Apache Spark.
A thin \textbf{Cache} layer provides the execution layer with random access to the cells of the dataframe.
Finally, a \textbf{Presentation} layer defines syntactic sugar over the execution layer to provide a spreadsheet-like API to client applications.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\subsection{Update Index}
The update index stores an encoded spreadsheet: a mapping from ranges of cells to expression patterns.
An update index stores an encoded spreadsheet
Evaluating a cell in a spreadsheet requires evaluating transitive dependencies;
The spreadsheet may thus be viewed as a graph, with one node for each cell and one edge for each dependency.
The update index maintains