public TableRef getPKSide() { return primaryKeyColumns[0].getTableRef(); }
public TableRef getFKSide() { return foreignKeyColumns[0].getTableRef(); }
private void checkSameTable(TblColRef[] cols) { if (cols == null || cols.length == 0) return; TableRef tableRef = cols[0].getTableRef(); for (int i = 1; i < cols.length; i++) Preconditions.checkState(tableRef == cols[i].getTableRef()); }
public TableRef getTableRef() { return columnRowType.getColumnByIndex(0).getTableRef(); }
private Set<TableRef> collectTablesOnJoinChain(Set<TblColRef> columns) { Set<TableRef> result = new HashSet<>(); for (TblColRef col : columns) { TableRef t = col.getTableRef(); while (t != null) { result.add(t); JoinDesc join = model.getJoinByPKSide(t); t = join == null ? null : join.getFKSide(); } } return result; }
private static Map<String, String> buildTableToTableAliasMap(IJoinedFlatTableDesc flatDesc) { Map<String, String> map = Maps.newHashMap(); List<TblColRef> colRefs = flatDesc.getAllColumns(); for (TblColRef colRef : colRefs) { String tableName = colRef.getTableRef().getTableName(); String alias = colRef.getTableAlias(); map.put(tableName, alias); } return map; }
private static Map<String, Map<String, String>> buildTableToColumnsMap(IJoinedFlatTableDesc flatDesc) { Map<String, Map<String, String>> map = Maps.newHashMap(); List<TblColRef> colRefs = flatDesc.getAllColumns(); for (TblColRef colRef : colRefs) { String colName = colRef.getName(); String tableName = colRef.getTableRef().getTableName(); String colAlias = colRef.getTableAlias() + "_" + colRef.getName(); if (map.containsKey(tableName)) { map.get(tableName).put(colName, colAlias); } else { Map<String, String> colToAliasMap = Maps.newHashMap(); colToAliasMap.put(colName, colAlias); map.put(tableName, colToAliasMap); } } return map; }
@Override public List<TblColRef> getFactColumns() { final List<TblColRef> factColumns = Lists.newArrayList(); for (TblColRef col : this.getAllColumns()) { if (col.getTableRef().equals(getDataModel().getRootFactTable())) { // only fetch the columns from fact table factColumns.add(col); } } return factColumns; }
public static String generateSelectDataStatement(IJoinedFlatTableDesc flatDesc, boolean singleLine, String[] skipAs) { final String sep = singleLine ? " " : "\n"; final List<String> skipAsList = (skipAs == null) ? new ArrayList<String>() : Arrays.asList(skipAs); StringBuilder sql = new StringBuilder(); sql.append("SELECT" + sep); for (int i = 0; i < flatDesc.getAllColumns().size(); i++) { TblColRef col = flatDesc.getAllColumns().get(i); if (i > 0) { sql.append(","); } String colTotalName = String.format(Locale.ROOT, "%s.%s", col.getTableRef().getTableName(), col.getName()); String quotedColTotalName = String.format(Locale.ROOT, "%s.%s", quoteIdentifier(col.getTableRef().getTableName()), quoteIdentifier(col.getName())); if (skipAsList.contains(colTotalName)) { sql.append(getQuotedColExpressionInSourceDB(flatDesc, col)).append(sep); } else { sql.append(getQuotedColExpressionInSourceDB(flatDesc, col)).append(" as ") .append(quoteIdentifier(colName(col))).append(sep); } } appendJoinStatement(flatDesc, sql, singleLine); appendWhereStatement(flatDesc, sql, singleLine); return sql.toString(); }
@Override public List<TblColRef> getAllColumns() { final Set<TblColRef> factTableColumnSet = Sets.newHashSet(); TableRef rootFactTable = getDataModel().getRootFactTable(); for (TblColRef colRef : flatDesc.getAllColumns()) { if (colRef.getTableRef().equals(rootFactTable)) { factTableColumnSet.add(colRef); } } // Add column which belongs to root fact table in join relation but lost for (JoinTableDesc joinTableDesc : getDataModel().getJoinTables()) { JoinDesc join = joinTableDesc.getJoin(); for (TblColRef colRef : join.getForeignKeyColumns()) { if (colRef.getTableRef().equals(rootFactTable)) { factTableColumnSet.add(colRef); } } } return new LinkedList<>(factTableColumnSet); }
void init(DataModelDesc model) { table = table.toUpperCase(Locale.ROOT); if (columns != null) { StringUtil.toUpperCaseArray(columns, columns); } if (model != null) { table = model.findTable(table).getAlias(); if (columns != null) { for (int i = 0; i < columns.length; i++) { TblColRef column = model.findColumn(table, columns[i]); if (column.getColumnDesc().isComputedColumn() && !model.isFactTable(column.getTableRef())) { throw new RuntimeException("Computed Column on lookup table is not allowed"); } columns[i] = column.getName(); } } } }
col = findColumn(pks[i]); if (col == null || col.getTableRef().equals(dimTable) == false) { throw new IllegalStateException("Can't find PK column " + pks[i] + " in table " + dimTable); TableRef fkTable = fkCols[0].getTableRef(); if (pkCols.length == 0 || fkCols.length == 0) throw new IllegalStateException("Missing join columns on table " + dimTable);
public boolean belongToFactTableDims(TblColRef tblColRef) { if (!belongToContextTables(tblColRef)) { return false; } KylinConfig kylinConfig = olapSchema.getConfig(); String projectName = olapSchema.getProjectName(); String factTableName = firstTableScan.getOlapTable().getTableName(); Set<IRealization> realizations = ProjectManager.getInstance(kylinConfig).getRealizationsByTable(projectName, factTableName); for (IRealization real : realizations) { DataModelDesc model = real.getModel(); TblColRef.fixUnknownModel(model, tblColRef.getTableRef().getTableIdentity(), tblColRef); // cannot be a measure column Set<String> metrics = Sets.newHashSet(model.getMetrics()); if (metrics.contains(tblColRef.getIdentity())) { tblColRef.unfixTableRef(); return false; } // must belong to a fact table for (TableRef factTable : model.getFactTables()) { if (factTable.getColumns().contains(tblColRef)) { tblColRef.unfixTableRef(); return true; } } tblColRef.unfixTableRef(); } return false; }
public TupleInfo newTupleInfo(List<TblColRef> groups, List<FunctionDesc> aggregations) { TupleInfo info = new TupleInfo(); int idx = 0; for (TblColRef col : groups) { info.setField(col.getName(), col, idx++); } TableRef sourceTable = groups.get(0).getTableRef(); for (FunctionDesc func : aggregations) { ColumnDesc colDesc = func.newFakeRewriteColumn(sourceTable.getTableDesc()); TblColRef col = sourceTable.makeFakeColumn(colDesc); info.setField(col.getName(), col, idx++); } return info; }
String splitDatabase; TblColRef splitColRef = determineSplitColumn(); splitTable = splitColRef.getTableRef().getTableName(); splitTableAlias = splitColRef.getTableAlias(); splitColumn = JoinedFlatTable.getQuotedColExpressionInSourceDB(flatDesc, splitColRef);
String splitDatabase; TblColRef splitColRef = determineSplitColumn(); splitTable = splitColRef.getTableRef().getTableName(); splitTable = splitColRef.getTableRef().getTableDesc().getName(); splitTableAlias = splitColRef.getTableAlias();
@Override public void serialize(IFilterCodeSystem<?> cs, ByteBuffer buffer) { TableRef tableRef = columnRef.getTableRef(); if (tableRef == null) { // un-qualified column String table = columnRef.getTable(); BytesUtil.writeUTFString(table, buffer); String columnId = columnRef.getColumnDesc().getId(); BytesUtil.writeUTFString(columnId, buffer); String columnName = columnRef.getName(); BytesUtil.writeUTFString(columnName, buffer); String dataType = columnRef.getDatatype(); BytesUtil.writeUTFString(dataType, buffer); } else { // qualified column (from model) BytesUtil.writeUTFString(_QUALIFIED_, buffer); String model = tableRef.getModel().getName(); BytesUtil.writeUTFString(model, buffer); String alias = tableRef.getAlias(); BytesUtil.writeUTFString(alias, buffer); String col = columnRef.getName(); BytesUtil.writeUTFString(col, buffer); } }
@Override public void serialize(IFilterCodeSystem<?> cs, ByteBuffer buffer) { TableRef tableRef = columnRef.getTableRef(); if (tableRef == null) { // un-qualified column String table = columnRef.getTable(); BytesUtil.writeUTFString(table, buffer); String columnId = columnRef.getColumnDesc().getId(); BytesUtil.writeUTFString(columnId, buffer); String columnName = columnRef.getName(); BytesUtil.writeUTFString(columnName, buffer); String dataType = columnRef.getDatatype(); BytesUtil.writeUTFString(dataType, buffer); } else { // qualified column (from model) BytesUtil.writeUTFString(_QUALIFIED_, buffer); String model = tableRef.getModel().getName(); BytesUtil.writeUTFString(model, buffer); String alias = tableRef.getAlias(); BytesUtil.writeUTFString(alias, buffer); String col = columnRef.getName(); BytesUtil.writeUTFString(col, buffer); } }
private void checkSameTable(TblColRef[] cols) { if (cols == null || cols.length == 0) return; TableRef tableRef = cols[0].getTableRef(); for (int i = 1; i < cols.length; i++) Preconditions.checkState(tableRef == cols[i].getTableRef()); }
private static Map<String, String> buildTableToTableAliasMap(IJoinedFlatTableDesc flatDesc) { Map<String, String> map = Maps.newHashMap(); List<TblColRef> colRefs = flatDesc.getAllColumns(); for (TblColRef colRef : colRefs) { String tableName = colRef.getTableRef().getTableName(); String alias = colRef.getTableAlias(); map.put(tableName, alias); } return map; }