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