tableName = BaseSemanticAnalyzer.getUnescapedName((ASTNode) ast
.getChild(0));
boolean likeTable = false;
for (int num = 1; num < numCh; num++) {
ASTNode child = (ASTNode) ast.getChild(num);
switch (child.getToken().getType()) {
case HiveParser.TOK_QUERY: // CTAS
throw new SemanticException(
"Operation not supported. Create table as " +
"Select is not a valid operation.");
case HiveParser.TOK_TABLEBUCKETS:
break;
case HiveParser.TOK_TBLSEQUENCEFILE:
inputFormat = HCatConstants.SEQUENCEFILE_INPUT;
outputFormat = HCatConstants.SEQUENCEFILE_OUTPUT;
break;
case HiveParser.TOK_TBLTEXTFILE:
inputFormat = org.apache.hadoop.mapred.TextInputFormat.class.getName();
outputFormat = org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat.class.getName();
break;
case HiveParser.TOK_LIKETABLE:
likeTable = true;
break;
case HiveParser.TOK_IFNOTEXISTS:
try {
List<String> tables = db.getTablesByPattern(tableName);
if (tables != null && tables.size() > 0) { // table
// exists
return ast;
}
} catch (HiveException e) {
throw new SemanticException(e);
}
break;
case HiveParser.TOK_TABLEPARTCOLS:
List<FieldSchema> partCols = BaseSemanticAnalyzer
.getColumns((ASTNode) child.getChild(0), false);
for (FieldSchema fs : partCols) {
if (!fs.getType().equalsIgnoreCase("string")) {
throw new SemanticException(
"Operation not supported. HCatalog only " +
"supports partition columns of type string. "
+ "For column: "
+ fs.getName()
+ " Found type: " + fs.getType());
}
}
break;
case HiveParser.TOK_STORAGEHANDLER:
String storageHandler = BaseSemanticAnalyzer
.unescapeSQLString(child.getChild(0).getText());
if (org.apache.commons.lang.StringUtils
.isNotEmpty(storageHandler)) {
return ast;
}
break;
case HiveParser.TOK_TABLEFILEFORMAT:
if (child.getChildCount() < 2) {
throw new SemanticException(
"Incomplete specification of File Format. " +
"You must provide InputFormat, OutputFormat.");
}
inputFormat = BaseSemanticAnalyzer.unescapeSQLString(child
.getChild(0).getText());
outputFormat = BaseSemanticAnalyzer.unescapeSQLString(child
.getChild(1).getText());
break;
case HiveParser.TOK_TBLRCFILE:
inputFormat = RCFileInputFormat.class.getName();