You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ha...@apache.org on 2013/03/01 01:15:41 UTC

svn commit: r1451441 - in /hive/branches/ptf-windowing/ql/src: java/org/apache/hadoop/hive/ql/parse/ test/queries/clientnegative/ test/queries/clientpositive/ test/results/clientnegative/ test/results/clientpositive/

Author: hashutosh
Date: Fri Mar  1 00:15:41 2013
New Revision: 1451441

URL: http://svn.apache.org/r1451441
Log:
HIVE-4034

Summary: Made Window specification more flexible to allow syntaxes which are legal in SQL standard.

Test Plan: Added +ve and -ve testcases.

Reviewers: hbutani

Differential Revision: https://reviews.facebook.net/D8973

Added:
    hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries.q
    hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries2.q
    hive/branches/ptf-windowing/ql/src/test/queries/clientpositive/ptf_window_boundaries.q
    hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries.q.out
    hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries2.q.out
    hive/branches/ptf-windowing/ql/src/test/results/clientpositive/ptf_window_boundaries.q.out
Modified:
    hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
    hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java

Modified: hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=1451441&r1=1451440&r2=1451441&view=diff
==============================================================================
--- hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Fri Mar  1 00:15:41 2013
@@ -1979,6 +1979,7 @@ window_range_expression 
 @init { msgs.push("window_range_expression"); }
 @after { msgs.pop(); } 
 :
+ KW_ROWS KW_UNBOUNDED KW_PRECEDING -> ^(TOK_WINDOWRANGE ^(KW_PRECEDING KW_UNBOUNDED) ^(KW_CURRENT)) |
  KW_ROWS KW_BETWEEN s=rowsboundary KW_AND end=rowsboundary -> ^(TOK_WINDOWRANGE $s $end)
 ;
 
@@ -1995,6 +1996,7 @@ window_value_expression 
 @init { msgs.push("window_value_expression"); }
 @after { msgs.pop(); } 
 :
+ KW_RANGE KW_UNBOUNDED KW_PRECEDING -> ^(TOK_WINDOWVALUES ^(KW_PRECEDING KW_UNBOUNDED) ^(KW_CURRENT)) |
  KW_RANGE KW_BETWEEN s=valuesboundary KW_AND end=valuesboundary -> ^(TOK_WINDOWVALUES $s $end)
 ;
 

Modified: hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java?rev=1451441&r1=1451440&r2=1451441&view=diff
==============================================================================
--- hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java (original)
+++ hive/branches/ptf-windowing/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java Fri Mar  1 00:15:41 2013
@@ -10398,32 +10398,32 @@ public class SemanticAnalyzer extends Ba
   }
 
   private BoundarySpec processValueBoundary(ASTNode node) {
-    BoundarySpec vbs = null;
+    BoundarySpec bs = null;
     int type = node.getType();
 
     switch(type)
     {
     case HiveParser.KW_PRECEDING:
-      vbs = new ValueBoundarySpec(Direction.PRECEDING, null, BoundarySpec.UNBOUNDED_AMOUNT);
+      bs = new RangeBoundarySpec(Direction.PRECEDING, BoundarySpec.UNBOUNDED_AMOUNT);
       break;
     case HiveParser.KW_FOLLOWING:
-      vbs = new ValueBoundarySpec(Direction.FOLLOWING, null, BoundarySpec.UNBOUNDED_AMOUNT);
+      bs = new RangeBoundarySpec(Direction.FOLLOWING, BoundarySpec.UNBOUNDED_AMOUNT);
       break;
     case HiveParser.KW_CURRENT:
-      vbs = new CurrentRowSpec();
+      bs = new CurrentRowSpec();
       break;
     case HiveParser.KW_LESS:
-      vbs = new ValueBoundarySpec(Direction.PRECEDING,
+      bs = new ValueBoundarySpec(Direction.PRECEDING,
           (ASTNode) node.getChild(0),
           Integer.parseInt(node.getChild(1).getText()));
       break;
     case HiveParser.KW_MORE:
-      vbs = new ValueBoundarySpec(Direction.FOLLOWING,
+      bs = new ValueBoundarySpec(Direction.FOLLOWING,
           (ASTNode) node.getChild(0),
           Integer.parseInt(node.getChild(1).getText()));
       break;
     }
-    return vbs;
+    return bs;
   }
 
   /*

Added: hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries.q
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries.q?rev=1451441&view=auto
==============================================================================
--- hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries.q (added)
+++ hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries.q Fri Mar  1 00:15:41 2013
@@ -0,0 +1,17 @@
+-- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+);
+
+select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows unbounded following)
+     from part distribute by p_mfgr sort by p_name;
+

Added: hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries2.q
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries2.q?rev=1451441&view=auto
==============================================================================
--- hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries2.q (added)
+++ hive/branches/ptf-windowing/ql/src/test/queries/clientnegative/ptf_window_boundaries2.q Fri Mar  1 00:15:41 2013
@@ -0,0 +1,17 @@
+-- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+);
+
+select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range unbounded following)
+     from part distribute by p_mfgr sort by p_name;
+

Added: hive/branches/ptf-windowing/ql/src/test/queries/clientpositive/ptf_window_boundaries.q
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/test/queries/clientpositive/ptf_window_boundaries.q?rev=1451441&view=auto
==============================================================================
--- hive/branches/ptf-windowing/ql/src/test/queries/clientpositive/ptf_window_boundaries.q (added)
+++ hive/branches/ptf-windowing/ql/src/test/queries/clientpositive/ptf_window_boundaries.q Fri Mar  1 00:15:41 2013
@@ -0,0 +1,31 @@
+-- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+);
+
+LOAD DATA LOCAL INPATH '../data/files/part_tiny.txt' overwrite into table part;
+
+select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows unbounded preceding)
+     from part distribute by p_mfgr sort by p_name;
+
+select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range unbounded preceding)
+     from part distribute by p_mfgr sort by p_name;
+
+
+select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows between current row and unbounded following)
+    from part distribute by p_mfgr sort by p_name;
+
+select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range between current row and unbounded following)
+    from part distribute by p_mfgr sort by p_name;

Added: hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries.q.out
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries.q.out?rev=1451441&view=auto
==============================================================================
--- hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries.q.out (added)
+++ hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries.q.out Fri Mar  1 00:15:41 2013
@@ -0,0 +1,29 @@
+PREHOOK: query: -- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: -- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@part
+FAILED: ParseException line 4:50 mismatched input 'following' expecting KW_PRECEDING near 'unbounded' in window_range_expression
+

Added: hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries2.q.out
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries2.q.out?rev=1451441&view=auto
==============================================================================
--- hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries2.q.out (added)
+++ hive/branches/ptf-windowing/ql/src/test/results/clientnegative/ptf_window_boundaries2.q.out Fri Mar  1 00:15:41 2013
@@ -0,0 +1,29 @@
+PREHOOK: query: -- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: -- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@part
+FAILED: ParseException line 4:51 mismatched input 'following' expecting KW_PRECEDING near 'unbounded' in window_value_expression
+

Added: hive/branches/ptf-windowing/ql/src/test/results/clientpositive/ptf_window_boundaries.q.out
URL: http://svn.apache.org/viewvc/hive/branches/ptf-windowing/ql/src/test/results/clientpositive/ptf_window_boundaries.q.out?rev=1451441&view=auto
==============================================================================
--- hive/branches/ptf-windowing/ql/src/test/results/clientpositive/ptf_window_boundaries.q.out (added)
+++ hive/branches/ptf-windowing/ql/src/test/results/clientpositive/ptf_window_boundaries.q.out Fri Mar  1 00:15:41 2013
@@ -0,0 +1,185 @@
+PREHOOK: query: -- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+)
+PREHOOK: type: CREATETABLE
+POSTHOOK: query: -- data setup
+CREATE TABLE part( 
+    p_partkey INT,
+    p_name STRING,
+    p_mfgr STRING,
+    p_brand STRING,
+    p_type STRING,
+    p_size INT,
+    p_container STRING,
+    p_retailprice DOUBLE,
+    p_comment STRING
+)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: default@part
+PREHOOK: query: LOAD DATA LOCAL INPATH '../data/files/part_tiny.txt' overwrite into table part
+PREHOOK: type: LOAD
+PREHOOK: Output: default@part
+POSTHOOK: query: LOAD DATA LOCAL INPATH '../data/files/part_tiny.txt' overwrite into table part
+POSTHOOK: type: LOAD
+POSTHOOK: Output: default@part
+PREHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows unbounded preceding)
+     from part distribute by p_mfgr sort by p_name
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows unbounded preceding)
+     from part distribute by p_mfgr sort by p_name
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+Manufacturer#1	almond antique burnished rose metallic	2	1173.15
+Manufacturer#1	almond antique burnished rose metallic	2	2346.3
+Manufacturer#1	almond antique chartreuse lavender yellow	34	4100.06
+Manufacturer#1	almond antique salmon chartreuse burlywood	6	5702.650000000001
+Manufacturer#1	almond aquamarine burnished black steel	28	7117.070000000001
+Manufacturer#1	almond aquamarine pink moccasin thistle	42	8749.730000000001
+Manufacturer#2	almond antique violet chocolate turquoise	14	1690.68
+Manufacturer#2	almond antique violet turquoise frosted	40	3491.38
+Manufacturer#2	almond aquamarine midnight light salmon	2	5523.360000000001
+Manufacturer#2	almond aquamarine rose maroon antique	25	7222.02
+Manufacturer#2	almond aquamarine sandy cyan gainsboro	18	8923.62
+Manufacturer#3	almond antique chartreuse khaki white	17	1671.68
+Manufacturer#3	almond antique forest lavender goldenrod	14	2861.95
+Manufacturer#3	almond antique metallic orange dim	19	4272.34
+Manufacturer#3	almond antique misty red olive	1	6195.32
+Manufacturer#3	almond antique olive coral navajo	45	7532.61
+Manufacturer#4	almond antique gainsboro frosted violet	10	1620.67
+Manufacturer#4	almond antique violet mint lemon	39	2996.09
+Manufacturer#4	almond aquamarine floral ivory bisque	27	4202.35
+Manufacturer#4	almond aquamarine yellow dodger mint	7	6047.27
+Manufacturer#4	almond azure aquamarine papaya violet	12	7337.620000000001
+Manufacturer#5	almond antique blue firebrick mint	31	1789.69
+Manufacturer#5	almond antique medium spring khaki	6	3401.3500000000004
+Manufacturer#5	almond antique sky peru orange	2	5190.08
+Manufacturer#5	almond aquamarine dodger light gainsboro	46	6208.18
+Manufacturer#5	almond azure blanched chiffon midnight	23	7672.66
+PREHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range unbounded preceding)
+     from part distribute by p_mfgr sort by p_name
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range unbounded preceding)
+     from part distribute by p_mfgr sort by p_name
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+Manufacturer#1	almond antique burnished rose metallic	2	1173.15
+Manufacturer#1	almond antique burnished rose metallic	2	2346.3
+Manufacturer#1	almond antique chartreuse lavender yellow	34	4100.06
+Manufacturer#1	almond antique salmon chartreuse burlywood	6	5702.650000000001
+Manufacturer#1	almond aquamarine burnished black steel	28	7117.070000000001
+Manufacturer#1	almond aquamarine pink moccasin thistle	42	8749.730000000001
+Manufacturer#2	almond antique violet chocolate turquoise	14	1690.68
+Manufacturer#2	almond antique violet turquoise frosted	40	3491.38
+Manufacturer#2	almond aquamarine midnight light salmon	2	5523.360000000001
+Manufacturer#2	almond aquamarine rose maroon antique	25	7222.02
+Manufacturer#2	almond aquamarine sandy cyan gainsboro	18	8923.62
+Manufacturer#3	almond antique chartreuse khaki white	17	1671.68
+Manufacturer#3	almond antique forest lavender goldenrod	14	2861.95
+Manufacturer#3	almond antique metallic orange dim	19	4272.34
+Manufacturer#3	almond antique misty red olive	1	6195.32
+Manufacturer#3	almond antique olive coral navajo	45	7532.61
+Manufacturer#4	almond antique gainsboro frosted violet	10	1620.67
+Manufacturer#4	almond antique violet mint lemon	39	2996.09
+Manufacturer#4	almond aquamarine floral ivory bisque	27	4202.35
+Manufacturer#4	almond aquamarine yellow dodger mint	7	6047.27
+Manufacturer#4	almond azure aquamarine papaya violet	12	7337.620000000001
+Manufacturer#5	almond antique blue firebrick mint	31	1789.69
+Manufacturer#5	almond antique medium spring khaki	6	3401.3500000000004
+Manufacturer#5	almond antique sky peru orange	2	5190.08
+Manufacturer#5	almond aquamarine dodger light gainsboro	46	6208.18
+Manufacturer#5	almond azure blanched chiffon midnight	23	7672.66
+PREHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows between current row and unbounded following)
+    from part distribute by p_mfgr sort by p_name
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (rows between current row and unbounded following)
+    from part distribute by p_mfgr sort by p_name
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+Manufacturer#1	almond antique burnished rose metallic	2	8749.730000000001
+Manufacturer#1	almond antique burnished rose metallic	2	7576.58
+Manufacturer#1	almond antique chartreuse lavender yellow	34	6403.43
+Manufacturer#1	almond antique salmon chartreuse burlywood	6	4649.67
+Manufacturer#1	almond aquamarine burnished black steel	28	3047.08
+Manufacturer#1	almond aquamarine pink moccasin thistle	42	1632.66
+Manufacturer#2	almond antique violet chocolate turquoise	14	8923.62
+Manufacturer#2	almond antique violet turquoise frosted	40	7232.9400000000005
+Manufacturer#2	almond aquamarine midnight light salmon	2	5432.24
+Manufacturer#2	almond aquamarine rose maroon antique	25	3400.26
+Manufacturer#2	almond aquamarine sandy cyan gainsboro	18	1701.6
+Manufacturer#3	almond antique chartreuse khaki white	17	7532.61
+Manufacturer#3	almond antique forest lavender goldenrod	14	5860.929999999999
+Manufacturer#3	almond antique metallic orange dim	19	4670.66
+Manufacturer#3	almond antique misty red olive	1	3260.27
+Manufacturer#3	almond antique olive coral navajo	45	1337.29
+Manufacturer#4	almond antique gainsboro frosted violet	10	7337.620000000001
+Manufacturer#4	almond antique violet mint lemon	39	5716.950000000001
+Manufacturer#4	almond aquamarine floral ivory bisque	27	4341.530000000001
+Manufacturer#4	almond aquamarine yellow dodger mint	7	3135.27
+Manufacturer#4	almond azure aquamarine papaya violet	12	1290.35
+Manufacturer#5	almond antique blue firebrick mint	31	7672.66
+Manufacturer#5	almond antique medium spring khaki	6	5882.970000000001
+Manufacturer#5	almond antique sky peru orange	2	4271.3099999999995
+Manufacturer#5	almond aquamarine dodger light gainsboro	46	2482.58
+Manufacturer#5	almond azure blanched chiffon midnight	23	1464.48
+PREHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range between current row and unbounded following)
+    from part distribute by p_mfgr sort by p_name
+PREHOOK: type: QUERY
+PREHOOK: Input: default@part
+#### A masked pattern was here ####
+POSTHOOK: query: select p_mfgr, p_name, p_size,
+    sum(p_retailprice) as s1 over (range between current row and unbounded following)
+    from part distribute by p_mfgr sort by p_name
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@part
+#### A masked pattern was here ####
+Manufacturer#1	almond antique burnished rose metallic	2	8749.730000000001
+Manufacturer#1	almond antique burnished rose metallic	2	7576.58
+Manufacturer#1	almond antique chartreuse lavender yellow	34	6403.43
+Manufacturer#1	almond antique salmon chartreuse burlywood	6	4649.67
+Manufacturer#1	almond aquamarine burnished black steel	28	3047.08
+Manufacturer#1	almond aquamarine pink moccasin thistle	42	1632.66
+Manufacturer#2	almond antique violet chocolate turquoise	14	8923.62
+Manufacturer#2	almond antique violet turquoise frosted	40	7232.9400000000005
+Manufacturer#2	almond aquamarine midnight light salmon	2	5432.24
+Manufacturer#2	almond aquamarine rose maroon antique	25	3400.26
+Manufacturer#2	almond aquamarine sandy cyan gainsboro	18	1701.6
+Manufacturer#3	almond antique chartreuse khaki white	17	7532.61
+Manufacturer#3	almond antique forest lavender goldenrod	14	5860.929999999999
+Manufacturer#3	almond antique metallic orange dim	19	4670.66
+Manufacturer#3	almond antique misty red olive	1	3260.27
+Manufacturer#3	almond antique olive coral navajo	45	1337.29
+Manufacturer#4	almond antique gainsboro frosted violet	10	7337.620000000001
+Manufacturer#4	almond antique violet mint lemon	39	5716.950000000001
+Manufacturer#4	almond aquamarine floral ivory bisque	27	4341.530000000001
+Manufacturer#4	almond aquamarine yellow dodger mint	7	3135.27
+Manufacturer#4	almond azure aquamarine papaya violet	12	1290.35
+Manufacturer#5	almond antique blue firebrick mint	31	7672.66
+Manufacturer#5	almond antique medium spring khaki	6	5882.970000000001
+Manufacturer#5	almond antique sky peru orange	2	4271.3099999999995
+Manufacturer#5	almond aquamarine dodger light gainsboro	46	2482.58
+Manufacturer#5	almond azure blanched chiffon midnight	23	1464.48