示例#1
0
 public static void LowerTransformations(AstEtlRootNode astDataflow, DataflowLoweringContext context)
 {
     var sortedTransformations = SortTransformations(astDataflow.Transformations);
     foreach (AstTransformationNode astTransformation in sortedTransformations)
     {
         PhysicalLoweringProcessor.Lower(astTransformation, context);
     }
 }
        public static void ProcessSlowlyChangingDimensionTransformations(SymbolTable symbolTable) ////HashSet<AstEtlRootNode> astEtlRootNodes, HashSet<AstTaskNode> astTaskNodes)
        {
            var snapshotSymbolTable = new List<IReferenceableItem>(symbolTable);
            foreach (var astNamedNode in snapshotSymbolTable)
            {
                if (astNamedNode.FirstThisOrParent<ITemplate>() == null)
                {
                    var destination = astNamedNode as AstDestinationNode;
                    if (destination != null)
                    {
                        if (destination.Table.HasScdColumns && !destination.DisableScd)
                        {
                            Utility.Replace(destination, CreateScdWorkflowFragment(destination.Table, destination.ParentItem, destination.InputPath == null ? null : destination.InputPath.OutputPath));
                        }
                    }

                    var merge = astNamedNode as AstMergeTaskNode;
                    if (merge != null)
                    {
                        var sourceTable = merge.TargetConstraint.ParentItem as AstTableNode;

                        // TODO: Must we do anything special for the UpdateTargetTable attribute?
                        if (sourceTable != null && sourceTable.HasScdColumns && !merge.DisableScd)
                        {
                            var targetTable = merge.TargetConstraint.ParentItem as AstTableNode;
                            if (targetTable == null)
                            {
                                continue;
                            }

                            var scdMergeEtl = new AstEtlRootNode(merge.ParentItem) { Name = Utility.NameCleanerAndUniqifier(merge.Name + "_scdEtl") };

                            // TODO: Do we need to limit query to non-computed columns?
                            var scdMergeSource = new AstQuerySourceNode(scdMergeEtl)
                                                     {
                                                         Connection = sourceTable.Connection,
                                                         Name = Utility.NameCleanerAndUniqifier(merge.Name + "_scdEtlSource"),
                                                         Query = new AstVariableParameterMappingQueryNode(null) { Body = TableLowerer.EmitSelectAllStatement(sourceTable) }
                                                     };
                            scdMergeSource.Query.ParentItem = scdMergeSource;

                            scdMergeEtl.Transformations.Add(scdMergeSource);
                            foreach (var transformation in CreateScdWorkflowFragment(targetTable, scdMergeEtl, scdMergeSource.OutputPath))
                            {
                                scdMergeEtl.Transformations.Add(transformation);
                            }
                        }
                    }
                }
            }
        }
示例#3
0
 public DataflowTask(AstEtlRootNode astNode) : base(astNode)
 {
 }