Java源码示例:org.apache.kylin.metadata.model.ColumnDesc
示例1
@Override
public boolean moveNext() {
boolean hasNext = iterator.hasNext();
if (hasNext) {
String[] row = iterator.next();
for (int i = 0, n = colDescs.size(); i < n; i++) {
ColumnDesc colDesc = colDescs.get(i);
int colIdx = colDesc.getZeroBasedIndex();
if (colIdx >= 0) {
current[i] = Tuple.convertOptiqCellValue(row[colIdx], colDesc.getType().getName());
} else {
current[i] = null; // fake column
}
}
}
return hasNext;
}
示例2
@Override
public void doMap(T key, Object value, Context context) throws IOException, InterruptedException {
ColumnDesc[] columns = tableDesc.getColumns();
Collection<String[]> valuesCollection = tableInputFormat.parseMapperInput(value);
for (String[] values: valuesCollection) {
for (int m = 0; m < columns.length; m++) {
String field = columns[m].getName();
String fieldValue = values[m];
if (fieldValue == null)
fieldValue = "NULL";
if (counter < 5 && m < 10) {
System.out.println("Get row " + counter + " column '" + field + "' value: " + fieldValue);
}
getHllc(m).add(Bytes.toBytes(fieldValue.toString()));
}
counter++;
}
}
示例3
@Override
public CoprocessorRowType deserialize(ByteBuffer in) {
int n = BytesUtil.readVInt(in);
int bodyOffset = BytesUtil.readVInt(in);
TblColRef[] cols = new TblColRef[n];
int[] colSizes = new int[n];
for (int i = 0; i < n; i++) {
String tableName = BytesUtil.readAsciiString(in);
String colName = BytesUtil.readAsciiString(in);
String datatype = BytesUtil.readAsciiString(in);
TableDesc table = new TableDesc();
table.setName(tableName);
ColumnDesc col = new ColumnDesc();
col.setTable(table);
col.setName(colName);
col.setDatatype(datatype);
col.init(table);
cols[i] = col.getRef();
int colSize = BytesUtil.readVInt(in);
colSizes[i] = colSize;
}
return new CoprocessorRowType(cols, colSizes, bodyOffset);
}
示例4
private List<TblColRef> buildGroups() {
List<TblColRef> groups = new ArrayList<TblColRef>();
TableDesc t1 = new TableDesc();
t1.setName("TEST_KYLIN_FACT");
t1.setDatabase("DEFAULT");
ColumnDesc c1 = new ColumnDesc();
c1.setName("CAL_DT");
c1.setTable(t1);
c1.setDatatype("string");
TblColRef cf1 = new TblColRef(c1);
groups.add(cf1);
TableDesc t2 = new TableDesc();
t2.setName("TEST_CATEGORY_GROUPINGS");
t2.setDatabase("DEFAULT");
ColumnDesc c2 = new ColumnDesc();
c2.setName("META_CATEG_NAME");
c2.setTable(t2);
c2.setDatatype("string");
TblColRef cf2 = new TblColRef(c2);
groups.add(cf2);
return groups;
}
示例5
protected List<TblColRef> buildGroups() {
List<TblColRef> groups = new ArrayList<TblColRef>();
TableDesc t1 = new TableDesc();
t1.setName("TEST_KYLIN_FACT");
t1.setDatabase("DEFAULT");
ColumnDesc c1 = new ColumnDesc();
c1.setName("CAL_DT");
c1.setDatatype("String");
c1.setTable(t1);
TblColRef cf1 = new TblColRef(c1);
groups.add(cf1);
TableDesc t2 = new TableDesc();
t2.setName("TEST_CATEGORY_GROUPINGS");
t2.setDatabase("DEFAULT");
ColumnDesc c2 = new ColumnDesc();
c2.setName("META_CATEG_NAME");
c1.setDatatype("String");
c2.setTable(t2);
TblColRef cf2 = new TblColRef(c2);
groups.add(cf2);
return groups;
}
示例6
@Override
public CoprocessorRowType deserialize(ByteBuffer in) {
int n = BytesUtil.readVInt(in);
TblColRef[] cols = new TblColRef[n];
int[] colSizes = new int[n];
for (int i = 0; i < n; i++) {
String tableName = BytesUtil.readAsciiString(in);
String colName = BytesUtil.readAsciiString(in);
TableDesc table = new TableDesc();
table.setName(tableName);
ColumnDesc col = new ColumnDesc();
col.setTable(table);
col.setName(colName);
cols[i] = new TblColRef(col);
int colSize = BytesUtil.readVInt(in);
colSizes[i] = colSize;
}
return new CoprocessorRowType(cols, colSizes);
}
示例7
private void generateCreateTableDDL(Set<TableDesc> tables, PrintWriter out) {
for (TableDesc t : tables) {
if (t.isView())
continue;
out.print("DROP TABLE IF EXISTS " + normHiveIdentifier(t.getIdentity()) + ";\n");
out.print("CREATE TABLE " + normHiveIdentifier(t.getIdentity()) + "(" + "\n");
for (int i = 0; i < t.getColumns().length; i++) {
ColumnDesc col = t.getColumns()[i];
out.print(" ");
if (i > 0) {
out.print(",");
}
out.print(normHiveIdentifier(col.getName()) + " " + hiveType(col.getType()) + "\n");
}
out.print(")" + "\n");
out.print("ROW FORMAT DELIMITED FIELDS TERMINATED BY ','" + "\n");
out.print("STORED AS TEXTFILE" + ";\n");
out.print("\n");
}
}
示例8
private Set<ColumnDesc> findUsedColumnsInFactTable(DataModelDesc usedModel, TableDesc factTable) {
Set<ColumnDesc> usedColumns = Sets.newHashSet();
// column in dimension
for (ModelDimensionDesc dim : usedModel.getDimensions()) {
if (dim.getTable().equalsIgnoreCase(factTable.getName())) {
for (String col : dim.getColumns()) {
usedColumns.add(mustGetColumnDesc(factTable, col));
}
}
}
// column in measure
for (String columnInMeasure : usedModel.getMetrics()) {
if (factTable.getName().equalsIgnoreCase(getTableName(columnInMeasure))) {
usedColumns.add(mustGetColumnDesc(factTable, columnInMeasure));
}
}
return usedColumns;
}
示例9
private String generateCreateH2TableSql(TableDesc tableDesc, String csvFilePath) {
StringBuilder ddl = new StringBuilder();
StringBuilder csvColumns = new StringBuilder();
ddl.append("CREATE TABLE " + tableDesc.getIdentity() + "\n");
ddl.append("(" + "\n");
for (int i = 0; i < tableDesc.getColumns().length; i++) {
ColumnDesc col = tableDesc.getColumns()[i];
if (col.isComputedColumn()) {
continue;
}
if (i > 0) {
ddl.append(",");
csvColumns.append(",");
}
ddl.append(col.getName() + " " + getH2DataType((col.getDatatype())) + "\n");
csvColumns.append(col.getName());
}
ddl.append(")" + "\n");
ddl.append("AS SELECT * FROM CSVREAD('" + csvFilePath + "', '" + csvColumns
+ "', 'charset=UTF-8 fieldSeparator=,');");
return ddl.toString();
}
示例10
private String[] generateCreateTableSql(TableDesc tableDesc) {
logger.info("Generate create table sql: {}", tableDesc);
String tableIdentity = String
.format(Locale.ROOT, "%s.%s", tableDesc.getDatabase().toUpperCase(Locale.ROOT), tableDesc.getName())
.toUpperCase(Locale.ROOT);
String dropsql = "DROP TABLE IF EXISTS " + tableIdentity;
String dropsql2 = "DROP VIEW IF EXISTS " + tableIdentity;
StringBuilder ddl = new StringBuilder();
ddl.append("CREATE TABLE " + tableIdentity + "\n");
ddl.append("(" + "\n");
for (int i = 0; i < tableDesc.getColumns().length; i++) {
ColumnDesc col = tableDesc.getColumns()[i];
if (i > 0) {
ddl.append(",");
}
ddl.append(col.getName() + " " + getSqlDataType((col.getDatatype())) + "\n");
}
ddl.append(")");
return new String[] { dropsql, dropsql2, ddl.toString() };
}
示例11
/**
* Used to quote identifiers for JDBC ext job when quoting cc expr
* @param tableDesc
* @param sqlExpr
* @return
*/
public static String quoteIdentifierInSqlExpr(TableDesc tableDesc, String sqlExpr, SqlDialect sqlDialect) {
String table = tableDesc.getName();
boolean tableMatched = false;
List<String> tabPatterns = getTableNameOrAliasPatterns(table);
if (isIdentifierNeedToQuote(sqlExpr, table, tabPatterns)) {
sqlExpr = quoteIdentifier(sqlExpr, table, tabPatterns, sqlDialect);
tableMatched = true;
}
if (tableMatched) {
for (ColumnDesc columnDesc : tableDesc.getColumns()) {
String column = columnDesc.getName();
List<String> colPatterns = getColumnNameOrAliasPatterns(column);
if (isIdentifierNeedToQuote(sqlExpr, column, colPatterns)) {
sqlExpr = quoteIdentifier(sqlExpr, column, colPatterns, sqlDialect);
}
}
}
return sqlExpr;
}
示例12
@Override
public CoprocessorRowType deserialize(ByteBuffer in) {
int n = BytesUtil.readVInt(in);
int bodyOffset = BytesUtil.readVInt(in);
TblColRef[] cols = new TblColRef[n];
int[] colSizes = new int[n];
for (int i = 0; i < n; i++) {
String tableName = BytesUtil.readAsciiString(in);
String colName = BytesUtil.readAsciiString(in);
String datatype = BytesUtil.readAsciiString(in);
TableDesc table = new TableDesc();
table.setName(tableName);
ColumnDesc col = new ColumnDesc();
col.setTable(table);
col.setName(colName);
col.setDatatype(datatype);
col.init(table);
cols[i] = col.getRef();
int colSize = BytesUtil.readVInt(in);
colSizes[i] = colSize;
}
return new CoprocessorRowType(cols, colSizes, bodyOffset);
}
示例13
private boolean isColumnCompatible(ColumnDesc column, ColumnDesc newCol) {
if (!column.getName().equalsIgnoreCase(newCol.getName())) {
return false;
}
if (column.getType().isIntegerFamily()) {
// OLAPTable.listSourceColumns converts some integer columns to bigint,
// therefore strict type comparison won't work.
// changing from one integer type to another should be fine.
return newCol.getType().isIntegerFamily();
} else if (column.getType().isNumberFamily()) {
// Both are float/double should be fine.
return newCol.getType().isNumberFamily();
} else {
// only compare base type name, changing precision or scale should be fine
return column.getTypeName().equals(newCol.getTypeName());
}
}
示例14
@Test
public void testSerialize07() {
TableDesc table = new TableDesc();
table.setName("TEST_KYLIN_FACT");
table.setDatabase("DEFAULT");
ColumnDesc column = new ColumnDesc();
column.setTable(table);
TblColRef colRef = new TblColRef(column);
List<TblColRef> groups = new ArrayList<TblColRef>();
groups.add(colRef);
TupleFilter filter = buildCompareFilter(groups, 0);
byte[] bytes = TupleFilterSerializer.serialize(filter);
TupleFilter newFilter = TupleFilterSerializer.deserialize(bytes);
compareFilter(filter, newFilter);
}
示例15
private List<String> generateCreateH2IndexSql(TableDesc tableDesc) {
List<String> result = Lists.newArrayList();
int x = 0;
for (ColumnDesc col : tableDesc.getColumns()) {
if ("T".equalsIgnoreCase(col.getIndex())) {
StringBuilder ddl = new StringBuilder();
ddl.append("CREATE INDEX IDX_" + tableDesc.getName() + "_" + x + " ON " + tableDesc.getIdentity() + "("
+ col.getName() + ")");
ddl.append("\n");
result.add(ddl.toString());
x++;
}
}
return result;
}
示例16
@Override
public boolean moveNext() {
boolean hasNext = iterator.hasNext();
if (hasNext) {
String[] row = iterator.next();
for (int i = 0, n = colDescs.size(); i < n; i++) {
ColumnDesc colDesc = colDescs.get(i);
int colIdx = colDesc.getZeroBasedIndex();
if (colIdx >= 0) {
current[i] = Tuple.convertOptiqCellValue(row[colIdx], colDesc.getUpgradedType().getName());
} else {
current[i] = null; // fake column
}
}
}
return hasNext;
}
示例17
private void generateCreateTableDDL(Set<TableDesc> tables, PrintWriter out) {
for (TableDesc t : tables) {
if (t.isView())
continue;
out.print("DROP TABLE IF EXISTS " + normHiveIdentifier(t.getIdentity()) + ";\n");
out.print("CREATE TABLE " + normHiveIdentifier(t.getIdentity()) + "(" + "\n");
for (int i = 0; i < t.getColumns().length; i++) {
ColumnDesc col = t.getColumns()[i];
out.print(" ");
if (i > 0) {
out.print(",");
}
out.print(normHiveIdentifier(col.getName()) + " " + hiveType(col.getType()) + "\n");
}
out.print(")" + "\n");
out.print("ROW FORMAT DELIMITED FIELDS TERMINATED BY ','" + "\n");
out.print("STORED AS TEXTFILE" + ";\n");
out.print("\n");
}
}
示例18
private ColumnDesc[] extractColumnFromMeta(HiveTableMeta hiveTableMeta) {
int columnNumber = hiveTableMeta.allColumns.size();
List<ColumnDesc> columns = new ArrayList<ColumnDesc>(columnNumber);
for (int i = 0; i < columnNumber; i++) {
HiveTableMeta.HiveTableColumnMeta field = hiveTableMeta.allColumns.get(i);
// skip unsupported fields, e.g. map<string, int>
if (DataType.isKylinSupported(field.dataType)) {
ColumnDesc cdesc = new ColumnDesc();
cdesc.setName(field.name.toUpperCase(Locale.ROOT));
// use "double" in kylin for "float"
if ("float".equalsIgnoreCase(field.dataType)) {
cdesc.setDatatype("double");
} else {
cdesc.setDatatype(field.dataType);
}
cdesc.setId(String.valueOf(i + 1));
cdesc.setComment(field.comment);
columns.add(cdesc);
} else {
logger.warn("Unsupported data type {}, excluding the field '{}'.", field.dataType, field.name);
}
}
return columns.toArray(new ColumnDesc[0]);
}
示例19
private static boolean containsAll(Set<ColumnDesc> allColumnDescs, Set<TblColRef> allColumns) {
for (TblColRef col : allColumns) {
if (allColumnDescs.contains(col.getColumnDesc()) == false)
return false;
}
return true;
}
示例20
@Test
public void testSerialize07() {
TableDesc table = new TableDesc();
table.setName("TEST_KYLIN_FACT");
table.setDatabase("DEFAULT");
ColumnDesc column = new ColumnDesc();
column.setTable(table);
TblColRef colRef = column.getRef();
List<TblColRef> groups = new ArrayList<TblColRef>();
groups.add(colRef);
assertFilterSerDe(buildEQCompareFilter(groups, 0));
}
示例21
@Override
public void createSampleTable(TableDesc table) throws Exception {
LinkedHashMap<String, String> columnInfo = Maps.newLinkedHashMap();
for (ColumnDesc columnDesc : table.getColumns()) {
columnInfo.put(columnDesc.getName(), columnDesc.getTypeName());
}
String[] sqls = dataSource.buildSqlToCreateTable(table.getIdentity(), columnInfo);
dataSource.executeUpdate(sqls);
}
示例22
@Test
public void testSerialize08() {
TableDesc table = new TableDesc();
table.setDatabase("DEFAULT");
ColumnDesc column = new ColumnDesc();
column.setTable(table);
TblColRef colRef = column.getRef();
List<TblColRef> groups = new ArrayList<TblColRef>();
groups.add(colRef);
assertFilterSerDe(buildEQCompareFilter(groups, 0));
}
示例23
public boolean isDefinedColumn(String project, String table, String col) {
TableCache tableCache = getCache(project).tables.get(table);
if (tableCache == null)
return false;
for (ColumnDesc colDesc : tableCache.tableDesc.getColumns()) {
if (colDesc.getName().equals(col))
return true;
}
return false;
}
示例24
public Set<ColumnDesc> listExposedColumns(String project, String table) {
TableCache tableCache = getCache(project).tables.get(table);
if (tableCache == null)
return Collections.emptySet();
else
return Collections.unmodifiableSet(tableCache.exposedColumns);
}
示例25
@Test
public void testSerialize06() {
ColumnDesc column = new ColumnDesc();
column.setName("META_CATEG_NAME");
TblColRef colRef = column.getRef();
List<TblColRef> groups = new ArrayList<TblColRef>();
groups.add(colRef);
assertFilterSerDe(buildEQCompareFilter(groups, 0));
}
示例26
@Test
public void testSerialize05() {
ColumnDesc column = new ColumnDesc();
TblColRef colRef = new TblColRef(column);
List<TblColRef> groups = new ArrayList<TblColRef>();
groups.add(colRef);
TupleFilter filter = buildCompareFilter(groups, 0);
byte[] bytes = TupleFilterSerializer.serialize(filter);
TupleFilter newFilter = TupleFilterSerializer.deserialize(bytes);
compareFilter(filter, newFilter);
}
示例27
@Override
protected void init() throws IOException {
ColumnDesc[] cols = tableDesc.getColumns();
colIsDateTime = new boolean[cols.length];
colIsNumber = new boolean[cols.length];
for (int i = 0; i < cols.length; i++) {
DataType t = cols[i].getType();
colIsDateTime[i] = t.isDateTimeFamily();
colIsNumber[i] = t.isNumberFamily();
}
super.init();
}
示例28
private String createCell(ColumnDesc cDesc) throws Exception {
ColumnConfig cConfig = null;
if ((cConfig = genConf.getColumnConfigByName(cDesc.getName())) == null) {
// if the column is not configured, use random values
return (createRandomCell(cDesc));
} else {
// the column has a configuration
if (!cConfig.isAsRange() && !cConfig.isExclusive() && r.nextBoolean()) {
// if the column still allows random values
return (createRandomCell(cDesc));
} else {
// use specified values
ArrayList<String> valueSet = cConfig.getValueSet();
if (valueSet == null || valueSet.size() == 0)
throw new Exception("Did you forget to specify value set for " + cDesc.getName());
if (!cConfig.isAsRange()) {
return (randomPick(valueSet));
} else {
if (valueSet.size() != 2)
throw new Exception("Only two values can be set for range values, the column: " + cDesc.getName());
return (createRandomCell(cDesc, valueSet));
}
}
}
}
示例29
private void init(ColumnDesc col, ModelDataGenerator modelGen) throws IOException {
Map<String, String> config = Util.parseEqualCommaPairs(col.getDataGen(), "values");
values = Arrays.asList(Util.parseString(config, "values", "").split("[|]"));
List<String> pkValues = modelGen.getPkValuesIfIsFk(col);
if (FK.equals(values.get(0)) || (values.get(0).isEmpty() && pkValues != null)) {
isFK = true;
values = getPkValues(modelGen, config, pkValues);
} else if (ID.equals(values.get(0))) {
isID = true;
idStart = (values.size() > 1) ? Integer.parseInt(values.get(1)) : 0;
} else if (RAND.equals(values.get(0)) || values.get(0).isEmpty()) {
isRandom = true;
randFormat = (values.size() > 1) ? values.get(1) : "";
randStart = (values.size() > 2) ? Integer.parseInt(values.get(2)) : 0;
randEnd = (values.size() > 3) ? Integer.parseInt(values.get(3)) : 0;
} else {
isDiscrete = true;
}
cardinality = Util.parseInt(config, "card", guessCardinality(col.getName()));
genNull = Util.parseBoolean(config, "null", guessGenNull(col.getName()));
genNullPct = Util.parseDouble(config, "nullpct", 0.01);
genNullStr = Util.parseString(config, "nullstr", "\\N"); // '\N' is null in hive
order = Util.parseBoolean(config, "order", false);
unique = Util.parseBoolean(config, "uniq", modelGen.isPK(col));
}
示例30
private List<String> getPkValues(ModelDataGenerator modelGen, Map<String, String> config, List<String> dftPkValues) throws IOException {
String pkColName = config.get("pk");
if (pkColName == null)
return dftPkValues;
int cut = pkColName.lastIndexOf('.');
String pkTableName = pkColName.substring(0, cut);
pkColName = pkColName.substring(cut + 1);
KylinConfig kylinConfig = modelGen.getModle().getConfig();
String project = modelGen.getModle().getProject();
ColumnDesc pkcol = TableMetadataManager.getInstance(kylinConfig)//
.getTableDesc(pkTableName, project).findColumnByName(pkColName);
return modelGen.getPkValues(pkcol);
}