diff --git data/files/customer_address.txt data/files/customer_address.txt new file mode 100644 index 0000000..81e05af --- /dev/null +++ data/files/customer_address.txt @@ -0,0 +1,20 @@ +1|AAAAAAAABAAAAAAA|18|Jackson |Parkway|Suite 280|Fairfield|Maricopa County|AZ|86192|United States|-7|condo| +2|AAAAAAAACAAAAAAA|362|Washington 6th|RD|Suite 80|Fairview|Taos County|NM|85709|United States|-7|condo| +3|AAAAAAAADAAAAAAA|585|Dogwood Washington|Circle|Suite Q|Pleasant Valley|York County|PA|12477|United States|-5|single family| +4|AAAAAAAAEAAAAAAA|111|Smith |Wy|Suite A|Oak Ridge|Kit Carson County|CO|88371|United States|-7|condo| +5|AAAAAAAAFAAAAAAA|31|College |Blvd|Suite 180|Glendale|Barry County|MO|63951|United States|-6|single family| +6|AAAAAAAAGAAAAAAA|59|Williams Sixth|Parkway|Suite 100|Lakeview|Chelan County|WA|98579|United States|-8|single family| +7|AAAAAAAAHAAAAAAA||Hill 7th|Road|Suite U|Farmington|||39145|United States||| +8|AAAAAAAAIAAAAAAA|875|Lincoln |Ct.|Suite Y|Union|Bledsoe County|TN|38721|United States|-5|apartment| +9|AAAAAAAAJAAAAAAA|819|1st Laurel|Ave|Suite 70|New Hope|Perry County|AL|39431|United States|-6|condo| +10|AAAAAAAAKAAAAAAA|851|Woodland Poplar|ST|Suite Y|Martinsville|Haines Borough|AK|90419|United States|-9|condo| +11|AAAAAAAALAAAAAAA|189|13th 2nd|Street|Suite 470|Maple Grove|Madison County|MT|68252|United States|-7|single family| +12|AAAAAAAAMAAAAAAA|76|Ash 8th|Ct.|Suite O|Edgewood|Mifflin County|PA|10069|United States|-5|apartment| +13|AAAAAAAANAAAAAAA|424|Main Second|Ln|Suite 130|Greenville|Noxubee County|MS|51387|United States|-6|single family| +14|AAAAAAAAOAAAAAAA|923|Pine Oak|Dr.|Suite 100||Lipscomb County|TX|77752||-6|| +15|AAAAAAAAPAAAAAAA|314|Spring |Ct.|Suite B|Oakland|Washington County|OH|49843|United States|-5|apartment| +16|AAAAAAAAABAAAAAA|576|Adams Center|Street|Suite J|Valley View|Oldham County|TX|75124|United States|-6|condo| +17|AAAAAAAABBAAAAAA|801|Green |Dr.|Suite 0|Montpelier|Richland County|OH|48930|United States|-5|single family| +18|AAAAAAAACBAAAAAA|460|Maple Spruce|Court|Suite 480|Somerville|Potter County|SD|57783|United States|-7|condo| +19|AAAAAAAADBAAAAAA|611|Wilson |Way|Suite O|Oakdale|Tangipahoa Parish|LA|79584|United States|-6|apartment| +20|AAAAAAAAEBAAAAAA|675|Elm Wilson|Street|Suite I|Hopewell|Williams County|OH|40587|United States|-5|condo| diff --git data/files/store.txt data/files/store.txt new file mode 100644 index 0000000..078bafd --- /dev/null +++ data/files/store.txt @@ -0,0 +1,12 @@ +1|AAAAAAAABAAAAAAA|1997-03-13||2451189|ought|245|5250760|8AM-4PM|William Ward|2|Unknown|Enough high areas stop expectations. Elaborate, local is|Charles Bartley|1|Unknown|1|Unknown|767|Spring |Wy|Suite 250|Midway|Williamson County|TN|31904|United States|-5|0.03| +2|AAAAAAAACAAAAAAA|1997-03-13|2000-03-12||able|236|5285950|8AM-4PM|Scott Smith|8|Unknown|Parliamentary candidates wait then heavy, keen mil|David Lamontagne|1|Unknown|1|Unknown|255|Sycamore |Dr.|Suite 410|Midway|Williamson County|TN|31904|United States|-5|0.03| +3|AAAAAAAACAAAAAAA|2000-03-13|||able|236|7557959|8AM-4PM|Scott Smith|7|Unknown|Impossible, true arms can treat constant, complete w|David Lamontagne|1|Unknown|1|Unknown|877|Park Laurel|Road|Suite T|Midway|Williamson County|TN|31904|United States|-5|0.03| +4|AAAAAAAAEAAAAAAA|1997-03-13|1999-03-13|2451044|ese|218|9341467|8AM-4PM|Edwin Adams|4|Unknown|Events would achieve other, eastern hours. Mechanisms must not eat other, new org|Thomas Pollack|1|Unknown|1|Unknown|27|Lake |Ln|Suite 260|Midway|Williamson County|TN|31904|United States|-5|0.03| +5|AAAAAAAAEAAAAAAA|1999-03-14|2001-03-12|2450910|anti|288|9078805|8AM-4PM|Edwin Adams|8|Unknown|Events would achieve other, eastern hours. Mechanisms must not eat other, new org|Thomas Pollack|1|Unknown|1|Unknown|27|Lee 6th|Court|Suite 80|Fairview|Williamson County|TN|35709|United States|-5|0.03| +6|AAAAAAAAEAAAAAAA|2001-03-13|||cally|229|9026222|8AM-4PM|Edwin Adams|10|Unknown|Events would achieve other, eastern hours. Mechanisms must not eat other, new org|Thomas Pollack|1|Unknown|1|Unknown|220|6th |Lane|Suite 140|Midway|Williamson County|TN|31904|United States|-5|0.03| +7|AAAAAAAAHAAAAAAA|1997-03-13|||ation|297|8954883|8AM-4PM|David Thomas|9|Unknown|Architects coul|Thomas Benton|1|Unknown|1|Unknown|811|Lee |Circle|Suite T|Midway|Williamson County|TN|31904|United States|-5|0.01| +8|AAAAAAAAIAAAAAAA|1997-03-13|2000-03-12||eing|278|6995995|8AM-4PM|Brett Yates|2|Unknown|Various bars make most. Difficult levels introduce at a boots. Buildings welcome only never el|Dean Morrison|1|Unknown|1|Unknown|226|12th |Lane|Suite D|Fairview|Williamson County|TN|35709|United States|-5|0.08| +9|AAAAAAAAIAAAAAAA|2000-03-13|||eing|271|6995995|8AM-4PM|Brett Yates|2|Unknown|Formal, psychological pounds relate reasonable, young principles. Black, |Dean Morrison|1|Unknown|1|Unknown|226|Hill |Boulevard|Suite 190|Midway|Williamson County|TN|31904|United States|-5|0.08| +10|AAAAAAAAKAAAAAAA|1997-03-13|1999-03-13||bar|294|9294113|8AM-4PM|Raymond Jacobs|8|Unknown|Little expectations include yet forward meetings.|Michael Wilson|1|Unknown|1|Unknown|175|4th |Court|Suite C|Midway|Williamson County|TN|31904|United States|-5|0.06| +11|AAAAAAAAKAAAAAAA|1999-03-14|2001-03-12||ought|294|9294113|8AM-4PM|Raymond Jacobs|6|Unknown|Mysterious employe|Michael Wilson|1|Unknown|1|Unknown|175|Park Green|Court|Suite 160|Midway|Williamson County|TN|31904|United States|-5|0.11| +12|AAAAAAAAKAAAAAAA|2001-03-13|||ought|294|5219562|8AM-12AM|Robert Thompson|6|Unknown|Events develop i|Dustin Kelly|1|Unknown|1|Unknown|337|College |Boulevard|Suite 100|Fairview|Williamson County|TN|31904|United States|-5|0.01| diff --git data/files/store_sales.txt data/files/store_sales.txt new file mode 100644 index 0000000..481f5cd --- /dev/null +++ data/files/store_sales.txt @@ -0,0 +1,120 @@ +2451813|65495|3617|67006|591617|3428|24839|10|161|1|79|11.41|18.71|2.80|99.54|221.20|901.39|1478.09|6.08|99.54|121.66|127.74|-779.73| +2451813|65495|13283|67006|591617|3428|24839|10|154|1|37|63.63|101.17|41.47|46.03|1534.39|2354.31|3743.29|59.53|46.03|1488.36|1547.89|-865.95| +2451813|65495|13631|67006|591617|3428|24839|10|172|1|99|80.52|137.68|83.98|0.00|8314.02|7971.48|13630.32|0.00|0.00|8314.02|8314.02|342.54| +2451813|65495|5981|67006|591617|3428|24839|10|280|1|14|57.37|76.30|6.10|0.00|85.40|803.18|1068.20|0.00|0.00|85.40|85.40|-717.78| +2451813|65495|4553|67006|591617|3428|24839|10|236|1|100|25.08|36.86|0.73|0.00|73.00|2508.00|3686.00|6.57|0.00|73.00|79.57|-2435.00| +2451813|65495|10993|67006|591617|3428|24839|10|263|1|91|93.48|108.43|93.24|0.00|8484.84|8506.68|9867.13|254.54|0.00|8484.84|8739.38|-21.84| +2451813|65495|49|67006|591617|3428|24839|10|70|1|5|10.68|15.91|6.68|0.00|33.40|53.40|79.55|2.33|0.00|33.40|35.73|-20.00| +2451813|65495|4583|67006|591617|3428|24839|10|267|1|72|84.72|111.83|61.50|0.00|4428.00|6099.84|8051.76|177.12|0.00|4428.00|4605.12|-1671.84| +2451813|65495|13538|67006|591617|3428|24839|10|106|1|14|11.54|11.77|0.00|0.00|0.00|161.56|164.78|0.00|0.00|0.00|0.00|-161.56| +2451813|65495|3248|67006|591617|3428|24839|10|189|1|58|4.57|5.34|3.52|0.00|204.16|265.06|309.72|0.00|0.00|204.16|204.16|-60.90| +2451813|65495|4682|67006|591617|3428|24839|10|7|1|44|31.07|54.99|24.19|0.00|1064.36|1367.08|2419.56|85.14|0.00|1064.36|1149.50|-302.72| +2451813|65495|5527|67006|591617|3428|24839|10|112|1|88|52.41|63.94|49.23|0.00|4332.24|4612.08|5626.72|259.93|0.00|4332.24|4592.17|-279.84| +2451813|65495|1553|67006|591617|3428|24839|10|242|1|50|67.71|126.61|87.36|0.00|4368.00|3385.50|6330.50|349.44|0.00|4368.00|4717.44|982.50| +2451813|65495|173|67006|591617|3428|24839|10|249|1|65|27.16|52.14|41.19|0.00|2677.35|1765.40|3389.10|214.18|0.00|2677.35|2891.53|911.95| +2451524|75316|6928|68284|1712478|4672|13266|10|37|2|65|93.86|158.62|34.89|0.00|2267.85|6100.90|10310.30|45.35|0.00|2267.85|2313.20|-3833.05| +2451524|75316|13927|68284|1712478|4672|13266|10|131|2|93|35.87|49.14|15.23|0.00|1416.39|3335.91|4570.02|113.31|0.00|1416.39|1529.70|-1919.52| +2451524|75316|10768|68284|1712478|4672|13266|10|78|2|30|2.27|3.83|1.11|0.00|33.30|68.10|114.90|0.00|0.00|33.30|33.30|-34.80| +2451524|75316|14701|68284|1712478|4672|13266|10|260|2|58|53.09|58.39|7.59|0.00|440.22|3079.22|3386.62|0.00|0.00|440.22|440.22|-2639.00| +|75316|17420|||4672||10||2||17.12|19.85||||||19.07|||495.84|| +2451524|75316|9436|68284|1712478|4672|13266|10|144|2|79|88.02|128.50|69.39|4549.90|5481.81|6953.58|10151.50|83.87|4549.90|931.91|1015.78|-6021.67| +2451524|75316|7654|68284|1712478|4672|13266|10|111|2|25|74.26|89.11|35.64|0.00|891.00|1856.50|2227.75|8.91|0.00|891.00|899.91|-965.50| +2451524|75316|12223|68284|1712478|4672|13266|10|267|2|78|65.71|88.70|23.06|341.74|1798.68|5125.38|6918.60|131.12|341.74|1456.94|1588.06|-3668.44| +2451524|75316|15085|68284|1712478|4672|13266|10|107|2|88|64.43|79.89|41.54|0.00|3655.52|5669.84|7030.32|146.22|0.00|3655.52|3801.74|-2014.32| +2451524|75316|3740|68284|1712478|4672|13266|10|72|2|49|6.55|7.86|7.46|0.00|365.54|320.95|385.14|0.00|0.00|365.54|365.54|44.59| +2451524|75316|1363|68284|1712478|4672|13266|10|38|2|4|13.46|15.34|12.57|0.00|50.28|53.84|61.36|4.02|0.00|50.28|54.30|-3.56| +2451524|75316|12068|68284|1712478|4672|13266|10|102|2|74|16.55|17.21|4.47|0.00|330.78|1224.70|1273.54|0.00|0.00|330.78|330.78|-893.92| +2451524|75316|13340|68284|1712478|4672|13266|10|212|2|71|36.01|64.09|3.20|0.00|227.20|2556.71|4550.39|4.54|0.00|227.20|231.74|-2329.51| +2451524|75316|2930|68284|1712478|4672|13266|10|234|2|36|61.23|93.06|11.16|0.00|401.76|2204.28|3350.16|28.12|0.00|401.76|429.88|-1802.52| +2451524|75316|15782|68284|1712478|4672|13266|10|268|2|62|77.97|85.76|79.75|0.00|4944.50|4834.14|5317.12|0.00|0.00|4944.50|4944.50|110.36| +2452638|50412|12447|44047|586372|697|22622|1|293|3|82|56.14|111.15|46.68|0.00|3827.76|4603.48|9114.30|306.22|0.00|3827.76|4133.98|-775.72| +2452638|50412|246|44047|586372|697|22622|1|229|3|96|98.02|136.24|104.90|0.00|10070.40|9409.92|13079.04|100.70|0.00|10070.40|10171.10|660.48| +||1531||||22622|1|222|3|||130.66|||3104.46||3527.82|124.17||||| +2452638|50412|3525|44047|586372|697|22622|1|165|3|42|97.03|178.53|7.14|0.00|299.88|4075.26|7498.26|17.99|0.00|299.88|317.87|-3775.38| +2452638|50412|13021|44047|586372|697|22622|1|56|3|64|74.69|120.25|2.40|0.00|153.60|4780.16|7696.00|3.07|0.00|153.60|156.67|-4626.56| +2452638|50412|17263|44047|586372|697|22622|1|14|3|17|72.38|111.46|75.79|0.00|1288.43|1230.46|1894.82|38.65|0.00|1288.43|1327.08|57.97| +2452638|50412|17971|44047|586372|697|22622|1|51|3|88|27.95|38.57|26.99|403.77|2375.12|2459.60|3394.16|0.00|403.77|1971.35|1971.35|-488.25| +2452638|50412|14443|44047|586372|697|22622|1|296|3|4|95.75|146.49|43.94|0.00|175.76|383.00|585.96|5.27|0.00|175.76|181.03|-207.24| +2452638|50412|14100|44047|586372|697|22622|1|77|3|79|44.66|83.06|17.44|1115.98|1377.76|3528.14|6561.74|5.23|1115.98|261.78|267.01|-3266.36| +2452638|50412|15786|44047|586372|697|22622|1|126|3|56|4.31|6.76|0.06|3.22|3.36|241.36|378.56|0.01|3.22|0.14|0.15|-241.22| +2452638|50412|10693|44047|586372|697|22622|1|140|3|27|37.04|58.89|55.35|0.00|1494.45|1000.08|1590.03|29.88|0.00|1494.45|1524.33|494.37| +2452638|50412|16869|44047|586372|697|22622|1|37|3|4|75.67|130.15|35.14|0.00|140.56|302.68|520.60|9.83|0.00|140.56|150.39|-162.12| +2452638|50412|5355|44047|586372|697|22622|1|90|3|53|23.04|44.00|26.40|0.00|1399.20|1221.12|2332.00|13.99|0.00|1399.20|1413.19|178.08| +2452638|50412|4698|44047|586372|697|22622|1|130|3|98|85.00|132.60|90.16|4506.19|8835.68|8330.00|12994.80|0.00|4506.19|4329.49|4329.49|-4000.51| +2451438|38195|12790|38814|874786|1511|19083|2|77|4|43|54.34|107.59|87.14|0.00|3747.02|2336.62|4626.37|299.76|0.00|3747.02|4046.78|1410.40| +2451438|38195|5515|38814|874786|1511|19083|2|224|4|23|2.91|3.57|3.53|32.47|81.19|66.93|82.11|0.97|32.47|48.72|49.69|-18.21| +2451438|38195|7990|38814|874786|1511|19083|2|16|4|56|64.68|78.90|24.45|0.00|1369.20|3622.08|4418.40|0.00|0.00|1369.20|1369.20|-2252.88| +2451438|38195|9685|38814|874786|1511|19083|2|284|4|21|40.39|40.39|12.11|0.00|254.31|848.19|848.19|22.88|0.00|254.31|277.19|-593.88| +2451438|38195|11036|38814|874786|1511|19083|2|229|4|41|67.18|78.60|5.50|0.00|225.50|2754.38|3222.60|13.53|0.00|225.50|239.03|-2528.88| +2451438|38195|8452|38814|874786|1511|19083|2|152|4|27|26.21|44.81|19.26|0.00|520.02|707.67|1209.87|46.80|0.00|520.02|566.82|-187.65| +2451438|38195|5350|38814|874786|1511|19083|2|241|4|86|64.67|123.51|55.57|0.00|4779.02|5561.62|10621.86|47.79|0.00|4779.02|4826.81|-782.60| +2451438|38195|163|38814|874786|1511|19083|2|190|4|17|54.26|105.80|9.52|116.52|161.84|922.42|1798.60|0.00|116.52|45.32|45.32|-877.10| +2451438|38195|1576|38814|874786|1511|19083|2|150|4|74|81.81|163.62|45.81|0.00|3389.94|6053.94|12107.88|271.19|0.00|3389.94|3661.13|-2664.00| +2451438|38195|6988|38814|874786|1511|19083|2|122|4|23|53.28|77.78|1.55|21.03|35.65|1225.44|1788.94|1.16|21.03|14.62|15.78|-1210.82| +2451465|53976|1940|13246|963544|5042|28940|2|70|5|60|69.54|112.65|57.45|0.00|3447.00|4172.40|6759.00|34.47|0.00|3447.00|3481.47|-725.40| +2451465|53976|11324|13246|963544|5042|28940|2|196|5|52|16.33|32.33|31.68|0.00|1647.36|849.16|1681.16|115.31|0.00|1647.36|1762.67|798.20| +2451465|53976|14599|13246|963544|5042|28940|2|167|5|83|74.15|89.72|63.70|0.00|5287.10|6154.45|7446.76|422.96|0.00|5287.10|5710.06|-867.35| +2451465|53976|11590|13246|963544|5042|28940|2|84|5|15|21.21|33.93|30.53|0.00|457.95|318.15|508.95|22.89|0.00|457.95|480.84|139.80| +2451465|53976|16792|13246|963544|5042|28940|2|12|5|71|22.10|37.57|28.17|0.00|2000.07|1569.10|2667.47|180.00|0.00|2000.07|2180.07|430.97| +2451465|53976|6466|13246|963544|5042|28940|2|200|5|36|7.93|12.92|7.36|0.00|264.96|285.48|465.12|0.00|0.00|264.96|264.96|-20.52| +2451465|53976|15752|13246|963544|5042|28940|2|10|5|66|71.06|136.43|45.02|0.00|2971.32|4689.96|9004.38|59.42|0.00|2971.32|3030.74|-1718.64| +2451465|53976|12650|13246|963544|5042|28940|2|185|5|66|21.01|28.57|5.99|0.00|395.34|1386.66|1885.62|7.90|0.00|395.34|403.24|-991.32| +|53976|5842||963544|||2|158|5|50|30.69|59.84||||1534.50||0.00||1735.00||200.50| +2451465|53976|14686|13246|963544|5042|28940|2|215|5|91|27.68|53.69|0.53|0.00|48.23|2518.88|4885.79|3.85|0.00|48.23|52.08|-2470.65| +2451465|53976|6068|13246|963544|5042|28940|2|125|5|76|89.78|103.24|50.58|0.00|3844.08|6823.28|7846.24|153.76|0.00|3844.08|3997.84|-2979.20| +2451465|53976|13562|13246|963544|5042|28940|2|75|5|64|87.90|95.81|66.10|0.00|4230.40|5625.60|6131.84|0.00|0.00|4230.40|4230.40|-1395.20| +2451465|53976|13958|13246|963544|5042|28940|2|149|5|60|41.72|52.98|32.31|0.00|1938.60|2503.20|3178.80|0.00|0.00|1938.60|1938.60|-564.60| +|53976|1808|13246|||28940|2||5|||77.52|11.62|0.00|732.06||4883.76|43.92|0.00|||| +2451465|53976|16195|13246|963544|5042|28940|2|206|5|50|30.96|56.34|45.07|0.00|2253.50|1548.00|2817.00|22.53|0.00|2253.50|2276.03|705.50| +||8621|53029||2092|||168|6||||||449.88|||||||| +2452109|36794|3049|53029|506184|2092|44800|4|72|6|31|49.78|77.15|69.43|0.00|2152.33|1543.18|2391.65|0.00|0.00|2152.33|2152.33|609.15| +2452109|36794|2549|53029|506184|2092|44800|4|128|6|62|85.07|159.08|76.35|0.00|4733.70|5274.34|9862.96|189.34|0.00|4733.70|4923.04|-540.64| +2452109|36794|10895|53029|506184|2092|44800|4|276|6|1|71.10|89.58|61.81|0.00|61.81|71.10|89.58|3.70|0.00|61.81|65.51|-9.29| +2452109|36794|11705|53029|506184|2092|44800|4|9|6|61|48.18|60.70|18.81|126.21|1147.41|2938.98|3702.70|71.48|126.21|1021.20|1092.68|-1917.78| +2452109|36794|13513|53029|506184|2092|44800|4|248|6|42|64.46|70.26|32.31|0.00|1357.02|2707.32|2950.92|27.14|0.00|1357.02|1384.16|-1350.30| +2452109|36794|3291|53029|506184|2092|44800|4|153|6|100|41.08|42.31|38.50|0.00|3850.00|4108.00|4231.00|346.50|0.00|3850.00|4196.50|-258.00| +2452109|36794|13245|53029|506184|2092|44800|4|252|6|64|86.35|152.83|122.26|6650.94|7824.64|5526.40|9781.12|35.21|6650.94|1173.70|1208.91|-4352.70| +2452109|36794|10355|53029|506184|2092|44800|4|216|6|94|62.67|99.64|97.64|0.00|9178.16|5890.98|9366.16|91.78|0.00|9178.16|9269.94|3287.18| +2452109|36794|6437|53029|506184|2092|44800|4|198|6|72|55.49|93.77|55.32|0.00|3983.04|3995.28|6751.44|199.15|0.00|3983.04|4182.19|-12.24| +2452109|36794|2647|53029|506184|2092|44800|4|150|6|100|4.45|7.87|7.24|0.00|724.00|445.00|787.00|57.92|0.00|724.00|781.92|279.00| +2452260|46712|5183|69954|890396|791|37633|2|6|7|51|84.65|124.43|49.77|0.00|2538.27|4317.15|6345.93|76.14|0.00|2538.27|2614.41|-1778.88| +2452260|46712|4627|69954|890396|791|37633|2|210|7|9|56.13|59.49|30.93|0.00|278.37|505.17|535.41|22.26|0.00|278.37|300.63|-226.80| +2452260||9751|69954|890396|791||||7|4|||||278.60|203.68|366.60|22.28||278.60|300.88|| +2452260|46712|15333|69954|||||85|7|||72.02||||||||4990.30||1141.70| +2452260|46712|4833|69954|890396|791|37633|2|153|7|88|38.23|72.63|39.22|0.00|3451.36|3364.24|6391.44|138.05|0.00|3451.36|3589.41|87.12| +2452260|46712|10487|69954|890396|791|37633|2|153|7|52|63.80|81.02|22.68|0.00|1179.36|3317.60|4213.04|23.58|0.00|1179.36|1202.94|-2138.24| +2452260|46712|5905|69954|890396|791|37633|2|77|7|69|99.85|113.82|110.40|0.00|7617.60|6889.65|7853.58|0.00|0.00|7617.60|7617.60|727.95| +2452260|46712|8955|69954|890396|791|37633|2|55|7|54|42.82|56.09|21.31|0.00|1150.74|2312.28|3028.86|92.05|0.00|1150.74|1242.79|-1161.54| +2452260|46712|15179|69954|890396|791|37633|2|5|7|12|47.60|75.20|65.42|0.00|785.04|571.20|902.40|47.10|0.00|785.04|832.14|213.84| +2452260|46712|4795|69954|890396|791|37633|2|212|7|73|12.17|14.23|11.24|623.59|820.52|888.41|1038.79|5.90|623.59|196.93|202.83|-691.48| +2452260|46712|17255|69954|890396|791|37633|2|275|7|69|34.19|58.46|50.86|0.00|3509.34|2359.11|4033.74|210.56|0.00|3509.34|3719.90|1150.23| +2452260|46712|12571|69954|890396|791|37633|2|147|7|82|69.53|87.60|34.16|0.00|2801.12|5701.46|7183.20|0.00|0.00|2801.12|2801.12|-2900.34| +2452179|52209|4183|86944|578318|6045|49019|8|109|8|90|81.63|151.83|113.87|9428.43|10248.30|7346.70|13664.70|40.99|9428.43|819.87|860.86|-6526.83| +2452179|52209|13427|86944|578318|6045|49019|8|106|8|87|31.78|63.24|16.44|0.00|1430.28|2764.86|5501.88|57.21|0.00|1430.28|1487.49|-1334.58| +2452179|52209|665|86944|578318|6045|49019|8|123|8|31|15.64|26.43|13.21|0.00|409.51|484.84|819.33|4.09|0.00|409.51|413.60|-75.33| +2452179|52209|11893|86944|578318|6045|49019|8|71|8|95|21.29|33.85|20.64|0.00|1960.80|2022.55|3215.75|98.04|0.00|1960.80|2058.84|-61.75| +2452179|52209|11365|86944|578318|6045|49019|8|239|8|7|18.65|27.97|20.41|0.00|142.87|130.55|195.79|1.42|0.00|142.87|144.29|12.32| +2452179|52209|7115|86944|578318|6045|49019|8|242|8|54|36.99|47.71|27.67|0.00|1494.18|1997.46|2576.34|89.65|0.00|1494.18|1583.83|-503.28| +2452179|52209|12041|86944|578318|6045|49019|8|299|8|95|91.80|93.63|75.84|6700.46|7204.80|8721.00|8894.85|5.04|6700.46|504.34|509.38|-8216.66| +2452179|52209|5929|86944|578318|6045|49019|8|128|8|83|14.11|27.37|3.28|0.00|272.24|1171.13|2271.71|13.61|0.00|272.24|285.85|-898.89| +2452179|52209|16671|86944|578318|6045|49019|8|45|8|20|18.95|33.92|31.88|0.00|637.60|379.00|678.40|51.00|0.00|637.60|688.60|258.60| +2452179|52209|17119|86944|578318|6045|49019|8|251|8|51|8.04|8.92|1.07|0.00|54.57|410.04|454.92|4.91|0.00|54.57|59.48|-355.47| +2452179|52209|17545|86944|578318|6045|49019|8|65|8|49|72.15|104.61|80.54|0.00|3946.46|3535.35|5125.89|39.46|0.00|3946.46|3985.92|411.11| +2452496|45986|12969|47480|1023064|4248|43385|4|14|9|59|88.31|106.85|44.87|0.00|2647.33|5210.29|6304.15|211.78|0.00|2647.33|2859.11|-2562.96| +2452496|45986|4623|47480|1023064|4248|43385|4|296|9|34|2.97|3.35|2.04|0.00|69.36|100.98|113.90|3.46|0.00|69.36|72.82|-31.62| +2452496|45986|17310|47480|1023064|4248|43385|4|167|9|33|27.13|53.44|2.13|0.00|70.29|895.29|1763.52|2.81|0.00|70.29|73.10|-825.00| +2452496|45986|13717|47480|1023064|4248|43385|4|172|9|53|75.37|89.69|54.71|0.00|2899.63|3994.61|4753.57|115.98|0.00|2899.63|3015.61|-1094.98| +|45986|16363|47480|1023064||43385|||9|54||||0.00|768.42|3873.42|||0.00||829.89|| +2452496|45986|69|47480|1023064|4248|43385|4|96|9|11|31.70|54.52|47.97|527.67|527.67|348.70|599.72|0.00|527.67|0.00|0.00|-348.70| +2452496|45986|16461|47480|1023064|4248|43385|4|281|9|66|15.21|26.00|25.22|66.58|1664.52|1003.86|1716.00|111.85|66.58|1597.94|1709.79|594.08| +2452496|45986|889|47480|1023064|4248|43385|4|287|9|6|27.17|51.62|25.29|0.00|151.74|163.02|309.72|3.03|0.00|151.74|154.77|-11.28| +2452496|45986|12027|47480|1023064|4248|43385|4|1|9|27|98.68|195.38|15.63|0.00|422.01|2664.36|5275.26|33.76|0.00|422.01|455.77|-2242.35| +2452496|45986|1185|47480|1023064|4248|43385|4|139|9|62|55.68|64.03|3.84|233.31|238.08|3452.16|3969.86|0.14|233.31|4.77|4.91|-3447.39| +2452496|45986|16083|47480|1023064|4248|43385|4|124|9|32|99.10|152.61|132.77|0.00|4248.64|3171.20|4883.52|339.89|0.00|4248.64|4588.53|1077.44| +2452496|45986|7945|47480|1023064|4248|43385|4|239|9|83|8.10|14.58|8.60|0.00|713.80|672.30|1210.14|64.24|0.00|713.80|778.04|41.50| +|45986|13483|||4248||4|109|9||59.14|108.81|46.78|0.00||3311.84|6093.36||0.00|2619.68|2619.68|| +2452496|45986|8334|47480|1023064|4248|43385|4|22|9|71|34.79|36.87|19.17|1197.74|1361.07|2470.09|2617.77|8.16|1197.74|163.33|171.49|-2306.76| +2452496|45986|15133|47480|1023064|4248|43385|4|111|9|15|35.89|63.88|30.66|0.00|459.90|538.35|958.20|41.39|0.00|459.90|501.29|-78.45| +2452496|45986|16659|47480|1023064|4248|43385|4|1|9|84|76.71|85.14|5.10|0.00|428.40|6443.64|7151.76|21.42|0.00|428.40|449.82|-6015.24| +2451966|60226|9811|4451|71288|6925|24515|10|38|10|28|47.85|50.24|19.09|0.00|534.52|1339.80|1406.72|37.41|0.00|534.52|571.93|-805.28| +2451966|60226|3933|4451|71288|6925|24515|10|61|10|52|52.19|66.80|26.05|0.00|1354.60|2713.88|3473.60|94.82|0.00|1354.60|1449.42|-1359.28| diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java index ab7eee8..a484ea9 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/stats/annotation/StatsRulesProcFactory.java @@ -1026,11 +1026,17 @@ private long applyGBYRule(long numRows, long dvProd) { */ public static class JoinStatsRule extends DefaultStatsRule implements NodeProcessor { + private boolean pkfkInferred = false; + private long newNumRows = 0; + private List> parents; + private CommonJoinOperator jop; + private int numAttr = 1; + @Override public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, Object... nodeOutputs) throws SemanticException { - CommonJoinOperator jop = (CommonJoinOperator) nd; - List> parents = jop.getParentOperators(); + jop = (CommonJoinOperator) nd; + parents = jop.getParentOperators(); AnnotateStatsProcCtx aspCtx = (AnnotateStatsProcCtx) procCtx; HiveConf conf = aspCtx.getConf(); boolean allStatsAvail = true; @@ -1057,22 +1063,25 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, Statistics stats = new Statistics(); Map rowCountParents = new HashMap(); List distinctVals = Lists.newArrayList(); - - // 2 relations, multiple attributes - boolean multiAttr = false; - int numAttr = 1; int numParent = parents.size(); - Map joinedColStats = Maps.newHashMap(); Map> joinKeys = Maps.newHashMap(); List rowCounts = Lists.newArrayList(); + // detect if there are multiple attributes in join key + ReduceSinkOperator rsOp = (ReduceSinkOperator) jop.getParentOperators().get(0); + List keyExprs = rsOp.getConf().getKeyCols(); + numAttr = keyExprs.size(); + + // infer PK-FK relationship in single attribute join case + inferPKFKRelationship(); + // get the join keys from parent ReduceSink operators for (int pos = 0; pos < parents.size(); pos++) { ReduceSinkOperator parent = (ReduceSinkOperator) jop.getParentOperators().get(pos); Statistics parentStats = parent.getStatistics(); - List keyExprs = parent.getConf().getKeyCols(); + keyExprs = parent.getConf().getKeyCols(); // Parent RS may have column statistics from multiple parents. // Populate table alias to row count map, this will be used later to @@ -1087,12 +1096,6 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, } rowCounts.add(parentStats.getNumRows()); - // multi-attribute join key - if (keyExprs.size() > 1) { - multiAttr = true; - numAttr = keyExprs.size(); - } - // compute fully qualified join key column names. this name will be // used to quickly look-up for column statistics of join key. // TODO: expressions in join condition will be ignored. assign @@ -1115,7 +1118,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, // attribute join, else max(V(R,y1), V(S,y1)) * max(V(R,y2), V(S,y2)) // in case of multi-attribute join long denom = 1; - if (multiAttr) { + if (numAttr > 1) { List perAttrDVs = Lists.newArrayList(); for (int idx = 0; idx < numAttr; idx++) { for (Integer i : joinKeys.keySet()) { @@ -1154,9 +1157,7 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, } // Update NDV of joined columns to be min(V(R,y), V(S,y)) - if (multiAttr) { - updateJoinColumnsNDV(joinKeys, joinedColStats, numAttr); - } + updateJoinColumnsNDV(joinKeys, joinedColStats, numAttr); // column statistics from different sources are put together and rename // fully qualified column names based on output schema of join operator @@ -1186,10 +1187,9 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, // update join statistics stats.setColumnStats(outColStats); - long newRowCount = computeNewRowCount(rowCounts, denom); + long newRowCount = pkfkInferred ? newNumRows : computeNewRowCount(rowCounts, denom); - updateStatsForJoinType(stats, newRowCount, jop, rowCountParents, - outInTabAlias); + updateStatsForJoinType(stats, newRowCount, jop, rowCountParents,outInTabAlias); jop.setStatistics(stats); if (isDebugEnabled) { @@ -1234,6 +1234,145 @@ public Object process(Node nd, Stack stack, NodeProcessorCtx procCtx, return null; } + private void inferPKFKRelationship() { + if (numAttr == 1) { + List parentsWithPK = getPrimaryKeyCandidates(parents); + + // in case of fact to many dimensional tables join, the join key in fact table will be + // mostly foreign key which will have corresponding primary key in dimension table. + // The selectivity of fact table in that case will be product of all selectivities of + // dimension tables (assumes conjunctivity) + for (Integer id : parentsWithPK) { + ColStatistics csPK = null; + Operator parent = parents.get(id); + for (ColStatistics cs : parent.getStatistics().getColumnStats()) { + if (cs.isPrimaryKey()) { + csPK = cs; + } + } + + // infer foreign key candidates positions + List parentsWithFK = getForeignKeyCandidates(parents, csPK); + if (parentsWithFK.size() == 1 && + parentsWithFK.size() + parentsWithPK.size() == parents.size()) { + Operator parentWithFK = parents.get(parentsWithFK.get(0)); + List parentsSel = getSelectivity(parents, parentsWithPK); + Float prodSelectivity = 1.0f; + for (Float selectivity : parentsSel) { + prodSelectivity *= selectivity; + } + newNumRows = (long) (parentWithFK.getStatistics().getNumRows() * prodSelectivity); + pkfkInferred = true; + + // some debug information + if (isDebugEnabled) { + List parentIds = Lists.newArrayList(); + + // print primary key containing parents + for (Integer i : parentsWithPK) { + parentIds.add(parents.get(i).toString()); + } + LOG.debug("STATS-" + jop.toString() + ": PK parent id(s) - " + parentIds); + parentIds.clear(); + + // print foreign key containing parents + for (Integer i : parentsWithFK) { + parentIds.add(parents.get(i).toString()); + } + LOG.debug("STATS-" + jop.toString() + ": FK parent id(s) - " + parentIds); + } + } + } + } + } + + /** + * Get selectivity of reduce sink operators. + * @param ops - reduce sink operators + * @param opsWithPK - reduce sink operators with primary keys + * @return - list of selectivity for primary key containing operators + */ + private List getSelectivity(List> ops, + List opsWithPK) { + List result = Lists.newArrayList(); + for (Integer idx : opsWithPK) { + Operator op = ops.get(idx); + TableScanOperator tsOp = OperatorUtils + .findSingleOperatorUpstream(op, TableScanOperator.class); + long inputRow = tsOp.getStatistics().getNumRows(); + long outputRow = op.getStatistics().getNumRows(); + result.add((float) outputRow / (float) inputRow); + } + return result; + } + + /** + * Returns the index of parents whose join key column statistics ranges are within the specified + * primary key range (inferred as foreign keys). + * @param ops - operators + * @param csPK - column statistics of primary key + * @return - list of foreign key containing parent ids + */ + private List getForeignKeyCandidates(List> ops, + ColStatistics csPK) { + List result = Lists.newArrayList(); + if (csPK == null || ops == null) { + return result; + } + + for (int i = 0; i < ops.size(); i++) { + Operator op = ops.get(i); + if (op != null && op instanceof ReduceSinkOperator) { + ReduceSinkOperator rsOp = (ReduceSinkOperator) op; + List keys = rsOp.getConf().getKeyCols(); + List fqCols = StatsUtils.getFullQualifedColNameFromExprs(keys, + rsOp.getColumnExprMap()); + if (fqCols.size() == 1) { + String joinCol = fqCols.get(0); + if (rsOp.getStatistics() != null) { + ColStatistics cs = rsOp.getStatistics().getColumnStatisticsFromFQColName(joinCol); + if (cs != null && !cs.isPrimaryKey()) { + if (StatsUtils.inferForeignKey(csPK, cs)) { + result.add(i); + } + } + } + } + } + } + return result; + } + + /** + * Returns the index of parents whose join key columns are infer as primary keys + * @param ops - operators + * @return - list of primary key containing parent ids + */ + private List getPrimaryKeyCandidates(List> ops) { + List result = Lists.newArrayList(); + if (ops != null || !ops.isEmpty()) { + for (int i = 0; i < ops.size(); i++) { + Operator op = ops.get(i); + if (op instanceof ReduceSinkOperator) { + ReduceSinkOperator rsOp = (ReduceSinkOperator) op; + List keys = rsOp.getConf().getKeyCols(); + List fqCols = StatsUtils.getFullQualifedColNameFromExprs(keys, + rsOp.getColumnExprMap()); + if (fqCols.size() == 1) { + String joinCol = fqCols.get(0); + if (rsOp.getStatistics() != null) { + ColStatistics cs = rsOp.getStatistics().getColumnStatisticsFromFQColName(joinCol); + if (cs != null && cs.isPrimaryKey()) { + result.add(i); + } + } + } + } + } + } + return result; + } + private Long getEasedOutDenominator(List distinctVals) { // Exponential back-off for NDVs. // 1) Descending order sort of NDVs diff --git ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java index d1b7dea..c420190 100644 --- ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java +++ ql/src/java/org/apache/hadoop/hive/ql/plan/ColStatistics.java @@ -33,12 +33,14 @@ private long numTrues; private long numFalses; private Range range; + private boolean isPrimaryKey; public ColStatistics(String tabAlias, String colName, String colType) { this.setTableAlias(tabAlias); this.setColumnName(colName); this.setColumnType(colType); this.setFullyQualifiedColName(StatsUtils.getFullyQualifiedColumnName(tabAlias, colName)); + this.setPrimaryKey(false); } public ColStatistics() { @@ -150,6 +152,12 @@ public String toString() { sb.append(numTrues); sb.append(" numFalses: "); sb.append(numFalses); + if (range != null) { + sb.append(" "); + sb.append(range); + } + sb.append(" isPrimaryKey: "); + sb.append(isPrimaryKey); return sb.toString(); } @@ -162,24 +170,47 @@ public ColStatistics clone() throws CloneNotSupportedException { clone.setNumNulls(numNulls); clone.setNumTrues(numTrues); clone.setNumFalses(numFalses); + clone.setPrimaryKey(isPrimaryKey); if (range != null ) { clone.setRange(range.clone()); } return clone; } + public boolean isPrimaryKey() { + return isPrimaryKey; + } + + public void setPrimaryKey(boolean isPrimaryKey) { + this.isPrimaryKey = isPrimaryKey; + } + public static class Range { public final Number minValue; public final Number maxValue; + Range(Number minValue, Number maxValue) { super(); this.minValue = minValue; this.maxValue = maxValue; } + @Override public Range clone() { return new Range(minValue, maxValue); } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("Range: ["); + sb.append(" min: "); + sb.append(minValue); + sb.append(" max: "); + sb.append(maxValue); + sb.append(" ]"); + return sb.toString(); + } } } diff --git ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java index 5143fbe..77bca31 100644 --- ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java +++ ql/src/java/org/apache/hadoop/hive/ql/stats/StatsUtils.java @@ -175,6 +175,9 @@ public static Statistics collectStatistics(HiveConf conf, PrunedPartitionList pa colStats = getTableColumnStats(table, schema, neededColumns); } + // infer if any column can be primary key based on column statistics + inferAndSetPrimaryKey(stats.getNumRows(), colStats); + stats.setColumnStatsState(deriveStatType(colStats, neededColumns)); stats.addToColumnStats(colStats); } else if (partList != null) { @@ -261,6 +264,9 @@ public static Statistics collectStatistics(HiveConf conf, PrunedPartitionList pa addParitionColumnStats(neededColumns, referencedColumns, schema, table, partList, columnStats); + // infer if any column can be primary key based on column statistics + inferAndSetPrimaryKey(stats.getNumRows(), columnStats); + stats.addToColumnStats(columnStats); State colState = deriveStatType(columnStats, referencedColumns); if (aggrStats.getPartsFound() != partNames.size() && colState != State.NONE) { @@ -275,6 +281,58 @@ public static Statistics collectStatistics(HiveConf conf, PrunedPartitionList pa return stats; } + + /** + * Based on the provided column statistics and number of rows, this method infers if the column + * can be primary key. It checks if the difference between the min and max value is equal to + * number of rows specified. + * @param numRows - number of rows + * @param colStats - column statistics + */ + public static void inferAndSetPrimaryKey(long numRows, List colStats) { + if (colStats != null) { + for (ColStatistics cs : colStats) { + if (cs != null && cs.getRange() != null && cs.getRange().minValue != null && + cs.getRange().maxValue != null) { + if (numRows == + ((cs.getRange().maxValue.longValue() - cs.getRange().minValue.longValue()) + 1)) { + cs.setPrimaryKey(true); + } + } + } + } + } + + /** + * Infer foreign key relationship from given column statistics. + * @param csPK - column statistics of primary key + * @param csFK - column statistics of potential foreign key + * @return + */ + public static boolean inferForeignKey(ColStatistics csPK, ColStatistics csFK) { + if (csPK != null && csFK != null) { + if (csPK.isPrimaryKey()) { + if (csPK.getRange() != null && csFK.getRange() != null) { + ColStatistics.Range pkRange = csPK.getRange(); + ColStatistics.Range fkRange = csFK.getRange(); + return isWithin(fkRange, pkRange); + } + } + } + return false; + } + + private static boolean isWithin(ColStatistics.Range range1, ColStatistics.Range range2) { + if (range1.minValue != null && range2.minValue != null && range1.maxValue != null && + range2.maxValue != null) { + if (range1.minValue.longValue() >= range2.minValue.longValue() && + range1.maxValue.longValue() <= range2.maxValue.longValue()) { + return true; + } + } + return false; + } + private static void addParitionColumnStats(List neededColumns, List referencedColumns, List schema, Table table, PrunedPartitionList partList, List colStats) @@ -531,6 +589,7 @@ public static ColStatistics getColStatistics(ColumnStatisticsObj cso, String tab // Columns statistics for complex datatypes are not supported yet return null; } + return cs; } diff --git ql/src/test/queries/clientpositive/annotate_stats_join_pkfk.q ql/src/test/queries/clientpositive/annotate_stats_join_pkfk.q new file mode 100644 index 0000000..b89cedb --- /dev/null +++ ql/src/test/queries/clientpositive/annotate_stats_join_pkfk.q @@ -0,0 +1,113 @@ +set hive.stats.fetch.column.stats=true; + +drop table store_sales; +drop table store; +drop table customer_address; + +-- s_store_sk is PK, ss_store_sk is FK +-- ca_address_sk is PK, ss_addr_sk is FK + +create table store_sales +( + ss_sold_date_sk int, + ss_sold_time_sk int, + ss_item_sk int, + ss_customer_sk int, + ss_cdemo_sk int, + ss_hdemo_sk int, + ss_addr_sk int, + ss_store_sk int, + ss_promo_sk int, + ss_ticket_number int, + ss_quantity int, + ss_wholesale_cost float, + ss_list_price float, + ss_sales_price float, + ss_ext_discount_amt float, + ss_ext_sales_price float, + ss_ext_wholesale_cost float, + ss_ext_list_price float, + ss_ext_tax float, + ss_coupon_amt float, + ss_net_paid float, + ss_net_paid_inc_tax float, + ss_net_profit float +) +row format delimited fields terminated by '|'; + +create table store +( + s_store_sk int, + s_store_id string, + s_rec_start_date string, + s_rec_end_date string, + s_closed_date_sk int, + s_store_name string, + s_number_employees int, + s_floor_space int, + s_hours string, + s_manager string, + s_market_id int, + s_geography_class string, + s_market_desc string, + s_market_manager string, + s_division_id int, + s_division_name string, + s_company_id int, + s_company_name string, + s_street_number string, + s_street_name string, + s_street_type string, + s_suite_number string, + s_city string, + s_county string, + s_state string, + s_zip string, + s_country string, + s_gmt_offset float, + s_tax_precentage float +) +row format delimited fields terminated by '|'; + +create table customer_address +( + ca_address_sk int, + ca_address_id string, + ca_street_number string, + ca_street_name string, + ca_street_type string, + ca_suite_number string, + ca_city string, + ca_county string, + ca_state string, + ca_zip string, + ca_country string, + ca_gmt_offset float, + ca_location_type string +) +row format delimited fields terminated by '|'; + +load data local inpath '../../data/files/store.txt' overwrite into table store; +load data local inpath '../../data/files/store_sales.txt' overwrite into table store_sales; +load data local inpath '../../data/files/customer_address.txt' overwrite into table customer_address; + +analyze table store compute statistics; +analyze table store compute statistics for columns; +analyze table store_sales compute statistics; +analyze table store_sales compute statistics for columns; +analyze table customer_address compute statistics; +analyze table customer_address compute statistics for columns; + +explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk); + +explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) where s.s_store_sk > 0; + +explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join store s1 on (s1.s_store_sk = ss.ss_store_sk); + +explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join store s1 on (s1.s_store_sk = ss.ss_store_sk) where s.s_store_sk > 1000; + +explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join customer_address ca on (ca.ca_address_sk = ss.ss_addr_sk); + +drop table store_sales; +drop table store; +drop table customer_address; diff --git ql/src/test/results/clientpositive/annotate_stats_join_pkfk.q.out ql/src/test/results/clientpositive/annotate_stats_join_pkfk.q.out new file mode 100644 index 0000000..cd19ddc --- /dev/null +++ ql/src/test/results/clientpositive/annotate_stats_join_pkfk.q.out @@ -0,0 +1,668 @@ +PREHOOK: query: drop table store_sales +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table store_sales +POSTHOOK: type: DROPTABLE +PREHOOK: query: drop table store +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table store +POSTHOOK: type: DROPTABLE +PREHOOK: query: drop table customer_address +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table customer_address +POSTHOOK: type: DROPTABLE +PREHOOK: query: -- s_store_sk is PK, ss_store_sk is FK +-- ca_address_sk is PK, ss_addr_sk is FK + +create table store_sales +( + ss_sold_date_sk int, + ss_sold_time_sk int, + ss_item_sk int, + ss_customer_sk int, + ss_cdemo_sk int, + ss_hdemo_sk int, + ss_addr_sk int, + ss_store_sk int, + ss_promo_sk int, + ss_ticket_number int, + ss_quantity int, + ss_wholesale_cost float, + ss_list_price float, + ss_sales_price float, + ss_ext_discount_amt float, + ss_ext_sales_price float, + ss_ext_wholesale_cost float, + ss_ext_list_price float, + ss_ext_tax float, + ss_coupon_amt float, + ss_net_paid float, + ss_net_paid_inc_tax float, + ss_net_profit float +) +row format delimited fields terminated by '|' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@store_sales +POSTHOOK: query: -- s_store_sk is PK, ss_store_sk is FK +-- ca_address_sk is PK, ss_addr_sk is FK + +create table store_sales +( + ss_sold_date_sk int, + ss_sold_time_sk int, + ss_item_sk int, + ss_customer_sk int, + ss_cdemo_sk int, + ss_hdemo_sk int, + ss_addr_sk int, + ss_store_sk int, + ss_promo_sk int, + ss_ticket_number int, + ss_quantity int, + ss_wholesale_cost float, + ss_list_price float, + ss_sales_price float, + ss_ext_discount_amt float, + ss_ext_sales_price float, + ss_ext_wholesale_cost float, + ss_ext_list_price float, + ss_ext_tax float, + ss_coupon_amt float, + ss_net_paid float, + ss_net_paid_inc_tax float, + ss_net_profit float +) +row format delimited fields terminated by '|' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@store_sales +PREHOOK: query: create table store +( + s_store_sk int, + s_store_id string, + s_rec_start_date string, + s_rec_end_date string, + s_closed_date_sk int, + s_store_name string, + s_number_employees int, + s_floor_space int, + s_hours string, + s_manager string, + s_market_id int, + s_geography_class string, + s_market_desc string, + s_market_manager string, + s_division_id int, + s_division_name string, + s_company_id int, + s_company_name string, + s_street_number string, + s_street_name string, + s_street_type string, + s_suite_number string, + s_city string, + s_county string, + s_state string, + s_zip string, + s_country string, + s_gmt_offset float, + s_tax_precentage float +) +row format delimited fields terminated by '|' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@store +POSTHOOK: query: create table store +( + s_store_sk int, + s_store_id string, + s_rec_start_date string, + s_rec_end_date string, + s_closed_date_sk int, + s_store_name string, + s_number_employees int, + s_floor_space int, + s_hours string, + s_manager string, + s_market_id int, + s_geography_class string, + s_market_desc string, + s_market_manager string, + s_division_id int, + s_division_name string, + s_company_id int, + s_company_name string, + s_street_number string, + s_street_name string, + s_street_type string, + s_suite_number string, + s_city string, + s_county string, + s_state string, + s_zip string, + s_country string, + s_gmt_offset float, + s_tax_precentage float +) +row format delimited fields terminated by '|' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@store +PREHOOK: query: create table customer_address +( + ca_address_sk int, + ca_address_id string, + ca_street_number string, + ca_street_name string, + ca_street_type string, + ca_suite_number string, + ca_city string, + ca_county string, + ca_state string, + ca_zip string, + ca_country string, + ca_gmt_offset float, + ca_location_type string +) +row format delimited fields terminated by '|' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@customer_address +POSTHOOK: query: create table customer_address +( + ca_address_sk int, + ca_address_id string, + ca_street_number string, + ca_street_name string, + ca_street_type string, + ca_suite_number string, + ca_city string, + ca_county string, + ca_state string, + ca_zip string, + ca_country string, + ca_gmt_offset float, + ca_location_type string +) +row format delimited fields terminated by '|' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@customer_address +PREHOOK: query: load data local inpath '../../data/files/store.txt' overwrite into table store +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@store +POSTHOOK: query: load data local inpath '../../data/files/store.txt' overwrite into table store +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@store +PREHOOK: query: load data local inpath '../../data/files/store_sales.txt' overwrite into table store_sales +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@store_sales +POSTHOOK: query: load data local inpath '../../data/files/store_sales.txt' overwrite into table store_sales +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@store_sales +PREHOOK: query: load data local inpath '../../data/files/customer_address.txt' overwrite into table customer_address +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@customer_address +POSTHOOK: query: load data local inpath '../../data/files/customer_address.txt' overwrite into table customer_address +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@customer_address +PREHOOK: query: analyze table store compute statistics +PREHOOK: type: QUERY +PREHOOK: Input: default@store +PREHOOK: Output: default@store +POSTHOOK: query: analyze table store compute statistics +POSTHOOK: type: QUERY +POSTHOOK: Input: default@store +POSTHOOK: Output: default@store +PREHOOK: query: analyze table store compute statistics for columns +PREHOOK: type: QUERY +PREHOOK: Input: default@store +#### A masked pattern was here #### +POSTHOOK: query: analyze table store compute statistics for columns +POSTHOOK: type: QUERY +POSTHOOK: Input: default@store +#### A masked pattern was here #### +PREHOOK: query: analyze table store_sales compute statistics +PREHOOK: type: QUERY +PREHOOK: Input: default@store_sales +PREHOOK: Output: default@store_sales +POSTHOOK: query: analyze table store_sales compute statistics +POSTHOOK: type: QUERY +POSTHOOK: Input: default@store_sales +POSTHOOK: Output: default@store_sales +PREHOOK: query: analyze table store_sales compute statistics for columns +PREHOOK: type: QUERY +PREHOOK: Input: default@store_sales +#### A masked pattern was here #### +POSTHOOK: query: analyze table store_sales compute statistics for columns +POSTHOOK: type: QUERY +POSTHOOK: Input: default@store_sales +#### A masked pattern was here #### +PREHOOK: query: analyze table customer_address compute statistics +PREHOOK: type: QUERY +PREHOOK: Input: default@customer_address +PREHOOK: Output: default@customer_address +POSTHOOK: query: analyze table customer_address compute statistics +POSTHOOK: type: QUERY +POSTHOOK: Input: default@customer_address +POSTHOOK: Output: default@customer_address +PREHOOK: query: analyze table customer_address compute statistics for columns +PREHOOK: type: QUERY +PREHOOK: Input: default@customer_address +#### A masked pattern was here #### +POSTHOOK: query: analyze table customer_address compute statistics for columns +POSTHOOK: type: QUERY +POSTHOOK: Input: default@customer_address +#### A masked pattern was here #### +PREHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: s + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: s_store_sk is not null (type: boolean) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: ss + Statistics: Num rows: 120 Data size: 15560 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: ss_store_sk is not null (type: boolean) + Statistics: Num rows: 116 Data size: 10240 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: ss_store_sk (type: int) + sort order: + + Map-reduce partition columns: ss_store_sk (type: int) + Statistics: Num rows: 116 Data size: 10240 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: ss_sold_date_sk (type: int), ss_sold_time_sk (type: int), ss_item_sk (type: int), ss_customer_sk (type: int), ss_cdemo_sk (type: int), ss_hdemo_sk (type: int), ss_addr_sk (type: int), ss_promo_sk (type: int), ss_ticket_number (type: int), ss_quantity (type: int), ss_wholesale_cost (type: float), ss_list_price (type: float), ss_sales_price (type: float), ss_ext_discount_amt (type: float), ss_ext_sales_price (type: float), ss_ext_wholesale_cost (type: float), ss_ext_list_price (type: float), ss_ext_tax (type: float), ss_coupon_amt (type: float), ss_net_paid (type: float), ss_net_paid_inc_tax (type: float), ss_net_profit (type: float) + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + 1 {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {KEY.reducesinkkey0} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54 + Statistics: Num rows: 116 Data size: 234320 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: _col0 (type: int), _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: string), _col6 (type: int), _col7 (type: int), _col8 (type: string), _col9 (type: string), _col10 (type: int), _col11 (type: string), _col12 (type: string), _col13 (type: string), _col14 (type: int), _col15 (type: string), _col16 (type: int), _col17 (type: string), _col18 (type: string), _col19 (type: string), _col20 (type: string), _col21 (type: string), _col22 (type: string), _col23 (type: string), _col24 (type: string), _col25 (type: string), _col26 (type: string), _col27 (type: float), _col28 (type: float), _col32 (type: int), _col33 (type: int), _col34 (type: int), _col35 (type: int), _col36 (type: int), _col37 (type: int), _col38 (type: int), _col39 (type: int), _col40 (type: int), _col41 (type: int), _col42 (type: int), _col43 (type: float), _col44 (type: float), _col45 (type: float), _col46 (type: float), _col47 (type: float), _col48 (type: float), _col49 (type: float), _col50 (type: float), _col51 (type: float), _col52 (type: float), _col53 (type: float), _col54 (type: float) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col29, _col30, _col31, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51 + Statistics: Num rows: 116 Data size: 234320 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 116 Data size: 234320 Basic stats: COMPLETE Column stats: COMPLETE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) where s.s_store_sk > 0 +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) where s.s_store_sk > 0 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: s + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: (s_store_sk is not null and (s_store_sk > 0)) (type: boolean) + Statistics: Num rows: 4 Data size: 7700 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 4 Data size: 7700 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: ss + Statistics: Num rows: 120 Data size: 15560 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: (ss_store_sk is not null and (ss_store_sk > 0)) (type: boolean) + Statistics: Num rows: 38 Data size: 3356 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: ss_store_sk (type: int) + sort order: + + Map-reduce partition columns: ss_store_sk (type: int) + Statistics: Num rows: 38 Data size: 3356 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: ss_sold_date_sk (type: int), ss_sold_time_sk (type: int), ss_item_sk (type: int), ss_customer_sk (type: int), ss_cdemo_sk (type: int), ss_hdemo_sk (type: int), ss_addr_sk (type: int), ss_promo_sk (type: int), ss_ticket_number (type: int), ss_quantity (type: int), ss_wholesale_cost (type: float), ss_list_price (type: float), ss_sales_price (type: float), ss_ext_discount_amt (type: float), ss_ext_sales_price (type: float), ss_ext_wholesale_cost (type: float), ss_ext_list_price (type: float), ss_ext_tax (type: float), ss_coupon_amt (type: float), ss_net_paid (type: float), ss_net_paid_inc_tax (type: float), ss_net_profit (type: float) + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + 1 {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {KEY.reducesinkkey0} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54 + Statistics: Num rows: 12 Data size: 24240 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: _col0 (type: int), _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: string), _col6 (type: int), _col7 (type: int), _col8 (type: string), _col9 (type: string), _col10 (type: int), _col11 (type: string), _col12 (type: string), _col13 (type: string), _col14 (type: int), _col15 (type: string), _col16 (type: int), _col17 (type: string), _col18 (type: string), _col19 (type: string), _col20 (type: string), _col21 (type: string), _col22 (type: string), _col23 (type: string), _col24 (type: string), _col25 (type: string), _col26 (type: string), _col27 (type: float), _col28 (type: float), _col32 (type: int), _col33 (type: int), _col34 (type: int), _col35 (type: int), _col36 (type: int), _col37 (type: int), _col38 (type: int), _col39 (type: int), _col40 (type: int), _col41 (type: int), _col42 (type: int), _col43 (type: float), _col44 (type: float), _col45 (type: float), _col46 (type: float), _col47 (type: float), _col48 (type: float), _col49 (type: float), _col50 (type: float), _col51 (type: float), _col52 (type: float), _col53 (type: float), _col54 (type: float) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col29, _col30, _col31, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51 + Statistics: Num rows: 12 Data size: 24240 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 12 Data size: 24240 Basic stats: COMPLETE Column stats: COMPLETE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join store s1 on (s1.s_store_sk = ss.ss_store_sk) +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join store s1 on (s1.s_store_sk = ss.ss_store_sk) +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: s1 + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: s_store_sk is not null (type: boolean) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: s + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: s_store_sk is not null (type: boolean) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: ss + Statistics: Num rows: 120 Data size: 15560 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: ss_store_sk is not null (type: boolean) + Statistics: Num rows: 116 Data size: 10240 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: ss_store_sk (type: int) + sort order: + + Map-reduce partition columns: ss_store_sk (type: int) + Statistics: Num rows: 116 Data size: 10240 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: ss_sold_date_sk (type: int), ss_sold_time_sk (type: int), ss_item_sk (type: int), ss_customer_sk (type: int), ss_cdemo_sk (type: int), ss_hdemo_sk (type: int), ss_addr_sk (type: int), ss_promo_sk (type: int), ss_ticket_number (type: int), ss_quantity (type: int), ss_wholesale_cost (type: float), ss_list_price (type: float), ss_sales_price (type: float), ss_ext_discount_amt (type: float), ss_ext_sales_price (type: float), ss_ext_wholesale_cost (type: float), ss_ext_list_price (type: float), ss_ext_tax (type: float), ss_coupon_amt (type: float), ss_net_paid (type: float), ss_net_paid_inc_tax (type: float), ss_net_profit (type: float) + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + Inner Join 1 to 2 + condition expressions: + 0 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + 1 {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {KEY.reducesinkkey0} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} + 2 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54, _col58, _col59, _col60, _col61, _col62, _col63, _col64, _col65, _col66, _col67, _col68, _col69, _col70, _col71, _col72, _col73, _col74, _col75, _col76, _col77, _col78, _col79, _col80, _col81, _col82, _col83, _col84, _col85, _col86 + Statistics: Num rows: 116 Data size: 457968 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: _col0 (type: int), _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: string), _col6 (type: int), _col7 (type: int), _col8 (type: string), _col9 (type: string), _col10 (type: int), _col11 (type: string), _col12 (type: string), _col13 (type: string), _col14 (type: int), _col15 (type: string), _col16 (type: int), _col17 (type: string), _col18 (type: string), _col19 (type: string), _col20 (type: string), _col21 (type: string), _col22 (type: string), _col23 (type: string), _col24 (type: string), _col25 (type: string), _col26 (type: string), _col27 (type: float), _col28 (type: float), _col32 (type: int), _col33 (type: int), _col34 (type: int), _col35 (type: int), _col36 (type: int), _col37 (type: int), _col38 (type: int), _col39 (type: int), _col40 (type: int), _col41 (type: int), _col42 (type: int), _col43 (type: float), _col44 (type: float), _col45 (type: float), _col46 (type: float), _col47 (type: float), _col48 (type: float), _col49 (type: float), _col50 (type: float), _col51 (type: float), _col52 (type: float), _col53 (type: float), _col54 (type: float), _col58 (type: int), _col59 (type: string), _col60 (type: string), _col61 (type: string), _col62 (type: int), _col63 (type: string), _col64 (type: int), _col65 (type: int), _col66 (type: string), _col67 (type: string), _col68 (type: int), _col69 (type: string), _col70 (type: string), _col71 (type: string), _col72 (type: int), _col73 (type: string), _col74 (type: int), _col75 (type: string), _col76 (type: string), _col77 (type: string), _col78 (type: string), _col79 (type: string), _col80 (type: string), _col81 (type: string), _col82 (type: string), _col83 (type: string), _col84 (type: string), _col85 (type: float), _col86 (type: float) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col29, _col30, _col31, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54, _col55, _col56, _col57, _col58, _col59, _col60, _col61, _col62, _col63, _col64, _col65, _col66, _col67, _col68, _col69, _col70, _col71, _col72, _col73, _col74, _col75, _col76, _col77, _col78, _col79, _col80 + Statistics: Num rows: 116 Data size: 457968 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 116 Data size: 457968 Basic stats: COMPLETE Column stats: COMPLETE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join store s1 on (s1.s_store_sk = ss.ss_store_sk) where s.s_store_sk > 1000 +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join store s1 on (s1.s_store_sk = ss.ss_store_sk) where s.s_store_sk > 1000 +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-1 is a root stage + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: s1 + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: (s_store_sk is not null and (s_store_sk > 1000)) (type: boolean) + Statistics: Num rows: 4 Data size: 7700 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 4 Data size: 7700 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: s + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: (s_store_sk is not null and (s_store_sk > 1000)) (type: boolean) + Statistics: Num rows: 4 Data size: 7700 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 4 Data size: 7700 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: ss + Statistics: Num rows: 120 Data size: 15560 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: (ss_store_sk is not null and (ss_store_sk > 1000)) (type: boolean) + Statistics: Num rows: 38 Data size: 3356 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: ss_store_sk (type: int) + sort order: + + Map-reduce partition columns: ss_store_sk (type: int) + Statistics: Num rows: 38 Data size: 3356 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: ss_sold_date_sk (type: int), ss_sold_time_sk (type: int), ss_item_sk (type: int), ss_customer_sk (type: int), ss_cdemo_sk (type: int), ss_hdemo_sk (type: int), ss_addr_sk (type: int), ss_promo_sk (type: int), ss_ticket_number (type: int), ss_quantity (type: int), ss_wholesale_cost (type: float), ss_list_price (type: float), ss_sales_price (type: float), ss_ext_discount_amt (type: float), ss_ext_sales_price (type: float), ss_ext_wholesale_cost (type: float), ss_ext_list_price (type: float), ss_ext_tax (type: float), ss_coupon_amt (type: float), ss_net_paid (type: float), ss_net_paid_inc_tax (type: float), ss_net_profit (type: float) + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + Inner Join 1 to 2 + condition expressions: + 0 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + 1 {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {KEY.reducesinkkey0} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} + 2 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54, _col58, _col59, _col60, _col61, _col62, _col63, _col64, _col65, _col66, _col67, _col68, _col69, _col70, _col71, _col72, _col73, _col74, _col75, _col76, _col77, _col78, _col79, _col80, _col81, _col82, _col83, _col84, _col85, _col86 + Statistics: Num rows: 4 Data size: 15792 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: _col0 (type: int), _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: string), _col6 (type: int), _col7 (type: int), _col8 (type: string), _col9 (type: string), _col10 (type: int), _col11 (type: string), _col12 (type: string), _col13 (type: string), _col14 (type: int), _col15 (type: string), _col16 (type: int), _col17 (type: string), _col18 (type: string), _col19 (type: string), _col20 (type: string), _col21 (type: string), _col22 (type: string), _col23 (type: string), _col24 (type: string), _col25 (type: string), _col26 (type: string), _col27 (type: float), _col28 (type: float), _col32 (type: int), _col33 (type: int), _col34 (type: int), _col35 (type: int), _col36 (type: int), _col37 (type: int), _col38 (type: int), _col39 (type: int), _col40 (type: int), _col41 (type: int), _col42 (type: int), _col43 (type: float), _col44 (type: float), _col45 (type: float), _col46 (type: float), _col47 (type: float), _col48 (type: float), _col49 (type: float), _col50 (type: float), _col51 (type: float), _col52 (type: float), _col53 (type: float), _col54 (type: float), _col58 (type: int), _col59 (type: string), _col60 (type: string), _col61 (type: string), _col62 (type: int), _col63 (type: string), _col64 (type: int), _col65 (type: int), _col66 (type: string), _col67 (type: string), _col68 (type: int), _col69 (type: string), _col70 (type: string), _col71 (type: string), _col72 (type: int), _col73 (type: string), _col74 (type: int), _col75 (type: string), _col76 (type: string), _col77 (type: string), _col78 (type: string), _col79 (type: string), _col80 (type: string), _col81 (type: string), _col82 (type: string), _col83 (type: string), _col84 (type: string), _col85 (type: float), _col86 (type: float) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col29, _col30, _col31, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54, _col55, _col56, _col57, _col58, _col59, _col60, _col61, _col62, _col63, _col64, _col65, _col66, _col67, _col68, _col69, _col70, _col71, _col72, _col73, _col74, _col75, _col76, _col77, _col78, _col79, _col80 + Statistics: Num rows: 4 Data size: 15792 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 4 Data size: 15792 Basic stats: COMPLETE Column stats: COMPLETE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join customer_address ca on (ca.ca_address_sk = ss.ss_addr_sk) +PREHOOK: type: QUERY +POSTHOOK: query: explain select * from store s join store_sales ss on (s.s_store_sk = ss.ss_store_sk) join customer_address ca on (ca.ca_address_sk = ss.ss_addr_sk) +POSTHOOK: type: QUERY +STAGE DEPENDENCIES: + Stage-2 is a root stage + Stage-1 depends on stages: Stage-2 + Stage-0 depends on stages: Stage-1 + +STAGE PLANS: + Stage: Stage-2 + Map Reduce + Map Operator Tree: + TableScan + alias: s + Statistics: Num rows: 12 Data size: 3143 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: s_store_sk is not null (type: boolean) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: s_store_sk (type: int) + sort order: + + Map-reduce partition columns: s_store_sk (type: int) + Statistics: Num rows: 12 Data size: 23100 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: s_store_id (type: string), s_rec_start_date (type: string), s_rec_end_date (type: string), s_closed_date_sk (type: int), s_store_name (type: string), s_number_employees (type: int), s_floor_space (type: int), s_hours (type: string), s_manager (type: string), s_market_id (type: int), s_geography_class (type: string), s_market_desc (type: string), s_market_manager (type: string), s_division_id (type: int), s_division_name (type: string), s_company_id (type: int), s_company_name (type: string), s_street_number (type: string), s_street_name (type: string), s_street_type (type: string), s_suite_number (type: string), s_city (type: string), s_county (type: string), s_state (type: string), s_zip (type: string), s_country (type: string), s_gmt_offset (type: float), s_tax_precentage (type: float) + TableScan + alias: ss + Statistics: Num rows: 120 Data size: 15560 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: (ss_store_sk is not null and ss_addr_sk is not null) (type: boolean) + Statistics: Num rows: 110 Data size: 9700 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: ss_store_sk (type: int) + sort order: + + Map-reduce partition columns: ss_store_sk (type: int) + Statistics: Num rows: 110 Data size: 9700 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: ss_sold_date_sk (type: int), ss_sold_time_sk (type: int), ss_item_sk (type: int), ss_customer_sk (type: int), ss_cdemo_sk (type: int), ss_hdemo_sk (type: int), ss_addr_sk (type: int), ss_promo_sk (type: int), ss_ticket_number (type: int), ss_quantity (type: int), ss_wholesale_cost (type: float), ss_list_price (type: float), ss_sales_price (type: float), ss_ext_discount_amt (type: float), ss_ext_sales_price (type: float), ss_ext_wholesale_cost (type: float), ss_ext_list_price (type: float), ss_ext_tax (type: float), ss_coupon_amt (type: float), ss_net_paid (type: float), ss_net_paid_inc_tax (type: float), ss_net_profit (type: float) + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} + 1 {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {KEY.reducesinkkey0} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54 + Statistics: Num rows: 110 Data size: 222200 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + table: + input format: org.apache.hadoop.mapred.SequenceFileInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat + serde: org.apache.hadoop.hive.serde2.lazybinary.LazyBinarySerDe + + Stage: Stage-1 + Map Reduce + Map Operator Tree: + TableScan + alias: ca + Statistics: Num rows: 20 Data size: 2114 Basic stats: COMPLETE Column stats: COMPLETE + Filter Operator + predicate: ca_address_sk is not null (type: boolean) + Statistics: Num rows: 20 Data size: 20436 Basic stats: COMPLETE Column stats: COMPLETE + Reduce Output Operator + key expressions: ca_address_sk (type: int) + sort order: + + Map-reduce partition columns: ca_address_sk (type: int) + Statistics: Num rows: 20 Data size: 20436 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: ca_address_id (type: string), ca_street_number (type: string), ca_street_name (type: string), ca_street_type (type: string), ca_suite_number (type: string), ca_city (type: string), ca_county (type: string), ca_state (type: string), ca_zip (type: string), ca_country (type: string), ca_gmt_offset (type: float), ca_location_type (type: string) + TableScan + Reduce Output Operator + key expressions: _col38 (type: int) + sort order: + + Map-reduce partition columns: _col38 (type: int) + Statistics: Num rows: 110 Data size: 222200 Basic stats: COMPLETE Column stats: COMPLETE + value expressions: _col0 (type: int), _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: string), _col6 (type: int), _col7 (type: int), _col8 (type: string), _col9 (type: string), _col10 (type: int), _col11 (type: string), _col12 (type: string), _col13 (type: string), _col14 (type: int), _col15 (type: string), _col16 (type: int), _col17 (type: string), _col18 (type: string), _col19 (type: string), _col20 (type: string), _col21 (type: string), _col22 (type: string), _col23 (type: string), _col24 (type: string), _col25 (type: string), _col26 (type: string), _col27 (type: float), _col28 (type: float), _col32 (type: int), _col33 (type: int), _col34 (type: int), _col35 (type: int), _col36 (type: int), _col37 (type: int), _col39 (type: int), _col40 (type: int), _col41 (type: int), _col42 (type: int), _col43 (type: float), _col44 (type: float), _col45 (type: float), _col46 (type: float), _col47 (type: float), _col48 (type: float), _col49 (type: float), _col50 (type: float), _col51 (type: float), _col52 (type: float), _col53 (type: float), _col54 (type: float) + Reduce Operator Tree: + Join Operator + condition map: + Inner Join 0 to 1 + condition expressions: + 0 {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} {VALUE._col12} {VALUE._col13} {VALUE._col14} {VALUE._col15} {VALUE._col16} {VALUE._col17} {VALUE._col18} {VALUE._col19} {VALUE._col20} {VALUE._col21} {VALUE._col22} {VALUE._col23} {VALUE._col24} {VALUE._col25} {VALUE._col26} {VALUE._col27} {VALUE._col28} {VALUE._col32} {VALUE._col33} {VALUE._col34} {VALUE._col35} {VALUE._col36} {VALUE._col37} {KEY.reducesinkkey0} {VALUE._col38} {VALUE._col39} {VALUE._col40} {VALUE._col41} {VALUE._col42} {VALUE._col43} {VALUE._col44} {VALUE._col45} {VALUE._col46} {VALUE._col47} {VALUE._col48} {VALUE._col49} {VALUE._col50} {VALUE._col51} {VALUE._col52} {VALUE._col53} + 1 {KEY.reducesinkkey0} {VALUE._col0} {VALUE._col1} {VALUE._col2} {VALUE._col3} {VALUE._col4} {VALUE._col5} {VALUE._col6} {VALUE._col7} {VALUE._col8} {VALUE._col9} {VALUE._col10} {VALUE._col11} + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54, _col58, _col59, _col60, _col61, _col62, _col63, _col64, _col65, _col66, _col67, _col68, _col69, _col70 + Statistics: Num rows: 110 Data size: 334620 Basic stats: COMPLETE Column stats: COMPLETE + Select Operator + expressions: _col0 (type: int), _col1 (type: string), _col2 (type: string), _col3 (type: string), _col4 (type: int), _col5 (type: string), _col6 (type: int), _col7 (type: int), _col8 (type: string), _col9 (type: string), _col10 (type: int), _col11 (type: string), _col12 (type: string), _col13 (type: string), _col14 (type: int), _col15 (type: string), _col16 (type: int), _col17 (type: string), _col18 (type: string), _col19 (type: string), _col20 (type: string), _col21 (type: string), _col22 (type: string), _col23 (type: string), _col24 (type: string), _col25 (type: string), _col26 (type: string), _col27 (type: float), _col28 (type: float), _col32 (type: int), _col33 (type: int), _col34 (type: int), _col35 (type: int), _col36 (type: int), _col37 (type: int), _col38 (type: int), _col39 (type: int), _col40 (type: int), _col41 (type: int), _col42 (type: int), _col43 (type: float), _col44 (type: float), _col45 (type: float), _col46 (type: float), _col47 (type: float), _col48 (type: float), _col49 (type: float), _col50 (type: float), _col51 (type: float), _col52 (type: float), _col53 (type: float), _col54 (type: float), _col58 (type: int), _col59 (type: string), _col60 (type: string), _col61 (type: string), _col62 (type: string), _col63 (type: string), _col64 (type: string), _col65 (type: string), _col66 (type: string), _col67 (type: string), _col68 (type: string), _col69 (type: float), _col70 (type: string) + outputColumnNames: _col0, _col1, _col2, _col3, _col4, _col5, _col6, _col7, _col8, _col9, _col10, _col11, _col12, _col13, _col14, _col15, _col16, _col17, _col18, _col19, _col20, _col21, _col22, _col23, _col24, _col25, _col26, _col27, _col28, _col29, _col30, _col31, _col32, _col33, _col34, _col35, _col36, _col37, _col38, _col39, _col40, _col41, _col42, _col43, _col44, _col45, _col46, _col47, _col48, _col49, _col50, _col51, _col52, _col53, _col54, _col55, _col56, _col57, _col58, _col59, _col60, _col61, _col62, _col63, _col64 + Statistics: Num rows: 110 Data size: 334620 Basic stats: COMPLETE Column stats: COMPLETE + File Output Operator + compressed: false + Statistics: Num rows: 110 Data size: 334620 Basic stats: COMPLETE Column stats: COMPLETE + table: + input format: org.apache.hadoop.mapred.TextInputFormat + output format: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat + serde: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe + + Stage: Stage-0 + Fetch Operator + limit: -1 + Processor Tree: + ListSink + +PREHOOK: query: drop table store_sales +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@store_sales +PREHOOK: Output: default@store_sales +POSTHOOK: query: drop table store_sales +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@store_sales +POSTHOOK: Output: default@store_sales +PREHOOK: query: drop table store +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@store +PREHOOK: Output: default@store +POSTHOOK: query: drop table store +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@store +POSTHOOK: Output: default@store +PREHOOK: query: drop table customer_address +PREHOOK: type: DROPTABLE +PREHOOK: Input: default@customer_address +PREHOOK: Output: default@customer_address +POSTHOOK: query: drop table customer_address +POSTHOOK: type: DROPTABLE +POSTHOOK: Input: default@customer_address +POSTHOOK: Output: default@customer_address