You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by zs...@apache.org on 2009/08/26 06:24:45 UTC

svn commit: r807873 - in /hadoop/hive/trunk: ./ ql/src/java/org/apache/hadoop/hive/ql/parse/ ql/src/test/queries/clientpositive/ ql/src/test/results/clientpositive/

Author: zshao
Date: Wed Aug 26 04:24:44 2009
New Revision: 807873

URL: http://svn.apache.org/viewvc?rev=807873&view=rev
Log:
HIVE-777. CREATE TABLE with STRUCT type. (He Yongqiang via zshao)

Added:
    hadoop/hive/trunk/ql/src/test/queries/clientpositive/create_struct_table.q
    hadoop/hive/trunk/ql/src/test/results/clientpositive/create_struct_table.q.out
Modified:
    hadoop/hive/trunk/CHANGES.txt
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
    hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g

Modified: hadoop/hive/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/CHANGES.txt?rev=807873&r1=807872&r2=807873&view=diff
==============================================================================
--- hadoop/hive/trunk/CHANGES.txt (original)
+++ hadoop/hive/trunk/CHANGES.txt Wed Aug 26 04:24:44 2009
@@ -25,6 +25,8 @@
 
     HIVE-708. Add TypedBytes SerDe for transform. (Namit Jain via zshao)
 
+    HIVE-777. CREATE TABLE with STRUCT type. (He Yongqiang via zshao)
+
   IMPROVEMENTS
 
     HIVE-760. Add version info to META-INF/MANIFEST.MF.

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java?rev=807873&r1=807872&r2=807873&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java Wed Aug 26 04:24:44 2009
@@ -437,7 +437,7 @@
     return mapProp;
   }
 
-  private static String getTypeStringFromAST(ASTNode typeNode) {
+  private static String getTypeStringFromAST(ASTNode typeNode) throws SemanticException {
     switch (typeNode.getType()) {
     case HiveParser.TOK_LIST:
       return Constants.LIST_TYPE_NAME + "<"
@@ -446,12 +446,33 @@
       return Constants.MAP_TYPE_NAME + "<"
         + getTypeStringFromAST((ASTNode)typeNode.getChild(0)) + ","
         + getTypeStringFromAST((ASTNode)typeNode.getChild(1)) + ">";
+    case HiveParser.TOK_STRUCT:
+      return getStructTypeStringFromAST(typeNode);
     default:
       return getTypeName(typeNode.getType());
     }
   }
   
-  private List<FieldSchema> getColumns(ASTNode ast)
+  private static String getStructTypeStringFromAST(ASTNode typeNode)
+      throws SemanticException {
+    String typeStr = Constants.STRUCT_TYPE_NAME + "<";
+    typeNode = (ASTNode) typeNode.getChild(0);
+    int children = typeNode.getChildCount();
+    if(children <= 0)
+      throw new SemanticException("empty struct not allowed.");
+    for (int i = 0; i < children; i++) {
+      ASTNode child = (ASTNode) typeNode.getChild(i);
+      typeStr += unescapeIdentifier(child.getChild(0).getText()) + ":";
+      typeStr += getTypeStringFromAST((ASTNode) child.getChild(1));
+      if (i < children - 1)
+        typeStr += ",";
+    }
+      
+    typeStr += ">";
+    return typeStr;
+  }
+  
+  private List<FieldSchema> getColumns(ASTNode ast) throws SemanticException
   {
     List<FieldSchema> colList = new ArrayList<FieldSchema>();
     int numCh = ast.getChildCount();

Modified: hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g?rev=807873&r1=807872&r2=807873&view=diff
==============================================================================
--- hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g (original)
+++ hadoop/hive/trunk/ql/src/java/org/apache/hadoop/hive/ql/parse/Hive.g Wed Aug 26 04:24:44 2009
@@ -81,6 +81,7 @@
 TOK_TIMESTAMP;
 TOK_STRING;
 TOK_LIST;
+TOK_STRUCT;
 TOK_MAP;
 TOK_CREATETABLE;
 TOK_LIKETABLE;
@@ -483,7 +484,13 @@
 @after { msgs.pop(); }
     : columnNameType (COMMA columnNameType)* -> ^(TOK_TABCOLLIST columnNameType+)
     ;
-
+    
+columnNameColonTypeList
+@init { msgs.push("column name type list"); }
+@after { msgs.pop(); }
+    : columnNameColonType (COMMA columnNameColonType)* -> ^(TOK_TABCOLLIST columnNameColonType+)
+    ;
+    
 columnNameList
 @init { msgs.push("column name list"); }
 @after { msgs.pop(); }
@@ -526,6 +533,14 @@
     -> {$comment == null}? ^(TOK_TABCOL $colName colType)
     ->                     ^(TOK_TABCOL $colName colType $comment)
     ;
+    
+columnNameColonType
+@init { msgs.push("column specification"); }
+@after { msgs.pop(); }
+    : colName=Identifier COLON colType (KW_COMMENT comment=StringLiteral)?    
+    -> {$comment == null}? ^(TOK_TABCOL $colName colType)
+    ->                     ^(TOK_TABCOL $colName colType $comment)
+    ;
 
 colType
 @init { msgs.push("column type"); }
@@ -536,6 +551,7 @@
 type
     : primitiveType
     | listType
+    | structType
     | mapType;
 
 primitiveType
@@ -560,6 +576,12 @@
     : KW_ARRAY LESSTHAN type GREATERTHAN   -> ^(TOK_LIST type)
     ;
 
+structType
+@init { msgs.push("struct type"); }
+@after { msgs.pop(); }
+    : KW_STRUCT LESSTHAN columnNameColonTypeList GREATERTHAN -> ^(TOK_STRUCT columnNameColonTypeList)
+    ;
+
 mapType
 @init { msgs.push("map type"); }
 @after { msgs.pop(); }
@@ -1228,6 +1250,7 @@
 KW_TIMESTAMP: 'TIMESTAMP';
 KW_STRING: 'STRING';
 KW_ARRAY: 'ARRAY';
+KW_STRUCT: 'STRUCT';
 KW_MAP: 'MAP';
 KW_REDUCE: 'REDUCE';
 KW_PARTITIONED: 'PARTITIONED';

Added: hadoop/hive/trunk/ql/src/test/queries/clientpositive/create_struct_table.q
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/queries/clientpositive/create_struct_table.q?rev=807873&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/queries/clientpositive/create_struct_table.q (added)
+++ hadoop/hive/trunk/ql/src/test/queries/clientpositive/create_struct_table.q Wed Aug 26 04:24:44 2009
@@ -0,0 +1,12 @@
+drop table abc;
+create table abc(strct struct<a:int, b:string, c:string>)
+row format delimited
+  fields terminated by '\t'
+  collection items terminated by '\001';
+
+load data local inpath '../data/files/kv1.txt'
+overwrite into table abc;
+
+SELECT strct, strct.a, strct.b FROM abc LIMIT 10;
+
+drop table abc;

Added: hadoop/hive/trunk/ql/src/test/results/clientpositive/create_struct_table.q.out
URL: http://svn.apache.org/viewvc/hadoop/hive/trunk/ql/src/test/results/clientpositive/create_struct_table.q.out?rev=807873&view=auto
==============================================================================
--- hadoop/hive/trunk/ql/src/test/results/clientpositive/create_struct_table.q.out (added)
+++ hadoop/hive/trunk/ql/src/test/results/clientpositive/create_struct_table.q.out Wed Aug 26 04:24:44 2009
@@ -0,0 +1,21 @@
+query: drop table abc
+query: create table abc(strct struct<a:int, b:string, c:string>)
+row format delimited
+  fields terminated by '\t'
+  collection items terminated by '\001'
+query: load data local inpath '../data/files/kv1.txt'
+overwrite into table abc
+query: SELECT strct, strct.a, strct.b FROM abc LIMIT 10
+Input: default/abc
+Output: file:/data/users/zshao/tools/deploy-trunk-apache-hive/build/ql/tmp/1624100365/10000
+{"a":238,"b":"val_238","c":null}	238	val_238
+{"a":86,"b":"val_86","c":null}	86	val_86
+{"a":311,"b":"val_311","c":null}	311	val_311
+{"a":27,"b":"val_27","c":null}	27	val_27
+{"a":165,"b":"val_165","c":null}	165	val_165
+{"a":409,"b":"val_409","c":null}	409	val_409
+{"a":255,"b":"val_255","c":null}	255	val_255
+{"a":278,"b":"val_278","c":null}	278	val_278
+{"a":98,"b":"val_98","c":null}	98	val_98
+{"a":484,"b":"val_484","c":null}	484	val_484
+query: drop table abc