in phoenix5-hive/src/main/java/org/apache/phoenix/hive/PhoenixMetaHook.java [83:167]
private String createTableStatement(Table table) throws MetaException {
Map<String, String> tableParameterMap = table.getParameters();
String tableName = PhoenixStorageHandlerUtil.getTargetTableName(table);
StringBuilder ddl = new StringBuilder("create table ").append(tableName).append(" (\n");
String phoenixRowKeys = tableParameterMap.get(PhoenixStorageHandlerConstants
.PHOENIX_ROWKEYS);
StringBuilder realRowKeys = new StringBuilder();
List<String> phoenixRowKeyList = new ArrayList<>();
for (String key:phoenixRowKeys.split(PhoenixStorageHandlerConstants.COMMA)) {
phoenixRowKeyList.add(key.trim());
}
Map<String, String> columnMappingMap = getColumnMappingMap(tableParameterMap.get
(PhoenixStorageHandlerConstants.PHOENIX_COLUMN_MAPPING));
List<FieldSchema> fieldSchemaList = table.getSd().getCols();
for (int i = 0, limit = fieldSchemaList.size(); i < limit; i++) {
FieldSchema fieldSchema = fieldSchemaList.get(i);
String fieldName = fieldSchema.getName();
String fieldType = fieldSchema.getType();
String columnType = PhoenixUtil.getPhoenixType(fieldType);
String rowKeyName = getRowKeyMapping(fieldName, phoenixRowKeyList);
if (rowKeyName != null) {
String columnName = columnMappingMap.get(fieldName);
if(columnName != null) {
rowKeyName = columnName;
}
// In case of RowKey
if ("binary".equals(columnType)) {
// Phoenix must define max length of binary when type definition. Obtaining
// information from the column mapping. ex) phoenix.rowkeys = "r1, r2(100), ..."
List<String> tokenList =
new ArrayList<>();
for (String name: rowKeyName.split("\\(|\\)")) {
tokenList.add(name.trim());
}
columnType = columnType + "(" + tokenList.get(1) + ")";
rowKeyName = tokenList.get(0);
}
ddl.append(" ").append("\"").append(rowKeyName).append("\"").append(" ").append(columnType).append(" not " +
"null,\n");
realRowKeys.append("\"").append(rowKeyName).append("\",");
} else {
// In case of Column
String columnName = columnMappingMap.get(fieldName);
if (columnName == null) {
// Use field definition.
columnName = fieldName;
}
if ("binary".equals(columnType)) {
// Phoenix must define max length of binary when type definition. Obtaining
// information from the column mapping. ex) phoenix.column.mapping=c1:c1(100)
List<String> tokenList = new ArrayList<>();
for(String name: columnName.split("\\(|\\)")){
tokenList.add(name.trim());
}
columnType = columnType + "(" + tokenList.get(1) + ")";
columnName = tokenList.get(0);
}
ddl.append(" ").append("\"").append(columnName).append("\"").append(" ").append(columnType).append(",\n");
}
}
ddl.append(" ").append("constraint pk_").append(PhoenixUtil.getTableSchema(tableName.toUpperCase())[1]).append(" primary key(")
.append(realRowKeys.deleteCharAt(realRowKeys.length() - 1)).append(")\n)\n");
String tableOptions = tableParameterMap.get(PhoenixStorageHandlerConstants
.PHOENIX_TABLE_OPTIONS);
if (tableOptions != null) {
ddl.append(tableOptions);
}
String statement = ddl.toString();
if (LOG.isDebugEnabled()) {
LOG.debug("DDL : " + statement);
}
return statement;
}