teradataml 17.20.0.6__py3-none-any.whl → 20.0.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of teradataml might be problematic. Click here for more details.
- teradataml/LICENSE-3RD-PARTY.pdf +0 -0
- teradataml/LICENSE.pdf +0 -0
- teradataml/README.md +238 -1
- teradataml/__init__.py +13 -3
- teradataml/_version.py +1 -1
- teradataml/analytics/Transformations.py +4 -4
- teradataml/analytics/__init__.py +0 -2
- teradataml/analytics/analytic_function_executor.py +3 -0
- teradataml/analytics/json_parser/utils.py +13 -12
- teradataml/analytics/sqle/DecisionTreePredict.py +15 -30
- teradataml/analytics/sqle/NaiveBayesPredict.py +11 -20
- teradataml/analytics/sqle/__init__.py +0 -13
- teradataml/analytics/utils.py +1 -0
- teradataml/analytics/valib.py +3 -0
- teradataml/automl/__init__.py +1628 -0
- teradataml/automl/custom_json_utils.py +1270 -0
- teradataml/automl/data_preparation.py +993 -0
- teradataml/automl/data_transformation.py +727 -0
- teradataml/automl/feature_engineering.py +1648 -0
- teradataml/automl/feature_exploration.py +547 -0
- teradataml/automl/model_evaluation.py +163 -0
- teradataml/automl/model_training.py +887 -0
- teradataml/catalog/__init__.py +0 -2
- teradataml/catalog/byom.py +49 -6
- teradataml/catalog/function_argument_mapper.py +0 -2
- teradataml/catalog/model_cataloging_utils.py +2 -1021
- teradataml/common/aed_utils.py +6 -2
- teradataml/common/constants.py +50 -58
- teradataml/common/deprecations.py +160 -0
- teradataml/common/garbagecollector.py +61 -104
- teradataml/common/messagecodes.py +27 -36
- teradataml/common/messages.py +11 -15
- teradataml/common/utils.py +205 -287
- teradataml/common/wrapper_utils.py +1 -110
- teradataml/context/context.py +150 -78
- teradataml/data/bank_churn.csv +10001 -0
- teradataml/data/bmi.csv +501 -0
- teradataml/data/docs/sqle/docs_17_10/BincodeFit.py +3 -3
- teradataml/data/docs/sqle/docs_17_10/BincodeTransform.py +6 -5
- teradataml/data/docs/sqle/docs_17_10/Fit.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/OneHotEncodingTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/OutlierFilterTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/PolynomialFeaturesTransform.py +2 -2
- teradataml/data/docs/sqle/docs_17_10/RowNormalizeTransform.py +2 -1
- teradataml/data/docs/sqle/docs_17_10/ScaleTransform.py +1 -0
- teradataml/data/docs/sqle/docs_17_10/SimpleImputeTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_10/Transform.py +2 -1
- teradataml/data/docs/sqle/docs_17_20/BincodeFit.py +3 -3
- teradataml/data/docs/sqle/docs_17_20/BincodeTransform.py +6 -5
- teradataml/data/docs/sqle/docs_17_20/Fit.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/GLM.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/GLMPredictPerSegment.py +9 -10
- teradataml/data/docs/sqle/docs_17_20/KMeansPredict.py +3 -2
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierPredict.py +16 -15
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierTrainer.py +2 -2
- teradataml/data/docs/sqle/docs_17_20/NonLinearCombineFit.py +2 -2
- teradataml/data/docs/sqle/docs_17_20/NonLinearCombineTransform.py +8 -8
- teradataml/data/docs/sqle/docs_17_20/OneClassSVMPredict.py +21 -20
- teradataml/data/docs/sqle/docs_17_20/OneHotEncodingTransform.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/OutlierFilterTransform.py +8 -3
- teradataml/data/docs/sqle/docs_17_20/PolynomialFeaturesTransform.py +6 -5
- teradataml/data/docs/sqle/docs_17_20/RandomProjectionTransform.py +6 -6
- teradataml/data/docs/sqle/docs_17_20/RowNormalizeTransform.py +2 -1
- teradataml/data/docs/sqle/docs_17_20/SVM.py +1 -1
- teradataml/data/docs/sqle/docs_17_20/SVMPredict.py +16 -16
- teradataml/data/docs/sqle/docs_17_20/ScaleTransform.py +1 -0
- teradataml/data/docs/sqle/docs_17_20/SimpleImputeTransform.py +3 -2
- teradataml/data/docs/sqle/docs_17_20/TDDecisionForestPredict.py +4 -4
- teradataml/data/docs/sqle/docs_17_20/TDGLMPredict.py +19 -19
- teradataml/data/docs/sqle/docs_17_20/TargetEncodingTransform.py +5 -4
- teradataml/data/docs/sqle/docs_17_20/Transform.py +2 -2
- teradataml/data/docs/sqle/docs_17_20/XGBoostPredict.py +9 -9
- teradataml/data/fish.csv +160 -0
- teradataml/data/glass_types.csv +215 -0
- teradataml/data/insurance.csv +1 -1
- teradataml/data/iris_data.csv +151 -0
- teradataml/data/jsons/sqle/17.10/TD_FunctionTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_OneHotEncodingTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_OutlierFilterTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_PolynomialFeaturesTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_RowNormalizeTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_ScaleTransform.json +1 -0
- teradataml/data/jsons/sqle/17.10/TD_SimpleImputeTransform.json +1 -0
- teradataml/data/load_example_data.py +3 -0
- teradataml/data/multi_model_classification.csv +401 -0
- teradataml/data/multi_model_regression.csv +401 -0
- teradataml/data/openml_example.json +63 -0
- teradataml/data/scripts/deploy_script.py +65 -0
- teradataml/data/scripts/mapper.R +20 -0
- teradataml/data/scripts/sklearn/__init__.py +0 -0
- teradataml/data/scripts/sklearn/sklearn_fit.py +175 -0
- teradataml/data/scripts/sklearn/sklearn_fit_predict.py +135 -0
- teradataml/data/scripts/sklearn/sklearn_function.template +113 -0
- teradataml/data/scripts/sklearn/sklearn_model_selection_split.py +158 -0
- teradataml/data/scripts/sklearn/sklearn_neighbors.py +152 -0
- teradataml/data/scripts/sklearn/sklearn_score.py +128 -0
- teradataml/data/scripts/sklearn/sklearn_transform.py +179 -0
- teradataml/data/templates/open_source_ml.json +9 -0
- teradataml/data/teradataml_example.json +73 -1
- teradataml/data/test_classification.csv +101 -0
- teradataml/data/test_prediction.csv +101 -0
- teradataml/data/test_regression.csv +101 -0
- teradataml/data/train_multiclass.csv +101 -0
- teradataml/data/train_regression.csv +101 -0
- teradataml/data/train_regression_multiple_labels.csv +101 -0
- teradataml/data/wine_data.csv +1600 -0
- teradataml/dataframe/copy_to.py +79 -13
- teradataml/dataframe/data_transfer.py +8 -0
- teradataml/dataframe/dataframe.py +910 -311
- teradataml/dataframe/dataframe_utils.py +102 -5
- teradataml/dataframe/fastload.py +11 -3
- teradataml/dataframe/setop.py +15 -2
- teradataml/dataframe/sql.py +3735 -77
- teradataml/dataframe/sql_function_parameters.py +56 -5
- teradataml/dataframe/vantage_function_types.py +45 -1
- teradataml/dataframe/window.py +30 -29
- teradataml/dbutils/dbutils.py +18 -1
- teradataml/geospatial/geodataframe.py +18 -7
- teradataml/geospatial/geodataframecolumn.py +5 -0
- teradataml/hyperparameter_tuner/optimizer.py +910 -120
- teradataml/hyperparameter_tuner/utils.py +131 -37
- teradataml/lib/aed_0_1.dll +0 -0
- teradataml/lib/libaed_0_1.dylib +0 -0
- teradataml/lib/libaed_0_1.so +0 -0
- teradataml/libaed_0_1.dylib +0 -0
- teradataml/libaed_0_1.so +0 -0
- teradataml/opensource/__init__.py +1 -0
- teradataml/opensource/sklearn/__init__.py +1 -0
- teradataml/opensource/sklearn/_class.py +255 -0
- teradataml/opensource/sklearn/_sklearn_wrapper.py +1668 -0
- teradataml/opensource/sklearn/_wrapper_utils.py +268 -0
- teradataml/opensource/sklearn/constants.py +54 -0
- teradataml/options/__init__.py +3 -6
- teradataml/options/configure.py +21 -20
- teradataml/scriptmgmt/UserEnv.py +61 -5
- teradataml/scriptmgmt/lls_utils.py +135 -53
- teradataml/table_operators/Apply.py +38 -6
- teradataml/table_operators/Script.py +45 -308
- teradataml/table_operators/TableOperator.py +182 -591
- teradataml/table_operators/__init__.py +0 -1
- teradataml/table_operators/table_operator_util.py +32 -40
- teradataml/utils/validators.py +127 -3
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/METADATA +243 -3
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/RECORD +147 -391
- teradataml/analytics/mle/AdaBoost.py +0 -651
- teradataml/analytics/mle/AdaBoostPredict.py +0 -564
- teradataml/analytics/mle/Antiselect.py +0 -342
- teradataml/analytics/mle/Arima.py +0 -641
- teradataml/analytics/mle/ArimaPredict.py +0 -477
- teradataml/analytics/mle/Attribution.py +0 -1070
- teradataml/analytics/mle/Betweenness.py +0 -658
- teradataml/analytics/mle/Burst.py +0 -711
- teradataml/analytics/mle/CCM.py +0 -600
- teradataml/analytics/mle/CCMPrepare.py +0 -324
- teradataml/analytics/mle/CFilter.py +0 -460
- teradataml/analytics/mle/ChangePointDetection.py +0 -572
- teradataml/analytics/mle/ChangePointDetectionRT.py +0 -477
- teradataml/analytics/mle/Closeness.py +0 -737
- teradataml/analytics/mle/ConfusionMatrix.py +0 -420
- teradataml/analytics/mle/Correlation.py +0 -477
- teradataml/analytics/mle/Correlation2.py +0 -573
- teradataml/analytics/mle/CoxHazardRatio.py +0 -679
- teradataml/analytics/mle/CoxPH.py +0 -556
- teradataml/analytics/mle/CoxSurvival.py +0 -478
- teradataml/analytics/mle/CumulativeMovAvg.py +0 -363
- teradataml/analytics/mle/DTW.py +0 -623
- teradataml/analytics/mle/DWT.py +0 -564
- teradataml/analytics/mle/DWT2D.py +0 -599
- teradataml/analytics/mle/DecisionForest.py +0 -716
- teradataml/analytics/mle/DecisionForestEvaluator.py +0 -363
- teradataml/analytics/mle/DecisionForestPredict.py +0 -561
- teradataml/analytics/mle/DecisionTree.py +0 -830
- teradataml/analytics/mle/DecisionTreePredict.py +0 -528
- teradataml/analytics/mle/ExponentialMovAvg.py +0 -418
- teradataml/analytics/mle/FMeasure.py +0 -402
- teradataml/analytics/mle/FPGrowth.py +0 -734
- teradataml/analytics/mle/FrequentPaths.py +0 -695
- teradataml/analytics/mle/GLM.py +0 -558
- teradataml/analytics/mle/GLML1L2.py +0 -547
- teradataml/analytics/mle/GLML1L2Predict.py +0 -519
- teradataml/analytics/mle/GLMPredict.py +0 -529
- teradataml/analytics/mle/HMMDecoder.py +0 -945
- teradataml/analytics/mle/HMMEvaluator.py +0 -901
- teradataml/analytics/mle/HMMSupervised.py +0 -521
- teradataml/analytics/mle/HMMUnsupervised.py +0 -572
- teradataml/analytics/mle/Histogram.py +0 -561
- teradataml/analytics/mle/IDWT.py +0 -476
- teradataml/analytics/mle/IDWT2D.py +0 -493
- teradataml/analytics/mle/IdentityMatch.py +0 -763
- teradataml/analytics/mle/Interpolator.py +0 -918
- teradataml/analytics/mle/KMeans.py +0 -485
- teradataml/analytics/mle/KNN.py +0 -627
- teradataml/analytics/mle/KNNRecommender.py +0 -488
- teradataml/analytics/mle/KNNRecommenderPredict.py +0 -581
- teradataml/analytics/mle/LAR.py +0 -439
- teradataml/analytics/mle/LARPredict.py +0 -478
- teradataml/analytics/mle/LDA.py +0 -548
- teradataml/analytics/mle/LDAInference.py +0 -492
- teradataml/analytics/mle/LDATopicSummary.py +0 -464
- teradataml/analytics/mle/LevenshteinDistance.py +0 -450
- teradataml/analytics/mle/LinReg.py +0 -433
- teradataml/analytics/mle/LinRegPredict.py +0 -438
- teradataml/analytics/mle/MinHash.py +0 -544
- teradataml/analytics/mle/Modularity.py +0 -587
- teradataml/analytics/mle/NEREvaluator.py +0 -410
- teradataml/analytics/mle/NERExtractor.py +0 -595
- teradataml/analytics/mle/NERTrainer.py +0 -458
- teradataml/analytics/mle/NGrams.py +0 -570
- teradataml/analytics/mle/NPath.py +0 -634
- teradataml/analytics/mle/NTree.py +0 -549
- teradataml/analytics/mle/NaiveBayes.py +0 -462
- teradataml/analytics/mle/NaiveBayesPredict.py +0 -513
- teradataml/analytics/mle/NaiveBayesTextClassifier.py +0 -607
- teradataml/analytics/mle/NaiveBayesTextClassifier2.py +0 -531
- teradataml/analytics/mle/NaiveBayesTextClassifierPredict.py +0 -799
- teradataml/analytics/mle/NamedEntityFinder.py +0 -529
- teradataml/analytics/mle/NamedEntityFinderEvaluator.py +0 -414
- teradataml/analytics/mle/NamedEntityFinderTrainer.py +0 -396
- teradataml/analytics/mle/POSTagger.py +0 -417
- teradataml/analytics/mle/Pack.py +0 -411
- teradataml/analytics/mle/PageRank.py +0 -535
- teradataml/analytics/mle/PathAnalyzer.py +0 -426
- teradataml/analytics/mle/PathGenerator.py +0 -367
- teradataml/analytics/mle/PathStart.py +0 -464
- teradataml/analytics/mle/PathSummarizer.py +0 -470
- teradataml/analytics/mle/Pivot.py +0 -471
- teradataml/analytics/mle/ROC.py +0 -425
- teradataml/analytics/mle/RandomSample.py +0 -637
- teradataml/analytics/mle/RandomWalkSample.py +0 -490
- teradataml/analytics/mle/SAX.py +0 -779
- teradataml/analytics/mle/SVMDense.py +0 -677
- teradataml/analytics/mle/SVMDensePredict.py +0 -536
- teradataml/analytics/mle/SVMDenseSummary.py +0 -437
- teradataml/analytics/mle/SVMSparse.py +0 -557
- teradataml/analytics/mle/SVMSparsePredict.py +0 -553
- teradataml/analytics/mle/SVMSparseSummary.py +0 -435
- teradataml/analytics/mle/Sampling.py +0 -549
- teradataml/analytics/mle/Scale.py +0 -565
- teradataml/analytics/mle/ScaleByPartition.py +0 -496
- teradataml/analytics/mle/ScaleMap.py +0 -378
- teradataml/analytics/mle/ScaleSummary.py +0 -320
- teradataml/analytics/mle/SentenceExtractor.py +0 -363
- teradataml/analytics/mle/SentimentEvaluator.py +0 -432
- teradataml/analytics/mle/SentimentExtractor.py +0 -578
- teradataml/analytics/mle/SentimentTrainer.py +0 -405
- teradataml/analytics/mle/SeriesSplitter.py +0 -641
- teradataml/analytics/mle/Sessionize.py +0 -475
- teradataml/analytics/mle/SimpleMovAvg.py +0 -397
- teradataml/analytics/mle/StringSimilarity.py +0 -425
- teradataml/analytics/mle/TF.py +0 -389
- teradataml/analytics/mle/TFIDF.py +0 -504
- teradataml/analytics/mle/TextChunker.py +0 -414
- teradataml/analytics/mle/TextClassifier.py +0 -399
- teradataml/analytics/mle/TextClassifierEvaluator.py +0 -413
- teradataml/analytics/mle/TextClassifierTrainer.py +0 -565
- teradataml/analytics/mle/TextMorph.py +0 -494
- teradataml/analytics/mle/TextParser.py +0 -623
- teradataml/analytics/mle/TextTagger.py +0 -530
- teradataml/analytics/mle/TextTokenizer.py +0 -502
- teradataml/analytics/mle/UnivariateStatistics.py +0 -488
- teradataml/analytics/mle/Unpack.py +0 -526
- teradataml/analytics/mle/Unpivot.py +0 -438
- teradataml/analytics/mle/VarMax.py +0 -776
- teradataml/analytics/mle/VectorDistance.py +0 -762
- teradataml/analytics/mle/WeightedMovAvg.py +0 -400
- teradataml/analytics/mle/XGBoost.py +0 -842
- teradataml/analytics/mle/XGBoostPredict.py +0 -627
- teradataml/analytics/mle/__init__.py +0 -123
- teradataml/analytics/mle/json/adaboost_mle.json +0 -135
- teradataml/analytics/mle/json/adaboostpredict_mle.json +0 -85
- teradataml/analytics/mle/json/antiselect_mle.json +0 -34
- teradataml/analytics/mle/json/antiselect_mle_mle.json +0 -34
- teradataml/analytics/mle/json/arima_mle.json +0 -172
- teradataml/analytics/mle/json/arimapredict_mle.json +0 -52
- teradataml/analytics/mle/json/attribution_mle_mle.json +0 -143
- teradataml/analytics/mle/json/betweenness_mle.json +0 -97
- teradataml/analytics/mle/json/burst_mle.json +0 -140
- teradataml/analytics/mle/json/ccm_mle.json +0 -124
- teradataml/analytics/mle/json/ccmprepare_mle.json +0 -14
- teradataml/analytics/mle/json/cfilter_mle.json +0 -93
- teradataml/analytics/mle/json/changepointdetection_mle.json +0 -92
- teradataml/analytics/mle/json/changepointdetectionrt_mle.json +0 -78
- teradataml/analytics/mle/json/closeness_mle.json +0 -104
- teradataml/analytics/mle/json/confusionmatrix_mle.json +0 -79
- teradataml/analytics/mle/json/correlation_mle.json +0 -86
- teradataml/analytics/mle/json/correlationreduce_mle.json +0 -49
- teradataml/analytics/mle/json/coxhazardratio_mle.json +0 -89
- teradataml/analytics/mle/json/coxph_mle.json +0 -98
- teradataml/analytics/mle/json/coxsurvival_mle.json +0 -79
- teradataml/analytics/mle/json/cumulativemovavg_mle.json +0 -34
- teradataml/analytics/mle/json/decisionforest_mle.json +0 -167
- teradataml/analytics/mle/json/decisionforestevaluator_mle.json +0 -33
- teradataml/analytics/mle/json/decisionforestpredict_mle_mle.json +0 -74
- teradataml/analytics/mle/json/decisiontree_mle.json +0 -194
- teradataml/analytics/mle/json/decisiontreepredict_mle_mle.json +0 -86
- teradataml/analytics/mle/json/dtw_mle.json +0 -97
- teradataml/analytics/mle/json/dwt2d_mle.json +0 -116
- teradataml/analytics/mle/json/dwt_mle.json +0 -101
- teradataml/analytics/mle/json/exponentialmovavg_mle.json +0 -55
- teradataml/analytics/mle/json/fmeasure_mle.json +0 -58
- teradataml/analytics/mle/json/fpgrowth_mle.json +0 -159
- teradataml/analytics/mle/json/frequentpaths_mle.json +0 -129
- teradataml/analytics/mle/json/glm_mle.json +0 -111
- teradataml/analytics/mle/json/glml1l2_mle.json +0 -106
- teradataml/analytics/mle/json/glml1l2predict_mle.json +0 -57
- teradataml/analytics/mle/json/glmpredict_mle_mle.json +0 -74
- teradataml/analytics/mle/json/histogram_mle.json +0 -100
- teradataml/analytics/mle/json/hmmdecoder_mle.json +0 -192
- teradataml/analytics/mle/json/hmmevaluator_mle.json +0 -206
- teradataml/analytics/mle/json/hmmsupervised_mle.json +0 -91
- teradataml/analytics/mle/json/hmmunsupervised_mle.json +0 -114
- teradataml/analytics/mle/json/identitymatch_mle.json +0 -88
- teradataml/analytics/mle/json/idwt2d_mle.json +0 -73
- teradataml/analytics/mle/json/idwt_mle.json +0 -66
- teradataml/analytics/mle/json/interpolator_mle.json +0 -151
- teradataml/analytics/mle/json/kmeans_mle.json +0 -97
- teradataml/analytics/mle/json/knn_mle.json +0 -141
- teradataml/analytics/mle/json/knnrecommender_mle.json +0 -111
- teradataml/analytics/mle/json/knnrecommenderpredict_mle.json +0 -75
- teradataml/analytics/mle/json/lar_mle.json +0 -78
- teradataml/analytics/mle/json/larpredict_mle.json +0 -69
- teradataml/analytics/mle/json/lda_mle.json +0 -130
- teradataml/analytics/mle/json/ldainference_mle.json +0 -78
- teradataml/analytics/mle/json/ldatopicsummary_mle.json +0 -64
- teradataml/analytics/mle/json/levenshteindistance_mle.json +0 -92
- teradataml/analytics/mle/json/linreg_mle.json +0 -42
- teradataml/analytics/mle/json/linregpredict_mle.json +0 -56
- teradataml/analytics/mle/json/minhash_mle.json +0 -113
- teradataml/analytics/mle/json/modularity_mle.json +0 -91
- teradataml/analytics/mle/json/naivebayespredict_mle_mle.json +0 -85
- teradataml/analytics/mle/json/naivebayesreduce_mle.json +0 -52
- teradataml/analytics/mle/json/naivebayestextclassifierpredict_mle_mle.json +0 -147
- teradataml/analytics/mle/json/naivebayestextclassifiertrainer2_mle.json +0 -108
- teradataml/analytics/mle/json/naivebayestextclassifiertrainer_mle.json +0 -102
- teradataml/analytics/mle/json/namedentityfinder_mle.json +0 -84
- teradataml/analytics/mle/json/namedentityfinderevaluatorreduce_mle.json +0 -43
- teradataml/analytics/mle/json/namedentityfindertrainer_mle.json +0 -64
- teradataml/analytics/mle/json/nerevaluator_mle.json +0 -54
- teradataml/analytics/mle/json/nerextractor_mle.json +0 -87
- teradataml/analytics/mle/json/nertrainer_mle.json +0 -89
- teradataml/analytics/mle/json/ngrams_mle.json +0 -137
- teradataml/analytics/mle/json/ngramsplitter_mle_mle.json +0 -137
- teradataml/analytics/mle/json/npath@coprocessor_mle.json +0 -73
- teradataml/analytics/mle/json/ntree@coprocessor_mle.json +0 -123
- teradataml/analytics/mle/json/pack_mle.json +0 -58
- teradataml/analytics/mle/json/pack_mle_mle.json +0 -58
- teradataml/analytics/mle/json/pagerank_mle.json +0 -81
- teradataml/analytics/mle/json/pathanalyzer_mle.json +0 -63
- teradataml/analytics/mle/json/pathgenerator_mle.json +0 -40
- teradataml/analytics/mle/json/pathstart_mle.json +0 -62
- teradataml/analytics/mle/json/pathsummarizer_mle.json +0 -72
- teradataml/analytics/mle/json/pivoting_mle.json +0 -71
- teradataml/analytics/mle/json/postagger_mle.json +0 -51
- teradataml/analytics/mle/json/randomsample_mle.json +0 -131
- teradataml/analytics/mle/json/randomwalksample_mle.json +0 -85
- teradataml/analytics/mle/json/roc_mle.json +0 -73
- teradataml/analytics/mle/json/sampling_mle.json +0 -75
- teradataml/analytics/mle/json/sax_mle.json +0 -154
- teradataml/analytics/mle/json/scale_mle.json +0 -93
- teradataml/analytics/mle/json/scalebypartition_mle.json +0 -89
- teradataml/analytics/mle/json/scalemap_mle.json +0 -44
- teradataml/analytics/mle/json/scalesummary_mle.json +0 -14
- teradataml/analytics/mle/json/sentenceextractor_mle.json +0 -41
- teradataml/analytics/mle/json/sentimentevaluator_mle.json +0 -43
- teradataml/analytics/mle/json/sentimentextractor_mle.json +0 -100
- teradataml/analytics/mle/json/sentimenttrainer_mle.json +0 -68
- teradataml/analytics/mle/json/seriessplitter_mle.json +0 -133
- teradataml/analytics/mle/json/sessionize_mle_mle.json +0 -62
- teradataml/analytics/mle/json/simplemovavg_mle.json +0 -48
- teradataml/analytics/mle/json/stringsimilarity_mle.json +0 -50
- teradataml/analytics/mle/json/stringsimilarity_mle_mle.json +0 -50
- teradataml/analytics/mle/json/svmdense_mle.json +0 -165
- teradataml/analytics/mle/json/svmdensepredict_mle.json +0 -95
- teradataml/analytics/mle/json/svmdensesummary_mle.json +0 -58
- teradataml/analytics/mle/json/svmsparse_mle.json +0 -148
- teradataml/analytics/mle/json/svmsparsepredict_mle_mle.json +0 -103
- teradataml/analytics/mle/json/svmsparsesummary_mle.json +0 -57
- teradataml/analytics/mle/json/textchunker_mle.json +0 -40
- teradataml/analytics/mle/json/textclassifier_mle.json +0 -51
- teradataml/analytics/mle/json/textclassifierevaluator_mle.json +0 -43
- teradataml/analytics/mle/json/textclassifiertrainer_mle.json +0 -103
- teradataml/analytics/mle/json/textmorph_mle.json +0 -63
- teradataml/analytics/mle/json/textparser_mle.json +0 -166
- teradataml/analytics/mle/json/texttagger_mle.json +0 -81
- teradataml/analytics/mle/json/texttokenizer_mle.json +0 -91
- teradataml/analytics/mle/json/tf_mle.json +0 -33
- teradataml/analytics/mle/json/tfidf_mle.json +0 -34
- teradataml/analytics/mle/json/univariatestatistics_mle.json +0 -81
- teradataml/analytics/mle/json/unpack_mle.json +0 -91
- teradataml/analytics/mle/json/unpack_mle_mle.json +0 -91
- teradataml/analytics/mle/json/unpivoting_mle.json +0 -63
- teradataml/analytics/mle/json/varmax_mle.json +0 -176
- teradataml/analytics/mle/json/vectordistance_mle.json +0 -179
- teradataml/analytics/mle/json/weightedmovavg_mle.json +0 -48
- teradataml/analytics/mle/json/xgboost_mle.json +0 -178
- teradataml/analytics/mle/json/xgboostpredict_mle.json +0 -104
- teradataml/analytics/sqle/Antiselect.py +0 -321
- teradataml/analytics/sqle/Attribution.py +0 -603
- teradataml/analytics/sqle/DecisionForestPredict.py +0 -408
- teradataml/analytics/sqle/GLMPredict.py +0 -430
- teradataml/analytics/sqle/MovingAverage.py +0 -543
- teradataml/analytics/sqle/NGramSplitter.py +0 -548
- teradataml/analytics/sqle/NPath.py +0 -632
- teradataml/analytics/sqle/NaiveBayesTextClassifierPredict.py +0 -515
- teradataml/analytics/sqle/Pack.py +0 -388
- teradataml/analytics/sqle/SVMSparsePredict.py +0 -464
- teradataml/analytics/sqle/Sessionize.py +0 -390
- teradataml/analytics/sqle/StringSimilarity.py +0 -400
- teradataml/analytics/sqle/Unpack.py +0 -503
- teradataml/analytics/sqle/json/antiselect_sqle.json +0 -21
- teradataml/analytics/sqle/json/attribution_sqle.json +0 -92
- teradataml/analytics/sqle/json/decisionforestpredict_sqle.json +0 -48
- teradataml/analytics/sqle/json/glmpredict_sqle.json +0 -48
- teradataml/analytics/sqle/json/h2opredict_sqle.json +0 -63
- teradataml/analytics/sqle/json/movingaverage_sqle.json +0 -58
- teradataml/analytics/sqle/json/naivebayestextclassifierpredict_sqle.json +0 -76
- teradataml/analytics/sqle/json/ngramsplitter_sqle.json +0 -126
- teradataml/analytics/sqle/json/npath_sqle.json +0 -67
- teradataml/analytics/sqle/json/pack_sqle.json +0 -47
- teradataml/analytics/sqle/json/pmmlpredict_sqle.json +0 -55
- teradataml/analytics/sqle/json/sessionize_sqle.json +0 -43
- teradataml/analytics/sqle/json/stringsimilarity_sqle.json +0 -39
- teradataml/analytics/sqle/json/svmsparsepredict_sqle.json +0 -74
- teradataml/analytics/sqle/json/unpack_sqle.json +0 -80
- teradataml/catalog/model_cataloging.py +0 -980
- teradataml/config/mlengine_alias_definitions_v1.0 +0 -118
- teradataml/config/mlengine_alias_definitions_v1.1 +0 -127
- teradataml/config/mlengine_alias_definitions_v1.3 +0 -129
- teradataml/table_operators/sandbox_container_util.py +0 -643
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/WHEEL +0 -0
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/top_level.txt +0 -0
- {teradataml-17.20.0.6.dist-info → teradataml-20.0.0.0.dist-info}/zip-safe +0 -0
|
@@ -1,763 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/python
|
|
2
|
-
# ##################################################################
|
|
3
|
-
#
|
|
4
|
-
# Copyright 2018 Teradata. All rights reserved.
|
|
5
|
-
# TERADATA CONFIDENTIAL AND TRADE SECRET
|
|
6
|
-
#
|
|
7
|
-
# Primary Owner: Rohit Agrawal (rohit.agrawal@teradata.com)
|
|
8
|
-
# Secondary Owner: Pankaj Purandare (pankajvinod.purandare@teradata.com)
|
|
9
|
-
#
|
|
10
|
-
# Version: 1.2
|
|
11
|
-
# Function Version: 1.13
|
|
12
|
-
#
|
|
13
|
-
# ##################################################################
|
|
14
|
-
|
|
15
|
-
import inspect
|
|
16
|
-
import time
|
|
17
|
-
import itertools
|
|
18
|
-
from teradataml.common.wrapper_utils import AnalyticsWrapperUtils
|
|
19
|
-
from teradataml.common.utils import UtilFuncs
|
|
20
|
-
from teradataml.context.context import *
|
|
21
|
-
from teradataml.dataframe.dataframe import DataFrame
|
|
22
|
-
from teradataml.common.aed_utils import AedUtils
|
|
23
|
-
from teradataml.analytics.analytic_query_generator import AnalyticQueryGenerator
|
|
24
|
-
from teradataml.common.exceptions import TeradataMlException
|
|
25
|
-
from teradataml.common.messages import Messages
|
|
26
|
-
from teradataml.common.messagecodes import MessageCodes
|
|
27
|
-
from teradataml.common.constants import TeradataConstants
|
|
28
|
-
from teradataml.dataframe.dataframe_utils import DataFrameUtils as df_utils
|
|
29
|
-
from teradataml.options.display import display
|
|
30
|
-
|
|
31
|
-
class IdentityMatch:
|
|
32
|
-
|
|
33
|
-
def __init__(self,
|
|
34
|
-
source_data = None,
|
|
35
|
-
reference_data = None,
|
|
36
|
-
source_id_column=None,
|
|
37
|
-
reference_id_column=None,
|
|
38
|
-
source_nominalmatch_columns=None,
|
|
39
|
-
reference_nominalmatch_columns=None,
|
|
40
|
-
fuzzymatch_columns = None,
|
|
41
|
-
threshold = 0.5,
|
|
42
|
-
source_accumulate=None,
|
|
43
|
-
reference_accumulate=None,
|
|
44
|
-
source_data_sequence_column = None,
|
|
45
|
-
reference_data_sequence_column = None,
|
|
46
|
-
source_data_partition_column = "ANY",
|
|
47
|
-
reference_data_partition_column = None,
|
|
48
|
-
source_data_order_column = None,
|
|
49
|
-
reference_data_order_column = None,
|
|
50
|
-
handle_nulls = "mismatch"):
|
|
51
|
-
"""
|
|
52
|
-
DESCRIPTION:
|
|
53
|
-
The IdentityMatch function tries to match source data with reference
|
|
54
|
-
data, using specified attributes to calculate the similarity score of
|
|
55
|
-
each source-reference pair, and then computes the final similarity score.
|
|
56
|
-
Typically, the source data is about business customers and the reference
|
|
57
|
-
data is from external sources, such as online forums and social networking
|
|
58
|
-
services. The IdentityMatch function is designed to help determine if customers
|
|
59
|
-
with similar identifiers are the same customer. The function supports both
|
|
60
|
-
nominal (exact) matching and weighted fuzzy matching.
|
|
61
|
-
|
|
62
|
-
PARAMETERS:
|
|
63
|
-
source_data:
|
|
64
|
-
Required Argument.
|
|
65
|
-
Specifies the source input teradataml DataFrame.
|
|
66
|
-
|
|
67
|
-
source_data_partition_column:
|
|
68
|
-
Optional Argument.
|
|
69
|
-
Specifies Partition By columns for source_data.
|
|
70
|
-
Values to this argument can be provided as a list, if multiple
|
|
71
|
-
columns are used for partition.
|
|
72
|
-
Default Value: ANY
|
|
73
|
-
Types: str OR list of Strings (str)
|
|
74
|
-
|
|
75
|
-
source_data_order_column:
|
|
76
|
-
Optional Argument.
|
|
77
|
-
Specifies Order By columns for source_data.
|
|
78
|
-
Values to this argument can be provided as a list, if multiple
|
|
79
|
-
columns are used for ordering.
|
|
80
|
-
Types: str OR list of Strings (str)
|
|
81
|
-
|
|
82
|
-
reference_data:
|
|
83
|
-
Required Argument.
|
|
84
|
-
Specifies the reference input teradataml DataFrame.
|
|
85
|
-
|
|
86
|
-
reference_data_partition_column:
|
|
87
|
-
Optional Argument.
|
|
88
|
-
Specifies Partition By columns for reference_data.
|
|
89
|
-
Values to this argument can be provided as a list, if multiple
|
|
90
|
-
columns are used for partition.
|
|
91
|
-
Types: str OR list of Strings (str)
|
|
92
|
-
|
|
93
|
-
reference_data_order_column:
|
|
94
|
-
Optional Argument.
|
|
95
|
-
Specifies Order By columns for reference_data.
|
|
96
|
-
Values to this argument can be provided as a list, if multiple
|
|
97
|
-
columns are used for ordering.
|
|
98
|
-
Types: str OR list of Strings (str)
|
|
99
|
-
|
|
100
|
-
source_id_column:
|
|
101
|
-
Required Argument.
|
|
102
|
-
Specifies the name of the column in the source_data DataFrame
|
|
103
|
-
that contain row identifiers. The function copies this column
|
|
104
|
-
to the output DataFrame.
|
|
105
|
-
Types: str
|
|
106
|
-
|
|
107
|
-
reference_id_column:
|
|
108
|
-
Required Argument.
|
|
109
|
-
Specifies the name of the column in the reference_data DataFrame
|
|
110
|
-
that contain row identifiers. The function copies this column
|
|
111
|
-
to the output DataFrame.
|
|
112
|
-
Types: str
|
|
113
|
-
|
|
114
|
-
source_nominalmatch_columns:
|
|
115
|
-
Optional Argument. Required if you omit fuzzymatch_columns.
|
|
116
|
-
Specifies the names of the columns (attributes) in the source_data DataFrame
|
|
117
|
-
to check for exact matching with the columns specified in
|
|
118
|
-
reference_nominalmatch_columns. If any pair (a column in source_nominalmatch_columns
|
|
119
|
-
and a column in reference_nominalmatch_columns argument) matches exactly,
|
|
120
|
-
then their records are considered to be exact matches, and the function
|
|
121
|
-
does not compare the fuzzy match attributes.
|
|
122
|
-
Note:
|
|
123
|
-
1. If this argument is provided, the 'reference_nominalmatch_columns' argument
|
|
124
|
-
should also be provided.
|
|
125
|
-
2. The number of columns provided in the 'source_nominalmatch_columns' and
|
|
126
|
-
'reference_nominalmatch_columns' arguments should be equal.
|
|
127
|
-
Types: str OR list of Strings (str)
|
|
128
|
-
|
|
129
|
-
reference_nominalmatch_columns:
|
|
130
|
-
Optional Argument. Required if you omit fuzzymatch_columns.
|
|
131
|
-
Specifies the names of the columns (attributes) in the reference_data DataFrame
|
|
132
|
-
to check for exact matching with the columns specified in
|
|
133
|
-
source_nominalmatch_columns. If any pair (a column in source_nominalmatch_columns
|
|
134
|
-
and a column in reference_nominalmatch_columns argument) matches exactly,
|
|
135
|
-
then their records are considered to be exact matches, and the function
|
|
136
|
-
does not compare the fuzzy match attributes.
|
|
137
|
-
Note:
|
|
138
|
-
1. If this argument is provided, the 'source_nominalmatch_columns' argument
|
|
139
|
-
should also be provided.
|
|
140
|
-
2. The number of columns provided in the 'source_nominalmatch_columns' and
|
|
141
|
-
'reference_nominalmatch_columns' arguments should be equal.
|
|
142
|
-
Types: str OR list of Strings (str)
|
|
143
|
-
|
|
144
|
-
fuzzymatch_columns:
|
|
145
|
-
Optional Argument. Required if you omit source_nominalmatch_columns and
|
|
146
|
-
reference_nominalmatch_columns.
|
|
147
|
-
Specifies the names of source_data and reference_data columns (attributes)
|
|
148
|
-
and the fuzzy matching parameters match_metric, match_weight, and
|
|
149
|
-
synonym_file (whose descriptions follow). If any pair is a fuzzy match,
|
|
150
|
-
then their records are considered to be fuzzy matches, and the function
|
|
151
|
-
reports the similarity score of these attributes.
|
|
152
|
-
Fuzzy matching parameters:
|
|
153
|
-
1. match_metric:
|
|
154
|
-
This parameter specifies the similarity metric, which is a function that
|
|
155
|
-
returns the similarity score (a value between 0 and 1) of two strings.
|
|
156
|
-
The possible values of match_metric are:
|
|
157
|
-
* EQUAL: If strings a and b are equal, then their similarity score
|
|
158
|
-
is 1.0; otherwise it 0.0.
|
|
159
|
-
* LD: The similarity score of strings a and b is
|
|
160
|
-
f(a,b)=LD(a,b)/max(len(a),len(b)), where LD(a,b) is the Levenshtein
|
|
161
|
-
distance between a with b.
|
|
162
|
-
* D-LD: The similarity score of strings a and b is
|
|
163
|
-
f(a,b)=LD(a,b)/max(len(a),len(b)), where LD(a,b) is the Damerau-Levenshtein
|
|
164
|
-
distance between a and b.
|
|
165
|
-
* JARO: The similarity score of strings a and b is the Jaro distance
|
|
166
|
-
between them.
|
|
167
|
-
* JARO-WINKLER: The similarity score of strings a and b
|
|
168
|
-
is the Jaro-Winkler distance between them.
|
|
169
|
-
* NEEDLEMAN-WUNSCH: The similarity score of strings a and b is the
|
|
170
|
-
Needleman-Wunsch distance between them.
|
|
171
|
-
* JD: The similarity score of strings a and b is the Jaccard distance
|
|
172
|
-
between them. The function converts the strings a and b to sets s and t
|
|
173
|
-
by splitting them by space and then uses the formula f(s,t)=|S intersection T|/|s union t|.
|
|
174
|
-
* COSINE: The similarity score of strings a and b is calculated with
|
|
175
|
-
their term frequency-inverse document frequency (TF-IDF) and cosine
|
|
176
|
-
similarity.
|
|
177
|
-
Note: The function calculates IDF only on the input relation stored in memory.
|
|
178
|
-
2. match_weight:
|
|
179
|
-
This parameter specifies the weight (relative importance) of the attribute
|
|
180
|
-
represented by source_data and reference_data columns.
|
|
181
|
-
The match_weight must be a positive number. The function normalizes each
|
|
182
|
-
match_weight to a value in the range [0, 1]. Given match_weight values,
|
|
183
|
-
w1, w2, ..., wn, the normalized value of wi is: wi /(w1+w2+...+ wn).
|
|
184
|
-
For example, given two pairs of columns, whose match weights are 3 and 7,
|
|
185
|
-
the function uses the weights 3/(3+7)=0.3 and 7/(3+7)=0.7 to compute the
|
|
186
|
-
similarity score.
|
|
187
|
-
3. synonym_file:
|
|
188
|
-
This parameter (optional) specifies the dictionary that the function
|
|
189
|
-
uses to check the two strings for semantic equality. In the dictionary,
|
|
190
|
-
each line is a comma-separated list of synonyms.
|
|
191
|
-
Note: You must install the dictionary before running the function.
|
|
192
|
-
The dictionary has to be of the following form:
|
|
193
|
-
{
|
|
194
|
-
"source_column" : <name of column from source_data>,
|
|
195
|
-
"reference_column" : <name of column from reference_data>,
|
|
196
|
-
"match_metric": <value of match_metric>,
|
|
197
|
-
"match_weight" : <weight of the attribute>,
|
|
198
|
-
"synonym_file": <name of dictionary for semantic check>
|
|
199
|
-
}
|
|
200
|
-
where the synonym_file key and associated value are optional. You may pass a
|
|
201
|
-
dictionary or list of dictionaries of the above form as a value to this argument.
|
|
202
|
-
Types: dict OR list of Dictionaries (dict)
|
|
203
|
-
|
|
204
|
-
threshold:
|
|
205
|
-
Optional Argument.
|
|
206
|
-
Specifies the threshold similarity score, a float value between 0 and 1.
|
|
207
|
-
The function outputs only the records whose similarity score exceeds threshold.
|
|
208
|
-
The higher the threshold, the higher the matching accuracy.
|
|
209
|
-
Default Value: 0.5
|
|
210
|
-
Types: float
|
|
211
|
-
|
|
212
|
-
source_accumulate:
|
|
213
|
-
Optional Argument.
|
|
214
|
-
Specifies source_data teradataml DataFrame columns to copy to the output
|
|
215
|
-
teradataml DataFrame.
|
|
216
|
-
Types: str OR list of Strings (str)
|
|
217
|
-
|
|
218
|
-
reference_accumulate:
|
|
219
|
-
Optional Argument.
|
|
220
|
-
Specifies reference_data teradataml DataFrame columns to copy to the output
|
|
221
|
-
teradataml DataFrame.
|
|
222
|
-
Types: str OR list of Strings (str)
|
|
223
|
-
|
|
224
|
-
source_data_sequence_column:
|
|
225
|
-
Optional Argument.
|
|
226
|
-
Specifies the list of column(s) that uniquely identifies each row of
|
|
227
|
-
the input argument "source_data". The argument is used to ensure
|
|
228
|
-
deterministic results for functions which produce results that vary
|
|
229
|
-
from run to run.
|
|
230
|
-
Types: str OR list of Strings (str)
|
|
231
|
-
|
|
232
|
-
reference_data_sequence_column:
|
|
233
|
-
Optional Argument.
|
|
234
|
-
Specifies the list of column(s) that uniquely identifies each row of
|
|
235
|
-
the input argument "reference_data". The argument is used to ensure
|
|
236
|
-
deterministic results for functions which produce results that vary
|
|
237
|
-
from run to run.
|
|
238
|
-
Types: str OR list of Strings (str)
|
|
239
|
-
|
|
240
|
-
handle_nulls:
|
|
241
|
-
Optional Argument.
|
|
242
|
-
Specifies what score should be assigned for null/empty value.
|
|
243
|
-
Note:
|
|
244
|
-
"handle_nulls" argument support is only available when teradataml
|
|
245
|
-
is connected to Vantage 1.3 version.
|
|
246
|
-
Default Value: "mismatch"
|
|
247
|
-
Permitted Values: mismatch, match-if-null, match-if-both-null
|
|
248
|
-
Types: str
|
|
249
|
-
|
|
250
|
-
RETURNS:
|
|
251
|
-
Instance of IdentityMatch.
|
|
252
|
-
Output teradataml DataFrame can be accessed using attribute
|
|
253
|
-
references, such as IdentityMatchObj.<attribute_name>.
|
|
254
|
-
The "result" teradataml DataFrame has column names as "a.<column_name1>"
|
|
255
|
-
and "b.<column_name2>", where:
|
|
256
|
-
1. "a.<column_name1>" refers to "<column_name1>" column of "source_data"
|
|
257
|
-
teradataml DataFrame.
|
|
258
|
-
2. "b.<column_name2>" refers to "<column_name2>" column of "reference_data"
|
|
259
|
-
teradataml DataFrame.
|
|
260
|
-
Output teradataml DataFrame attribute name is:
|
|
261
|
-
result
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
RAISES:
|
|
265
|
-
TeradataMlException, TypeError, ValueError
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
EXAMPLES:
|
|
269
|
-
# Load the data to run the example.
|
|
270
|
-
load_example_data("IdentityMatch", ["applicant_reference", "applicant_external"])
|
|
271
|
-
|
|
272
|
-
# Create teradataml DataFrame object.
|
|
273
|
-
applicant_reference = DataFrame.from_table("applicant_reference")
|
|
274
|
-
applicant_external = DataFrame.from_table("applicant_external")
|
|
275
|
-
|
|
276
|
-
# Example - Find the credit scores of job applicants by matching the information in teradataml
|
|
277
|
-
# DataFrames 'applicant_reference' and 'applicant_external'.
|
|
278
|
-
# The example looks for exact matches (nominalmatch_columns) to the email address and approximate
|
|
279
|
-
# matches (fuzzymatch_columns) for lastname, firstname, zip code, city, and department, with different
|
|
280
|
-
# match metrics and match weights.
|
|
281
|
-
# source_data: applicant_reference, which has hypothetical information from job applicants.
|
|
282
|
-
# reference_data: applicant_external, an external source table, which has missing and incomplete
|
|
283
|
-
# information, but includes credit scores.
|
|
284
|
-
identitymatch_out = IdentityMatch(source_data=applicant_reference,
|
|
285
|
-
source_data_partition_column='ANY',
|
|
286
|
-
reference_data=applicant_external,
|
|
287
|
-
source_id_column="id",
|
|
288
|
-
reference_id_column="id",
|
|
289
|
-
source_nominalmatch_columns="email",
|
|
290
|
-
reference_nominalmatch_columns="email",
|
|
291
|
-
fuzzymatch_columns=[ {"source_column" : "lastname", "reference_column" : "lastname",
|
|
292
|
-
"match_metric": "JARO-WINKLER", "match_weight" : 3}, {"source_column" : "firstname",
|
|
293
|
-
"reference_column" : "firstname", "match_metric": "JARO-WINKLER", "match_weight" : 2},
|
|
294
|
-
{"source_column" : "zipcode", "reference_column" : "zipcode", "match_metric": "JD",
|
|
295
|
-
"match_weight" : 2}, {"source_column" : "city", "reference_column" : "city",
|
|
296
|
-
"match_metric": "LD", "match_weight" : 2}, {"source_column" : "department",
|
|
297
|
-
"reference_column" : "department", "match_metric": "COSINE", "match_weight" : 1}],
|
|
298
|
-
threshold=0.5,
|
|
299
|
-
source_accumulate=["firstname","lastname","email","zipcode"],
|
|
300
|
-
reference_accumulate=["lastname","email","zipcode","department","creditscore"],
|
|
301
|
-
source_data_sequence_column='id'
|
|
302
|
-
)
|
|
303
|
-
|
|
304
|
-
# Print the output DataFrames.
|
|
305
|
-
print(identitymatch_out.result)
|
|
306
|
-
|
|
307
|
-
"""
|
|
308
|
-
# Start the timer to get the build time
|
|
309
|
-
_start_time = time.time()
|
|
310
|
-
|
|
311
|
-
self.source_data = source_data
|
|
312
|
-
self.reference_data = reference_data
|
|
313
|
-
self.source_id_column = source_id_column
|
|
314
|
-
self.reference_id_column = reference_id_column
|
|
315
|
-
self.source_nominalmatch_columns = source_nominalmatch_columns
|
|
316
|
-
self.reference_nominalmatch_columns = reference_nominalmatch_columns
|
|
317
|
-
self.fuzzymatch_columns = fuzzymatch_columns
|
|
318
|
-
self.threshold = threshold
|
|
319
|
-
self.source_accumulate = source_accumulate
|
|
320
|
-
self.reference_accumulate = reference_accumulate
|
|
321
|
-
self.source_data_sequence_column = source_data_sequence_column
|
|
322
|
-
self.reference_data_sequence_column = reference_data_sequence_column
|
|
323
|
-
self.source_data_partition_column = source_data_partition_column
|
|
324
|
-
self.reference_data_partition_column = reference_data_partition_column
|
|
325
|
-
self.source_data_order_column = source_data_order_column
|
|
326
|
-
self.reference_data_order_column = reference_data_order_column
|
|
327
|
-
self.handle_nulls = handle_nulls
|
|
328
|
-
|
|
329
|
-
# Create TeradataPyWrapperUtils instance which contains validation functions.
|
|
330
|
-
self.__awu = AnalyticsWrapperUtils()
|
|
331
|
-
self.__aed_utils = AedUtils()
|
|
332
|
-
|
|
333
|
-
# Create argument information matrix to do parameter checking
|
|
334
|
-
self.__arg_info_matrix = []
|
|
335
|
-
self.__arg_info_matrix.append(["source_data", self.source_data, False, (DataFrame)])
|
|
336
|
-
self.__arg_info_matrix.append(["source_data_partition_column", self.source_data_partition_column, True, (str,list)])
|
|
337
|
-
self.__arg_info_matrix.append(["source_data_order_column", self.source_data_order_column, True, (str,list)])
|
|
338
|
-
self.__arg_info_matrix.append(["reference_data", self.reference_data, False, (DataFrame)])
|
|
339
|
-
self.__arg_info_matrix.append(["reference_data_partition_column", self.reference_data_partition_column, True, (str,list)])
|
|
340
|
-
self.__arg_info_matrix.append(["reference_data_order_column", self.reference_data_order_column, True, (str,list)])
|
|
341
|
-
self.__arg_info_matrix.append(["source_id_column", self.source_id_column, False, (str)])
|
|
342
|
-
self.__arg_info_matrix.append(["reference_id_column", self.reference_id_column, False, (str)])
|
|
343
|
-
self.__arg_info_matrix.append(["source_nominalmatch_columns", self.source_nominalmatch_columns, True, (str, list)])
|
|
344
|
-
self.__arg_info_matrix.append(["reference_nominalmatch_columns", self.reference_nominalmatch_columns, True, (str, list)])
|
|
345
|
-
self.__arg_info_matrix.append(["fuzzymatch_columns", self.fuzzymatch_columns, True, (dict,list)])
|
|
346
|
-
self.__arg_info_matrix.append(["threshold", self.threshold, True, (float)])
|
|
347
|
-
self.__arg_info_matrix.append(["source_accumulate", self.source_accumulate, True, (str, list)])
|
|
348
|
-
self.__arg_info_matrix.append(["reference_accumulate", self.reference_accumulate, True, (str, list)])
|
|
349
|
-
self.__arg_info_matrix.append(["source_data_sequence_column", self.source_data_sequence_column, True, (str,list)])
|
|
350
|
-
self.__arg_info_matrix.append(["reference_data_sequence_column", self.reference_data_sequence_column, True, (str,list)])
|
|
351
|
-
self.__arg_info_matrix.append(["handle_nulls", self.handle_nulls, True, (str)])
|
|
352
|
-
|
|
353
|
-
if inspect.stack()[1][3] != '_from_model_catalog':
|
|
354
|
-
# Perform the function validations
|
|
355
|
-
self.__validate()
|
|
356
|
-
# Generate the ML query
|
|
357
|
-
self.__form_tdml_query()
|
|
358
|
-
# Execute ML query
|
|
359
|
-
self.__execute()
|
|
360
|
-
# Get the prediction type
|
|
361
|
-
self._prediction_type = self.__awu._get_function_prediction_type(self)
|
|
362
|
-
|
|
363
|
-
# End the timer to get the build time
|
|
364
|
-
_end_time = time.time()
|
|
365
|
-
|
|
366
|
-
# Calculate the build time
|
|
367
|
-
self._build_time = (int)(_end_time - _start_time)
|
|
368
|
-
|
|
369
|
-
def __validate(self):
|
|
370
|
-
"""
|
|
371
|
-
Function to validate sqlmr function arguments, which verifies missing
|
|
372
|
-
arguments, input argument and table types. Also processes the
|
|
373
|
-
argument values.
|
|
374
|
-
"""
|
|
375
|
-
|
|
376
|
-
# Make sure that a non-NULL value has been supplied for all mandatory arguments
|
|
377
|
-
self.__awu._validate_missing_required_arguments(self.__arg_info_matrix)
|
|
378
|
-
|
|
379
|
-
# Make sure that a non-NULL value has been supplied correct type of argument
|
|
380
|
-
self.__awu._validate_argument_types(self.__arg_info_matrix)
|
|
381
|
-
|
|
382
|
-
# Check to make sure input table types are strings or data frame objects or of valid type.
|
|
383
|
-
self.__awu._validate_input_table_datatype(self.source_data, "source_data", None)
|
|
384
|
-
self.__awu._validate_input_table_datatype(self.reference_data, "reference_data", None)
|
|
385
|
-
|
|
386
|
-
# Check for permitted values
|
|
387
|
-
handle_nulls_permitted_values = ["MISMATCH", "MATCH-IF-NULL", "MATCH-IF-BOTH-NULL"]
|
|
388
|
-
self.__awu._validate_permitted_values(self.handle_nulls, handle_nulls_permitted_values, "handle_nulls")
|
|
389
|
-
|
|
390
|
-
# Check whether the input columns passed to the argument are not empty.
|
|
391
|
-
# Also check whether the input columns passed to the argument valid or not.
|
|
392
|
-
self.__awu._validate_input_columns_not_empty(self.source_id_column, "source_id_column")
|
|
393
|
-
self.__awu._validate_dataframe_has_argument_columns(self.source_id_column, "source_id_column", self.source_data,"source_data", False)
|
|
394
|
-
|
|
395
|
-
self.__awu._validate_input_columns_not_empty(self.reference_id_column, "reference_id_column")
|
|
396
|
-
self.__awu._validate_dataframe_has_argument_columns(self.reference_id_column, "reference_id_column", self.reference_data, "reference_data", False)
|
|
397
|
-
|
|
398
|
-
self.__awu._validate_input_columns_not_empty(self.source_nominalmatch_columns, "source_nominalmatch_columns")
|
|
399
|
-
self.__awu._validate_dataframe_has_argument_columns(self.source_nominalmatch_columns, "source_nominalmatch_columns", self.source_data, "source_data", False)
|
|
400
|
-
|
|
401
|
-
self.__awu._validate_input_columns_not_empty(self.reference_nominalmatch_columns, "reference_nominalmatch_columns")
|
|
402
|
-
self.__awu._validate_dataframe_has_argument_columns(self.reference_nominalmatch_columns, "reference_nominalmatch_columns", self.reference_data, "reference_data", False)
|
|
403
|
-
|
|
404
|
-
self.__awu._validate_input_columns_not_empty(self.source_accumulate, "source_accumulate")
|
|
405
|
-
self.__awu._validate_dataframe_has_argument_columns(self.source_accumulate, "source_accumulate", self.source_data, "source_data", False)
|
|
406
|
-
|
|
407
|
-
self.__awu._validate_input_columns_not_empty(self.reference_accumulate, "reference_accumulate")
|
|
408
|
-
self.__awu._validate_dataframe_has_argument_columns(self.reference_accumulate, "reference_accumulate", self.reference_data, "reference_data", False)
|
|
409
|
-
|
|
410
|
-
self.__awu._validate_input_columns_not_empty(self.source_data_sequence_column, "source_data_sequence_column")
|
|
411
|
-
self.__awu._validate_dataframe_has_argument_columns(self.source_data_sequence_column, "source_data_sequence_column", self.source_data, "source_data", False)
|
|
412
|
-
|
|
413
|
-
self.__awu._validate_input_columns_not_empty(self.reference_data_sequence_column, "reference_data_sequence_column")
|
|
414
|
-
self.__awu._validate_dataframe_has_argument_columns(self.reference_data_sequence_column, "reference_data_sequence_column", self.reference_data, "reference_data", False)
|
|
415
|
-
|
|
416
|
-
self.__awu._validate_input_columns_not_empty(self.source_data_partition_column, "source_data_partition_column")
|
|
417
|
-
if self.__awu._is_default_or_not(self.source_data_partition_column, "ANY"):
|
|
418
|
-
self.__awu._validate_dataframe_has_argument_columns(self.source_data_partition_column, "source_data_partition_column", self.source_data, "source_data", True)
|
|
419
|
-
self.__awu._validate_input_columns_not_empty(self.reference_data_partition_column, "reference_data_partition_column")
|
|
420
|
-
self.__awu._validate_dataframe_has_argument_columns(self.reference_data_partition_column, "reference_data_partition_column", self.reference_data, "reference_data", True)
|
|
421
|
-
|
|
422
|
-
self.__awu._validate_input_columns_not_empty(self.source_data_order_column, "source_data_order_column")
|
|
423
|
-
self.__awu._validate_dataframe_has_argument_columns(self.source_data_order_column, "source_data_order_column", self.source_data, "source_data", False)
|
|
424
|
-
|
|
425
|
-
self.__awu._validate_input_columns_not_empty(self.reference_data_order_column, "reference_data_order_column")
|
|
426
|
-
self.__awu._validate_dataframe_has_argument_columns(self.reference_data_order_column, "reference_data_order_column", self.reference_data, "reference_data", False)
|
|
427
|
-
|
|
428
|
-
# Check if source_nominalmatch_columns and reference_nominalmatch_columns arguments are passed together or not.
|
|
429
|
-
if (not self.source_nominalmatch_columns and self.reference_nominalmatch_columns) or \
|
|
430
|
-
(self.source_nominalmatch_columns and not self.reference_nominalmatch_columns):
|
|
431
|
-
raise TeradataMlException(Messages.get_message(MessageCodes.MUST_PASS_ARGUMENT,
|
|
432
|
-
'source_nominalmatch_columns',
|
|
433
|
-
'reference_nominalmatch_columns'),
|
|
434
|
-
MessageCodes.MUST_PASS_ARGUMENT)
|
|
435
|
-
|
|
436
|
-
if isinstance(self.source_nominalmatch_columns, str):
|
|
437
|
-
self.source_nominalmatch_columns = [self.source_nominalmatch_columns]
|
|
438
|
-
|
|
439
|
-
if isinstance(self.reference_nominalmatch_columns, str):
|
|
440
|
-
self.reference_nominalmatch_columns = [self.reference_nominalmatch_columns]
|
|
441
|
-
|
|
442
|
-
# source_nominalmatch_columns and reference_nominalmatch_columns arguments length should be equal.
|
|
443
|
-
if self.source_nominalmatch_columns and self.reference_nominalmatch_columns and \
|
|
444
|
-
len(self.source_nominalmatch_columns) != len(self.reference_nominalmatch_columns):
|
|
445
|
-
raise TeradataMlException(Messages.get_message(MessageCodes.INVALID_LENGTH_ARGS,
|
|
446
|
-
"'source_nominalmatch_columns' and 'reference_nominalmatch_columns'"),
|
|
447
|
-
MessageCodes.INVALID_LENGTH_ARGS)
|
|
448
|
-
|
|
449
|
-
# At least one argument source_nominalmatch_columns and reference_nominalmatch_columns or fuzzymatch_columns must be passed.
|
|
450
|
-
if not self.source_nominalmatch_columns and not self.reference_nominalmatch_columns and not self.fuzzymatch_columns:
|
|
451
|
-
raise TeradataMlException(Messages.get_message(MessageCodes.SPECIFY_AT_LEAST_ONE_ARG,
|
|
452
|
-
"'source_nominalmatch_columns' and 'reference_nominalmatch_columns'",
|
|
453
|
-
"fuzzymatch_columns"),
|
|
454
|
-
MessageCodes.SPECIFY_AT_LEAST_ONE_ARG)
|
|
455
|
-
|
|
456
|
-
if self.fuzzymatch_columns:
|
|
457
|
-
for _fuzzy_column in self.fuzzymatch_columns:
|
|
458
|
-
# Make sure that key's in each dict is valid string.
|
|
459
|
-
if (sorted(_fuzzy_column.keys()) != ["match_metric", "match_weight", "reference_column", "source_column"] and
|
|
460
|
-
sorted(_fuzzy_column.keys()) != ["match_metric", "match_weight", "reference_column", "source_column", "synonym_file"]):
|
|
461
|
-
raise TeradataMlException(Messages.get_message(MessageCodes.INVALID_ARG_VALUE,
|
|
462
|
-
str(sorted(_fuzzy_column.keys())), 'fuzzymatch_columns',
|
|
463
|
-
"a dictionary or a list of dictionaries with the following keys ['source_column', 'reference_column', 'match_metric', 'match_weight', 'synonym_file']"),
|
|
464
|
-
MessageCodes.INVALID_ARG_VALUE)
|
|
465
|
-
|
|
466
|
-
__fuzzy_arg_info_matrix = []
|
|
467
|
-
__fuzzy_arg_info_matrix.append(["source_column: {}".format(_fuzzy_column['source_column']), _fuzzy_column['source_column'], False, (str)])
|
|
468
|
-
__fuzzy_arg_info_matrix.append(["reference_column: {}".format(_fuzzy_column['reference_column']), _fuzzy_column['reference_column'], False, (str)])
|
|
469
|
-
__fuzzy_arg_info_matrix.append(["match_metric: {}".format(_fuzzy_column['match_metric']), _fuzzy_column['match_metric'], False, (str)])
|
|
470
|
-
__fuzzy_arg_info_matrix.append(["match_weight: {}".format(_fuzzy_column['match_weight']), _fuzzy_column['match_weight'], False, (int)])
|
|
471
|
-
if len(_fuzzy_column) == 5:
|
|
472
|
-
__fuzzy_arg_info_matrix.append(["synonym_file: {}".format(_fuzzy_column['synonym_file']), _fuzzy_column['synonym_file'], True, (str)])
|
|
473
|
-
|
|
474
|
-
self.__awu._validate_argument_types(__fuzzy_arg_info_matrix)
|
|
475
|
-
|
|
476
|
-
# Check whether the input columns passed to the key's in argument fuzzymatch_columns are not empty.
|
|
477
|
-
# Also check whether the input columns passed to the key's in argument fuzzymatch_columns valid or not.
|
|
478
|
-
self.__awu._validate_input_columns_not_empty(_fuzzy_column['source_column'],
|
|
479
|
-
"'source_column' in fuzzy_matchcolumns")
|
|
480
|
-
self.__awu._validate_dataframe_has_argument_columns(_fuzzy_column['source_column'],
|
|
481
|
-
"'source_column' in fuzzy_matchcolumns", self.source_data,
|
|
482
|
-
"source_data", False)
|
|
483
|
-
|
|
484
|
-
self.__awu._validate_input_columns_not_empty(_fuzzy_column['reference_column'],
|
|
485
|
-
"'reference_column' in fuzzy_matchcolumns")
|
|
486
|
-
self.__awu._validate_dataframe_has_argument_columns(_fuzzy_column['reference_column'],
|
|
487
|
-
"'reference_column' in fuzzy_matchcolumns",
|
|
488
|
-
self.reference_data,
|
|
489
|
-
"reference_data", False)
|
|
490
|
-
|
|
491
|
-
self.__awu._validate_input_columns_not_empty(_fuzzy_column['match_metric'],
|
|
492
|
-
"'match_metric' in fuzzy_matchcolumns")
|
|
493
|
-
|
|
494
|
-
# Check for permitted values for match_metric key in argument fuzzymatch_columns
|
|
495
|
-
__match_metric_permitted_values = ["EQUAL", "LD", "D-LD", "JARO", "JARO-WINKLER", "NEEDLEMAN-WUNSCH", "JD", "COSINE"]
|
|
496
|
-
self.__awu._validate_permitted_values(_fuzzy_column['match_metric'], __match_metric_permitted_values, "'match_metric' in fuzzy_matchcolumns")
|
|
497
|
-
|
|
498
|
-
if len(_fuzzy_column) == 5:
|
|
499
|
-
self.__awu._validate_input_columns_not_empty(_fuzzy_column['synonym_file'], "'synonym_file' in fuzzy_matchcolumns")
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
def __form_tdml_query(self):
|
|
503
|
-
"""
|
|
504
|
-
Function to generate the analytical function queries. The function defines
|
|
505
|
-
variables and list of arguments required to form the query.
|
|
506
|
-
"""
|
|
507
|
-
|
|
508
|
-
if isinstance(self.fuzzymatch_columns, dict):
|
|
509
|
-
self.fuzzymatch_columns = [self.fuzzymatch_columns]
|
|
510
|
-
|
|
511
|
-
# Processing id_column to format "a.source_col_name:b.reference_col_name".
|
|
512
|
-
__id_column = "a.{0}:b.{1}".format(self.source_id_column, self.reference_id_column)
|
|
513
|
-
|
|
514
|
-
# Processing nominalmatch_columns to format "a.source_col_name:b.reference_col_name".
|
|
515
|
-
if self.source_nominalmatch_columns and self.reference_nominalmatch_columns:
|
|
516
|
-
__nominalmatch_columns = []
|
|
517
|
-
for __source_nominal_col, __reference_nominal_col in zip(self.source_nominalmatch_columns,self.reference_nominalmatch_columns):
|
|
518
|
-
__nominalmatch_columns.append("a.{0}:b.{1}".format(__source_nominal_col, __reference_nominal_col))
|
|
519
|
-
|
|
520
|
-
# Processing accumulate to format "a.source_col_name, b.reference_col_name".
|
|
521
|
-
__accumulate = []
|
|
522
|
-
input_names = ['a', 'b']
|
|
523
|
-
for input_name, column_list in zip(input_names, [self.source_accumulate, self.reference_accumulate]):
|
|
524
|
-
if column_list:
|
|
525
|
-
if isinstance(column_list, str):
|
|
526
|
-
column_list = [column_list]
|
|
527
|
-
for col in column_list:
|
|
528
|
-
__accumulate.append("{0}.{1}".format(input_name, col))
|
|
529
|
-
|
|
530
|
-
# Processing fuzzymatch_columns to format ['a.source_col_name:b.reference_col_name, match_metric, match_weight'].
|
|
531
|
-
if self.fuzzymatch_columns is not None:
|
|
532
|
-
__fuzzymatch_columns = []
|
|
533
|
-
for _fuzzy_column in self.fuzzymatch_columns:
|
|
534
|
-
__fuzzy_temp = "a.{0}:b.{1}, {2}, {3}".format(_fuzzy_column["source_column"], _fuzzy_column["reference_column"],
|
|
535
|
-
_fuzzy_column["match_metric"], _fuzzy_column["match_weight"])
|
|
536
|
-
if len(_fuzzy_column) == 5:
|
|
537
|
-
__fuzzy_temp = "{0}, {1}".format(__fuzzy_temp, _fuzzy_column["synonym_file"])
|
|
538
|
-
__fuzzymatch_columns.append(__fuzzy_temp)
|
|
539
|
-
|
|
540
|
-
# Output table arguments list
|
|
541
|
-
self.__func_output_args_sql_names = []
|
|
542
|
-
self.__func_output_args = []
|
|
543
|
-
|
|
544
|
-
# Model Cataloging related attributes.
|
|
545
|
-
self._sql_specific_attributes = {}
|
|
546
|
-
self._sql_formula_attribute_mapper = {}
|
|
547
|
-
self._target_column = None
|
|
548
|
-
self._algorithm_name = None
|
|
549
|
-
|
|
550
|
-
# Generate lists for rest of the function arguments
|
|
551
|
-
self.__func_other_arg_sql_names = []
|
|
552
|
-
self.__func_other_args = []
|
|
553
|
-
self.__func_other_arg_json_datatypes = []
|
|
554
|
-
|
|
555
|
-
self.__func_other_arg_sql_names.append("IdColumn")
|
|
556
|
-
self.__func_other_args.append(UtilFuncs._teradata_collapse_arglist(__id_column, "'"))
|
|
557
|
-
self.__func_other_arg_json_datatypes.append("STRING")
|
|
558
|
-
|
|
559
|
-
if self.source_nominalmatch_columns is not None and self.reference_nominalmatch_columns is not None:
|
|
560
|
-
self.__func_other_arg_sql_names.append("NominalMatchColumns")
|
|
561
|
-
self.__func_other_args.append(UtilFuncs._teradata_collapse_arglist(__nominalmatch_columns, "'"))
|
|
562
|
-
self.__func_other_arg_json_datatypes.append("STRING")
|
|
563
|
-
|
|
564
|
-
if self.fuzzymatch_columns is not None:
|
|
565
|
-
self.__func_other_arg_sql_names.append("FuzzyMatchColumns")
|
|
566
|
-
self.__func_other_args.append(UtilFuncs._teradata_collapse_arglist(__fuzzymatch_columns, "'"))
|
|
567
|
-
self.__func_other_arg_json_datatypes.append("STRING")
|
|
568
|
-
|
|
569
|
-
if self.threshold is not None and self.threshold != 0.5:
|
|
570
|
-
self.__func_other_arg_sql_names.append("ThresholdScore")
|
|
571
|
-
self.__func_other_args.append(UtilFuncs._teradata_collapse_arglist(self.threshold, "'"))
|
|
572
|
-
self.__func_other_arg_json_datatypes.append("DOUBLE")
|
|
573
|
-
|
|
574
|
-
if self.source_accumulate is not None or self.reference_accumulate is not None:
|
|
575
|
-
self.__func_other_arg_sql_names.append("Accumulate")
|
|
576
|
-
self.__func_other_args.append(UtilFuncs._teradata_collapse_arglist(__accumulate, "'"))
|
|
577
|
-
self.__func_other_arg_json_datatypes.append("STRING")
|
|
578
|
-
|
|
579
|
-
if self.handle_nulls is not None and self.handle_nulls != "mismatch":
|
|
580
|
-
self.__func_other_arg_sql_names.append("NullHandling")
|
|
581
|
-
self.__func_other_args.append(UtilFuncs._teradata_collapse_arglist(self.handle_nulls, "'"))
|
|
582
|
-
self.__func_other_arg_json_datatypes.append("STRING")
|
|
583
|
-
|
|
584
|
-
# Generate lists for rest of the function arguments
|
|
585
|
-
sequence_input_by_list = []
|
|
586
|
-
if self.source_data_sequence_column is not None:
|
|
587
|
-
sequence_input_by_list.append("a:" + UtilFuncs._teradata_collapse_arglist(self.source_data_sequence_column, ""))
|
|
588
|
-
|
|
589
|
-
if self.reference_data_sequence_column is not None:
|
|
590
|
-
sequence_input_by_list.append("b:" + UtilFuncs._teradata_collapse_arglist(self.reference_data_sequence_column, ""))
|
|
591
|
-
|
|
592
|
-
if len(sequence_input_by_list) > 0:
|
|
593
|
-
self.__func_other_arg_sql_names.append("SequenceInputBy")
|
|
594
|
-
sequence_input_by_arg_value = UtilFuncs._teradata_collapse_arglist(sequence_input_by_list, "'")
|
|
595
|
-
self.__func_other_args.append(sequence_input_by_arg_value)
|
|
596
|
-
self.__func_other_arg_json_datatypes.append("STRING")
|
|
597
|
-
self._sql_specific_attributes["SequenceInputBy"] = sequence_input_by_arg_value
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
# Declare empty lists to hold input table information.
|
|
601
|
-
self.__func_input_arg_sql_names = []
|
|
602
|
-
self.__func_input_table_view_query = []
|
|
603
|
-
self.__func_input_dataframe_type = []
|
|
604
|
-
self.__func_input_distribution = []
|
|
605
|
-
self.__func_input_partition_by_cols = []
|
|
606
|
-
self.__func_input_order_by_cols = []
|
|
607
|
-
|
|
608
|
-
# Process source_data
|
|
609
|
-
if self.__awu._is_default_or_not(self.source_data_partition_column, "ANY"):
|
|
610
|
-
self.source_data_partition_column = UtilFuncs._teradata_collapse_arglist(self.source_data_partition_column, "\"")
|
|
611
|
-
|
|
612
|
-
self.__table_ref = self.__awu._teradata_on_clause_from_dataframe(self.source_data, False)
|
|
613
|
-
self.__func_input_distribution.append("FACT")
|
|
614
|
-
self.__func_input_arg_sql_names.append("a")
|
|
615
|
-
self.__func_input_table_view_query.append(self.__table_ref["ref"])
|
|
616
|
-
self.__func_input_dataframe_type.append(self.__table_ref["ref_type"])
|
|
617
|
-
self.__func_input_partition_by_cols.append(self.source_data_partition_column)
|
|
618
|
-
self.__func_input_order_by_cols.append(UtilFuncs._teradata_collapse_arglist(self.source_data_order_column, "\""))
|
|
619
|
-
|
|
620
|
-
# Process reference_data
|
|
621
|
-
reference_data_distribution = "DIMENSION"
|
|
622
|
-
if self.reference_data_partition_column is not None:
|
|
623
|
-
reference_data_distribution = "FACT"
|
|
624
|
-
reference_data_partition_column = UtilFuncs._teradata_collapse_arglist(self.reference_data_partition_column, "\"")
|
|
625
|
-
else:
|
|
626
|
-
reference_data_partition_column = "NA_character_"
|
|
627
|
-
self.__table_ref = self.__awu._teradata_on_clause_from_dataframe(self.reference_data, False)
|
|
628
|
-
self.__func_input_distribution.append(reference_data_distribution)
|
|
629
|
-
self.__func_input_arg_sql_names.append("b")
|
|
630
|
-
self.__func_input_table_view_query.append(self.__table_ref["ref"])
|
|
631
|
-
self.__func_input_dataframe_type.append(self.__table_ref["ref_type"])
|
|
632
|
-
self.__func_input_partition_by_cols.append(self.reference_data_partition_column)
|
|
633
|
-
self.__func_input_order_by_cols.append(UtilFuncs._teradata_collapse_arglist(self.reference_data_order_column, "\""))
|
|
634
|
-
|
|
635
|
-
function_name = "IdentityMatch"
|
|
636
|
-
# Create instance to generate SQLMR.
|
|
637
|
-
self.__aqg_obj = AnalyticQueryGenerator(function_name,
|
|
638
|
-
self.__func_input_arg_sql_names,
|
|
639
|
-
self.__func_input_table_view_query,
|
|
640
|
-
self.__func_input_dataframe_type,
|
|
641
|
-
self.__func_input_distribution,
|
|
642
|
-
self.__func_input_partition_by_cols,
|
|
643
|
-
self.__func_input_order_by_cols,
|
|
644
|
-
self.__func_other_arg_sql_names,
|
|
645
|
-
self.__func_other_args,
|
|
646
|
-
self.__func_other_arg_json_datatypes,
|
|
647
|
-
self.__func_output_args_sql_names,
|
|
648
|
-
self.__func_output_args,
|
|
649
|
-
engine="ENGINE_ML")
|
|
650
|
-
# Invoke call to SQL-MR generation.
|
|
651
|
-
self.sqlmr_query = self.__aqg_obj._gen_sqlmr_select_stmt_sql()
|
|
652
|
-
|
|
653
|
-
# Print SQL-MR query if requested to do so.
|
|
654
|
-
if display.print_sqlmr_query:
|
|
655
|
-
print(self.sqlmr_query)
|
|
656
|
-
|
|
657
|
-
# Set the algorithm name for Model Cataloging.
|
|
658
|
-
self._algorithm_name = self.__aqg_obj._get_alias_name_for_function(function_name)
|
|
659
|
-
|
|
660
|
-
def __execute(self):
|
|
661
|
-
"""
|
|
662
|
-
Function to execute SQL-MR queries.
|
|
663
|
-
Create DataFrames for the required SQL-MR outputs.
|
|
664
|
-
"""
|
|
665
|
-
# Generate STDOUT table name and add it to the output table list.
|
|
666
|
-
sqlmr_stdout_temp_tablename = UtilFuncs._generate_temp_table_name(prefix="td_sqlmr_out_", use_default_database=True, gc_on_quit=True, quote=False)
|
|
667
|
-
try:
|
|
668
|
-
# Generate the output.
|
|
669
|
-
UtilFuncs._create_view(sqlmr_stdout_temp_tablename, self.sqlmr_query)
|
|
670
|
-
except Exception as emsg:
|
|
671
|
-
raise TeradataMlException(Messages.get_message(MessageCodes.TDMLDF_EXEC_SQL_FAILED, str(emsg)), MessageCodes.TDMLDF_EXEC_SQL_FAILED)
|
|
672
|
-
|
|
673
|
-
# Update output table data frames.
|
|
674
|
-
self._mlresults = []
|
|
675
|
-
self.result = self.__awu._create_data_set_object(df_input=UtilFuncs._extract_table_name(sqlmr_stdout_temp_tablename), source_type="table", database_name=UtilFuncs._extract_db_name(sqlmr_stdout_temp_tablename))
|
|
676
|
-
self._mlresults.append(self.result)
|
|
677
|
-
|
|
678
|
-
def show_query(self):
|
|
679
|
-
"""
|
|
680
|
-
Function to return the underlying SQL query.
|
|
681
|
-
When model object is created using retrieve_model(), then None is returned.
|
|
682
|
-
"""
|
|
683
|
-
return self.sqlmr_query
|
|
684
|
-
|
|
685
|
-
def get_prediction_type(self):
|
|
686
|
-
"""
|
|
687
|
-
Function to return the Prediction type of the algorithm.
|
|
688
|
-
When model object is created using retrieve_model(), then the value returned is
|
|
689
|
-
as saved in the Model Catalog.
|
|
690
|
-
"""
|
|
691
|
-
return self._prediction_type
|
|
692
|
-
|
|
693
|
-
def get_target_column(self):
|
|
694
|
-
"""
|
|
695
|
-
Function to return the Target Column of the algorithm.
|
|
696
|
-
When model object is created using retrieve_model(), then the value returned is
|
|
697
|
-
as saved in the Model Catalog.
|
|
698
|
-
"""
|
|
699
|
-
return self._target_column
|
|
700
|
-
|
|
701
|
-
def get_build_time(self):
|
|
702
|
-
"""
|
|
703
|
-
Function to return the build time of the algorithm in seconds.
|
|
704
|
-
When model object is created using retrieve_model(), then the value returned is
|
|
705
|
-
as saved in the Model Catalog.
|
|
706
|
-
"""
|
|
707
|
-
return self._build_time
|
|
708
|
-
|
|
709
|
-
def _get_algorithm_name(self):
|
|
710
|
-
"""
|
|
711
|
-
Function to return the name of the algorithm.
|
|
712
|
-
"""
|
|
713
|
-
return self._algorithm_name
|
|
714
|
-
|
|
715
|
-
def _get_sql_specific_attributes(self):
|
|
716
|
-
"""
|
|
717
|
-
Function to return the dictionary containing the SQL specific attributes of the algorithm.
|
|
718
|
-
"""
|
|
719
|
-
return self._sql_specific_attributes
|
|
720
|
-
|
|
721
|
-
@classmethod
|
|
722
|
-
def _from_model_catalog(cls,
|
|
723
|
-
result = None,
|
|
724
|
-
**kwargs):
|
|
725
|
-
"""
|
|
726
|
-
Classmethod is used by Model Cataloging, to instantiate this wrapper class.
|
|
727
|
-
"""
|
|
728
|
-
kwargs.pop("result", None)
|
|
729
|
-
|
|
730
|
-
# Model Cataloging related attributes.
|
|
731
|
-
target_column = kwargs.pop("__target_column", None)
|
|
732
|
-
prediction_type = kwargs.pop("__prediction_type", None)
|
|
733
|
-
algorithm_name = kwargs.pop("__algorithm_name", None)
|
|
734
|
-
build_time = kwargs.pop("__build_time", None)
|
|
735
|
-
|
|
736
|
-
# Let's create an object of this class.
|
|
737
|
-
obj = cls(**kwargs)
|
|
738
|
-
obj.result = result
|
|
739
|
-
|
|
740
|
-
# Initialize the sqlmr_query class attribute.
|
|
741
|
-
obj.sqlmr_query = None
|
|
742
|
-
|
|
743
|
-
# Initialize the SQL specific Model Cataloging attributes.
|
|
744
|
-
obj._sql_specific_attributes = None
|
|
745
|
-
obj._target_column = target_column
|
|
746
|
-
obj._prediction_type = prediction_type
|
|
747
|
-
obj._algorithm_name = algorithm_name
|
|
748
|
-
obj._build_time = build_time
|
|
749
|
-
|
|
750
|
-
# Update output table data frames.
|
|
751
|
-
obj._mlresults = []
|
|
752
|
-
obj.result = obj.__awu._create_data_set_object(df_input=UtilFuncs._extract_table_name(obj.result), source_type="table", database_name=UtilFuncs._extract_db_name(obj.result))
|
|
753
|
-
obj._mlresults.append(obj.result)
|
|
754
|
-
return obj
|
|
755
|
-
|
|
756
|
-
def __repr__(self):
|
|
757
|
-
"""
|
|
758
|
-
Returns the string representation for a IdentityMatch class instance.
|
|
759
|
-
"""
|
|
760
|
-
repr_string="############ STDOUT Output ############"
|
|
761
|
-
repr_string = "{}\n\n{}".format(repr_string,self.result)
|
|
762
|
-
return repr_string
|
|
763
|
-
|