<mxGraphModel dx="800" dy="1969" grid="1" guides="1" tooltips="1" connect="1" fold="1" page="1" pageScale="1" pageWidth="826" pageHeight="1169" style="default-style2"><root><mxCell id="0"/><mxCell id="1" parent="0"/><mxCell id="7" value="" style="whiteSpace=wrap;verticalAlign=bottom;fontStyle=1;fontSize=14" vertex="1" parent="1"><mxGeometry x="40" y="-1110" width="790" height="370" as="geometry"/></mxCell><mxCell id="29" value="* set status = &quot;marinated&quot; in &quot;staging_raw_processing_status&quot; table when each type of raw file is chopped&#xa;* Each cube has a unique ID. " style="whiteSpace=wrap;verticalAlign=bottom" vertex="1" parent="1"><mxGeometry x="355" y="-1068.75" width="440" height="198.75" as="geometry"/></mxCell><mxCell id="13" value="" style="edgeStyle=none;exitX=1;exitY=0.75;entryX=0;entryY=0.5" edge="1" parent="1" target="10"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="345" y="-905" as="sourcePoint"/><mxPoint x="425" y="-810" as="targetPoint"/></mxGeometry></mxCell><mxCell id="4" value="Transform and Chop up data to fit in a common staging table. " style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="205" y="-1003.75" width="140" height="100" as="geometry"/></mxCell><mxCell id="5" value="" style="edgeStyle=none;exitX=0.5;exitY=1;entryX=0;entryY=0.25" edge="1" parent="1" source="2" target="47"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="185" y="-730" as="sourcePoint"/><mxPoint x="285" y="-830" as="targetPoint"/></mxGeometry></mxCell><mxCell id="6" value="" style="edgeStyle=none;exitX=0.5;exitY=1;entryX=0;entryY=0.75" edge="1" parent="1" source="3" target="47"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="155" y="-710" as="sourcePoint"/><mxPoint x="255" y="-810" as="targetPoint"/></mxGeometry></mxCell><mxCell id="8" value="data chunk A to be processed" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="375" y="-1046.25" width="100" height="45" as="geometry"/></mxCell><mxCell id="9" value="data chunk B to be processed" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="485" y="-1008.75" width="100" height="45" as="geometry"/></mxCell><mxCell id="10" value="data chunk C to be processed" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="625" y="-1017.5" width="100" height="45" as="geometry"/></mxCell><mxCell id="11" value="" style="edgeStyle=none;exitX=1;exitY=0.25;entryX=0;entryY=0.5" edge="1" parent="1" target="8"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="345" y="-955" as="sourcePoint"/><mxPoint x="315" y="-830" as="targetPoint"/></mxGeometry></mxCell><mxCell id="12" value="" style="edgeStyle=none;exitX=1;exitY=0.5;entryX=0;entryY=0.5" edge="1" parent="1" target="9"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="345" y="-930" as="sourcePoint"/><mxPoint x="325" y="-820" as="targetPoint"/></mxGeometry></mxCell><mxCell id="14" value="cube#001" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="65" y="-710" width="60" height="25" as="geometry"/></mxCell><mxCell id="15" value="cube#002" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="65" y="-672.5" width="60" height="25" as="geometry"/></mxCell><mxCell id="16" value="cube#003" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="65" y="-637.5" width="60" height="25" as="geometry"/></mxCell><mxCell id="17" value="Dimension tables&#xa;&quot;staging_raw_processing_status&quot; table&#xa;&#xa;" style="shape=cylinder;whiteSpace=wrap;verticalAlign=bottom" vertex="1" parent="1"><mxGeometry x="183.75" y="-582.5" width="190" height="85" as="geometry"/></mxCell><mxCell id="18" value="" style="edgeStyle=none;entryX=0;entryY=0.5;exitX=1;exitY=0.5" edge="1" parent="1" source="15" target="21"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="265" y="-560" as="sourcePoint"/><mxPoint x="365" y="-660" as="targetPoint"/></mxGeometry></mxCell><mxCell id="19" value="" style="edgeStyle=none;entryX=0;entryY=0.25;exitX=1;exitY=0.5" edge="1" parent="1" source="14" target="21"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="235" y="-540" as="sourcePoint"/><mxPoint x="335" y="-640" as="targetPoint"/></mxGeometry></mxCell><mxCell id="20" value="" style="edgeStyle=none;exitX=1;exitY=0.5;entryX=0;entryY=0.75" edge="1" parent="1" source="16" target="21"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="245" y="-520" as="sourcePoint"/><mxPoint x="345" y="-620" as="targetPoint"/></mxGeometry></mxCell><mxCell id="21" value="Find all dimension tables' primary key from upc, isrc in each cube" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="195" y="-700" width="190" height="80" as="geometry"/></mxCell><mxCell id="22" value="" style="edgeStyle=none;exitX=0.5;exitY=0;entryX=0.75;entryY=1" edge="1" parent="1" source="17" target="21"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="435" y="-550" as="sourcePoint"/><mxPoint x="535" y="-650" as="targetPoint"/></mxGeometry></mxCell><mxCell id="23" value="1). Transform data in each cube to the schema of fact_analytics&#xa;2). upload &quot;cooked&quot; data to S3&#xa;3). update status = &quot;garnished&quot;" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="35" y="-435" width="385" height="80" as="geometry"/></mxCell><mxCell id="24" value="get dice with status = &quot;cooked&quot; &#xa;from &quot;staging_raw_processing_status&quot; table" style="edgeStyle=none;exitX=0.5;exitY=1;" edge="1" parent="1" source="17" target="23"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="385" y="-500" as="sourcePoint"/><mxPoint x="485" y="-600" as="targetPoint"/></mxGeometry></mxCell><mxCell id="25" value="cube#001" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="375" y="-1063.75" width="80" height="17.5" as="geometry"/></mxCell><mxCell id="27" value="cube#002" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="485" y="-1026.25" width="80" height="17.5" as="geometry"/></mxCell><mxCell id="28" value="cube#003" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="625" y="-1033.75" width="80" height="17.5" as="geometry"/></mxCell><mxCell id="31" value="fact_analytics_ingestion_history" style="shape=cylinder;whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="75" y="-1100" width="210" height="60" as="geometry"/></mxCell><mxCell id="32" value="get entry with status = &quot;raw&quot;" style="edgeStyle=none;" edge="1" parent="1" source="31" target="2"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="325" y="-990" as="sourcePoint"/><mxPoint x="425" y="-1090" as="targetPoint"/></mxGeometry></mxCell><mxCell id="34" value="get all dices with status = &quot;marinated&quot; &#xa;from &quot;staging_raw_processing_status&quot; table&#xa;" style="edgeStyle=none;entryX=0.5;entryY=1;exitX=0;exitY=0.7" edge="1" parent="1" source="17" target="16"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="65" y="-465" as="sourcePoint"/><mxPoint x="165" y="-565" as="targetPoint"/></mxGeometry></mxCell><mxCell id="35" value="Marinate" style="whiteSpace=wrap;fontStyle=1" vertex="1" parent="1"><mxGeometry x="205" y="-1023.75" width="120" height="20" as="geometry"/></mxCell><mxCell id="36" value="Fry" style="whiteSpace=wrap;fontStyle=1" vertex="1" parent="1"><mxGeometry x="195" y="-725" width="120" height="25" as="geometry"/></mxCell><mxCell id="37" value="Garnish" style="whiteSpace=wrap;fontStyle=1" vertex="1" parent="1"><mxGeometry x="35" y="-465" width="120" height="30" as="geometry"/></mxCell><mxCell id="38" value="&quot;Marinated&quot; Folder" style="whiteSpace=wrap;fontStyle=1" vertex="1" parent="1"><mxGeometry x="355" y="-1093.75" width="120" height="25" as="geometry"/></mxCell><mxCell id="39" value="* set status = &quot;cooked&quot; in &quot;staging_raw_processing_status&quot;  after each cube is processed" style="whiteSpace=wrap;verticalAlign=bottom" vertex="1" parent="1"><mxGeometry x="415" y="-685" width="390" height="142.5" as="geometry"/></mxCell><mxCell id="40" value="&quot;Cooked&quot; Folder" style="whiteSpace=wrap;fontStyle=1" vertex="1" parent="1"><mxGeometry x="415" y="-710" width="120" height="25" as="geometry"/></mxCell><mxCell id="42" value="cube#001" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="435" y="-677.5" width="80" height="17.5" as="geometry"/></mxCell><mxCell id="43" value="data chunk B processed" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="585" y="-627.5" width="100" height="45" as="geometry"/></mxCell><mxCell id="44" value="cube#002" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="585" y="-645" width="80" height="17.5" as="geometry"/></mxCell><mxCell id="45" value="" style="edgeStyle=none;exitX=1;exitY=0.25;entryX=0;entryY=0.25" edge="1" parent="1" source="21" target="41"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="570" y="-632.5" as="sourcePoint"/><mxPoint x="670" y="-732.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="46" value="" style="edgeStyle=none;exitX=1;exitY=0.75;entryX=0;entryY=0.75" edge="1" parent="1" source="21" target="43"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="550" y="-642.5" as="sourcePoint"/><mxPoint x="650" y="-742.5" as="targetPoint"/></mxGeometry></mxCell><mxCell id="41" value="data chunk A processed" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="435" y="-660" width="100" height="45" as="geometry"/></mxCell><mxCell id="47" value="1). Mark raw data with &quot;error_code&quot; in staging_raw_xx table if information is not enough to match our catalog" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="127.5" y="-830" width="302.5" height="70" as="geometry"/></mxCell><mxCell id="48" value="Degrease" style="whiteSpace=wrap;fontStyle=1" vertex="1" parent="1"><mxGeometry x="127.5" y="-850" width="120" height="20" as="geometry"/></mxCell><mxCell id="3" value="stagng_raw_amazon&#xa;2013-09-07" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="35" y="-900" width="120" height="30" as="geometry"/></mxCell><mxCell id="49" value="" style="edgeStyle=none;entryX=0.75;entryY=0" edge="1" parent="1" source="31" target="3"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="140" y="-900" as="sourcePoint"/><mxPoint x="240" y="-1000" as="targetPoint"/></mxGeometry></mxCell><mxCell id="2" value="staging_raw_spotify&#xa;2013-09-07" style="whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="35" y="-980" width="120" height="30" as="geometry"/></mxCell><mxCell id="50" value="get data with error_code = 0" style="edgeStyle=none;entryX=0.5;entryY=1" edge="1" parent="1" source="48" target="4"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="330" y="-780" as="sourcePoint"/><mxPoint x="430" y="-880" as="targetPoint"/></mxGeometry></mxCell><mxCell id="51" value="* Each parallel process does one cube" style="text;spacingTop=-5;fontStyle=1;fontSize=14" vertex="1" parent="1"><mxGeometry x="390" y="-520" width="320" height="20" as="geometry"/></mxCell><mxCell id="56" value="staging_raw_processing_status" style="shape=cylinder;whiteSpace=wrap" vertex="1" parent="1"><mxGeometry x="465" y="-835" width="295" height="80" as="geometry"/></mxCell><mxCell id="57" value="" style="edgeStyle=none;entryX=0.5;entryY=0;exitX=0.5;exitY=1" edge="1" parent="1" source="29" target="56"><mxGeometry width="100" height="100" relative="1" as="geometry"><mxPoint x="520" y="-800" as="sourcePoint"/><mxPoint x="620" y="-900" as="targetPoint"/></mxGeometry></mxCell></root></mxGraphModel>