diff --git a/api/pkg/transformer/feast/feature_cache.go b/api/pkg/transformer/feast/feature_cache.go index 66b9b03b2..391f72a1c 100644 --- a/api/pkg/transformer/feast/feature_cache.go +++ b/api/pkg/transformer/feast/feature_cache.go @@ -114,6 +114,10 @@ func (fc *featureCache) insertFeatureTable(featureTable *internalFeatureTable, p for idx, entity := range featureTable.entities { if err := fc.insertFeaturesOfEntity(entity, featureTable.columnNames, project, featureTable.valueRows[idx], featureTable.columnTypes); err != nil { errorMsgs = append(errorMsgs, fmt.Sprintf("(value: %v, with message: %v)", featureTable.valueRows[idx], err.Error())) + } else { + fmt.Printf("CACHE INSERT: entity=%v, project=%s, columns=%v, values=%v\n", + entity, project, featureTable.columnNames, featureTable.valueRows[idx]) + } } if len(errorMsgs) > 0 { diff --git a/api/pkg/transformer/pipeline/table_join_op.go b/api/pkg/transformer/pipeline/table_join_op.go index eed706e80..39325b4f8 100644 --- a/api/pkg/transformer/pipeline/table_join_op.go +++ b/api/pkg/transformer/pipeline/table_join_op.go @@ -11,6 +11,7 @@ import ( "github.com/caraml-dev/merlin/pkg/transformer/types" "github.com/caraml-dev/merlin/pkg/transformer/types/table" "go.opentelemetry.io/otel/attribute" + "go.uber.org/zap" ) type TableJoinOp struct { @@ -55,6 +56,25 @@ func (t TableJoinOp) Execute(ctx context.Context, environment *Environment) erro joinColumns = t.tableJoinSpec.OnColumns } + // Log table states (shape + column names) before the join. + // This avoids dumping full data but is enough to debug mismatched schemas or empty tables. + if environment != nil { + if ce := environment.logger.Check(zap.DebugLevel, "table_join input tables"); ce != nil { + ce.Write( + zap.String("left_table", t.tableJoinSpec.LeftTable), + zap.Int("left_nrow", leftTable.NRow()), + zap.Int("left_ncol", len(leftTable.ColumnNames())), + zap.Strings("left_columns", leftTable.ColumnNames()), + zap.String("right_table", t.tableJoinSpec.RightTable), + zap.Int("right_nrow", rightTable.NRow()), + zap.Int("right_ncol", len(rightTable.ColumnNames())), + zap.Strings("right_columns", rightTable.ColumnNames()), + zap.String("how", t.tableJoinSpec.How.String()), + zap.Strings("join_columns", joinColumns), + ) + } + } + switch t.tableJoinSpec.How { case spec.JoinMethod_LEFT: err := validateJoinColumns(leftTable, rightTable, joinColumns) diff --git a/python/pyfunc-server/docker/local.Dockerfile b/python/pyfunc-server/docker/local.Dockerfile index 140949472..79a733f2f 100644 --- a/python/pyfunc-server/docker/local.Dockerfile +++ b/python/pyfunc-server/docker/local.Dockerfile @@ -7,6 +7,7 @@ COPY ${MODEL_DEPENDENCIES_URL} conda.yaml ARG MERLIN_DEP_CONSTRAINT RUN process_conda_env.sh conda.yaml "merlin-pyfunc-server" "${MERLIN_DEP_CONSTRAINT}" +RUN process_conda_env.sh conda.yaml "merlin-sdk" "${MERLIN_DEP_CONSTRAINT}" RUN conda env create --name merlin-model --file conda.yaml # Download and dry-run user model artifacts and code