private void amendAllColumns() { // make sure all PF/FK are included, thus become exposed to calcite later Set<TableRef> tables = collectTablesOnJoinChain(allColumns); for (TableRef t : tables) { JoinDesc join = model.getJoinByPKSide(t); if (join != null) { allColumns.addAll(Arrays.asList(join.getForeignKeyColumns())); allColumns.addAll(Arrays.asList(join.getPrimaryKeyColumns())); } } for (TblColRef col : allColumns) { allColumnDescs.add(col.getColumnDesc()); } }
private boolean validatePkFkDim(JoinDesc join, Set<TblColRef> mcols) { if (join == null) return false; boolean pkfkDimAmended = false; for (TblColRef c : join.getForeignKeyColumns()) { if (!mcols.contains(c)) { pkfkDimAmended = validatePkFkDim(c) || pkfkDimAmended; } } for (TblColRef c : join.getPrimaryKeyColumns()) { if (!mcols.contains(c)) { pkfkDimAmended = validatePkFkDim(c) || pkfkDimAmended; } } return pkfkDimAmended; }
@Override public boolean matches(JoinDesc join1, JoinDesc join2) { if (join1 == null) { return join2 == null; } else if (join2 == null) { return false; } else { if (!join1.getType().equalsIgnoreCase(join2.getType())) return false; // note pk/fk are sorted, sortByFK() if (!this.columnDescEquals(join1.getForeignKeyColumns(), join2.getForeignKeyColumns())) return false; if (!this.columnDescEquals(join1.getPrimaryKeyColumns(), join2.getPrimaryKeyColumns())) return false; return true; } }
public boolean isPK(ColumnDesc col) { for (JoinTableDesc joinTable : model.getJoinTables()) { JoinDesc join = joinTable.getJoin(); for (TblColRef pk : join.getPrimaryKeyColumns()) { if (pk.getColumnDesc().equals(col)) return true; } } return false; }
public JoinsTree(TableRef rootTable, List<JoinDesc> joins) { for (JoinDesc join : joins) { for (TblColRef col : join.getForeignKeyColumns()) Preconditions.checkState(col.isQualified()); for (TblColRef col : join.getPrimaryKeyColumns()) Preconditions.checkState(col.isQualified()); } tableChains.put(rootTable.getAlias(), new Chain(rootTable, null, null)); for (JoinDesc join : joins) { TableRef pkSide = join.getPKSide(); Chain fkSide = tableChains.get(join.getFKSide().getAlias()); tableChains.put(pkSide.getAlias(), new Chain(pkSide, join, fkSide)); } }
TableRef dimTable = lookupDesc.getTableRef(); if (!dimTableCache.contains(dimTable)) { TblColRef[] pk = join.getPrimaryKeyColumns(); TblColRef[] fk = join.getForeignKeyColumns(); if (pk.length != fk.length) {
private String[] getLookupKeyColumns(CubeInstance cube, String tableName) { CubeDesc cubeDesc = cube.getDescriptor(); DataModelDesc modelDesc = cubeDesc.getModel(); TableRef lookupTableRef = null; for (TableRef tableRef : modelDesc.getLookupTables()) { if (tableRef.getTableIdentity().equalsIgnoreCase(tableName)) { lookupTableRef = tableRef; break; } } if (lookupTableRef == null) { throw new IllegalStateException("cannot find table in model:" + tableName); } JoinDesc joinDesc = modelDesc.getJoinByPKSide(lookupTableRef); TblColRef[] keyColRefs = joinDesc.getPrimaryKeyColumns(); String[] result = new String[keyColRefs.length]; for (int i = 0; i < keyColRefs.length; i++) { result[i] = keyColRefs[i].getName(); } return result; }
@Override protected void doSetup(Context context) throws IOException { super.bindCurrentConfiguration(context.getConfiguration()); cubeName = context.getConfiguration().get(BatchConstants.CFG_CUBE_NAME); tableName = context.getConfiguration().get(BatchConstants.CFG_TABLE_NAME); shardNum = Integer.parseInt(context.getConfiguration().get(BatchConstants.CFG_SHARD_NUM)); KylinConfig config = AbstractHadoopJob.loadKylinPropsAndMetadata(); CubeManager cubeMgr = CubeManager.getInstance(config); cubeDesc = cubeMgr.getCube(cubeName).getDescriptor(); DataModelDesc modelDesc = cubeDesc.getModel(); TableDesc tableDesc = TableMetadataManager.getInstance(KylinConfig.getInstanceFromEnv()).getTableDesc( tableName, cubeDesc.getProject()); TableRef lookupTableRef = null; for (TableRef tableRef : modelDesc.getLookupTables()) { if (tableRef.getTableIdentity().equalsIgnoreCase(tableName)) { lookupTableRef = tableRef; break; } } JoinDesc joinDesc = modelDesc.getJoinByPKSide(lookupTableRef); TblColRef[] keyColRefs = joinDesc.getPrimaryKeyColumns(); String[] keyColumns = new String[keyColRefs.length]; for (int i = 0; i < keyColRefs.length; i++) { keyColumns[i] = keyColRefs[i].getName(); } encoder = new HBaseLookupRowEncoder(tableDesc, keyColumns, shardNum); Configuration conf = context.getConfiguration(); lookupTableInputFormat = MRUtil.getTableInputFormat(tableDesc, conf.get(BatchConstants.ARG_CUBING_JOB_ID)); }
allColumns.addAll(Arrays.asList(join.getPrimaryKeyColumns())); int n = join.getForeignKeyColumns().length; for (int i = 0; i < n; i++) { TblColRef pk = join.getPrimaryKeyColumns()[i]; TblColRef fk = join.getForeignKeyColumns()[i]; if (realDimensions.contains(pk) && !realDimensions.contains(fk)) {
private ColumnDesc findPk(JoinTableDesc joinTable, ColumnDesc fk) { TblColRef[] fkCols = joinTable.getJoin().getForeignKeyColumns(); for (int i = 0; i < fkCols.length; i++) { if (fkCols[i].getColumnDesc().equals(fk)) return joinTable.getJoin().getPrimaryKeyColumns()[i].getColumnDesc(); } return null; }
private TblColRef initDimensionColRef(DimensionDesc dim, String colName) { TblColRef col = model.findColumn(dim.getTable(), colName); // for backward compatibility if (KylinVersion.isBefore200(getVersion())) { // always use FK instead PK, FK could be shared by more than one lookup tables JoinDesc join = dim.getJoin(); if (join != null) { int idx = ArrayUtils.indexOf(join.getPrimaryKeyColumns(), col); if (idx >= 0) { col = join.getForeignKeyColumns()[idx]; } } } return initDimensionColRef(col); }
TblColRef[] pkCols = hostInfo.join.getPrimaryKeyColumns();
String dimTableName = lookupDesc.getTable(); if (!dimTableCache.contains(dimTableName)) { TblColRef[] pk = join.getPrimaryKeyColumns(); TblColRef[] fk = join.getForeignKeyColumns(); if (pk.length != fk.length) {
String pTable = j.getPrimaryKeyColumns()[0].getTable(); String factTable = cubeDesc.getFactTable(); if (factTable.equals(pTable)) {
public TblColRef findPKByFK(TblColRef fk, String joinType) { assert isFactTable(fk.getTable()); TblColRef candidate = null; for (LookupDesc dim : lookups) { JoinDesc join = dim.getJoin(); if (join == null) continue; if(joinType != null && !joinType.equals(join.getType())) continue; int find = ArrayUtils.indexOf(join.getForeignKeyColumns(), fk); if (find >= 0) { candidate = join.getPrimaryKeyColumns()[find]; if (join.getForeignKeyColumns().length == 1) { // is single // column join? break; } } } return candidate; }
TblColRef[] pk = join.getPrimaryKeyColumns(); for (int i = 0; i < fk.length; i++) { int find = ArrayUtils.indexOf(hostCols, fk[i]);
public TblColRef findPKByFK(TblColRef fk) { assert isFactTable(fk.getTable()); TblColRef candidate = null; for (DimensionDesc dim : dimensions) { JoinDesc join = dim.getJoin(); if (join == null) continue; int find = ArrayUtils.indexOf(join.getForeignKeyColumns(), fk); if (find >= 0) { candidate = join.getPrimaryKeyColumns()[find]; if (join.getForeignKeyColumns().length == 1) { // is single // column join? break; } } } return candidate; }
TblColRef[] pk = join.getPrimaryKeyColumns(); for (int i = 0; i < fk.length; i++) { int find = ArrayUtils.indexOf(hostCols, fk[i]);
TblColRef[] pkCols = hostInfo.dimension.getJoin().getPrimaryKeyColumns();
public boolean isPK(ColumnDesc col) { for (JoinTableDesc joinTable : model.getJoinTables()) { JoinDesc join = joinTable.getJoin(); for (TblColRef pk : join.getPrimaryKeyColumns()) { if (pk.getColumnDesc().equals(col)) return true; } } return false; }