teradataml 17.20.0.7__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 +1864 -1640
- teradataml/__init__.py +70 -60
- teradataml/_version.py +11 -11
- teradataml/analytics/Transformations.py +2995 -2995
- teradataml/analytics/__init__.py +81 -83
- teradataml/analytics/analytic_function_executor.py +2013 -2010
- teradataml/analytics/analytic_query_generator.py +958 -958
- teradataml/analytics/byom/H2OPredict.py +514 -514
- teradataml/analytics/byom/PMMLPredict.py +437 -437
- teradataml/analytics/byom/__init__.py +14 -14
- teradataml/analytics/json_parser/__init__.py +130 -130
- teradataml/analytics/json_parser/analytic_functions_argument.py +1707 -1707
- teradataml/analytics/json_parser/json_store.py +191 -191
- teradataml/analytics/json_parser/metadata.py +1637 -1637
- teradataml/analytics/json_parser/utils.py +804 -803
- teradataml/analytics/meta_class.py +196 -196
- teradataml/analytics/sqle/DecisionTreePredict.py +455 -470
- teradataml/analytics/sqle/NaiveBayesPredict.py +419 -428
- teradataml/analytics/sqle/__init__.py +97 -110
- teradataml/analytics/sqle/json/decisiontreepredict_sqle.json +78 -78
- teradataml/analytics/sqle/json/naivebayespredict_sqle.json +62 -62
- teradataml/analytics/table_operator/__init__.py +10 -10
- teradataml/analytics/uaf/__init__.py +63 -63
- teradataml/analytics/utils.py +693 -692
- teradataml/analytics/valib.py +1603 -1600
- 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 +1 -3
- teradataml/catalog/byom.py +1759 -1716
- teradataml/catalog/function_argument_mapper.py +859 -861
- teradataml/catalog/model_cataloging_utils.py +491 -1510
- teradataml/clients/pkce_client.py +481 -481
- teradataml/common/aed_utils.py +6 -2
- teradataml/common/bulk_exposed_utils.py +111 -111
- teradataml/common/constants.py +1433 -1441
- teradataml/common/deprecations.py +160 -0
- teradataml/common/exceptions.py +73 -73
- teradataml/common/formula.py +742 -742
- teradataml/common/garbagecollector.py +592 -635
- teradataml/common/messagecodes.py +422 -431
- teradataml/common/messages.py +227 -231
- teradataml/common/sqlbundle.py +693 -693
- teradataml/common/td_coltype_code_to_tdtype.py +48 -48
- teradataml/common/utils.py +2418 -2500
- teradataml/common/warnings.py +25 -25
- teradataml/common/wrapper_utils.py +1 -110
- teradataml/config/dummy_file1.cfg +4 -4
- teradataml/config/dummy_file2.cfg +2 -2
- teradataml/config/sqlengine_alias_definitions_v1.0 +13 -13
- teradataml/config/sqlengine_alias_definitions_v1.1 +19 -19
- teradataml/config/sqlengine_alias_definitions_v1.3 +18 -18
- teradataml/context/aed_context.py +217 -217
- teradataml/context/context.py +1071 -999
- teradataml/data/A_loan.csv +19 -19
- teradataml/data/BINARY_REALS_LEFT.csv +11 -11
- teradataml/data/BINARY_REALS_RIGHT.csv +11 -11
- teradataml/data/B_loan.csv +49 -49
- teradataml/data/BuoyData2.csv +17 -17
- teradataml/data/CONVOLVE2_COMPLEX_LEFT.csv +5 -5
- teradataml/data/CONVOLVE2_COMPLEX_RIGHT.csv +5 -5
- teradataml/data/Convolve2RealsLeft.csv +5 -5
- teradataml/data/Convolve2RealsRight.csv +5 -5
- teradataml/data/Convolve2ValidLeft.csv +11 -11
- teradataml/data/Convolve2ValidRight.csv +11 -11
- teradataml/data/DFFTConv_Real_8_8.csv +65 -65
- teradataml/data/Orders1_12mf.csv +24 -24
- teradataml/data/Pi_loan.csv +7 -7
- teradataml/data/SMOOTHED_DATA.csv +7 -7
- teradataml/data/TestDFFT8.csv +9 -9
- teradataml/data/TestRiver.csv +109 -109
- teradataml/data/Traindata.csv +28 -28
- teradataml/data/acf.csv +17 -17
- teradataml/data/adaboost_example.json +34 -34
- teradataml/data/adaboostpredict_example.json +24 -24
- teradataml/data/additional_table.csv +10 -10
- teradataml/data/admissions_test.csv +21 -21
- teradataml/data/admissions_train.csv +41 -41
- teradataml/data/admissions_train_nulls.csv +41 -41
- teradataml/data/ageandheight.csv +13 -13
- teradataml/data/ageandpressure.csv +31 -31
- teradataml/data/antiselect_example.json +36 -36
- teradataml/data/antiselect_input.csv +8 -8
- teradataml/data/antiselect_input_mixed_case.csv +8 -8
- teradataml/data/applicant_external.csv +6 -6
- teradataml/data/applicant_reference.csv +6 -6
- teradataml/data/arima_example.json +9 -9
- teradataml/data/assortedtext_input.csv +8 -8
- teradataml/data/attribution_example.json +33 -33
- teradataml/data/attribution_sample_table.csv +27 -27
- teradataml/data/attribution_sample_table1.csv +6 -6
- teradataml/data/attribution_sample_table2.csv +11 -11
- teradataml/data/bank_churn.csv +10001 -0
- teradataml/data/bank_web_clicks1.csv +42 -42
- teradataml/data/bank_web_clicks2.csv +91 -91
- teradataml/data/bank_web_url.csv +85 -85
- teradataml/data/barrier.csv +2 -2
- teradataml/data/barrier_new.csv +3 -3
- teradataml/data/betweenness_example.json +13 -13
- teradataml/data/bin_breaks.csv +8 -8
- teradataml/data/bin_fit_ip.csv +3 -3
- teradataml/data/binary_complex_left.csv +11 -11
- teradataml/data/binary_complex_right.csv +11 -11
- teradataml/data/binary_matrix_complex_left.csv +21 -21
- teradataml/data/binary_matrix_complex_right.csv +21 -21
- teradataml/data/binary_matrix_real_left.csv +21 -21
- teradataml/data/binary_matrix_real_right.csv +21 -21
- teradataml/data/blood2ageandweight.csv +26 -26
- teradataml/data/bmi.csv +501 -0
- teradataml/data/boston.csv +507 -507
- teradataml/data/buoydata_mix.csv +11 -11
- teradataml/data/burst_data.csv +5 -5
- teradataml/data/burst_example.json +20 -20
- teradataml/data/byom_example.json +17 -17
- teradataml/data/bytes_table.csv +3 -3
- teradataml/data/cal_housing_ex_raw.csv +70 -70
- teradataml/data/callers.csv +7 -7
- teradataml/data/calls.csv +10 -10
- teradataml/data/cars_hist.csv +33 -33
- teradataml/data/cat_table.csv +24 -24
- teradataml/data/ccm_example.json +31 -31
- teradataml/data/ccm_input.csv +91 -91
- teradataml/data/ccm_input2.csv +13 -13
- teradataml/data/ccmexample.csv +101 -101
- teradataml/data/ccmprepare_example.json +8 -8
- teradataml/data/ccmprepare_input.csv +91 -91
- teradataml/data/cfilter_example.json +12 -12
- teradataml/data/changepointdetection_example.json +18 -18
- teradataml/data/changepointdetectionrt_example.json +8 -8
- teradataml/data/chi_sq.csv +2 -2
- teradataml/data/churn_data.csv +14 -14
- teradataml/data/churn_emission.csv +35 -35
- teradataml/data/churn_initial.csv +3 -3
- teradataml/data/churn_state_transition.csv +5 -5
- teradataml/data/citedges_2.csv +745 -745
- teradataml/data/citvertices_2.csv +1210 -1210
- teradataml/data/clicks2.csv +16 -16
- teradataml/data/clickstream.csv +12 -12
- teradataml/data/clickstream1.csv +11 -11
- teradataml/data/closeness_example.json +15 -15
- teradataml/data/complaints.csv +21 -21
- teradataml/data/complaints_mini.csv +3 -3
- teradataml/data/complaints_testtoken.csv +224 -224
- teradataml/data/complaints_tokens_test.csv +353 -353
- teradataml/data/complaints_traintoken.csv +472 -472
- teradataml/data/computers_category.csv +1001 -1001
- teradataml/data/computers_test1.csv +1252 -1252
- teradataml/data/computers_train1.csv +5009 -5009
- teradataml/data/computers_train1_clustered.csv +5009 -5009
- teradataml/data/confusionmatrix_example.json +9 -9
- teradataml/data/conversion_event_table.csv +3 -3
- teradataml/data/corr_input.csv +17 -17
- teradataml/data/correlation_example.json +11 -11
- teradataml/data/coxhazardratio_example.json +39 -39
- teradataml/data/coxph_example.json +15 -15
- teradataml/data/coxsurvival_example.json +28 -28
- teradataml/data/cpt.csv +41 -41
- teradataml/data/credit_ex_merged.csv +45 -45
- teradataml/data/customer_loyalty.csv +301 -301
- teradataml/data/customer_loyalty_newseq.csv +31 -31
- teradataml/data/dataframe_example.json +146 -146
- teradataml/data/decisionforest_example.json +37 -37
- teradataml/data/decisionforestpredict_example.json +38 -38
- teradataml/data/decisiontree_example.json +21 -21
- teradataml/data/decisiontreepredict_example.json +45 -45
- teradataml/data/dfft2_size4_real.csv +17 -17
- teradataml/data/dfft2_test_matrix16.csv +17 -17
- teradataml/data/dfft2conv_real_4_4.csv +65 -65
- teradataml/data/diabetes.csv +443 -443
- teradataml/data/diabetes_test.csv +89 -89
- teradataml/data/dict_table.csv +5 -5
- teradataml/data/docperterm_table.csv +4 -4
- teradataml/data/docs/__init__.py +1 -1
- teradataml/data/docs/byom/docs/DataRobotPredict.py +180 -180
- teradataml/data/docs/byom/docs/DataikuPredict.py +177 -177
- teradataml/data/docs/byom/docs/H2OPredict.py +324 -324
- teradataml/data/docs/byom/docs/ONNXPredict.py +283 -283
- teradataml/data/docs/byom/docs/PMMLPredict.py +277 -277
- teradataml/data/docs/sqle/docs_17_10/Antiselect.py +82 -82
- teradataml/data/docs/sqle/docs_17_10/Attribution.py +199 -199
- teradataml/data/docs/sqle/docs_17_10/BincodeFit.py +171 -171
- teradataml/data/docs/sqle/docs_17_10/BincodeTransform.py +131 -130
- teradataml/data/docs/sqle/docs_17_10/CategoricalSummary.py +86 -86
- teradataml/data/docs/sqle/docs_17_10/ChiSq.py +90 -90
- teradataml/data/docs/sqle/docs_17_10/ColumnSummary.py +85 -85
- teradataml/data/docs/sqle/docs_17_10/ConvertTo.py +95 -95
- teradataml/data/docs/sqle/docs_17_10/DecisionForestPredict.py +139 -139
- teradataml/data/docs/sqle/docs_17_10/DecisionTreePredict.py +151 -151
- teradataml/data/docs/sqle/docs_17_10/FTest.py +160 -160
- teradataml/data/docs/sqle/docs_17_10/FillRowId.py +82 -82
- teradataml/data/docs/sqle/docs_17_10/Fit.py +87 -87
- teradataml/data/docs/sqle/docs_17_10/GLMPredict.py +144 -144
- teradataml/data/docs/sqle/docs_17_10/GetRowsWithMissingValues.py +84 -84
- teradataml/data/docs/sqle/docs_17_10/GetRowsWithoutMissingValues.py +81 -81
- teradataml/data/docs/sqle/docs_17_10/Histogram.py +164 -164
- teradataml/data/docs/sqle/docs_17_10/MovingAverage.py +134 -134
- teradataml/data/docs/sqle/docs_17_10/NGramSplitter.py +208 -208
- teradataml/data/docs/sqle/docs_17_10/NPath.py +265 -265
- teradataml/data/docs/sqle/docs_17_10/NaiveBayesPredict.py +116 -116
- teradataml/data/docs/sqle/docs_17_10/NaiveBayesTextClassifierPredict.py +176 -176
- teradataml/data/docs/sqle/docs_17_10/NumApply.py +147 -147
- teradataml/data/docs/sqle/docs_17_10/OneHotEncodingFit.py +132 -132
- teradataml/data/docs/sqle/docs_17_10/OneHotEncodingTransform.py +103 -103
- teradataml/data/docs/sqle/docs_17_10/OutlierFilterFit.py +165 -165
- teradataml/data/docs/sqle/docs_17_10/OutlierFilterTransform.py +101 -101
- teradataml/data/docs/sqle/docs_17_10/Pack.py +128 -128
- teradataml/data/docs/sqle/docs_17_10/PolynomialFeaturesFit.py +111 -111
- teradataml/data/docs/sqle/docs_17_10/PolynomialFeaturesTransform.py +102 -102
- teradataml/data/docs/sqle/docs_17_10/QQNorm.py +104 -104
- teradataml/data/docs/sqle/docs_17_10/RoundColumns.py +109 -109
- teradataml/data/docs/sqle/docs_17_10/RowNormalizeFit.py +117 -117
- teradataml/data/docs/sqle/docs_17_10/RowNormalizeTransform.py +99 -98
- teradataml/data/docs/sqle/docs_17_10/SVMSparsePredict.py +152 -152
- teradataml/data/docs/sqle/docs_17_10/ScaleFit.py +197 -197
- teradataml/data/docs/sqle/docs_17_10/ScaleTransform.py +99 -98
- teradataml/data/docs/sqle/docs_17_10/Sessionize.py +113 -113
- teradataml/data/docs/sqle/docs_17_10/SimpleImputeFit.py +116 -116
- teradataml/data/docs/sqle/docs_17_10/SimpleImputeTransform.py +98 -98
- teradataml/data/docs/sqle/docs_17_10/StrApply.py +187 -187
- teradataml/data/docs/sqle/docs_17_10/StringSimilarity.py +145 -145
- teradataml/data/docs/sqle/docs_17_10/Transform.py +105 -104
- teradataml/data/docs/sqle/docs_17_10/UnivariateStatistics.py +141 -141
- teradataml/data/docs/sqle/docs_17_10/Unpack.py +214 -214
- teradataml/data/docs/sqle/docs_17_10/WhichMax.py +83 -83
- teradataml/data/docs/sqle/docs_17_10/WhichMin.py +83 -83
- teradataml/data/docs/sqle/docs_17_10/ZTest.py +155 -155
- teradataml/data/docs/sqle/docs_17_20/ANOVA.py +126 -126
- teradataml/data/docs/sqle/docs_17_20/Antiselect.py +82 -82
- teradataml/data/docs/sqle/docs_17_20/Attribution.py +200 -200
- teradataml/data/docs/sqle/docs_17_20/BincodeFit.py +171 -171
- teradataml/data/docs/sqle/docs_17_20/BincodeTransform.py +139 -138
- teradataml/data/docs/sqle/docs_17_20/CategoricalSummary.py +86 -86
- teradataml/data/docs/sqle/docs_17_20/ChiSq.py +90 -90
- teradataml/data/docs/sqle/docs_17_20/ClassificationEvaluator.py +166 -166
- teradataml/data/docs/sqle/docs_17_20/ColumnSummary.py +85 -85
- teradataml/data/docs/sqle/docs_17_20/ColumnTransformer.py +243 -243
- teradataml/data/docs/sqle/docs_17_20/ConvertTo.py +113 -113
- teradataml/data/docs/sqle/docs_17_20/DecisionForest.py +279 -279
- teradataml/data/docs/sqle/docs_17_20/DecisionForestPredict.py +144 -144
- teradataml/data/docs/sqle/docs_17_20/DecisionTreePredict.py +135 -135
- teradataml/data/docs/sqle/docs_17_20/FTest.py +160 -160
- teradataml/data/docs/sqle/docs_17_20/FillRowId.py +82 -82
- teradataml/data/docs/sqle/docs_17_20/Fit.py +87 -87
- teradataml/data/docs/sqle/docs_17_20/GLM.py +380 -380
- teradataml/data/docs/sqle/docs_17_20/GLMPerSegment.py +414 -414
- teradataml/data/docs/sqle/docs_17_20/GLMPredict.py +144 -144
- teradataml/data/docs/sqle/docs_17_20/GLMPredictPerSegment.py +233 -234
- teradataml/data/docs/sqle/docs_17_20/GetFutileColumns.py +123 -123
- teradataml/data/docs/sqle/docs_17_20/GetRowsWithMissingValues.py +108 -108
- teradataml/data/docs/sqle/docs_17_20/GetRowsWithoutMissingValues.py +105 -105
- teradataml/data/docs/sqle/docs_17_20/Histogram.py +223 -223
- teradataml/data/docs/sqle/docs_17_20/KMeans.py +204 -204
- teradataml/data/docs/sqle/docs_17_20/KMeansPredict.py +144 -143
- teradataml/data/docs/sqle/docs_17_20/KNN.py +214 -214
- teradataml/data/docs/sqle/docs_17_20/MovingAverage.py +134 -134
- teradataml/data/docs/sqle/docs_17_20/NGramSplitter.py +208 -208
- teradataml/data/docs/sqle/docs_17_20/NPath.py +265 -265
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesPredict.py +116 -116
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierPredict.py +177 -176
- teradataml/data/docs/sqle/docs_17_20/NaiveBayesTextClassifierTrainer.py +126 -126
- teradataml/data/docs/sqle/docs_17_20/NonLinearCombineFit.py +117 -117
- teradataml/data/docs/sqle/docs_17_20/NonLinearCombineTransform.py +112 -112
- teradataml/data/docs/sqle/docs_17_20/NumApply.py +147 -147
- teradataml/data/docs/sqle/docs_17_20/OneClassSVM.py +307 -307
- teradataml/data/docs/sqle/docs_17_20/OneClassSVMPredict.py +185 -184
- teradataml/data/docs/sqle/docs_17_20/OneHotEncodingFit.py +225 -225
- teradataml/data/docs/sqle/docs_17_20/OneHotEncodingTransform.py +115 -115
- teradataml/data/docs/sqle/docs_17_20/OrdinalEncodingFit.py +219 -219
- teradataml/data/docs/sqle/docs_17_20/OrdinalEncodingTransform.py +127 -127
- teradataml/data/docs/sqle/docs_17_20/OutlierFilterFit.py +189 -189
- teradataml/data/docs/sqle/docs_17_20/OutlierFilterTransform.py +117 -112
- teradataml/data/docs/sqle/docs_17_20/Pack.py +128 -128
- teradataml/data/docs/sqle/docs_17_20/PolynomialFeaturesFit.py +111 -111
- teradataml/data/docs/sqle/docs_17_20/PolynomialFeaturesTransform.py +112 -111
- teradataml/data/docs/sqle/docs_17_20/QQNorm.py +104 -104
- teradataml/data/docs/sqle/docs_17_20/ROC.py +163 -163
- teradataml/data/docs/sqle/docs_17_20/RandomProjectionFit.py +154 -154
- teradataml/data/docs/sqle/docs_17_20/RandomProjectionMinComponents.py +106 -106
- teradataml/data/docs/sqle/docs_17_20/RandomProjectionTransform.py +120 -120
- teradataml/data/docs/sqle/docs_17_20/RegressionEvaluator.py +211 -211
- teradataml/data/docs/sqle/docs_17_20/RoundColumns.py +108 -108
- teradataml/data/docs/sqle/docs_17_20/RowNormalizeFit.py +117 -117
- teradataml/data/docs/sqle/docs_17_20/RowNormalizeTransform.py +111 -110
- teradataml/data/docs/sqle/docs_17_20/SVM.py +413 -413
- teradataml/data/docs/sqle/docs_17_20/SVMPredict.py +202 -202
- teradataml/data/docs/sqle/docs_17_20/SVMSparsePredict.py +152 -152
- teradataml/data/docs/sqle/docs_17_20/ScaleFit.py +197 -197
- teradataml/data/docs/sqle/docs_17_20/ScaleTransform.py +110 -109
- teradataml/data/docs/sqle/docs_17_20/SentimentExtractor.py +206 -206
- teradataml/data/docs/sqle/docs_17_20/Sessionize.py +113 -113
- teradataml/data/docs/sqle/docs_17_20/Silhouette.py +152 -152
- teradataml/data/docs/sqle/docs_17_20/SimpleImputeFit.py +116 -116
- teradataml/data/docs/sqle/docs_17_20/SimpleImputeTransform.py +109 -108
- teradataml/data/docs/sqle/docs_17_20/StrApply.py +187 -187
- teradataml/data/docs/sqle/docs_17_20/StringSimilarity.py +145 -145
- teradataml/data/docs/sqle/docs_17_20/TDDecisionForestPredict.py +207 -207
- teradataml/data/docs/sqle/docs_17_20/TDGLMPredict.py +171 -171
- teradataml/data/docs/sqle/docs_17_20/TargetEncodingFit.py +266 -266
- teradataml/data/docs/sqle/docs_17_20/TargetEncodingTransform.py +141 -140
- teradataml/data/docs/sqle/docs_17_20/TextParser.py +172 -172
- teradataml/data/docs/sqle/docs_17_20/TrainTestSplit.py +159 -159
- teradataml/data/docs/sqle/docs_17_20/Transform.py +123 -123
- teradataml/data/docs/sqle/docs_17_20/UnivariateStatistics.py +141 -141
- teradataml/data/docs/sqle/docs_17_20/Unpack.py +214 -214
- teradataml/data/docs/sqle/docs_17_20/VectorDistance.py +168 -168
- teradataml/data/docs/sqle/docs_17_20/WhichMax.py +83 -83
- teradataml/data/docs/sqle/docs_17_20/WhichMin.py +83 -83
- teradataml/data/docs/sqle/docs_17_20/WordEmbeddings.py +236 -236
- teradataml/data/docs/sqle/docs_17_20/XGBoost.py +353 -353
- teradataml/data/docs/sqle/docs_17_20/XGBoostPredict.py +275 -275
- teradataml/data/docs/sqle/docs_17_20/ZTest.py +155 -155
- teradataml/data/docs/tableoperator/docs_17_00/ReadNOS.py +429 -429
- teradataml/data/docs/tableoperator/docs_17_05/ReadNOS.py +429 -429
- teradataml/data/docs/tableoperator/docs_17_05/WriteNOS.py +347 -347
- teradataml/data/docs/tableoperator/docs_17_10/ReadNOS.py +428 -428
- teradataml/data/docs/tableoperator/docs_17_10/WriteNOS.py +347 -347
- teradataml/data/docs/tableoperator/docs_17_20/ReadNOS.py +439 -439
- teradataml/data/docs/tableoperator/docs_17_20/WriteNOS.py +386 -386
- teradataml/data/docs/uaf/docs_17_20/ACF.py +195 -195
- teradataml/data/docs/uaf/docs_17_20/ArimaEstimate.py +369 -369
- teradataml/data/docs/uaf/docs_17_20/ArimaForecast.py +142 -142
- teradataml/data/docs/uaf/docs_17_20/ArimaValidate.py +159 -159
- teradataml/data/docs/uaf/docs_17_20/BinaryMatrixOp.py +247 -247
- teradataml/data/docs/uaf/docs_17_20/BinarySeriesOp.py +252 -252
- teradataml/data/docs/uaf/docs_17_20/BreuschGodfrey.py +177 -177
- teradataml/data/docs/uaf/docs_17_20/BreuschPaganGodfrey.py +174 -174
- teradataml/data/docs/uaf/docs_17_20/Convolve.py +226 -226
- teradataml/data/docs/uaf/docs_17_20/Convolve2.py +214 -214
- teradataml/data/docs/uaf/docs_17_20/CumulPeriodogram.py +183 -183
- teradataml/data/docs/uaf/docs_17_20/DFFT.py +203 -203
- teradataml/data/docs/uaf/docs_17_20/DFFT2.py +216 -216
- teradataml/data/docs/uaf/docs_17_20/DFFT2Conv.py +215 -215
- teradataml/data/docs/uaf/docs_17_20/DFFTConv.py +191 -191
- teradataml/data/docs/uaf/docs_17_20/DTW.py +179 -179
- teradataml/data/docs/uaf/docs_17_20/DickeyFuller.py +144 -144
- teradataml/data/docs/uaf/docs_17_20/DurbinWatson.py +183 -183
- teradataml/data/docs/uaf/docs_17_20/ExtractResults.py +184 -184
- teradataml/data/docs/uaf/docs_17_20/FitMetrics.py +172 -172
- teradataml/data/docs/uaf/docs_17_20/GenseriesFormula.py +205 -205
- teradataml/data/docs/uaf/docs_17_20/GenseriesSinusoids.py +142 -142
- teradataml/data/docs/uaf/docs_17_20/HoltWintersForecaster.py +258 -258
- teradataml/data/docs/uaf/docs_17_20/IDFFT.py +164 -164
- teradataml/data/docs/uaf/docs_17_20/IDFFT2.py +198 -198
- teradataml/data/docs/uaf/docs_17_20/InputValidator.py +120 -120
- teradataml/data/docs/uaf/docs_17_20/LineSpec.py +155 -155
- teradataml/data/docs/uaf/docs_17_20/LinearRegr.py +214 -214
- teradataml/data/docs/uaf/docs_17_20/MAMean.py +173 -173
- teradataml/data/docs/uaf/docs_17_20/MInfo.py +133 -133
- teradataml/data/docs/uaf/docs_17_20/MatrixMultiply.py +135 -135
- teradataml/data/docs/uaf/docs_17_20/MultivarRegr.py +190 -190
- teradataml/data/docs/uaf/docs_17_20/PACF.py +158 -158
- teradataml/data/docs/uaf/docs_17_20/Portman.py +216 -216
- teradataml/data/docs/uaf/docs_17_20/PowerTransform.py +154 -154
- teradataml/data/docs/uaf/docs_17_20/Resample.py +228 -228
- teradataml/data/docs/uaf/docs_17_20/SInfo.py +122 -122
- teradataml/data/docs/uaf/docs_17_20/SeasonalNormalize.py +165 -165
- teradataml/data/docs/uaf/docs_17_20/SelectionCriteria.py +173 -173
- teradataml/data/docs/uaf/docs_17_20/SignifPeriodicities.py +170 -170
- teradataml/data/docs/uaf/docs_17_20/SignifResidmean.py +163 -163
- teradataml/data/docs/uaf/docs_17_20/SimpleExp.py +179 -179
- teradataml/data/docs/uaf/docs_17_20/Smoothma.py +207 -207
- teradataml/data/docs/uaf/docs_17_20/TrackingOp.py +150 -150
- teradataml/data/docs/uaf/docs_17_20/UNDIFF.py +171 -171
- teradataml/data/docs/uaf/docs_17_20/Unnormalize.py +201 -201
- teradataml/data/docs/uaf/docs_17_20/WhitesGeneral.py +169 -169
- teradataml/data/dtw_example.json +17 -17
- teradataml/data/dtw_t1.csv +11 -11
- teradataml/data/dtw_t2.csv +4 -4
- teradataml/data/dwt2d_example.json +15 -15
- teradataml/data/dwt_example.json +14 -14
- teradataml/data/dwt_filter_dim.csv +5 -5
- teradataml/data/emission.csv +9 -9
- teradataml/data/emp_table_by_dept.csv +19 -19
- teradataml/data/employee_info.csv +4 -4
- teradataml/data/employee_table.csv +6 -6
- teradataml/data/excluding_event_table.csv +2 -2
- teradataml/data/finance_data.csv +6 -6
- teradataml/data/finance_data2.csv +61 -61
- teradataml/data/finance_data3.csv +93 -93
- teradataml/data/fish.csv +160 -0
- teradataml/data/fm_blood2ageandweight.csv +26 -26
- teradataml/data/fmeasure_example.json +11 -11
- teradataml/data/followers_leaders.csv +10 -10
- teradataml/data/fpgrowth_example.json +12 -12
- teradataml/data/frequentpaths_example.json +29 -29
- teradataml/data/friends.csv +9 -9
- teradataml/data/fs_input.csv +33 -33
- teradataml/data/fs_input1.csv +33 -33
- teradataml/data/genData.csv +513 -513
- teradataml/data/geodataframe_example.json +39 -39
- teradataml/data/glass_types.csv +215 -0
- teradataml/data/glm_admissions_model.csv +12 -12
- teradataml/data/glm_example.json +29 -29
- teradataml/data/glml1l2_example.json +28 -28
- teradataml/data/glml1l2predict_example.json +54 -54
- teradataml/data/glmpredict_example.json +54 -54
- teradataml/data/gq_t1.csv +21 -21
- teradataml/data/hconvolve_complex_right.csv +5 -5
- teradataml/data/hconvolve_complex_rightmulti.csv +5 -5
- teradataml/data/histogram_example.json +11 -11
- teradataml/data/hmmdecoder_example.json +78 -78
- teradataml/data/hmmevaluator_example.json +24 -24
- teradataml/data/hmmsupervised_example.json +10 -10
- teradataml/data/hmmunsupervised_example.json +7 -7
- teradataml/data/house_values.csv +12 -12
- teradataml/data/house_values2.csv +13 -13
- teradataml/data/housing_cat.csv +7 -7
- teradataml/data/housing_data.csv +9 -9
- teradataml/data/housing_test.csv +47 -47
- teradataml/data/housing_test_binary.csv +47 -47
- teradataml/data/housing_train.csv +493 -493
- teradataml/data/housing_train_attribute.csv +4 -4
- teradataml/data/housing_train_binary.csv +437 -437
- teradataml/data/housing_train_parameter.csv +2 -2
- teradataml/data/housing_train_response.csv +493 -493
- teradataml/data/ibm_stock.csv +370 -370
- teradataml/data/ibm_stock1.csv +370 -370
- teradataml/data/identitymatch_example.json +21 -21
- teradataml/data/idf_table.csv +4 -4
- teradataml/data/impressions.csv +101 -101
- teradataml/data/inflation.csv +21 -21
- teradataml/data/initial.csv +3 -3
- teradataml/data/insect_sprays.csv +12 -12
- teradataml/data/insurance.csv +1339 -1339
- teradataml/data/interpolator_example.json +12 -12
- teradataml/data/iris_altinput.csv +481 -481
- teradataml/data/iris_attribute_output.csv +8 -8
- teradataml/data/iris_attribute_test.csv +121 -121
- teradataml/data/iris_attribute_train.csv +481 -481
- teradataml/data/iris_category_expect_predict.csv +31 -31
- teradataml/data/iris_data.csv +151 -0
- teradataml/data/iris_input.csv +151 -151
- teradataml/data/iris_response_train.csv +121 -121
- teradataml/data/iris_test.csv +31 -31
- teradataml/data/iris_train.csv +121 -121
- teradataml/data/join_table1.csv +4 -4
- teradataml/data/join_table2.csv +4 -4
- teradataml/data/jsons/anly_function_name.json +6 -6
- teradataml/data/jsons/byom/dataikupredict.json +147 -147
- teradataml/data/jsons/byom/datarobotpredict.json +146 -146
- teradataml/data/jsons/byom/h2opredict.json +194 -194
- teradataml/data/jsons/byom/onnxpredict.json +186 -186
- teradataml/data/jsons/byom/pmmlpredict.json +146 -146
- teradataml/data/jsons/paired_functions.json +435 -435
- teradataml/data/jsons/sqle/16.20/Antiselect.json +56 -56
- teradataml/data/jsons/sqle/16.20/Attribution.json +249 -249
- teradataml/data/jsons/sqle/16.20/DecisionForestPredict.json +156 -156
- teradataml/data/jsons/sqle/16.20/DecisionTreePredict.json +170 -170
- teradataml/data/jsons/sqle/16.20/GLMPredict.json +122 -122
- teradataml/data/jsons/sqle/16.20/MovingAverage.json +367 -367
- teradataml/data/jsons/sqle/16.20/NGramSplitter.json +239 -239
- teradataml/data/jsons/sqle/16.20/NaiveBayesPredict.json +136 -136
- teradataml/data/jsons/sqle/16.20/NaiveBayesTextClassifierPredict.json +235 -235
- teradataml/data/jsons/sqle/16.20/Pack.json +98 -98
- teradataml/data/jsons/sqle/16.20/SVMSparsePredict.json +162 -162
- teradataml/data/jsons/sqle/16.20/Sessionize.json +105 -105
- teradataml/data/jsons/sqle/16.20/StringSimilarity.json +86 -86
- teradataml/data/jsons/sqle/16.20/Unpack.json +166 -166
- teradataml/data/jsons/sqle/16.20/nPath.json +269 -269
- teradataml/data/jsons/sqle/17.00/Antiselect.json +56 -56
- teradataml/data/jsons/sqle/17.00/Attribution.json +249 -249
- teradataml/data/jsons/sqle/17.00/DecisionForestPredict.json +156 -156
- teradataml/data/jsons/sqle/17.00/DecisionTreePredict.json +170 -170
- teradataml/data/jsons/sqle/17.00/GLMPredict.json +122 -122
- teradataml/data/jsons/sqle/17.00/MovingAverage.json +367 -367
- teradataml/data/jsons/sqle/17.00/NGramSplitter.json +239 -239
- teradataml/data/jsons/sqle/17.00/NaiveBayesPredict.json +136 -136
- teradataml/data/jsons/sqle/17.00/NaiveBayesTextClassifierPredict.json +235 -235
- teradataml/data/jsons/sqle/17.00/Pack.json +98 -98
- teradataml/data/jsons/sqle/17.00/SVMSparsePredict.json +162 -162
- teradataml/data/jsons/sqle/17.00/Sessionize.json +105 -105
- teradataml/data/jsons/sqle/17.00/StringSimilarity.json +86 -86
- teradataml/data/jsons/sqle/17.00/Unpack.json +166 -166
- teradataml/data/jsons/sqle/17.00/nPath.json +269 -269
- teradataml/data/jsons/sqle/17.05/Antiselect.json +56 -56
- teradataml/data/jsons/sqle/17.05/Attribution.json +249 -249
- teradataml/data/jsons/sqle/17.05/DecisionForestPredict.json +156 -156
- teradataml/data/jsons/sqle/17.05/DecisionTreePredict.json +170 -170
- teradataml/data/jsons/sqle/17.05/GLMPredict.json +122 -122
- teradataml/data/jsons/sqle/17.05/MovingAverage.json +367 -367
- teradataml/data/jsons/sqle/17.05/NGramSplitter.json +239 -239
- teradataml/data/jsons/sqle/17.05/NaiveBayesPredict.json +136 -136
- teradataml/data/jsons/sqle/17.05/NaiveBayesTextClassifierPredict.json +235 -235
- teradataml/data/jsons/sqle/17.05/Pack.json +98 -98
- teradataml/data/jsons/sqle/17.05/SVMSparsePredict.json +162 -162
- teradataml/data/jsons/sqle/17.05/Sessionize.json +105 -105
- teradataml/data/jsons/sqle/17.05/StringSimilarity.json +86 -86
- teradataml/data/jsons/sqle/17.05/Unpack.json +166 -166
- teradataml/data/jsons/sqle/17.05/nPath.json +269 -269
- teradataml/data/jsons/sqle/17.10/Antiselect.json +56 -56
- teradataml/data/jsons/sqle/17.10/Attribution.json +249 -249
- teradataml/data/jsons/sqle/17.10/DecisionForestPredict.json +185 -185
- teradataml/data/jsons/sqle/17.10/DecisionTreePredict.json +171 -171
- teradataml/data/jsons/sqle/17.10/GLMPredict.json +151 -151
- teradataml/data/jsons/sqle/17.10/MovingAverage.json +368 -368
- teradataml/data/jsons/sqle/17.10/NGramSplitter.json +239 -239
- teradataml/data/jsons/sqle/17.10/NaiveBayesPredict.json +149 -149
- teradataml/data/jsons/sqle/17.10/NaiveBayesTextClassifierPredict.json +288 -288
- teradataml/data/jsons/sqle/17.10/Pack.json +133 -133
- teradataml/data/jsons/sqle/17.10/SVMSparsePredict.json +193 -193
- teradataml/data/jsons/sqle/17.10/Sessionize.json +105 -105
- teradataml/data/jsons/sqle/17.10/StringSimilarity.json +86 -86
- teradataml/data/jsons/sqle/17.10/TD_BinCodeFit.json +239 -239
- teradataml/data/jsons/sqle/17.10/TD_BinCodeTransform.json +70 -70
- teradataml/data/jsons/sqle/17.10/TD_CategoricalSummary.json +53 -53
- teradataml/data/jsons/sqle/17.10/TD_Chisq.json +67 -67
- teradataml/data/jsons/sqle/17.10/TD_ColumnSummary.json +53 -53
- teradataml/data/jsons/sqle/17.10/TD_ConvertTo.json +68 -68
- teradataml/data/jsons/sqle/17.10/TD_FTest.json +187 -187
- teradataml/data/jsons/sqle/17.10/TD_FillRowID.json +51 -51
- teradataml/data/jsons/sqle/17.10/TD_FunctionFit.json +46 -46
- teradataml/data/jsons/sqle/17.10/TD_FunctionTransform.json +72 -71
- teradataml/data/jsons/sqle/17.10/TD_GetRowsWithMissingValues.json +52 -52
- teradataml/data/jsons/sqle/17.10/TD_GetRowsWithoutMissingValues.json +52 -52
- teradataml/data/jsons/sqle/17.10/TD_Histogram.json +132 -132
- teradataml/data/jsons/sqle/17.10/TD_NumApply.json +147 -147
- teradataml/data/jsons/sqle/17.10/TD_OneHotEncodingFit.json +182 -182
- teradataml/data/jsons/sqle/17.10/TD_OneHotEncodingTransform.json +65 -64
- teradataml/data/jsons/sqle/17.10/TD_OutlierFilterFit.json +196 -196
- teradataml/data/jsons/sqle/17.10/TD_OutlierFilterTransform.json +48 -47
- teradataml/data/jsons/sqle/17.10/TD_PolynomialFeaturesFit.json +114 -114
- teradataml/data/jsons/sqle/17.10/TD_PolynomialFeaturesTransform.json +72 -71
- teradataml/data/jsons/sqle/17.10/TD_QQNorm.json +111 -111
- teradataml/data/jsons/sqle/17.10/TD_RoundColumns.json +93 -93
- teradataml/data/jsons/sqle/17.10/TD_RowNormalizeFit.json +127 -127
- teradataml/data/jsons/sqle/17.10/TD_RowNormalizeTransform.json +70 -69
- teradataml/data/jsons/sqle/17.10/TD_ScaleFit.json +156 -156
- teradataml/data/jsons/sqle/17.10/TD_ScaleTransform.json +70 -69
- teradataml/data/jsons/sqle/17.10/TD_SimpleImputeFit.json +147 -147
- teradataml/data/jsons/sqle/17.10/TD_SimpleImputeTransform.json +48 -47
- teradataml/data/jsons/sqle/17.10/TD_StrApply.json +240 -240
- teradataml/data/jsons/sqle/17.10/TD_UnivariateStatistics.json +118 -118
- teradataml/data/jsons/sqle/17.10/TD_WhichMax.json +52 -52
- teradataml/data/jsons/sqle/17.10/TD_WhichMin.json +52 -52
- teradataml/data/jsons/sqle/17.10/TD_ZTest.json +171 -171
- teradataml/data/jsons/sqle/17.10/Unpack.json +188 -188
- teradataml/data/jsons/sqle/17.10/nPath.json +269 -269
- teradataml/data/jsons/sqle/17.20/Antiselect.json +56 -56
- teradataml/data/jsons/sqle/17.20/Attribution.json +249 -249
- teradataml/data/jsons/sqle/17.20/DecisionForestPredict.json +185 -185
- teradataml/data/jsons/sqle/17.20/DecisionTreePredict.json +172 -172
- teradataml/data/jsons/sqle/17.20/GLMPredict.json +151 -151
- teradataml/data/jsons/sqle/17.20/MovingAverage.json +367 -367
- teradataml/data/jsons/sqle/17.20/NGramSplitter.json +239 -239
- teradataml/data/jsons/sqle/17.20/NaiveBayesPredict.json +149 -149
- teradataml/data/jsons/sqle/17.20/NaiveBayesTextClassifierPredict.json +287 -287
- teradataml/data/jsons/sqle/17.20/Pack.json +133 -133
- teradataml/data/jsons/sqle/17.20/SVMSparsePredict.json +192 -192
- teradataml/data/jsons/sqle/17.20/Sessionize.json +105 -105
- teradataml/data/jsons/sqle/17.20/StringSimilarity.json +86 -86
- teradataml/data/jsons/sqle/17.20/TD_ANOVA.json +76 -76
- teradataml/data/jsons/sqle/17.20/TD_BinCodeFit.json +239 -239
- teradataml/data/jsons/sqle/17.20/TD_BinCodeTransform.json +71 -71
- teradataml/data/jsons/sqle/17.20/TD_CategoricalSummary.json +53 -53
- teradataml/data/jsons/sqle/17.20/TD_Chisq.json +67 -67
- teradataml/data/jsons/sqle/17.20/TD_ClassificationEvaluator.json +145 -145
- teradataml/data/jsons/sqle/17.20/TD_ColumnSummary.json +53 -53
- teradataml/data/jsons/sqle/17.20/TD_ColumnTransformer.json +218 -218
- teradataml/data/jsons/sqle/17.20/TD_ConvertTo.json +92 -92
- teradataml/data/jsons/sqle/17.20/TD_DecisionForest.json +259 -259
- teradataml/data/jsons/sqle/17.20/TD_DecisionForestPredict.json +139 -139
- teradataml/data/jsons/sqle/17.20/TD_FTest.json +186 -186
- teradataml/data/jsons/sqle/17.20/TD_FillRowID.json +52 -52
- teradataml/data/jsons/sqle/17.20/TD_FunctionFit.json +46 -46
- teradataml/data/jsons/sqle/17.20/TD_FunctionTransform.json +72 -72
- teradataml/data/jsons/sqle/17.20/TD_GLM.json +431 -431
- teradataml/data/jsons/sqle/17.20/TD_GLMPREDICT.json +125 -125
- teradataml/data/jsons/sqle/17.20/TD_GLMPerSegment.json +411 -411
- teradataml/data/jsons/sqle/17.20/TD_GLMPredictPerSegment.json +146 -146
- teradataml/data/jsons/sqle/17.20/TD_GetFutileColumns.json +91 -91
- teradataml/data/jsons/sqle/17.20/TD_GetRowsWithMissingValues.json +76 -76
- teradataml/data/jsons/sqle/17.20/TD_GetRowsWithoutMissingValues.json +76 -76
- teradataml/data/jsons/sqle/17.20/TD_Histogram.json +152 -152
- teradataml/data/jsons/sqle/17.20/TD_KMeans.json +211 -211
- teradataml/data/jsons/sqle/17.20/TD_KMeansPredict.json +86 -86
- teradataml/data/jsons/sqle/17.20/TD_KNN.json +262 -262
- teradataml/data/jsons/sqle/17.20/TD_NaiveBayesTextClassifierTrainer.json +137 -137
- teradataml/data/jsons/sqle/17.20/TD_NonLinearCombineFit.json +101 -101
- teradataml/data/jsons/sqle/17.20/TD_NonLinearCombineTransform.json +71 -71
- teradataml/data/jsons/sqle/17.20/TD_NumApply.json +147 -147
- teradataml/data/jsons/sqle/17.20/TD_OneClassSVM.json +315 -315
- teradataml/data/jsons/sqle/17.20/TD_OneClassSVMPredict.json +123 -123
- teradataml/data/jsons/sqle/17.20/TD_OneHotEncodingFit.json +271 -271
- teradataml/data/jsons/sqle/17.20/TD_OneHotEncodingTransform.json +65 -65
- teradataml/data/jsons/sqle/17.20/TD_OrdinalEncodingFit.json +229 -229
- teradataml/data/jsons/sqle/17.20/TD_OrdinalEncodingTransform.json +75 -75
- teradataml/data/jsons/sqle/17.20/TD_OutlierFilterFit.json +217 -217
- teradataml/data/jsons/sqle/17.20/TD_OutlierFilterTransform.json +48 -48
- teradataml/data/jsons/sqle/17.20/TD_PolynomialFeaturesFit.json +114 -114
- teradataml/data/jsons/sqle/17.20/TD_PolynomialFeaturesTransform.json +72 -72
- teradataml/data/jsons/sqle/17.20/TD_QQNorm.json +111 -111
- teradataml/data/jsons/sqle/17.20/TD_ROC.json +177 -177
- teradataml/data/jsons/sqle/17.20/TD_RandomProjectionFit.json +178 -178
- teradataml/data/jsons/sqle/17.20/TD_RandomProjectionMinComponents.json +73 -73
- teradataml/data/jsons/sqle/17.20/TD_RandomProjectionTransform.json +74 -74
- teradataml/data/jsons/sqle/17.20/TD_RegressionEvaluator.json +137 -137
- teradataml/data/jsons/sqle/17.20/TD_RoundColumns.json +93 -93
- teradataml/data/jsons/sqle/17.20/TD_RowNormalizeFit.json +127 -127
- teradataml/data/jsons/sqle/17.20/TD_RowNormalizeTransform.json +70 -70
- teradataml/data/jsons/sqle/17.20/TD_SVM.json +389 -389
- teradataml/data/jsons/sqle/17.20/TD_SVMPredict.json +124 -124
- teradataml/data/jsons/sqle/17.20/TD_ScaleFit.json +156 -156
- teradataml/data/jsons/sqle/17.20/TD_ScaleTransform.json +70 -70
- teradataml/data/jsons/sqle/17.20/TD_SentimentExtractor.json +193 -193
- teradataml/data/jsons/sqle/17.20/TD_Silhouette.json +142 -142
- teradataml/data/jsons/sqle/17.20/TD_SimpleImputeFit.json +147 -147
- teradataml/data/jsons/sqle/17.20/TD_SimpleImputeTransform.json +48 -48
- teradataml/data/jsons/sqle/17.20/TD_StrApply.json +240 -240
- teradataml/data/jsons/sqle/17.20/TD_TargetEncodingFit.json +248 -248
- teradataml/data/jsons/sqle/17.20/TD_TargetEncodingTransform.json +75 -75
- teradataml/data/jsons/sqle/17.20/TD_TextParser.json +192 -192
- teradataml/data/jsons/sqle/17.20/TD_TrainTestSplit.json +142 -142
- teradataml/data/jsons/sqle/17.20/TD_UnivariateStatistics.json +117 -117
- teradataml/data/jsons/sqle/17.20/TD_VectorDistance.json +182 -182
- teradataml/data/jsons/sqle/17.20/TD_WhichMax.json +52 -52
- teradataml/data/jsons/sqle/17.20/TD_WhichMin.json +52 -52
- teradataml/data/jsons/sqle/17.20/TD_WordEmbeddings.json +241 -241
- teradataml/data/jsons/sqle/17.20/TD_XGBoost.json +312 -312
- teradataml/data/jsons/sqle/17.20/TD_XGBoostPredict.json +182 -182
- teradataml/data/jsons/sqle/17.20/TD_ZTest.json +170 -170
- teradataml/data/jsons/sqle/17.20/Unpack.json +188 -188
- teradataml/data/jsons/sqle/17.20/nPath.json +269 -269
- teradataml/data/jsons/tableoperator/17.00/read_nos.json +197 -197
- teradataml/data/jsons/tableoperator/17.05/read_nos.json +197 -197
- teradataml/data/jsons/tableoperator/17.05/write_nos.json +194 -194
- teradataml/data/jsons/tableoperator/17.10/read_nos.json +183 -183
- teradataml/data/jsons/tableoperator/17.10/write_nos.json +194 -194
- teradataml/data/jsons/tableoperator/17.20/read_nos.json +182 -182
- teradataml/data/jsons/tableoperator/17.20/write_nos.json +223 -223
- teradataml/data/jsons/uaf/17.20/TD_ACF.json +149 -149
- teradataml/data/jsons/uaf/17.20/TD_ARIMAESTIMATE.json +409 -409
- teradataml/data/jsons/uaf/17.20/TD_ARIMAFORECAST.json +79 -79
- teradataml/data/jsons/uaf/17.20/TD_ARIMAVALIDATE.json +151 -151
- teradataml/data/jsons/uaf/17.20/TD_BINARYMATRIXOP.json +109 -109
- teradataml/data/jsons/uaf/17.20/TD_BINARYSERIESOP.json +107 -107
- teradataml/data/jsons/uaf/17.20/TD_BREUSCH_GODFREY.json +87 -87
- teradataml/data/jsons/uaf/17.20/TD_BREUSCH_PAGAN_GODFREY.json +106 -106
- teradataml/data/jsons/uaf/17.20/TD_CONVOLVE.json +80 -80
- teradataml/data/jsons/uaf/17.20/TD_CONVOLVE2.json +67 -67
- teradataml/data/jsons/uaf/17.20/TD_CUMUL_PERIODOGRAM.json +91 -91
- teradataml/data/jsons/uaf/17.20/TD_DFFT.json +136 -136
- teradataml/data/jsons/uaf/17.20/TD_DFFT2.json +148 -148
- teradataml/data/jsons/uaf/17.20/TD_DFFT2CONV.json +108 -108
- teradataml/data/jsons/uaf/17.20/TD_DFFTCONV.json +109 -109
- teradataml/data/jsons/uaf/17.20/TD_DICKEY_FULLER.json +86 -86
- teradataml/data/jsons/uaf/17.20/TD_DIFF.json +91 -91
- teradataml/data/jsons/uaf/17.20/TD_DTW.json +116 -116
- teradataml/data/jsons/uaf/17.20/TD_DURBIN_WATSON.json +100 -100
- teradataml/data/jsons/uaf/17.20/TD_EXTRACT_RESULTS.json +38 -38
- teradataml/data/jsons/uaf/17.20/TD_FITMETRICS.json +100 -100
- teradataml/data/jsons/uaf/17.20/TD_GENSERIES4FORMULA.json +84 -84
- teradataml/data/jsons/uaf/17.20/TD_GENSERIES4SINUSOIDS.json +70 -70
- teradataml/data/jsons/uaf/17.20/TD_GOLDFELD_QUANDT.json +152 -152
- teradataml/data/jsons/uaf/17.20/TD_HOLT_WINTERS_FORECAST.json +313 -313
- teradataml/data/jsons/uaf/17.20/TD_IDFFT.json +57 -57
- teradataml/data/jsons/uaf/17.20/TD_IDFFT2.json +94 -94
- teradataml/data/jsons/uaf/17.20/TD_INPUTVALIDATOR.json +63 -63
- teradataml/data/jsons/uaf/17.20/TD_LINEAR_REGR.json +181 -181
- teradataml/data/jsons/uaf/17.20/TD_LINESPEC.json +102 -102
- teradataml/data/jsons/uaf/17.20/TD_MAMEAN.json +182 -182
- teradataml/data/jsons/uaf/17.20/TD_MATRIXMULTIPLY.json +67 -67
- teradataml/data/jsons/uaf/17.20/TD_MINFO.json +66 -66
- teradataml/data/jsons/uaf/17.20/TD_MULTIVAR_REGR.json +178 -178
- teradataml/data/jsons/uaf/17.20/TD_PACF.json +114 -114
- teradataml/data/jsons/uaf/17.20/TD_PORTMAN.json +118 -118
- teradataml/data/jsons/uaf/17.20/TD_POWERSPEC.json +175 -175
- teradataml/data/jsons/uaf/17.20/TD_POWERTRANSFORM.json +97 -97
- teradataml/data/jsons/uaf/17.20/TD_RESAMPLE.json +173 -173
- teradataml/data/jsons/uaf/17.20/TD_SEASONALNORMALIZE.json +136 -136
- teradataml/data/jsons/uaf/17.20/TD_SELECTION_CRITERIA.json +89 -89
- teradataml/data/jsons/uaf/17.20/TD_SIGNIF_PERIODICITIES.json +79 -79
- teradataml/data/jsons/uaf/17.20/TD_SIGNIF_RESIDMEAN.json +67 -67
- teradataml/data/jsons/uaf/17.20/TD_SIMPLEEXP.json +184 -184
- teradataml/data/jsons/uaf/17.20/TD_SINFO.json +57 -57
- teradataml/data/jsons/uaf/17.20/TD_SMOOTHMA.json +162 -162
- teradataml/data/jsons/uaf/17.20/TD_TRACKINGOP.json +100 -100
- teradataml/data/jsons/uaf/17.20/TD_UNDIFF.json +111 -111
- teradataml/data/jsons/uaf/17.20/TD_UNNORMALIZE.json +95 -95
- teradataml/data/jsons/uaf/17.20/TD_WHITES_GENERAL.json +77 -77
- teradataml/data/kmeans_example.json +17 -17
- teradataml/data/kmeans_us_arrests_data.csv +0 -0
- teradataml/data/knn_example.json +18 -18
- teradataml/data/knnrecommender_example.json +6 -6
- teradataml/data/knnrecommenderpredict_example.json +12 -12
- teradataml/data/lar_example.json +17 -17
- teradataml/data/larpredict_example.json +30 -30
- teradataml/data/lc_new_predictors.csv +5 -5
- teradataml/data/lc_new_reference.csv +9 -9
- teradataml/data/lda_example.json +8 -8
- teradataml/data/ldainference_example.json +14 -14
- teradataml/data/ldatopicsummary_example.json +8 -8
- teradataml/data/levendist_input.csv +13 -13
- teradataml/data/levenshteindistance_example.json +10 -10
- teradataml/data/linreg_example.json +9 -9
- teradataml/data/load_example_data.py +326 -323
- teradataml/data/loan_prediction.csv +295 -295
- teradataml/data/lungcancer.csv +138 -138
- teradataml/data/mappingdata.csv +12 -12
- teradataml/data/milk_timeseries.csv +157 -157
- teradataml/data/min_max_titanic.csv +4 -4
- teradataml/data/minhash_example.json +6 -6
- teradataml/data/ml_ratings.csv +7547 -7547
- teradataml/data/ml_ratings_10.csv +2445 -2445
- teradataml/data/model1_table.csv +5 -5
- teradataml/data/model2_table.csv +5 -5
- teradataml/data/models/iris_db_glm_model.pmml +56 -56
- teradataml/data/models/iris_db_xgb_model.pmml +4471 -4471
- teradataml/data/modularity_example.json +12 -12
- teradataml/data/movavg_example.json +7 -7
- teradataml/data/mtx1.csv +7 -7
- teradataml/data/mtx2.csv +13 -13
- teradataml/data/multi_model_classification.csv +401 -0
- teradataml/data/multi_model_regression.csv +401 -0
- teradataml/data/mvdfft8.csv +9 -9
- teradataml/data/naivebayes_example.json +9 -9
- teradataml/data/naivebayespredict_example.json +19 -19
- teradataml/data/naivebayestextclassifier2_example.json +6 -6
- teradataml/data/naivebayestextclassifier_example.json +8 -8
- teradataml/data/naivebayestextclassifierpredict_example.json +20 -20
- teradataml/data/name_Find_configure.csv +10 -10
- teradataml/data/namedentityfinder_example.json +14 -14
- teradataml/data/namedentityfinderevaluator_example.json +10 -10
- teradataml/data/namedentityfindertrainer_example.json +6 -6
- teradataml/data/nb_iris_input_test.csv +31 -31
- teradataml/data/nb_iris_input_train.csv +121 -121
- teradataml/data/nbp_iris_model.csv +13 -13
- teradataml/data/ner_extractor_text.csv +2 -2
- teradataml/data/ner_sports_test2.csv +29 -29
- teradataml/data/ner_sports_train.csv +501 -501
- teradataml/data/nerevaluator_example.json +5 -5
- teradataml/data/nerextractor_example.json +18 -18
- teradataml/data/nermem_sports_test.csv +17 -17
- teradataml/data/nermem_sports_train.csv +50 -50
- teradataml/data/nertrainer_example.json +6 -6
- teradataml/data/ngrams_example.json +6 -6
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage Aggregate Functions using SQLAlchemy.ipynb +1455 -1455
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage Arithmetic Functions Using SQLAlchemy.ipynb +1993 -1993
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage Bit-Byte Manipulation Functions using SQLAlchemy.ipynb +1492 -1492
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage Built-in functions using SQLAlchemy.ipynb +536 -536
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage Regular Expressions Using SQLAlchemy.ipynb +570 -570
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage String Functions Using SQLAlchemy.ipynb +2559 -2559
- teradataml/data/notebooks/sqlalchemy/Teradata Vantage Window Aggregate Functions using SQLAlchemy.ipynb +2911 -2911
- teradataml/data/notebooks/sqlalchemy/Using Generic SQLAlchemy ClauseElements teradataml DataFrame assign method.ipynb +698 -698
- teradataml/data/notebooks/sqlalchemy/teradataml filtering using SQLAlchemy ClauseElements.ipynb +784 -784
- teradataml/data/npath_example.json +23 -23
- teradataml/data/ntree_example.json +14 -14
- teradataml/data/numeric_strings.csv +4 -4
- teradataml/data/numerics.csv +4 -4
- teradataml/data/ocean_buoy.csv +17 -17
- teradataml/data/ocean_buoy2.csv +17 -17
- teradataml/data/ocean_buoys.csv +27 -27
- teradataml/data/ocean_buoys2.csv +10 -10
- teradataml/data/ocean_buoys_nonpti.csv +28 -28
- teradataml/data/ocean_buoys_seq.csv +29 -29
- teradataml/data/openml_example.json +63 -0
- teradataml/data/optional_event_table.csv +4 -4
- teradataml/data/orders1.csv +11 -11
- teradataml/data/orders1_12.csv +12 -12
- teradataml/data/orders_ex.csv +4 -4
- teradataml/data/pack_example.json +8 -8
- teradataml/data/package_tracking.csv +19 -19
- teradataml/data/package_tracking_pti.csv +18 -18
- teradataml/data/pagerank_example.json +13 -13
- teradataml/data/paragraphs_input.csv +6 -6
- teradataml/data/pathanalyzer_example.json +7 -7
- teradataml/data/pathgenerator_example.json +7 -7
- teradataml/data/phrases.csv +7 -7
- teradataml/data/pivot_example.json +8 -8
- teradataml/data/pivot_input.csv +22 -22
- teradataml/data/playerRating.csv +31 -31
- teradataml/data/postagger_example.json +6 -6
- teradataml/data/posttagger_output.csv +44 -44
- teradataml/data/production_data.csv +16 -16
- teradataml/data/production_data2.csv +7 -7
- teradataml/data/randomsample_example.json +31 -31
- teradataml/data/randomwalksample_example.json +8 -8
- teradataml/data/rank_table.csv +6 -6
- teradataml/data/ref_mobile_data.csv +4 -4
- teradataml/data/ref_mobile_data_dense.csv +2 -2
- teradataml/data/ref_url.csv +17 -17
- teradataml/data/restaurant_reviews.csv +7 -7
- teradataml/data/river_data.csv +145 -145
- teradataml/data/roc_example.json +7 -7
- teradataml/data/roc_input.csv +101 -101
- teradataml/data/rule_inputs.csv +6 -6
- teradataml/data/rule_table.csv +2 -2
- teradataml/data/sales.csv +7 -7
- teradataml/data/sales_transaction.csv +501 -501
- teradataml/data/salesdata.csv +342 -342
- teradataml/data/sample_cities.csv +2 -2
- teradataml/data/sample_shapes.csv +10 -10
- teradataml/data/sample_streets.csv +2 -2
- teradataml/data/sampling_example.json +15 -15
- teradataml/data/sax_example.json +8 -8
- teradataml/data/scale_example.json +23 -23
- teradataml/data/scale_housing.csv +11 -11
- teradataml/data/scale_housing_test.csv +6 -6
- teradataml/data/scale_stat.csv +11 -11
- teradataml/data/scalebypartition_example.json +13 -13
- teradataml/data/scalemap_example.json +13 -13
- teradataml/data/scalesummary_example.json +12 -12
- teradataml/data/score_category.csv +101 -101
- teradataml/data/score_summary.csv +4 -4
- teradataml/data/script_example.json +9 -9
- teradataml/data/scripts/deploy_script.py +65 -0
- teradataml/data/scripts/mapper.R +20 -0
- teradataml/data/scripts/mapper.py +15 -15
- teradataml/data/scripts/mapper_replace.py +15 -15
- 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/seeds.csv +10 -10
- teradataml/data/sentenceextractor_example.json +6 -6
- teradataml/data/sentiment_extract_input.csv +11 -11
- teradataml/data/sentiment_train.csv +16 -16
- teradataml/data/sentiment_word.csv +20 -20
- teradataml/data/sentiment_word_input.csv +19 -19
- teradataml/data/sentimentextractor_example.json +24 -24
- teradataml/data/sentimenttrainer_example.json +8 -8
- teradataml/data/sequence_table.csv +10 -10
- teradataml/data/seriessplitter_example.json +7 -7
- teradataml/data/sessionize_example.json +17 -17
- teradataml/data/sessionize_table.csv +116 -116
- teradataml/data/setop_test1.csv +24 -24
- teradataml/data/setop_test2.csv +22 -22
- teradataml/data/soc_nw_edges.csv +10 -10
- teradataml/data/soc_nw_vertices.csv +7 -7
- teradataml/data/souvenir_timeseries.csv +167 -167
- teradataml/data/sparse_iris_attribute.csv +5 -5
- teradataml/data/sparse_iris_test.csv +121 -121
- teradataml/data/sparse_iris_train.csv +601 -601
- teradataml/data/star1.csv +6 -6
- teradataml/data/state_transition.csv +5 -5
- teradataml/data/stock_data.csv +53 -53
- teradataml/data/stock_movement.csv +11 -11
- teradataml/data/stock_vol.csv +76 -76
- teradataml/data/stop_words.csv +8 -8
- teradataml/data/store_sales.csv +37 -37
- teradataml/data/stringsimilarity_example.json +7 -7
- teradataml/data/strsimilarity_input.csv +13 -13
- teradataml/data/students.csv +101 -101
- teradataml/data/svm_iris_input_test.csv +121 -121
- teradataml/data/svm_iris_input_train.csv +481 -481
- teradataml/data/svm_iris_model.csv +7 -7
- teradataml/data/svmdense_example.json +9 -9
- teradataml/data/svmdensepredict_example.json +18 -18
- teradataml/data/svmsparse_example.json +7 -7
- teradataml/data/svmsparsepredict_example.json +13 -13
- teradataml/data/svmsparsesummary_example.json +7 -7
- teradataml/data/target_mobile_data.csv +13 -13
- teradataml/data/target_mobile_data_dense.csv +5 -5
- teradataml/data/templatedata.csv +1201 -1201
- 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_loan_prediction.csv +53 -53
- teradataml/data/test_pacf_12.csv +37 -37
- teradataml/data/test_prediction.csv +101 -0
- teradataml/data/test_regression.csv +101 -0
- teradataml/data/test_river2.csv +109 -109
- teradataml/data/text_inputs.csv +6 -6
- teradataml/data/textchunker_example.json +7 -7
- teradataml/data/textclassifier_example.json +6 -6
- teradataml/data/textclassifier_input.csv +7 -7
- teradataml/data/textclassifiertrainer_example.json +6 -6
- teradataml/data/textmorph_example.json +5 -5
- teradataml/data/textparser_example.json +15 -15
- teradataml/data/texttagger_example.json +11 -11
- teradataml/data/texttokenizer_example.json +6 -6
- teradataml/data/texttrainer_input.csv +11 -11
- teradataml/data/tf_example.json +6 -6
- teradataml/data/tfidf_example.json +13 -13
- teradataml/data/tfidf_input1.csv +201 -201
- teradataml/data/tfidf_train.csv +6 -6
- teradataml/data/time_table1.csv +535 -535
- teradataml/data/time_table2.csv +14 -14
- teradataml/data/timeseriesdata.csv +1601 -1601
- teradataml/data/timeseriesdatasetsd4.csv +105 -105
- teradataml/data/titanic.csv +892 -892
- teradataml/data/token_table.csv +696 -696
- 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/train_tracking.csv +27 -27
- teradataml/data/transformation_table.csv +5 -5
- teradataml/data/transformation_table_new.csv +1 -1
- teradataml/data/tv_spots.csv +16 -16
- teradataml/data/twod_climate_data.csv +117 -117
- teradataml/data/uaf_example.json +475 -475
- teradataml/data/univariatestatistics_example.json +8 -8
- teradataml/data/unpack_example.json +9 -9
- teradataml/data/unpivot_example.json +9 -9
- teradataml/data/unpivot_input.csv +8 -8
- teradataml/data/us_air_pass.csv +36 -36
- teradataml/data/us_population.csv +624 -624
- teradataml/data/us_states_shapes.csv +52 -52
- teradataml/data/varmax_example.json +17 -17
- teradataml/data/vectordistance_example.json +25 -25
- teradataml/data/ville_climatedata.csv +121 -121
- teradataml/data/ville_tempdata.csv +12 -12
- teradataml/data/ville_tempdata1.csv +12 -12
- teradataml/data/ville_temperature.csv +11 -11
- teradataml/data/waveletTable.csv +1605 -1605
- teradataml/data/waveletTable2.csv +1605 -1605
- teradataml/data/weightedmovavg_example.json +8 -8
- teradataml/data/wft_testing.csv +5 -5
- teradataml/data/wine_data.csv +1600 -0
- teradataml/data/word_embed_input_table1.csv +5 -5
- teradataml/data/word_embed_input_table2.csv +4 -4
- teradataml/data/word_embed_model.csv +22 -22
- teradataml/data/words_input.csv +13 -13
- teradataml/data/xconvolve_complex_left.csv +6 -6
- teradataml/data/xconvolve_complex_leftmulti.csv +6 -6
- teradataml/data/xgboost_example.json +35 -35
- teradataml/data/xgboostpredict_example.json +31 -31
- teradataml/dataframe/copy_to.py +1764 -1698
- teradataml/dataframe/data_transfer.py +2753 -2745
- teradataml/dataframe/dataframe.py +17545 -16946
- teradataml/dataframe/dataframe_utils.py +1837 -1740
- teradataml/dataframe/fastload.py +611 -603
- teradataml/dataframe/indexer.py +424 -424
- teradataml/dataframe/setop.py +1179 -1166
- teradataml/dataframe/sql.py +10090 -6432
- teradataml/dataframe/sql_function_parameters.py +439 -388
- teradataml/dataframe/sql_functions.py +652 -652
- teradataml/dataframe/sql_interfaces.py +220 -220
- teradataml/dataframe/vantage_function_types.py +674 -630
- teradataml/dataframe/window.py +693 -692
- teradataml/dbutils/__init__.py +3 -3
- teradataml/dbutils/dbutils.py +1167 -1150
- teradataml/dbutils/filemgr.py +267 -267
- teradataml/gen_ai/__init__.py +2 -2
- teradataml/gen_ai/convAI.py +472 -472
- teradataml/geospatial/__init__.py +3 -3
- teradataml/geospatial/geodataframe.py +1105 -1094
- teradataml/geospatial/geodataframecolumn.py +392 -387
- teradataml/geospatial/geometry_types.py +925 -925
- teradataml/hyperparameter_tuner/__init__.py +1 -1
- teradataml/hyperparameter_tuner/optimizer.py +3783 -2993
- teradataml/hyperparameter_tuner/utils.py +281 -187
- 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 +121 -124
- teradataml/options/configure.py +337 -336
- teradataml/options/display.py +176 -176
- teradataml/plot/__init__.py +2 -2
- teradataml/plot/axis.py +1388 -1388
- teradataml/plot/constants.py +15 -15
- teradataml/plot/figure.py +398 -398
- teradataml/plot/plot.py +760 -760
- teradataml/plot/query_generator.py +83 -83
- teradataml/plot/subplot.py +216 -216
- teradataml/scriptmgmt/UserEnv.py +3788 -3761
- teradataml/scriptmgmt/__init__.py +3 -3
- teradataml/scriptmgmt/lls_utils.py +1616 -1604
- teradataml/series/series.py +532 -532
- teradataml/series/series_utils.py +71 -71
- teradataml/table_operators/Apply.py +949 -917
- teradataml/table_operators/Script.py +1719 -1982
- teradataml/table_operators/TableOperator.py +1207 -1616
- teradataml/table_operators/__init__.py +2 -3
- teradataml/table_operators/apply_query_generator.py +262 -262
- teradataml/table_operators/query_generator.py +507 -507
- teradataml/table_operators/table_operator_query_generator.py +460 -460
- teradataml/table_operators/table_operator_util.py +631 -639
- teradataml/table_operators/templates/dataframe_apply.template +184 -184
- teradataml/table_operators/templates/dataframe_map.template +176 -176
- teradataml/table_operators/templates/script_executor.template +170 -170
- teradataml/utils/dtypes.py +684 -684
- teradataml/utils/internal_buffer.py +84 -84
- teradataml/utils/print_versions.py +205 -205
- teradataml/utils/utils.py +410 -410
- teradataml/utils/validators.py +2239 -2115
- {teradataml-17.20.0.7.dist-info → teradataml-20.0.0.0.dist-info}/METADATA +270 -41
- teradataml-20.0.0.0.dist-info/RECORD +1038 -0
- {teradataml-17.20.0.7.dist-info → teradataml-20.0.0.0.dist-info}/WHEEL +1 -1
- {teradataml-17.20.0.7.dist-info → teradataml-20.0.0.0.dist-info}/zip-safe +1 -1
- 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.7.dist-info/RECORD +0 -1280
- {teradataml-17.20.0.7.dist-info → teradataml-20.0.0.0.dist-info}/top_level.txt +0 -0
|
@@ -1,2010 +1,2013 @@
|
|
|
1
|
-
"""
|
|
2
|
-
Unpublished work.
|
|
3
|
-
Copyright (c) 2021 by Teradata Corporation. All rights reserved.
|
|
4
|
-
TERADATA CORPORATION CONFIDENTIAL AND TRADE SECRET
|
|
5
|
-
|
|
6
|
-
Primary Owner: pradeep.garre@teradata.com
|
|
7
|
-
Secondary Owner: PankajVinod.Purandare@teradata.com
|
|
8
|
-
|
|
9
|
-
This file implements several classes which executes analytic functions such as
|
|
10
|
-
SQLE functions and UAF functions on Vantage.
|
|
11
|
-
File implements classes for following:
|
|
12
|
-
* _AnlyticFunctionExecutor
|
|
13
|
-
* _SQLEFunctionExecutor
|
|
14
|
-
* _TableOperatorExecutor
|
|
15
|
-
* _BYOMFunctionExecutor
|
|
16
|
-
"""
|
|
17
|
-
|
|
18
|
-
from teradataml.options.configure import configure
|
|
19
|
-
from teradataml.common.constants import TeradataConstants, TeradataAnalyticFunctionTypes
|
|
20
|
-
from teradataml.analytics.json_parser import PartitionKind
|
|
21
|
-
from teradataml.analytics.analytic_query_generator import AnalyticQueryGenerator, UAFQueryGenerator
|
|
22
|
-
from teradataml.analytics.json_parser.json_store import _JsonStore
|
|
23
|
-
from teradataml.analytics.utils import FuncSpecialCaseHandler
|
|
24
|
-
from teradataml.options.display import display
|
|
25
|
-
from teradataml.common.exceptions import TeradataMlException
|
|
26
|
-
from teradataml.common.garbagecollector import GarbageCollector
|
|
27
|
-
from teradataml.common.messages import Messages, MessageCodes
|
|
28
|
-
from teradataml.common.wrapper_utils import AnalyticsWrapperUtils
|
|
29
|
-
from teradataml.common.utils import UtilFuncs
|
|
30
|
-
from teradataml.context.context import _get_context_temp_databasename
|
|
31
|
-
from teradataml.table_operators.table_operator_query_generator import TableOperatorQueryGenerator
|
|
32
|
-
from
|
|
33
|
-
from teradataml.utils.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
self.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
self.
|
|
70
|
-
self.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
self.
|
|
75
|
-
self.
|
|
76
|
-
self.
|
|
77
|
-
self.
|
|
78
|
-
self.
|
|
79
|
-
self.
|
|
80
|
-
self.
|
|
81
|
-
self.
|
|
82
|
-
self.
|
|
83
|
-
self.
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
the
|
|
94
|
-
|
|
95
|
-
* Checks for
|
|
96
|
-
* Checks for the expected
|
|
97
|
-
* Checks for
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
self._function_output_table_map["
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
#
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
"
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
When
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
#
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
#
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
self.
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
*
|
|
344
|
-
|
|
345
|
-
* If
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
self.
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
#
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
#
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
col_data_type = "
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
#
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
self.
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
#
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
self.
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
self.
|
|
492
|
-
|
|
493
|
-
self.
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
#
|
|
519
|
-
#
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
for
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
self.
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
set
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
kwargs.
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
|
|
686
|
-
#
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
return UtilFuncs._teradata_collapse_arglist(arg_value, "")
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
return UtilFuncs._teradata_collapse_arglist(arg_value, "")
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
self.
|
|
791
|
-
self.
|
|
792
|
-
self.
|
|
793
|
-
self.
|
|
794
|
-
self.
|
|
795
|
-
|
|
796
|
-
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
852
|
-
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
#
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
self.
|
|
959
|
-
self.
|
|
960
|
-
self.
|
|
961
|
-
self.
|
|
962
|
-
self.
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
return
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
#
|
|
1085
|
-
#
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
is_dimension
|
|
1090
|
-
elif partition_kind == PartitionKind.
|
|
1091
|
-
is_dimension,
|
|
1092
|
-
elif partition_kind == PartitionKind.
|
|
1093
|
-
is_partition_by_key = True
|
|
1094
|
-
elif partition_kind == PartitionKind.
|
|
1095
|
-
|
|
1096
|
-
elif partition_kind == PartitionKind.
|
|
1097
|
-
|
|
1098
|
-
elif partition_kind == PartitionKind.
|
|
1099
|
-
|
|
1100
|
-
elif partition_kind == PartitionKind.
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
partition_column =
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
partition_column = "
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
partition_column =
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
|
|
1150
|
-
|
|
1151
|
-
|
|
1152
|
-
partition_column =
|
|
1153
|
-
|
|
1154
|
-
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1160
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1163
|
-
|
|
1164
|
-
|
|
1165
|
-
|
|
1166
|
-
|
|
1167
|
-
|
|
1168
|
-
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
-
|
|
1183
|
-
|
|
1184
|
-
|
|
1185
|
-
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
|
|
1189
|
-
|
|
1190
|
-
|
|
1191
|
-
|
|
1192
|
-
self._mlresults.
|
|
1193
|
-
|
|
1194
|
-
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
self.
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
|
|
1244
|
-
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
if
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
self._func_input_distribution[index] = "
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
*
|
|
1324
|
-
*
|
|
1325
|
-
*
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1340
|
-
|
|
1341
|
-
|
|
1342
|
-
|
|
1343
|
-
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1456
|
-
|
|
1457
|
-
|
|
1458
|
-
|
|
1459
|
-
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
1473
|
-
|
|
1474
|
-
|
|
1475
|
-
|
|
1476
|
-
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1485
|
-
|
|
1486
|
-
self.
|
|
1487
|
-
|
|
1488
|
-
|
|
1489
|
-
|
|
1490
|
-
|
|
1491
|
-
|
|
1492
|
-
|
|
1493
|
-
|
|
1494
|
-
|
|
1495
|
-
self.
|
|
1496
|
-
|
|
1497
|
-
|
|
1498
|
-
|
|
1499
|
-
|
|
1500
|
-
|
|
1501
|
-
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
|
|
1505
|
-
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
|
|
1509
|
-
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1544
|
-
|
|
1545
|
-
|
|
1546
|
-
|
|
1547
|
-
|
|
1548
|
-
|
|
1549
|
-
|
|
1550
|
-
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
#
|
|
1556
|
-
|
|
1557
|
-
|
|
1558
|
-
|
|
1559
|
-
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
|
|
1606
|
-
#
|
|
1607
|
-
|
|
1608
|
-
|
|
1609
|
-
|
|
1610
|
-
|
|
1611
|
-
|
|
1612
|
-
|
|
1613
|
-
|
|
1614
|
-
|
|
1615
|
-
|
|
1616
|
-
|
|
1617
|
-
_table_name =
|
|
1618
|
-
|
|
1619
|
-
|
|
1620
|
-
|
|
1621
|
-
|
|
1622
|
-
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
|
|
1676
|
-
|
|
1677
|
-
|
|
1678
|
-
|
|
1679
|
-
|
|
1680
|
-
|
|
1681
|
-
|
|
1682
|
-
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1691
|
-
|
|
1692
|
-
|
|
1693
|
-
|
|
1694
|
-
|
|
1695
|
-
|
|
1696
|
-
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
|
|
1709
|
-
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1713
|
-
|
|
1714
|
-
|
|
1715
|
-
"
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
|
|
1732
|
-
|
|
1733
|
-
|
|
1734
|
-
|
|
1735
|
-
|
|
1736
|
-
|
|
1737
|
-
|
|
1738
|
-
|
|
1739
|
-
|
|
1740
|
-
|
|
1741
|
-
|
|
1742
|
-
|
|
1743
|
-
arg_info
|
|
1744
|
-
arg_info.append(["
|
|
1745
|
-
arg_info.append(["
|
|
1746
|
-
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1754
|
-
|
|
1755
|
-
|
|
1756
|
-
|
|
1757
|
-
|
|
1758
|
-
|
|
1759
|
-
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
|
|
1770
|
-
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
self.
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
* Checks
|
|
1790
|
-
* Checks
|
|
1791
|
-
*
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
|
|
1799
|
-
*
|
|
1800
|
-
|
|
1801
|
-
|
|
1802
|
-
|
|
1803
|
-
|
|
1804
|
-
|
|
1805
|
-
|
|
1806
|
-
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
|
|
1811
|
-
|
|
1812
|
-
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
|
|
1826
|
-
#
|
|
1827
|
-
|
|
1828
|
-
|
|
1829
|
-
|
|
1830
|
-
|
|
1831
|
-
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
if
|
|
1838
|
-
|
|
1839
|
-
|
|
1840
|
-
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
MessageCodes.INVALID_LIST_LENGTH)
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
1879
|
-
|
|
1880
|
-
|
|
1881
|
-
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
1885
|
-
|
|
1886
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
1889
|
-
|
|
1890
|
-
|
|
1891
|
-
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
|
|
1900
|
-
|
|
1901
|
-
|
|
1902
|
-
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
1911
|
-
|
|
1912
|
-
|
|
1913
|
-
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
1929
|
-
|
|
1930
|
-
|
|
1931
|
-
|
|
1932
|
-
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1936
|
-
|
|
1937
|
-
|
|
1938
|
-
|
|
1939
|
-
|
|
1940
|
-
|
|
1941
|
-
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
1948
|
-
|
|
1949
|
-
|
|
1950
|
-
|
|
1951
|
-
|
|
1952
|
-
|
|
1953
|
-
|
|
1954
|
-
|
|
1955
|
-
|
|
1956
|
-
|
|
1957
|
-
|
|
1958
|
-
|
|
1959
|
-
|
|
1960
|
-
|
|
1961
|
-
|
|
1962
|
-
|
|
1963
|
-
|
|
1964
|
-
|
|
1965
|
-
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
1976
|
-
|
|
1977
|
-
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
None.
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
|
|
1984
|
-
|
|
1985
|
-
|
|
1986
|
-
|
|
1987
|
-
|
|
1988
|
-
|
|
1989
|
-
|
|
1990
|
-
|
|
1991
|
-
|
|
1992
|
-
|
|
1993
|
-
|
|
1994
|
-
|
|
1995
|
-
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2008
|
-
|
|
2009
|
-
|
|
2010
|
-
|
|
1
|
+
"""
|
|
2
|
+
Unpublished work.
|
|
3
|
+
Copyright (c) 2021 by Teradata Corporation. All rights reserved.
|
|
4
|
+
TERADATA CORPORATION CONFIDENTIAL AND TRADE SECRET
|
|
5
|
+
|
|
6
|
+
Primary Owner: pradeep.garre@teradata.com
|
|
7
|
+
Secondary Owner: PankajVinod.Purandare@teradata.com
|
|
8
|
+
|
|
9
|
+
This file implements several classes which executes analytic functions such as
|
|
10
|
+
SQLE functions and UAF functions on Vantage.
|
|
11
|
+
File implements classes for following:
|
|
12
|
+
* _AnlyticFunctionExecutor
|
|
13
|
+
* _SQLEFunctionExecutor
|
|
14
|
+
* _TableOperatorExecutor
|
|
15
|
+
* _BYOMFunctionExecutor
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from teradataml.options.configure import configure
|
|
19
|
+
from teradataml.common.constants import TeradataConstants, TeradataAnalyticFunctionTypes
|
|
20
|
+
from teradataml.analytics.json_parser import PartitionKind
|
|
21
|
+
from teradataml.analytics.analytic_query_generator import AnalyticQueryGenerator, UAFQueryGenerator
|
|
22
|
+
from teradataml.analytics.json_parser.json_store import _JsonStore
|
|
23
|
+
from teradataml.analytics.utils import FuncSpecialCaseHandler
|
|
24
|
+
from teradataml.options.display import display
|
|
25
|
+
from teradataml.common.exceptions import TeradataMlException
|
|
26
|
+
from teradataml.common.garbagecollector import GarbageCollector
|
|
27
|
+
from teradataml.common.messages import Messages, MessageCodes
|
|
28
|
+
from teradataml.common.wrapper_utils import AnalyticsWrapperUtils
|
|
29
|
+
from teradataml.common.utils import UtilFuncs
|
|
30
|
+
from teradataml.context.context import _get_context_temp_databasename
|
|
31
|
+
from teradataml.table_operators.table_operator_query_generator import TableOperatorQueryGenerator
|
|
32
|
+
from teradatasqlalchemy.telemetry.queryband import collect_queryband
|
|
33
|
+
from teradataml.utils.dtypes import _ListOf
|
|
34
|
+
from teradataml.utils.validators import _Validators
|
|
35
|
+
|
|
36
|
+
import time
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
class _AnlyticFunctionExecutor:
|
|
40
|
+
"""
|
|
41
|
+
Class to hold the common attributes to execute analytic function.
|
|
42
|
+
"""
|
|
43
|
+
def __init__(self, func_name, func_type):
|
|
44
|
+
"""
|
|
45
|
+
DESCRIPTION:
|
|
46
|
+
Constructor for the class.
|
|
47
|
+
|
|
48
|
+
PARAMETERS:
|
|
49
|
+
func_name:
|
|
50
|
+
Required Argument.
|
|
51
|
+
Specifies the name of the analytic function, which is exposed to user.
|
|
52
|
+
Types: str
|
|
53
|
+
|
|
54
|
+
func_type:
|
|
55
|
+
Required Argument.
|
|
56
|
+
Specifies whether the argument "func_name" is SQLE, UAF or Table Operator function.
|
|
57
|
+
Types: str
|
|
58
|
+
|
|
59
|
+
RAISES:
|
|
60
|
+
TypeError OR ValueError OR TeradataMlException
|
|
61
|
+
"""
|
|
62
|
+
self.func_name = func_name
|
|
63
|
+
self._func_type = func_type
|
|
64
|
+
|
|
65
|
+
# Input arguments passed, i.e., data members of the dynamic class to be generated.
|
|
66
|
+
self._dyn_cls_data_members = {}
|
|
67
|
+
|
|
68
|
+
# Output table arguments list
|
|
69
|
+
self._func_output_args_sql_names = []
|
|
70
|
+
self._func_output_args = []
|
|
71
|
+
self._func_output_table_type = []
|
|
72
|
+
|
|
73
|
+
# Generate lists for rest of the function arguments
|
|
74
|
+
self._func_other_arg_sql_names = []
|
|
75
|
+
self._func_other_args = []
|
|
76
|
+
self._func_other_arg_json_datatypes = []
|
|
77
|
+
self.sqlmr_query = None
|
|
78
|
+
self._function_output_table_map = {}
|
|
79
|
+
self._sql_specific_attributes = {}
|
|
80
|
+
self._metadata = _JsonStore.get_function_metadata(self.func_name)
|
|
81
|
+
self._mlresults = []
|
|
82
|
+
self._awu = AnalyticsWrapperUtils()
|
|
83
|
+
self.__build_time = None
|
|
84
|
+
self._is_argument_dataframe = lambda object: type(object).__name__ == "DataFrame"
|
|
85
|
+
|
|
86
|
+
# Initialize FuncSpecialCaseHandler.
|
|
87
|
+
self._spl_func_obj = FuncSpecialCaseHandler(self.func_name)
|
|
88
|
+
|
|
89
|
+
@staticmethod
|
|
90
|
+
def _validate_analytic_function_argument(func_arg_name, func_arg_value, argument, additional_valid_types=None):
|
|
91
|
+
"""
|
|
92
|
+
DESCRIPTION:
|
|
93
|
+
Function to validate the analytic function arguments. This function does
|
|
94
|
+
the following validations
|
|
95
|
+
* Checks for missing mandatory argument.
|
|
96
|
+
* Checks for the expected type for argument.
|
|
97
|
+
* Checks for the expected values for argument.
|
|
98
|
+
* Checks for empty value.
|
|
99
|
+
|
|
100
|
+
PARAMETERS:
|
|
101
|
+
func_arg_name:
|
|
102
|
+
Required Argument.
|
|
103
|
+
Specifies the name of the argument.
|
|
104
|
+
Type: str
|
|
105
|
+
|
|
106
|
+
func_arg_value:
|
|
107
|
+
Required Argument.
|
|
108
|
+
Specifies the value passed to argument 'func_arg_name' in analytic function.
|
|
109
|
+
Type: str OR float OR int OR list
|
|
110
|
+
|
|
111
|
+
argument:
|
|
112
|
+
Required Argument.
|
|
113
|
+
Specifies the argument object (_AnlyArgumentBase) containing argument
|
|
114
|
+
information to be validated.
|
|
115
|
+
Type: _AnlyFuncArgument OR _AnlyFuncInput
|
|
116
|
+
|
|
117
|
+
RETURNS:
|
|
118
|
+
None
|
|
119
|
+
|
|
120
|
+
RAISES:
|
|
121
|
+
ValueError OR TypeError
|
|
122
|
+
|
|
123
|
+
EXAMPLES:
|
|
124
|
+
self._validate_analytic_function_argument("arg", 1, metadata.arguments)
|
|
125
|
+
"""
|
|
126
|
+
# Make sure that a non-NULL value has been supplied for all mandatory arguments
|
|
127
|
+
py_types = argument.get_python_type()
|
|
128
|
+
if additional_valid_types:
|
|
129
|
+
if isinstance(additional_valid_types, tuple):
|
|
130
|
+
py_types = (py_types, ) + additional_valid_types
|
|
131
|
+
else:
|
|
132
|
+
py_types = (py_types, additional_valid_types)
|
|
133
|
+
|
|
134
|
+
argument_info = [func_arg_name,
|
|
135
|
+
func_arg_value,
|
|
136
|
+
not argument.is_required(),
|
|
137
|
+
py_types
|
|
138
|
+
]
|
|
139
|
+
_Validators._validate_missing_required_arguments([argument_info])
|
|
140
|
+
|
|
141
|
+
# Validate for empty string if argument accepts a column name for either input or output.
|
|
142
|
+
if not argument.is_empty_value_allowed() or argument.is_output_column():
|
|
143
|
+
argument_info.append(True)
|
|
144
|
+
|
|
145
|
+
# Validate the permitted values.
|
|
146
|
+
if argument.get_permitted_values():
|
|
147
|
+
if len(argument_info) == 4:
|
|
148
|
+
argument_info.append(True)
|
|
149
|
+
argument_info.append(argument.get_permitted_values())
|
|
150
|
+
|
|
151
|
+
# Validate the function arguments.
|
|
152
|
+
_Validators._validate_function_arguments([argument_info])
|
|
153
|
+
|
|
154
|
+
@collect_queryband(attr="func_name")
|
|
155
|
+
def _execute_query(self, persist=False, volatile=False):
|
|
156
|
+
"""
|
|
157
|
+
DESCRIPTION:
|
|
158
|
+
Function to execute query on Vantage.
|
|
159
|
+
|
|
160
|
+
PARAMETERS:
|
|
161
|
+
persist:
|
|
162
|
+
Optional Argument.
|
|
163
|
+
Specifies whether to persist the result in a table or not.
|
|
164
|
+
Default Value: False
|
|
165
|
+
Type: bool
|
|
166
|
+
|
|
167
|
+
volatile:
|
|
168
|
+
Optional Argument.
|
|
169
|
+
Specifies whether to create a volatile table or not.
|
|
170
|
+
Default Value: False
|
|
171
|
+
Type: bool
|
|
172
|
+
|
|
173
|
+
RETURNS:
|
|
174
|
+
None
|
|
175
|
+
|
|
176
|
+
RAISES:
|
|
177
|
+
None
|
|
178
|
+
|
|
179
|
+
EXAMPLES:
|
|
180
|
+
self._execute_query()
|
|
181
|
+
"""
|
|
182
|
+
# Generate STDOUT table name and add it to the output table list.
|
|
183
|
+
func_params = self._get_generate_temp_table_params(persist=persist, volatile=volatile)
|
|
184
|
+
sqlmr_stdout_temp_tablename = UtilFuncs._generate_temp_table_name(**func_params)
|
|
185
|
+
|
|
186
|
+
__execute = UtilFuncs._create_table
|
|
187
|
+
__execute_params = (sqlmr_stdout_temp_tablename, self.sqlmr_query, volatile)
|
|
188
|
+
if func_params["table_type"] == TeradataConstants.TERADATA_VIEW:
|
|
189
|
+
__execute = UtilFuncs._create_view
|
|
190
|
+
__execute_params = (sqlmr_stdout_temp_tablename, self.sqlmr_query)
|
|
191
|
+
|
|
192
|
+
try:
|
|
193
|
+
__execute(*__execute_params)
|
|
194
|
+
|
|
195
|
+
# List stores names of the functions that will produce "output" attribute
|
|
196
|
+
# when more than one results are expected.
|
|
197
|
+
output_attr_functions = ["BincodeFit", "ChiSq", "PolynomialFeaturesFit",
|
|
198
|
+
"RowNormalizeFit", "ScaleFit", "SimpleImputeFit"]
|
|
199
|
+
|
|
200
|
+
# Store the result table in map.
|
|
201
|
+
if self.func_name in output_attr_functions:
|
|
202
|
+
self._function_output_table_map["output"] = sqlmr_stdout_temp_tablename
|
|
203
|
+
else:
|
|
204
|
+
self._function_output_table_map["result"] = sqlmr_stdout_temp_tablename
|
|
205
|
+
|
|
206
|
+
if persist:
|
|
207
|
+
# SQL is executed. So, print the table/view names.
|
|
208
|
+
for output_attribute, table_name in self._function_output_table_map.items():
|
|
209
|
+
print("{} data stored in table '{}'".format(output_attribute, table_name))
|
|
210
|
+
|
|
211
|
+
except Exception as emsg:
|
|
212
|
+
raise TeradataMlException(Messages.get_message(MessageCodes.TDMLDF_EXEC_SQL_FAILED, str(emsg)),
|
|
213
|
+
MessageCodes.TDMLDF_EXEC_SQL_FAILED)
|
|
214
|
+
|
|
215
|
+
def _get_generate_temp_table_params(self, persist=False, volatile=False):
|
|
216
|
+
"""
|
|
217
|
+
DESCRIPTION:
|
|
218
|
+
Function to get the required parameters to create either table or view.
|
|
219
|
+
When function has output table arguments or argument persist is set to True,
|
|
220
|
+
then function returns parameters to create table otherwise returns parameters
|
|
221
|
+
to create view. If persist is set to True or volatile is set to True, in such cases,
|
|
222
|
+
tables created are not GC'ed.
|
|
223
|
+
|
|
224
|
+
PARAMETERS:
|
|
225
|
+
persist:
|
|
226
|
+
Optional Argument.
|
|
227
|
+
Specifies whether to persist the output table or not.
|
|
228
|
+
When set to True, output tables created are not garbage collected
|
|
229
|
+
at the end of the session, otherwise they are garbage collected.
|
|
230
|
+
Default Value: False
|
|
231
|
+
Types: bool
|
|
232
|
+
|
|
233
|
+
volatile:
|
|
234
|
+
Optional Argument.
|
|
235
|
+
Specifies whether to create the output table as volatile table or not.
|
|
236
|
+
When set to True, output tables created are garbage collected
|
|
237
|
+
at the end of the session, otherwise they are not garbage collected.
|
|
238
|
+
Default Value: False
|
|
239
|
+
Types: bool
|
|
240
|
+
|
|
241
|
+
RETURNS:
|
|
242
|
+
dict
|
|
243
|
+
|
|
244
|
+
RAISES:
|
|
245
|
+
None
|
|
246
|
+
|
|
247
|
+
EXAMPLES:
|
|
248
|
+
self._get_generate_temp_table_params(True, True)
|
|
249
|
+
"""
|
|
250
|
+
use_default_database = True
|
|
251
|
+
db_object_type = TeradataConstants.TERADATA_VIEW
|
|
252
|
+
prefix = "td_sqlmr_out_"
|
|
253
|
+
gc_on_quit = True
|
|
254
|
+
|
|
255
|
+
# If function produces output tables, i.e., function has output table arguments,
|
|
256
|
+
# the 'db_object_type' should be "table" or if analytic function does not support
|
|
257
|
+
# reading from a view created on output, then 'db_object_type' should be "table".
|
|
258
|
+
if len(self._metadata.output_tables) > 0 or not self._metadata._is_view_supported:
|
|
259
|
+
db_object_type = TeradataConstants.TERADATA_TABLE
|
|
260
|
+
|
|
261
|
+
# If result is to be persisted or if the table is a volaile table then, db_object_type
|
|
262
|
+
# should be "table" and it must not be Garbage collected.
|
|
263
|
+
if persist or volatile:
|
|
264
|
+
gc_on_quit = False
|
|
265
|
+
db_object_type = TeradataConstants.TERADATA_TABLE
|
|
266
|
+
prefix = "td_sqlmr_{}_out_".format("persist" if persist else "volatile")
|
|
267
|
+
|
|
268
|
+
return {"use_default_database": use_default_database,
|
|
269
|
+
"table_type": db_object_type,
|
|
270
|
+
"prefix": prefix,
|
|
271
|
+
"gc_on_quit": gc_on_quit}
|
|
272
|
+
|
|
273
|
+
def _process_output_argument(self, persist=False, volatile=False, **kwargs):
|
|
274
|
+
"""
|
|
275
|
+
DESCRIPTION:
|
|
276
|
+
Function to process output argument(s) of analytic function.
|
|
277
|
+
|
|
278
|
+
PARAMETERS:
|
|
279
|
+
persist:
|
|
280
|
+
Optional Argument.
|
|
281
|
+
Specifies whether to persist the output table or not.
|
|
282
|
+
When session is disconnected, if function is executed with persist
|
|
283
|
+
set to False, then output tables are removed.
|
|
284
|
+
When set to True, output tables created are not garbage collected
|
|
285
|
+
at the end of the session, otherwise they are garbage collected.
|
|
286
|
+
Default Value: False
|
|
287
|
+
Types: bool
|
|
288
|
+
|
|
289
|
+
volatile:
|
|
290
|
+
Optional Argument.
|
|
291
|
+
Specifies whether to create the output table as volatile table or not.
|
|
292
|
+
When set to True, output tables created are garbage collected
|
|
293
|
+
at the end of the session, otherwise they are not garbage collected.
|
|
294
|
+
Default Value: False
|
|
295
|
+
Types: bool
|
|
296
|
+
|
|
297
|
+
kwargs:
|
|
298
|
+
Specifies the keyword arguments passed to a function.
|
|
299
|
+
|
|
300
|
+
RETURNS:
|
|
301
|
+
None.
|
|
302
|
+
|
|
303
|
+
RAISES:
|
|
304
|
+
None.
|
|
305
|
+
|
|
306
|
+
EXAMPLES:
|
|
307
|
+
self._process_output_argument()
|
|
308
|
+
"""
|
|
309
|
+
# Process the output_tables argument(s) of the metadata.
|
|
310
|
+
for output_argument in self._metadata.output_tables:
|
|
311
|
+
lang_name = output_argument.get_lang_name()
|
|
312
|
+
|
|
313
|
+
# Generate the name of the table.
|
|
314
|
+
func_params = self._get_generate_temp_table_params(persist=persist, volatile=volatile)
|
|
315
|
+
temp_table_name = UtilFuncs._generate_temp_table_name(**func_params)
|
|
316
|
+
|
|
317
|
+
# By default, populate the output table lists irrespective of 'is_required'. However,
|
|
318
|
+
# if the output table has a dependent argument, then check for the dependent argument
|
|
319
|
+
# value and decide whether to populate output table lists or not.
|
|
320
|
+
populate_output_tables = True
|
|
321
|
+
dependent_argument = output_argument.get_is_required_dependent_argument()
|
|
322
|
+
if dependent_argument is not None:
|
|
323
|
+
# Dependent argument can be input_tables or arguments or output_tables.
|
|
324
|
+
# Get the analytic function arguments based on the argument type and
|
|
325
|
+
# check whether dependenncy is satisfied or not.
|
|
326
|
+
for arg in getattr(self._metadata, dependent_argument.type):
|
|
327
|
+
if arg.get_sql_name() == dependent_argument.sql_name:
|
|
328
|
+
lang_name = arg.get_lang_name()
|
|
329
|
+
lang_name_val = kwargs.get(lang_name)
|
|
330
|
+
if not dependent_argument.is_required(lang_name_val):
|
|
331
|
+
populate_output_tables = False
|
|
332
|
+
break
|
|
333
|
+
|
|
334
|
+
if populate_output_tables:
|
|
335
|
+
self._func_output_args_sql_names.append(output_argument.get_sql_name())
|
|
336
|
+
self._func_output_args.append(temp_table_name)
|
|
337
|
+
self._function_output_table_map[lang_name] = temp_table_name
|
|
338
|
+
|
|
339
|
+
def _process_other_argument(self, **kwargs):
|
|
340
|
+
"""
|
|
341
|
+
DESCRIPTION:
|
|
342
|
+
Function to process other arguments. This function does the following:
|
|
343
|
+
* Checks the required arguments are passed or not.
|
|
344
|
+
* Checks the type of the arguments are expected or not.
|
|
345
|
+
* If argument accepts only specified values, function checks whether
|
|
346
|
+
the value passed is in the specified values or not.
|
|
347
|
+
* If all the checks pass, it then populates the corresponding lists
|
|
348
|
+
with respective values.
|
|
349
|
+
|
|
350
|
+
PARAMETERS:
|
|
351
|
+
kwargs:
|
|
352
|
+
Specifies the keyword arguments passed to a function.
|
|
353
|
+
|
|
354
|
+
RETURNS:
|
|
355
|
+
None.
|
|
356
|
+
|
|
357
|
+
RAISES:
|
|
358
|
+
ValueError OR TypeError OR TeradataMlException.
|
|
359
|
+
|
|
360
|
+
EXAMPLES:
|
|
361
|
+
self._process_other_arguments(arg1="string", arg2="db", arg3=2)
|
|
362
|
+
"""
|
|
363
|
+
sequence_input_by_list = []
|
|
364
|
+
|
|
365
|
+
# Before populating the corresponding lists, make sure to empty those so
|
|
366
|
+
# duplicates won't be populated even if analytic function execution happens twice.
|
|
367
|
+
self._func_other_arg_sql_names = []
|
|
368
|
+
self._func_other_args = []
|
|
369
|
+
self._func_other_arg_json_datatypes = []
|
|
370
|
+
|
|
371
|
+
# Let's process formula argument.
|
|
372
|
+
if len(self._metadata.formula_args) > 0:
|
|
373
|
+
formula = kwargs.pop("formula", None)
|
|
374
|
+
|
|
375
|
+
# If formula is passed, process formula argument,
|
|
376
|
+
# else process components of formula individually as a
|
|
377
|
+
# part of normal function argument processing.
|
|
378
|
+
formula_comp_provided = False
|
|
379
|
+
formula_comp_args = []
|
|
380
|
+
if formula is not None:
|
|
381
|
+
_Validators._validate_function_arguments([["formula", formula, True, str, True]])
|
|
382
|
+
input_data = kwargs.get(self._metadata.formula_args[0].get_target_table_lang_name())
|
|
383
|
+
formula_obj = AnalyticsWrapperUtils()._validate_formula_notation(formula, input_data, "formula")
|
|
384
|
+
|
|
385
|
+
for formula_arg_component in self._metadata.formula_args:
|
|
386
|
+
# Check if this formula argument component is separately provided
|
|
387
|
+
# along with 'formula'. If so, raise error.
|
|
388
|
+
formula_arg_value = kwargs.get(formula_arg_component.get_lang_name(), None)
|
|
389
|
+
formula_comp_args.append(formula_arg_component.get_lang_name())
|
|
390
|
+
if formula_arg_value is not None or formula_comp_provided:
|
|
391
|
+
formula_comp_provided = True
|
|
392
|
+
elif formula is not None:
|
|
393
|
+
# Processing dependent component of formula.
|
|
394
|
+
if formula_arg_component.get_r_order_number() == 0:
|
|
395
|
+
__response_column = formula_obj._get_dependent_vars()
|
|
396
|
+
if len(__response_column) > 0:
|
|
397
|
+
kwargs[formula_arg_component.get_lang_name()] = __response_column
|
|
398
|
+
|
|
399
|
+
# Processing non-dependent components of formula.
|
|
400
|
+
# Non-dependent components of formula can consist columns of either all, numeric
|
|
401
|
+
# or categorical type.
|
|
402
|
+
else:
|
|
403
|
+
if formula_arg_component.get_r_order_number() == -1:
|
|
404
|
+
allowed_types_list = formula_arg_component.get_allowed_type_groups()
|
|
405
|
+
json_to_python_type_map = {"NUMERIC": "numerical",
|
|
406
|
+
"NUMERICAL": "numerical"
|
|
407
|
+
}
|
|
408
|
+
col_data_type = json_to_python_type_map.get(allowed_types_list[0], "all")
|
|
409
|
+
elif formula_arg_component.get_r_order_number() == -2:
|
|
410
|
+
col_data_type = "categorical"
|
|
411
|
+
|
|
412
|
+
__columns = AnalyticsWrapperUtils()._get_columns_by_type(formula_obj,
|
|
413
|
+
input_data,
|
|
414
|
+
col_data_type)
|
|
415
|
+
if len(__columns) > 0:
|
|
416
|
+
kwargs[formula_arg_component.get_lang_name()] = __columns
|
|
417
|
+
# Pass dummy value to validator if any of the formula component argument is provided.
|
|
418
|
+
# Else pass None.
|
|
419
|
+
_Validators._validate_mutually_exclusive_arguments(formula, "formula",
|
|
420
|
+
1 if formula_comp_provided else None,
|
|
421
|
+
formula_comp_args)
|
|
422
|
+
|
|
423
|
+
# Let's process all other arguments.
|
|
424
|
+
for argument in self._metadata.arguments:
|
|
425
|
+
sql_name = argument.get_sql_name()
|
|
426
|
+
arg_name = argument.get_lang_name()
|
|
427
|
+
arg_value = kwargs.get(arg_name)
|
|
428
|
+
# Set the "argument".
|
|
429
|
+
self._spl_func_obj.set_arg_name(argument)
|
|
430
|
+
# Let's get spl handler if function requires.
|
|
431
|
+
special_case_handler = self._spl_func_obj._get_handle()
|
|
432
|
+
|
|
433
|
+
self._validate_analytic_function_argument(arg_name, arg_value, argument)
|
|
434
|
+
|
|
435
|
+
# Perform the checks which are specific to argument(_AnlyFuncArgument) type.
|
|
436
|
+
# Check lower bound and upper bound for number type of arguments.
|
|
437
|
+
if isinstance(arg_value, (int, float)):
|
|
438
|
+
|
|
439
|
+
lower_bound_inclusive = argument.get_lower_bound_type() == "INCLUSIVE"
|
|
440
|
+
upper_bound_inclusive = argument.get_upper_bound_type() == "INCLUSIVE"
|
|
441
|
+
_Validators._validate_argument_range(arg_value,
|
|
442
|
+
arg_name,
|
|
443
|
+
lbound=argument.get_lower_bound(),
|
|
444
|
+
ubound=argument.get_upper_bound(),
|
|
445
|
+
lbound_inclusive=lower_bound_inclusive,
|
|
446
|
+
ubound_inclusive=upper_bound_inclusive)
|
|
447
|
+
|
|
448
|
+
if argument.is_column_argument() and not argument.get_target_table():
|
|
449
|
+
raise TeradataMlException(
|
|
450
|
+
Messages.get_message(MessageCodes.INVALID_JSON, "{}.json".format(self._metadata.sql_function_name),
|
|
451
|
+
"Argument '{}' is specified as column argument but "
|
|
452
|
+
"is Target table is not specified".format(sql_name)), MessageCodes.INVALID_JSON)
|
|
453
|
+
|
|
454
|
+
# Additional Validations if argument is a Column name.
|
|
455
|
+
if argument.is_column_argument() and argument.get_target_table():
|
|
456
|
+
target_table_argument_name = argument.get_target_table_lang_name()
|
|
457
|
+
dataframe = kwargs.get(target_table_argument_name)
|
|
458
|
+
# Input table can be an object of MLE Functions too.
|
|
459
|
+
if not self._is_argument_dataframe(dataframe) and dataframe is not None:
|
|
460
|
+
dataframe = dataframe._mlresults[0]
|
|
461
|
+
|
|
462
|
+
# Validate column is existed or not in the table.
|
|
463
|
+
_Validators._validate_dataframe_has_argument_columns(
|
|
464
|
+
arg_value, arg_name, dataframe, target_table_argument_name)
|
|
465
|
+
|
|
466
|
+
# Append square brackets for column range when function
|
|
467
|
+
# does not require special case handler.
|
|
468
|
+
arg_value = self._spl_func_obj._add_square_bracket(arg_value)
|
|
469
|
+
|
|
470
|
+
# SequenceInputBy arguments require special processing.
|
|
471
|
+
if 500 <= argument.get_r_order_number() <= 510:
|
|
472
|
+
quoted_value = UtilFuncs._teradata_collapse_arglist(arg_value, "")
|
|
473
|
+
sequence_input_by_list.append("{}:{}".format(sql_name, quoted_value))
|
|
474
|
+
continue
|
|
475
|
+
|
|
476
|
+
if arg_value is not None and arg_value != argument.get_default_value():
|
|
477
|
+
|
|
478
|
+
# Specific type of arguments required to be passed in a single quote.
|
|
479
|
+
# Append quote if argument requires it.
|
|
480
|
+
|
|
481
|
+
# Handle special cases for arg_values based on function handler.
|
|
482
|
+
arg_value = special_case_handler(arg_value, self._quote_collapse_other_args) \
|
|
483
|
+
if special_case_handler is not None \
|
|
484
|
+
else self._quote_collapse_other_args(argument, arg_value)
|
|
485
|
+
|
|
486
|
+
self._func_other_arg_sql_names.append(sql_name)
|
|
487
|
+
self._func_other_args.append(arg_value)
|
|
488
|
+
self._func_other_arg_json_datatypes.append(argument.get_data_type())
|
|
489
|
+
|
|
490
|
+
if sequence_input_by_list:
|
|
491
|
+
self._func_other_arg_sql_names.append("SequenceInputBy")
|
|
492
|
+
sequence_input_by_arg_value = UtilFuncs._teradata_collapse_arglist(sequence_input_by_list, "'")
|
|
493
|
+
self._func_other_args.append(sequence_input_by_arg_value)
|
|
494
|
+
self._func_other_arg_json_datatypes.append("STRING")
|
|
495
|
+
self._sql_specific_attributes["SequenceInputBy"] = sequence_input_by_arg_value
|
|
496
|
+
|
|
497
|
+
def _create_dynamic_class(self):
|
|
498
|
+
"""
|
|
499
|
+
DESCRIPTION:
|
|
500
|
+
Function dynamically creates a class with name as analytic function name.
|
|
501
|
+
|
|
502
|
+
RETURNS:
|
|
503
|
+
class
|
|
504
|
+
|
|
505
|
+
RAISES:
|
|
506
|
+
None.
|
|
507
|
+
|
|
508
|
+
EXAMPLE:
|
|
509
|
+
self._create_dynamic_class()
|
|
510
|
+
"""
|
|
511
|
+
# Constructor for the dynamic class.
|
|
512
|
+
def constructor(self):
|
|
513
|
+
""" Constructor for dynamic class """
|
|
514
|
+
# Do Nothing...
|
|
515
|
+
pass
|
|
516
|
+
|
|
517
|
+
_function_output_table_map = self._function_output_table_map
|
|
518
|
+
# __repr__ method for dynamic class.
|
|
519
|
+
# Note that the self represents the dynamic class object. Not the
|
|
520
|
+
# instance of _AnlyticFunctionExecutor. So, DataFrames will be available as
|
|
521
|
+
# attributes of the object, which is created using dynamic class.
|
|
522
|
+
def print_result(self):
|
|
523
|
+
""" Function to be used for representation of InDB function type object. """
|
|
524
|
+
repr_string = ""
|
|
525
|
+
for key in _function_output_table_map:
|
|
526
|
+
repr_string = "{}\n############ {} Output ############".format(repr_string, key)
|
|
527
|
+
repr_string = "{}\n\n{}\n\n".format(repr_string, getattr(self,key))
|
|
528
|
+
return repr_string
|
|
529
|
+
self._dyn_cls_data_members["__repr__"] = print_result
|
|
530
|
+
|
|
531
|
+
query = self.sqlmr_query
|
|
532
|
+
build_time = None if self.__build_time is None else round(self.__build_time, 2)
|
|
533
|
+
|
|
534
|
+
self._dyn_cls_data_members["show_query"] = lambda x: query
|
|
535
|
+
self._dyn_cls_data_members["get_build_time"] = lambda x: build_time
|
|
536
|
+
|
|
537
|
+
# To list attributes using dict()
|
|
538
|
+
self._dyn_cls_data_members["__dict__"] = self._dyn_cls_data_members
|
|
539
|
+
self._dyn_cls_data_members["_mlresults"] = self._mlresults
|
|
540
|
+
|
|
541
|
+
# Dynamic class creation with In-DB function name.
|
|
542
|
+
indb_class = type(self.func_name, (object,), self._dyn_cls_data_members)
|
|
543
|
+
|
|
544
|
+
return indb_class()
|
|
545
|
+
|
|
546
|
+
def _generate_query(self):
|
|
547
|
+
"""
|
|
548
|
+
DESCRIPTION:
|
|
549
|
+
An interface, which should be implemented by child class(es) to generate the
|
|
550
|
+
query for analytic function.
|
|
551
|
+
|
|
552
|
+
RETURNS:
|
|
553
|
+
None
|
|
554
|
+
|
|
555
|
+
RAISES:
|
|
556
|
+
None.
|
|
557
|
+
|
|
558
|
+
EXAMPLE:
|
|
559
|
+
self._generate_query()
|
|
560
|
+
"""
|
|
561
|
+
raise NotImplementedError("Function should be implemented in child class.")
|
|
562
|
+
|
|
563
|
+
def _process_input_argument(self, **kwargs):
|
|
564
|
+
"""
|
|
565
|
+
DESCRIPTION:
|
|
566
|
+
An interface, which should be implemented by child class(es) to
|
|
567
|
+
process input argument(s).
|
|
568
|
+
|
|
569
|
+
PARAMETERS:
|
|
570
|
+
kwargs:
|
|
571
|
+
Specifies the keyword arguments passed to a function.
|
|
572
|
+
|
|
573
|
+
RETURNS:
|
|
574
|
+
None.
|
|
575
|
+
|
|
576
|
+
RAISES:
|
|
577
|
+
None.
|
|
578
|
+
|
|
579
|
+
EXAMPLES:
|
|
580
|
+
self._process_input_argument()
|
|
581
|
+
"""
|
|
582
|
+
raise NotImplementedError("Function should be implemented in child class.")
|
|
583
|
+
|
|
584
|
+
def _process_function_output(self, **kwargs):
|
|
585
|
+
"""
|
|
586
|
+
DESCRIPTION:
|
|
587
|
+
An interface, which should be implemented by child class(es) to
|
|
588
|
+
process the output.
|
|
589
|
+
|
|
590
|
+
PARAMETERS:
|
|
591
|
+
kwargs:
|
|
592
|
+
Specifies the keyword arguments passed to a function.
|
|
593
|
+
|
|
594
|
+
RETURNS:
|
|
595
|
+
None.
|
|
596
|
+
|
|
597
|
+
RAISES:
|
|
598
|
+
None.
|
|
599
|
+
|
|
600
|
+
EXAMPLES:
|
|
601
|
+
self._process_function_output()
|
|
602
|
+
"""
|
|
603
|
+
raise NotImplementedError("Function should be implemented in child class.")
|
|
604
|
+
|
|
605
|
+
def _execute_function(self,
|
|
606
|
+
skip_input_arg_processing=False,
|
|
607
|
+
skip_output_arg_processing=False,
|
|
608
|
+
skip_other_arg_processing=False,
|
|
609
|
+
skip_func_output_processing=False,
|
|
610
|
+
skip_dyn_cls_processing=False,
|
|
611
|
+
**kwargs):
|
|
612
|
+
"""
|
|
613
|
+
DESCRIPTION:
|
|
614
|
+
Function processes arguments and executes the analytic function.
|
|
615
|
+
|
|
616
|
+
PARAMETERS:
|
|
617
|
+
skip_input_arg_processing:
|
|
618
|
+
Optional Argument.
|
|
619
|
+
Specifies whether to skip input (data) argument processing or not.
|
|
620
|
+
Default is to process the input (data) argument.
|
|
621
|
+
When set to True, caller should make sure to process "input" argument and
|
|
622
|
+
pass SQL argument and values as part of kwargs to this function.
|
|
623
|
+
Default Value: False
|
|
624
|
+
Types: bool
|
|
625
|
+
|
|
626
|
+
skip_output_arg_processing:
|
|
627
|
+
Optional Argument.
|
|
628
|
+
Specifies whether to skip output argument processing or not.
|
|
629
|
+
Default is to process the output arguments.
|
|
630
|
+
When set to True, caller should make sure to process all output arguments and
|
|
631
|
+
pass equivalent SQL argument and values as part of kwargs to this function.
|
|
632
|
+
Default Value: False
|
|
633
|
+
Types: bool
|
|
634
|
+
|
|
635
|
+
skip_other_arg_processing:
|
|
636
|
+
Optional Argument.
|
|
637
|
+
Specifies whether to skip other argument processing or not.
|
|
638
|
+
Default is to process the other arguments, i.e., kwargs.
|
|
639
|
+
When set to True, caller should make sure to process all other arguments are
|
|
640
|
+
processed internally by the function.
|
|
641
|
+
Default Value: False
|
|
642
|
+
Types: bool
|
|
643
|
+
|
|
644
|
+
skip_func_output_processing:
|
|
645
|
+
Optional Argument.
|
|
646
|
+
Specifies whether to skip function output processing or not.
|
|
647
|
+
Default is to process the same.
|
|
648
|
+
When set to True, caller should make sure to process function output.
|
|
649
|
+
Generally, when this argument is set to True, one must also
|
|
650
|
+
set "skip_dyn_cls_processing" to True.
|
|
651
|
+
Default Value: False
|
|
652
|
+
Types: bool
|
|
653
|
+
|
|
654
|
+
skip_dyn_cls_processing:
|
|
655
|
+
Optional Argument.
|
|
656
|
+
Specifies whether to skip dynamic class processing or not.
|
|
657
|
+
Default is to process the dynamic class, where it creates a dynamic
|
|
658
|
+
class and an instance of the same and returns the same.
|
|
659
|
+
When set to True, caller should make sure to process dynamic class and
|
|
660
|
+
return an instance of the same.
|
|
661
|
+
Default Value: False
|
|
662
|
+
Types: bool
|
|
663
|
+
|
|
664
|
+
kwargs:
|
|
665
|
+
Specifies the keyword arguments passed to a function.
|
|
666
|
+
|
|
667
|
+
RETURNS:
|
|
668
|
+
An object of class, with the name same as analytic function.
|
|
669
|
+
|
|
670
|
+
RAISES:
|
|
671
|
+
TeradataMlException, TypeError
|
|
672
|
+
|
|
673
|
+
EXAMPLES:
|
|
674
|
+
self._execute_function(arg1="string", arg2="db", arg3=2)
|
|
675
|
+
"""
|
|
676
|
+
# kwargs may contain all additional arguments in 'generic_arguments'.
|
|
677
|
+
# Hence update it to actual kwargs.
|
|
678
|
+
kwargs.update(kwargs.pop("generic_arguments", {}))
|
|
679
|
+
|
|
680
|
+
# Add all arguments to dynamic class as data members.
|
|
681
|
+
|
|
682
|
+
start_time = time.time()
|
|
683
|
+
persist = kwargs.get("persist", False)
|
|
684
|
+
volatile = kwargs.get("volatile", False)
|
|
685
|
+
|
|
686
|
+
# Validate local_order_column argument type and values.
|
|
687
|
+
arg_info_matrix = [["persist", persist, True, bool], ["volatile", volatile, True, bool]]
|
|
688
|
+
# Check for valid types and values.
|
|
689
|
+
_Validators._validate_function_arguments(arg_info_matrix)
|
|
690
|
+
|
|
691
|
+
if persist and volatile:
|
|
692
|
+
raise TeradataMlException(
|
|
693
|
+
Messages.get_message(MessageCodes.CANNOT_USE_TOGETHER_WITH, "persist", "volatile"),
|
|
694
|
+
MessageCodes.CANNOT_USE_TOGETHER_WITH)
|
|
695
|
+
|
|
696
|
+
self._dyn_cls_data_members.update(kwargs)
|
|
697
|
+
|
|
698
|
+
if not skip_input_arg_processing:
|
|
699
|
+
self._process_input_argument(**kwargs)
|
|
700
|
+
|
|
701
|
+
if not skip_output_arg_processing:
|
|
702
|
+
self._process_output_argument(**kwargs)
|
|
703
|
+
|
|
704
|
+
if not skip_other_arg_processing:
|
|
705
|
+
self._process_other_argument(**kwargs)
|
|
706
|
+
|
|
707
|
+
self._generate_query(volatile=volatile)
|
|
708
|
+
|
|
709
|
+
# Print SQL-MR query if requested to do so.
|
|
710
|
+
if display.print_sqlmr_query:
|
|
711
|
+
print(self.sqlmr_query)
|
|
712
|
+
|
|
713
|
+
self._execute_query(persist, volatile)
|
|
714
|
+
|
|
715
|
+
if not skip_func_output_processing:
|
|
716
|
+
self._process_function_output(**kwargs)
|
|
717
|
+
|
|
718
|
+
# Set the build time.
|
|
719
|
+
self.__build_time = time.time() - start_time
|
|
720
|
+
|
|
721
|
+
if not skip_dyn_cls_processing:
|
|
722
|
+
return self._create_dynamic_class()
|
|
723
|
+
|
|
724
|
+
def _quote_collapse_other_args(self, argument, arg_value):
|
|
725
|
+
"""
|
|
726
|
+
DESCRIPTION:
|
|
727
|
+
Given a list as an argument this will single quote all the
|
|
728
|
+
list elements and combine them into a single string separated by
|
|
729
|
+
commas.
|
|
730
|
+
Append single quote to the elements which are required to be quoted.
|
|
731
|
+
|
|
732
|
+
PARAMETERS:
|
|
733
|
+
argument:
|
|
734
|
+
Required Argument.
|
|
735
|
+
Specifies the argument object (_AnlyArgumentBase).
|
|
736
|
+
Types: _AnlyFuncArgument
|
|
737
|
+
|
|
738
|
+
arg_value:
|
|
739
|
+
Required Argument.
|
|
740
|
+
Specifies the arg_value to be quoted and combined.
|
|
741
|
+
Types: list OR string OR int OR bool OR float
|
|
742
|
+
|
|
743
|
+
RETURNS:
|
|
744
|
+
None
|
|
745
|
+
|
|
746
|
+
RAISES:
|
|
747
|
+
None
|
|
748
|
+
|
|
749
|
+
EXAMPLES:
|
|
750
|
+
self._quote_collapse_other_args(argument, arg_value)
|
|
751
|
+
"""
|
|
752
|
+
if isinstance(argument.get_data_type(), list):
|
|
753
|
+
if isinstance(arg_value, (str, bool)):
|
|
754
|
+
return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
|
|
755
|
+
else:
|
|
756
|
+
return UtilFuncs._teradata_collapse_arglist(arg_value, "")
|
|
757
|
+
else:
|
|
758
|
+
if (argument.get_data_type().lower() in ("column", "columns", "column_names", "string", "boolean")):
|
|
759
|
+
return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
|
|
760
|
+
else:
|
|
761
|
+
return UtilFuncs._teradata_collapse_arglist(arg_value, "")
|
|
762
|
+
|
|
763
|
+
class _SQLEFunctionExecutor(_AnlyticFunctionExecutor):
|
|
764
|
+
""" Class to hold the attributes and provide methods to enable function execution. """
|
|
765
|
+
def __init__(self, func_name, func_type=TeradataAnalyticFunctionTypes.SQLE.value):
|
|
766
|
+
"""
|
|
767
|
+
DESCRIPTION:
|
|
768
|
+
Constructor for the class.
|
|
769
|
+
|
|
770
|
+
PARAMETERS:
|
|
771
|
+
func_name:
|
|
772
|
+
Required Argument.
|
|
773
|
+
Specifies the name of the analytic function, which is exposed to user.
|
|
774
|
+
Types: str
|
|
775
|
+
|
|
776
|
+
func_type:
|
|
777
|
+
Optional Argument.
|
|
778
|
+
Specifies the type of the analytic function.
|
|
779
|
+
Types: str
|
|
780
|
+
|
|
781
|
+
RAISES:
|
|
782
|
+
TypeError OR ValueError OR TeradataMlException
|
|
783
|
+
|
|
784
|
+
EXAMPLES:
|
|
785
|
+
_SQLEFunctionExecutor("AdaBoost")
|
|
786
|
+
"""
|
|
787
|
+
super().__init__(func_name, func_type)
|
|
788
|
+
|
|
789
|
+
# Lists to hold Input Argument (Table) Information
|
|
790
|
+
self._func_input_arg_sql_names = []
|
|
791
|
+
self._func_input_table_view_query = []
|
|
792
|
+
self._func_input_dataframe_type = []
|
|
793
|
+
self._func_input_distribution = []
|
|
794
|
+
self._func_input_partition_by_cols = []
|
|
795
|
+
self._func_input_order_by_cols = []
|
|
796
|
+
self._func_input_local_order = []
|
|
797
|
+
|
|
798
|
+
def _generate_query(self, volatile=False):
|
|
799
|
+
"""
|
|
800
|
+
DESCRIPTION:
|
|
801
|
+
Function to generate the SQL query for SQLE analytic function.
|
|
802
|
+
|
|
803
|
+
PARAMETERS:
|
|
804
|
+
volatile:
|
|
805
|
+
Optional Argument.
|
|
806
|
+
Specifies whether to create a volatile table or not.
|
|
807
|
+
Default Value: False
|
|
808
|
+
Type: bool
|
|
809
|
+
|
|
810
|
+
RETURNS:
|
|
811
|
+
None.
|
|
812
|
+
|
|
813
|
+
RAISES:
|
|
814
|
+
None.
|
|
815
|
+
|
|
816
|
+
EXAMPLES:
|
|
817
|
+
self._generate_query()
|
|
818
|
+
"""
|
|
819
|
+
|
|
820
|
+
self.__aqg_obj = AnalyticQueryGenerator(function_name=self._metadata.sql_function_name,
|
|
821
|
+
func_input_arg_sql_names=self._func_input_arg_sql_names,
|
|
822
|
+
func_input_table_view_query=self._func_input_table_view_query,
|
|
823
|
+
func_input_dataframe_type=self._func_input_dataframe_type,
|
|
824
|
+
func_input_distribution=self._func_input_distribution,
|
|
825
|
+
func_input_partition_by_cols=self._func_input_partition_by_cols,
|
|
826
|
+
func_input_order_by_cols=self._func_input_order_by_cols,
|
|
827
|
+
func_other_arg_sql_names=self._func_other_arg_sql_names,
|
|
828
|
+
func_other_args_values=self._func_other_args,
|
|
829
|
+
func_other_arg_json_datatypes=self._func_other_arg_json_datatypes,
|
|
830
|
+
func_output_args_sql_names=self._func_output_args_sql_names,
|
|
831
|
+
func_output_args_values=self._func_output_args,
|
|
832
|
+
engine="ENGINE_SQL",
|
|
833
|
+
volatile_output=volatile,
|
|
834
|
+
skip_config_lookup=True,
|
|
835
|
+
func_input_local_order=self._func_input_local_order)
|
|
836
|
+
|
|
837
|
+
# Invoke call to SQL-MR generation.
|
|
838
|
+
self.sqlmr_query = self.__aqg_obj._gen_sqlmr_select_stmt_sql()
|
|
839
|
+
|
|
840
|
+
def _get_input_args(self, **kwargs):
|
|
841
|
+
"""
|
|
842
|
+
DESCRIPTION:
|
|
843
|
+
Function to get input argument(s).
|
|
844
|
+
|
|
845
|
+
PARAMETERS:
|
|
846
|
+
kwargs:
|
|
847
|
+
Specifies the keyword arguments passed to a function.
|
|
848
|
+
|
|
849
|
+
RETURNS:
|
|
850
|
+
tuple, element1 represents input DataFrame argument name and
|
|
851
|
+
second element represents the Input Argument metadata.
|
|
852
|
+
|
|
853
|
+
RAISES:
|
|
854
|
+
None.
|
|
855
|
+
|
|
856
|
+
EXAMPLES:
|
|
857
|
+
self._get_input_args()
|
|
858
|
+
"""
|
|
859
|
+
for _inp_attribute in self._metadata.input_tables:
|
|
860
|
+
input_table_arg = _inp_attribute.get_lang_name()
|
|
861
|
+
yield input_table_arg, _inp_attribute
|
|
862
|
+
|
|
863
|
+
# Check if SQLE function allows multiple values as input.
|
|
864
|
+
if _inp_attribute.allows_lists():
|
|
865
|
+
_index = 1
|
|
866
|
+
while True:
|
|
867
|
+
_input_table_arg = "{}{}".format(input_table_arg, _index)
|
|
868
|
+
# If the corresponding object is available in kwargs, then extract it.
|
|
869
|
+
# Otherwise, stop looking for multiple arguments and proceed for next attribute.
|
|
870
|
+
if _input_table_arg in kwargs:
|
|
871
|
+
yield _input_table_arg, _inp_attribute
|
|
872
|
+
_index = _index + 1
|
|
873
|
+
else:
|
|
874
|
+
break
|
|
875
|
+
|
|
876
|
+
def _process_input_argument(self, **kwargs):
|
|
877
|
+
"""
|
|
878
|
+
DESCRIPTION:
|
|
879
|
+
Function to process input argument(s).
|
|
880
|
+
|
|
881
|
+
PARAMETERS:
|
|
882
|
+
kwargs:
|
|
883
|
+
Specifies the keyword arguments passed to a function.
|
|
884
|
+
|
|
885
|
+
RETURNS:
|
|
886
|
+
None.
|
|
887
|
+
|
|
888
|
+
RAISES:
|
|
889
|
+
None.
|
|
890
|
+
|
|
891
|
+
EXAMPLES:
|
|
892
|
+
self._process_input_argument()
|
|
893
|
+
"""
|
|
894
|
+
for input_table_arg, input_attribute in self._get_input_args(**kwargs):
|
|
895
|
+
partition_column_arg = "{}_partition_column".format(input_table_arg)
|
|
896
|
+
order_column_arg = "{}_order_column".format(input_table_arg)
|
|
897
|
+
local_order_column_arg = "local_order_{}".format(input_table_arg)
|
|
898
|
+
hash_column_arg = "{}_hash_column".format(input_table_arg)
|
|
899
|
+
|
|
900
|
+
# Get the argument values from kwargs
|
|
901
|
+
input_table_arg_value = kwargs.get(input_table_arg)
|
|
902
|
+
partition_column_arg_value = kwargs.get(partition_column_arg)
|
|
903
|
+
order_column_arg_value = kwargs.get(order_column_arg)
|
|
904
|
+
local_order_column_arg_value = kwargs.get(local_order_column_arg, False)
|
|
905
|
+
hash_column_arg_value = kwargs.get(hash_column_arg)
|
|
906
|
+
|
|
907
|
+
reference_class = None
|
|
908
|
+
if input_attribute.is_reference_function_acceptable():
|
|
909
|
+
reference_class = self._metadata.get_reference_function_class()
|
|
910
|
+
|
|
911
|
+
# Validate the input table arguments.
|
|
912
|
+
self._validate_analytic_function_argument(
|
|
913
|
+
input_table_arg, input_table_arg_value, input_attribute, additional_valid_types=reference_class)
|
|
914
|
+
|
|
915
|
+
# If input is an object of reference Function, then get the DataFrame from it.
|
|
916
|
+
if reference_class and isinstance(input_table_arg_value, reference_class):
|
|
917
|
+
input_table_arg_value = input_table_arg_value._mlresults[0]
|
|
918
|
+
# Don't fill the input lists if the value is None.
|
|
919
|
+
if input_table_arg_value is None:
|
|
920
|
+
continue
|
|
921
|
+
|
|
922
|
+
# Validate local_order_column argument type and values.
|
|
923
|
+
arg_info_matrix = [[local_order_column_arg, local_order_column_arg_value, True, bool, True]]
|
|
924
|
+
# Check emptiness and types.
|
|
925
|
+
_Validators._validate_missing_required_arguments(arg_info_matrix)
|
|
926
|
+
_Validators._validate_function_arguments(arg_info_matrix)
|
|
927
|
+
|
|
928
|
+
for arg in [partition_column_arg, order_column_arg, hash_column_arg]:
|
|
929
|
+
arg_value = kwargs.get(arg)
|
|
930
|
+
|
|
931
|
+
expected_types = (str, list)
|
|
932
|
+
# For partition column, user can pass partition kind too.
|
|
933
|
+
if "partition" in arg:
|
|
934
|
+
expected_types = (str, _ListOf(str), PartitionKind)
|
|
935
|
+
arg_info_matrix = [[arg, arg_value, True, expected_types, True]]
|
|
936
|
+
|
|
937
|
+
# Check for empty string and datatype.
|
|
938
|
+
_Validators._validate_missing_required_arguments(arg_info_matrix)
|
|
939
|
+
_Validators._validate_function_arguments(arg_info_matrix)
|
|
940
|
+
|
|
941
|
+
# Set order column value to "NA_character_" if it is None.
|
|
942
|
+
if not isinstance(arg_value, PartitionKind):
|
|
943
|
+
# Validate column existence in DataFrame only if user inputs a column(s).
|
|
944
|
+
_Validators._validate_dataframe_has_argument_columns(arg_value,
|
|
945
|
+
arg,
|
|
946
|
+
input_table_arg_value,
|
|
947
|
+
input_table_arg
|
|
948
|
+
)
|
|
949
|
+
|
|
950
|
+
order_column_arg_value = UtilFuncs._teradata_collapse_arglist(order_column_arg_value, "\"")
|
|
951
|
+
|
|
952
|
+
distribution, partition_column = self._get_distribution_and_partition_column(
|
|
953
|
+
partition_column_arg_value, hash_column_arg_value, input_attribute)
|
|
954
|
+
|
|
955
|
+
table_ref = AnalyticsWrapperUtils()._teradata_on_clause_from_dataframe(
|
|
956
|
+
input_table_arg_value, False)
|
|
957
|
+
|
|
958
|
+
self._func_input_arg_sql_names.append(input_attribute.get_sql_name())
|
|
959
|
+
self._func_input_table_view_query.append(table_ref["ref"])
|
|
960
|
+
self._func_input_dataframe_type.append(table_ref["ref_type"])
|
|
961
|
+
self._func_input_order_by_cols.append(order_column_arg_value)
|
|
962
|
+
self._func_input_distribution.append(distribution)
|
|
963
|
+
self._func_input_partition_by_cols.append(partition_column)
|
|
964
|
+
self._func_input_local_order.append(local_order_column_arg_value)
|
|
965
|
+
|
|
966
|
+
def _get_distribution_and_partition_column(self,
|
|
967
|
+
partition_column_arg_value,
|
|
968
|
+
hash_column_arg_value,
|
|
969
|
+
input_attribute):
|
|
970
|
+
"""
|
|
971
|
+
DESCRIPTION:
|
|
972
|
+
Function to get the input distribution and partition column values to
|
|
973
|
+
process input table argument.
|
|
974
|
+
|
|
975
|
+
PARAMETERS:
|
|
976
|
+
partition_column_arg_value:
|
|
977
|
+
Required Argument.
|
|
978
|
+
Specifies the partition column argument value.
|
|
979
|
+
Types: str OR PartitionKind OR None.
|
|
980
|
+
|
|
981
|
+
hash_column_arg_value:
|
|
982
|
+
Required Argument.
|
|
983
|
+
Specifies the hash column argument value.
|
|
984
|
+
Types: str
|
|
985
|
+
|
|
986
|
+
input_attribute:
|
|
987
|
+
Required Argument.
|
|
988
|
+
Specifies the input table attribute.
|
|
989
|
+
Types: _AnlyFuncInput
|
|
990
|
+
|
|
991
|
+
RETURNS:
|
|
992
|
+
tuple, with first element represents distribution and second element
|
|
993
|
+
represents partition_column.
|
|
994
|
+
|
|
995
|
+
RAISES:
|
|
996
|
+
None.
|
|
997
|
+
|
|
998
|
+
EXAMPLES:
|
|
999
|
+
self._get_distribution_and_partition_column(partition_column_arg_val, hash_column_arg_val)
|
|
1000
|
+
"""
|
|
1001
|
+
# If user passes hash_column_argument, generate the Query based on HASH BY
|
|
1002
|
+
# irrespective of the value of partition_column.
|
|
1003
|
+
if hash_column_arg_value:
|
|
1004
|
+
return "HASH", UtilFuncs._teradata_collapse_arglist(hash_column_arg_value, "\"")
|
|
1005
|
+
|
|
1006
|
+
# If user passes PartitionKind, generate Query based on distribution and partition type.
|
|
1007
|
+
if isinstance(partition_column_arg_value, PartitionKind):
|
|
1008
|
+
return self.__get_dist_partition_column_from_partition_kind(partition_column_arg_value)
|
|
1009
|
+
|
|
1010
|
+
# If user pass a string or list of strings for partition_column, generate PARTITION BY
|
|
1011
|
+
# based on partition column value.
|
|
1012
|
+
if partition_column_arg_value is not None:
|
|
1013
|
+
return "FACT", UtilFuncs._teradata_collapse_arglist(partition_column_arg_value, "\"")
|
|
1014
|
+
# No partition_column is sourced to input. So, derive the default one.
|
|
1015
|
+
else:
|
|
1016
|
+
default = input_attribute._get_default_partition_column_kind()
|
|
1017
|
+
return self.__get_dist_partition_column_from_partition_kind(default)
|
|
1018
|
+
|
|
1019
|
+
def __get_dist_partition_column_from_partition_kind(self, partition_kind):
|
|
1020
|
+
"""
|
|
1021
|
+
DESCRIPTION:
|
|
1022
|
+
Function to get the distribution and partition column based on PartitionKind.
|
|
1023
|
+
|
|
1024
|
+
PARAMETERS:
|
|
1025
|
+
partition_kind:
|
|
1026
|
+
Required Argument.
|
|
1027
|
+
Specifies the type of Partition.
|
|
1028
|
+
Types: PartitionKind
|
|
1029
|
+
|
|
1030
|
+
RETURNS:
|
|
1031
|
+
tuple, with first element represents distribution and second element
|
|
1032
|
+
represents partition_column.
|
|
1033
|
+
|
|
1034
|
+
RAISES:
|
|
1035
|
+
None.
|
|
1036
|
+
|
|
1037
|
+
EXAMPLES:
|
|
1038
|
+
self.__get_dist_partition_column_from_partition_kind(PartitionKind.ONE)
|
|
1039
|
+
"""
|
|
1040
|
+
if partition_kind in (PartitionKind.ANY, PartitionKind.ONE):
|
|
1041
|
+
return "FACT", partition_kind.value
|
|
1042
|
+
elif partition_kind == PartitionKind.DIMENSION:
|
|
1043
|
+
return PartitionKind.DIMENSION.value, None
|
|
1044
|
+
# Else is for PartitionKind.NONE.
|
|
1045
|
+
else:
|
|
1046
|
+
return "NONE", "NA_character_"
|
|
1047
|
+
|
|
1048
|
+
# Below code is not being used. Kept here to refer again.
|
|
1049
|
+
'''
|
|
1050
|
+
def _get_input_distribution_and_partition_column(self, input_table, partition_column_arg_value):
|
|
1051
|
+
"""
|
|
1052
|
+
DESCRIPTION:
|
|
1053
|
+
Function to get the input distribution and partition column values to
|
|
1054
|
+
process input table argument.
|
|
1055
|
+
|
|
1056
|
+
PARAMETERS:
|
|
1057
|
+
input_table:
|
|
1058
|
+
Required Argument.
|
|
1059
|
+
Specifies the input table argument.
|
|
1060
|
+
Types: _AnlyFuncInput
|
|
1061
|
+
|
|
1062
|
+
partition_column_arg_value:
|
|
1063
|
+
Required Argument.
|
|
1064
|
+
Specifies the partition column argument value.
|
|
1065
|
+
Types: str
|
|
1066
|
+
|
|
1067
|
+
RETURNS:
|
|
1068
|
+
tuple, with first element represents distribution and second element
|
|
1069
|
+
represents partition_column.
|
|
1070
|
+
|
|
1071
|
+
RAISES:
|
|
1072
|
+
None.
|
|
1073
|
+
|
|
1074
|
+
EXAMPLES:
|
|
1075
|
+
self._get_input_distribution_and_partition_column(inp1, partition_column_arg)
|
|
1076
|
+
"""
|
|
1077
|
+
# Initialise all the temporary variables and set those to False by default.
|
|
1078
|
+
is_dimension, is_partition_by_key, is_partition_by_any, is_partition_by_one = [False] * 4
|
|
1079
|
+
is_partition_by_one_only, is_partition_by_any_only = [False] * 2
|
|
1080
|
+
|
|
1081
|
+
# Get the partition kind from input table.
|
|
1082
|
+
partition_kind = input_table._get_partition_column_required_kind()
|
|
1083
|
+
|
|
1084
|
+
# Check whether associated input table requires to be partitioned
|
|
1085
|
+
# on any column or not.
|
|
1086
|
+
# Set some booleans based on what type of distribution is supported by
|
|
1087
|
+
# the argument.
|
|
1088
|
+
if partition_kind == PartitionKind.DIMENSION:
|
|
1089
|
+
is_dimension = True
|
|
1090
|
+
elif partition_kind == PartitionKind.DIMENSIONKEY:
|
|
1091
|
+
is_dimension, is_partition_by_key = True, True
|
|
1092
|
+
elif partition_kind == PartitionKind.DIMENSIONKEYANY:
|
|
1093
|
+
is_dimension, is_partition_by_any, is_partition_by_key = True, True, True
|
|
1094
|
+
elif partition_kind == PartitionKind.KEY:
|
|
1095
|
+
is_partition_by_key = True
|
|
1096
|
+
elif partition_kind == PartitionKind.ONE:
|
|
1097
|
+
is_partition_by_one, is_partition_by_key = True, True
|
|
1098
|
+
elif partition_kind == PartitionKind.ANY:
|
|
1099
|
+
is_partition_by_any, is_partition_by_key = True, True
|
|
1100
|
+
elif partition_kind == PartitionKind.ANYONLY:
|
|
1101
|
+
is_partition_by_any_only = True
|
|
1102
|
+
elif partition_kind == PartitionKind.ONEONLY:
|
|
1103
|
+
is_partition_by_one_only = True
|
|
1104
|
+
|
|
1105
|
+
collapse_arg_list = lambda partition_column_arg_value: "NA_character_" if partition_column_arg_value is None\
|
|
1106
|
+
else UtilFuncs._teradata_collapse_arglist(partition_column_arg_value, "\"")
|
|
1107
|
+
|
|
1108
|
+
default_partition_value = input_table._get_default_partition_by_value(partition_kind)
|
|
1109
|
+
|
|
1110
|
+
# When distribution is of type dimension, no partition by column required.
|
|
1111
|
+
if is_dimension and not is_partition_by_key and not is_partition_by_any:
|
|
1112
|
+
distribution = "DIMENSION"
|
|
1113
|
+
partition_column = "NA_character_"
|
|
1114
|
+
# When partitioned by either key or any, distribution should be FACT.
|
|
1115
|
+
elif is_dimension and (is_partition_by_key or is_partition_by_any):
|
|
1116
|
+
# If the input is not None, then distribution should be FACT. Otherwise, DIMENSION.
|
|
1117
|
+
distribution = "DIMENSION"
|
|
1118
|
+
if (partition_column_arg_value is not None and is_partition_by_key):
|
|
1119
|
+
distribution = "FACT"
|
|
1120
|
+
|
|
1121
|
+
# Quote if input value is not same as default value.
|
|
1122
|
+
if self._awu._is_default_or_not(partition_column_arg_value, default_partition_value):
|
|
1123
|
+
partition_column = collapse_arg_list(partition_column_arg_value)
|
|
1124
|
+
else:
|
|
1125
|
+
partition_column = default_partition_value
|
|
1126
|
+
|
|
1127
|
+
elif partition_column_arg_value is not None and not is_partition_by_key and is_partition_by_any:
|
|
1128
|
+
distribution = "FACT"
|
|
1129
|
+
partition_column = "ANY"
|
|
1130
|
+
else:
|
|
1131
|
+
partition_column = "NA_character_"
|
|
1132
|
+
else:
|
|
1133
|
+
# When partitioned by either key or any, distribution should be FACT.
|
|
1134
|
+
if is_partition_by_any and not is_partition_by_key:
|
|
1135
|
+
distribution = "FACT"
|
|
1136
|
+
partition_column = "ANY"
|
|
1137
|
+
elif (is_partition_by_key and not is_partition_by_any and not is_partition_by_one) or\
|
|
1138
|
+
(is_partition_by_key and is_partition_by_any):
|
|
1139
|
+
distribution = "FACT"
|
|
1140
|
+
# If partition value is default value, Enclose it with double quotes.
|
|
1141
|
+
if default_partition_value is not None or default_partition_value != "":
|
|
1142
|
+
if self._awu._is_default_or_not(partition_column_arg_value, default_partition_value):
|
|
1143
|
+
partition_column = collapse_arg_list(partition_column_arg_value)
|
|
1144
|
+
else:
|
|
1145
|
+
partition_column = default_partition_value
|
|
1146
|
+
else:
|
|
1147
|
+
partition_column = UtilFuncs._teradata_collapse_arglist(partition_column_arg_value, "\"")
|
|
1148
|
+
elif is_partition_by_one:
|
|
1149
|
+
distribution = "FACT"
|
|
1150
|
+
# If partition value is 1, Enclose it with double quotes.
|
|
1151
|
+
if self._awu._is_default_or_not(partition_column_arg_value, "1"):
|
|
1152
|
+
partition_column = collapse_arg_list(partition_column_arg_value)
|
|
1153
|
+
else:
|
|
1154
|
+
partition_column = default_partition_value
|
|
1155
|
+
elif is_partition_by_any_only or is_partition_by_one_only:
|
|
1156
|
+
distribution = "FACT"
|
|
1157
|
+
partition_column = "{}".format(default_partition_value)
|
|
1158
|
+
else:
|
|
1159
|
+
distribution = "NONE"
|
|
1160
|
+
partition_column = "NA_character_"
|
|
1161
|
+
|
|
1162
|
+
return distribution, partition_column
|
|
1163
|
+
'''
|
|
1164
|
+
|
|
1165
|
+
def _process_function_output(self, **kwargs):
|
|
1166
|
+
"""
|
|
1167
|
+
DESCRIPTION:
|
|
1168
|
+
Internal function to process the output tables. This function creates
|
|
1169
|
+
the required output DataFrames from the tables and a result list.
|
|
1170
|
+
|
|
1171
|
+
PARAMETERS:
|
|
1172
|
+
kwargs:
|
|
1173
|
+
Specifies the keyword arguments passed to a function.
|
|
1174
|
+
|
|
1175
|
+
RETURNS:
|
|
1176
|
+
None.
|
|
1177
|
+
|
|
1178
|
+
RAISES:
|
|
1179
|
+
None.
|
|
1180
|
+
|
|
1181
|
+
EXAMPLES:
|
|
1182
|
+
self._process_function_output()
|
|
1183
|
+
"""
|
|
1184
|
+
for lang_name, table_name in self._function_output_table_map.items():
|
|
1185
|
+
out_table_name = UtilFuncs._extract_table_name(table_name)
|
|
1186
|
+
out_db_name = UtilFuncs._extract_db_name(table_name)
|
|
1187
|
+
df = self._awu._create_data_set_object(
|
|
1188
|
+
df_input=out_table_name, database_name=out_db_name, source_type="table")
|
|
1189
|
+
self._dyn_cls_data_members[lang_name] = df
|
|
1190
|
+
# Condition make sure that the first element always be result or output in _mlresults.
|
|
1191
|
+
if lang_name in ["output", "result"]:
|
|
1192
|
+
self._mlresults.insert(0, df)
|
|
1193
|
+
else:
|
|
1194
|
+
self._mlresults.append(df)
|
|
1195
|
+
|
|
1196
|
+
class _TableOperatorExecutor(_SQLEFunctionExecutor):
|
|
1197
|
+
""" Class to hold the attributes and provide methods to enable execution for Table Operators. """
|
|
1198
|
+
def __init__(self, func_name):
|
|
1199
|
+
"""
|
|
1200
|
+
DESCRIPTION:
|
|
1201
|
+
Constructor for the class.
|
|
1202
|
+
|
|
1203
|
+
PARAMETERS:
|
|
1204
|
+
func_name:
|
|
1205
|
+
Required Argument.
|
|
1206
|
+
Specifies the name of the analytic function, which is exposed to the user.
|
|
1207
|
+
Types: str
|
|
1208
|
+
|
|
1209
|
+
RAISES:
|
|
1210
|
+
TypeError OR ValueError OR TeradataMlException
|
|
1211
|
+
|
|
1212
|
+
EXAMPLES:
|
|
1213
|
+
_TableOperatorExecutor("write_nos")
|
|
1214
|
+
"""
|
|
1215
|
+
super().__init__(func_name, TeradataAnalyticFunctionTypes.TABLEOPERATOR.value)
|
|
1216
|
+
|
|
1217
|
+
# Lists to hold Input Argument (Table) Information
|
|
1218
|
+
self.__func_input_order_by_type = []
|
|
1219
|
+
self.__func_input_sort_ascending = []
|
|
1220
|
+
self.__func_input_nulls_first = []
|
|
1221
|
+
|
|
1222
|
+
def _generate_query(self, **kwargs):
|
|
1223
|
+
"""
|
|
1224
|
+
DESCRIPTION:
|
|
1225
|
+
Function to generate the SQL query for TABLE OPERATOR function.
|
|
1226
|
+
|
|
1227
|
+
RETURNS:
|
|
1228
|
+
None.
|
|
1229
|
+
|
|
1230
|
+
RAISES:
|
|
1231
|
+
None.
|
|
1232
|
+
|
|
1233
|
+
EXAMPLES:
|
|
1234
|
+
self._generate_query()
|
|
1235
|
+
"""
|
|
1236
|
+
self.__aqg_obj = TableOperatorQueryGenerator(function_name=self.func_name,
|
|
1237
|
+
func_input_arg_sql_names=self._func_input_arg_sql_names,
|
|
1238
|
+
func_input_table_view_query=self._func_input_table_view_query,
|
|
1239
|
+
func_input_dataframe_type=self._func_input_dataframe_type,
|
|
1240
|
+
func_input_distribution=self._func_input_distribution,
|
|
1241
|
+
func_input_partition_by_cols=self._func_input_partition_by_cols,
|
|
1242
|
+
func_input_order_by_cols=self._func_input_order_by_cols,
|
|
1243
|
+
func_other_arg_sql_names=self._func_other_arg_sql_names,
|
|
1244
|
+
func_other_args_values=self._func_other_args,
|
|
1245
|
+
func_other_arg_json_datatypes=self._func_other_arg_json_datatypes,
|
|
1246
|
+
func_output_args_sql_names=self._func_output_args_sql_names,
|
|
1247
|
+
func_output_args_values=self._func_output_args,
|
|
1248
|
+
func_input_order_by_type=self.__func_input_order_by_type,
|
|
1249
|
+
func_input_sort_ascending=self.__func_input_sort_ascending,
|
|
1250
|
+
func_input_nulls_first=self.__func_input_nulls_first,
|
|
1251
|
+
engine="ENGINE_SQL")
|
|
1252
|
+
|
|
1253
|
+
# Invoke call to SQL-MR generation.
|
|
1254
|
+
self.sqlmr_query = self.__aqg_obj._gen_table_operator_select_stmt_sql()
|
|
1255
|
+
|
|
1256
|
+
def _process_input_argument(self, **kwargs):
|
|
1257
|
+
"""
|
|
1258
|
+
DESCRIPTION:
|
|
1259
|
+
Function to process input argument(s).
|
|
1260
|
+
|
|
1261
|
+
PARAMETERS:
|
|
1262
|
+
kwargs:
|
|
1263
|
+
Specifies the keyword arguments passed to a function.
|
|
1264
|
+
|
|
1265
|
+
RETURNS:
|
|
1266
|
+
None.
|
|
1267
|
+
|
|
1268
|
+
RAISES:
|
|
1269
|
+
None.
|
|
1270
|
+
|
|
1271
|
+
EXAMPLES:
|
|
1272
|
+
self._process_input_argument()
|
|
1273
|
+
"""
|
|
1274
|
+
super()._process_input_argument(**kwargs)
|
|
1275
|
+
# Iterating over multiple input arguments if present.
|
|
1276
|
+
for index, input_attribute in enumerate(self._metadata.input_tables):
|
|
1277
|
+
# Extracting input argument name and value.
|
|
1278
|
+
input_table_arg = input_attribute.get_lang_name()
|
|
1279
|
+
input_table_arg_value = kwargs.get(input_table_arg)
|
|
1280
|
+
# No need to process further if no input argument.
|
|
1281
|
+
# Validation of this input is done in the parent class.
|
|
1282
|
+
if input_table_arg_value is None:
|
|
1283
|
+
continue
|
|
1284
|
+
|
|
1285
|
+
# Extracting argument names for partition, hash and is local ordered.
|
|
1286
|
+
partition_column_arg = "{}_partition_column".format(input_table_arg)
|
|
1287
|
+
hash_column_arg = "{}_hash_column".format(input_table_arg)
|
|
1288
|
+
is_local_ordered_arg = "local_order_{}".format(input_table_arg)
|
|
1289
|
+
order_column_arg = "{}_order_column".format(input_table_arg)
|
|
1290
|
+
# Extracting argument values for partition, hash and is local ordered.
|
|
1291
|
+
partition_column_value = kwargs.get(partition_column_arg, None)
|
|
1292
|
+
hash_column_value = kwargs.get(hash_column_arg, None)
|
|
1293
|
+
is_local_ordered_value = kwargs.get(is_local_ordered_arg, False)
|
|
1294
|
+
order_column_value = kwargs.get(order_column_arg, "NA_character_")
|
|
1295
|
+
|
|
1296
|
+
self._validate_hash_local_ordered_arguments(partition_column_arg, partition_column_value,
|
|
1297
|
+
hash_column_arg, hash_column_value,
|
|
1298
|
+
is_local_ordered_arg, is_local_ordered_value,
|
|
1299
|
+
order_column_arg, order_column_value,
|
|
1300
|
+
input_table_arg, input_table_arg_value)
|
|
1301
|
+
|
|
1302
|
+
if is_local_ordered_value:
|
|
1303
|
+
self.__func_input_order_by_type.append("LOCAL")
|
|
1304
|
+
if hash_column_value is None:
|
|
1305
|
+
self._func_input_distribution[index] = "NONE"
|
|
1306
|
+
else:
|
|
1307
|
+
self._func_input_distribution[index] = "HASH"
|
|
1308
|
+
self._func_input_partition_by_cols[index] = hash_column_value
|
|
1309
|
+
else:
|
|
1310
|
+
self.__func_input_order_by_type.append(None)
|
|
1311
|
+
if partition_column_value is None:
|
|
1312
|
+
self._func_input_distribution[index] = "NONE"
|
|
1313
|
+
|
|
1314
|
+
def _validate_hash_local_ordered_arguments(self, partition_column_arg, partition_column_value,
|
|
1315
|
+
hash_column_arg, hash_column_value,
|
|
1316
|
+
is_local_ordered_arg, is_local_ordered_value,
|
|
1317
|
+
order_column_arg, order_column_value,
|
|
1318
|
+
input_table_arg, input_table_arg_value):
|
|
1319
|
+
"""
|
|
1320
|
+
DESCRIPTION:
|
|
1321
|
+
Function to validate the hash and local order function arguments. This function does
|
|
1322
|
+
the following validations
|
|
1323
|
+
* Check if Hash Column value is not empty string.
|
|
1324
|
+
* Check if "is local order" value is of type boolean.
|
|
1325
|
+
* Hash and order by can be used together as long as is_local_order = True.
|
|
1326
|
+
* Either hash or partition can be used.
|
|
1327
|
+
* Either local order by or partition by can be used.
|
|
1328
|
+
|
|
1329
|
+
PARAMETERS:
|
|
1330
|
+
partition_column_arg:
|
|
1331
|
+
Required Argument.
|
|
1332
|
+
Specifies the name of the partition by column argument.
|
|
1333
|
+
Type: str
|
|
1334
|
+
|
|
1335
|
+
partition_column_value:
|
|
1336
|
+
Required Argument.
|
|
1337
|
+
Specifies the value of the partition by column argument.
|
|
1338
|
+
Type: str
|
|
1339
|
+
|
|
1340
|
+
hash_column_arg:
|
|
1341
|
+
Required Argument.
|
|
1342
|
+
Specifies the name of the hash by column argument.
|
|
1343
|
+
Type: str
|
|
1344
|
+
|
|
1345
|
+
hash_column_value:
|
|
1346
|
+
Required Argument.
|
|
1347
|
+
Specifies the value of the hash by column argument.
|
|
1348
|
+
Type: str
|
|
1349
|
+
|
|
1350
|
+
is_local_ordered_arg:
|
|
1351
|
+
Required Argument.
|
|
1352
|
+
Specifies the name of the is local ordered argument.
|
|
1353
|
+
Type: str
|
|
1354
|
+
|
|
1355
|
+
is_local_ordered_value:
|
|
1356
|
+
Required Argument.
|
|
1357
|
+
Specifies the value of the is local ordered argument.
|
|
1358
|
+
Type: bool
|
|
1359
|
+
|
|
1360
|
+
order_column_arg:
|
|
1361
|
+
Required Argument.
|
|
1362
|
+
Specifies the name of the order by column argument.
|
|
1363
|
+
Type: str
|
|
1364
|
+
|
|
1365
|
+
order_column_value:
|
|
1366
|
+
Required Argument.
|
|
1367
|
+
Specifies the value of the ordere by column argument.
|
|
1368
|
+
Type: str
|
|
1369
|
+
|
|
1370
|
+
input_table_arg:
|
|
1371
|
+
Required Argument.
|
|
1372
|
+
Specifies the name of the input table provided to the function.
|
|
1373
|
+
Types: str
|
|
1374
|
+
|
|
1375
|
+
input_table_arg_value:
|
|
1376
|
+
Required Argument.
|
|
1377
|
+
Specifies the value of the input table provided to the function.
|
|
1378
|
+
Types: DataFrame
|
|
1379
|
+
|
|
1380
|
+
RETURNS:
|
|
1381
|
+
None
|
|
1382
|
+
|
|
1383
|
+
RAISES:
|
|
1384
|
+
TeradataMlException
|
|
1385
|
+
|
|
1386
|
+
EXAMPLES:
|
|
1387
|
+
self._validate_hash_local_ordered_arguments("data", DataFrame.from_table("ibm_stock")), **kwargs)
|
|
1388
|
+
"""
|
|
1389
|
+
# Check for empty string and types(str or list) for hash column values.
|
|
1390
|
+
# Check for types for is local ordered values.
|
|
1391
|
+
|
|
1392
|
+
_Validators._validate_function_arguments([[hash_column_arg, hash_column_value, True, (str, list), True],
|
|
1393
|
+
[is_local_ordered_arg, is_local_ordered_value, True, bool, False]])
|
|
1394
|
+
|
|
1395
|
+
# Validate column existence in DataFrame.
|
|
1396
|
+
_Validators._validate_dataframe_has_argument_columns(hash_column_value,
|
|
1397
|
+
hash_column_arg,
|
|
1398
|
+
input_table_arg_value,
|
|
1399
|
+
input_table_arg
|
|
1400
|
+
)
|
|
1401
|
+
|
|
1402
|
+
# Hash and order by can be used together as long as is_local_order = True.
|
|
1403
|
+
if all([hash_column_value,
|
|
1404
|
+
order_column_value]) and not is_local_ordered_value:
|
|
1405
|
+
raise TeradataMlException(
|
|
1406
|
+
Messages.get_message(MessageCodes.CANNOT_USE_TOGETHER_WITH,
|
|
1407
|
+
"{}' and '{}".format(hash_column_arg, order_column_arg),
|
|
1408
|
+
"{}=False".format(is_local_ordered_arg)),
|
|
1409
|
+
MessageCodes.CANNOT_USE_TOGETHER_WITH)
|
|
1410
|
+
|
|
1411
|
+
# Either hash or partition can be used.
|
|
1412
|
+
_Validators._validate_mutually_exclusive_arguments(hash_column_value,
|
|
1413
|
+
hash_column_arg,
|
|
1414
|
+
partition_column_value,
|
|
1415
|
+
partition_column_arg,
|
|
1416
|
+
skip_all_none_check=True)
|
|
1417
|
+
|
|
1418
|
+
# Either local order by or partition by can be used.
|
|
1419
|
+
_Validators._validate_mutually_exclusive_arguments(is_local_ordered_value,
|
|
1420
|
+
is_local_ordered_arg,
|
|
1421
|
+
partition_column_value,
|
|
1422
|
+
partition_column_arg,
|
|
1423
|
+
skip_all_none_check=True)
|
|
1424
|
+
|
|
1425
|
+
# local order by requires column name.
|
|
1426
|
+
if is_local_ordered_value and order_column_value is None:
|
|
1427
|
+
message = Messages.get_message(MessageCodes.DEPENDENT_ARG_MISSING,
|
|
1428
|
+
order_column_arg, "{}=True".format(is_local_ordered_arg))
|
|
1429
|
+
raise TeradataMlException(message, MessageCodes.DEPENDENT_ARG_MISSING)
|
|
1430
|
+
|
|
1431
|
+
def _quote_collapse_other_args(self, argument, arg_value):
|
|
1432
|
+
"""
|
|
1433
|
+
DESCRIPTION:
|
|
1434
|
+
Given a list as an argument this will single quote all the
|
|
1435
|
+
list elements and combine them into a single string separated by
|
|
1436
|
+
commas.
|
|
1437
|
+
Append single quote to the elements which are required to be quoted.
|
|
1438
|
+
|
|
1439
|
+
PARAMETERS:
|
|
1440
|
+
argument:
|
|
1441
|
+
Required Argument.
|
|
1442
|
+
Specifies the argument object (_AnlyArgumentBase).
|
|
1443
|
+
Types: _AnlyFuncArgument
|
|
1444
|
+
|
|
1445
|
+
arg_value:
|
|
1446
|
+
Required Argument.
|
|
1447
|
+
Specifies the arg_value to be quoted and combined.
|
|
1448
|
+
Types: list OR string OR int OR bool OR float
|
|
1449
|
+
|
|
1450
|
+
RETURNS:
|
|
1451
|
+
None
|
|
1452
|
+
|
|
1453
|
+
RAISES:
|
|
1454
|
+
None
|
|
1455
|
+
|
|
1456
|
+
EXAMPLES:
|
|
1457
|
+
self._quote_collapse_other_args(argument, arg_value)
|
|
1458
|
+
"""
|
|
1459
|
+
arg_dtype = UtilFuncs._as_list(argument.get_data_type())
|
|
1460
|
+
for arg in arg_dtype:
|
|
1461
|
+
if arg.lower() in ("column", "columns", "column_names", "string", "boolean") and isinstance(arg_value,(str, bool)):
|
|
1462
|
+
return UtilFuncs._teradata_collapse_arglist(UtilFuncs._teradata_collapse_arglist(arg_value, "\'"), "'")
|
|
1463
|
+
else:
|
|
1464
|
+
return UtilFuncs._teradata_collapse_arglist(arg_value, "'")
|
|
1465
|
+
|
|
1466
|
+
class _UAFFunctionExecutor(_SQLEFunctionExecutor):
|
|
1467
|
+
""" Class to hold the attributes and provide methods to enable execution for UAF Functions. """
|
|
1468
|
+
def __init__(self, func_name):
|
|
1469
|
+
"""
|
|
1470
|
+
DESCRIPTION:
|
|
1471
|
+
Constructor for the class.
|
|
1472
|
+
|
|
1473
|
+
PARAMETERS:
|
|
1474
|
+
func_name:
|
|
1475
|
+
Required Argument.
|
|
1476
|
+
Specifies the name of the analytic function, which is exposed to the user.
|
|
1477
|
+
Types: str
|
|
1478
|
+
|
|
1479
|
+
RAISES:
|
|
1480
|
+
TypeError OR ValueError OR TeradataMlException
|
|
1481
|
+
|
|
1482
|
+
EXAMPLES:
|
|
1483
|
+
_UAFFunctionExecutor("ArimaEstimate")
|
|
1484
|
+
"""
|
|
1485
|
+
super().__init__(func_name, TeradataAnalyticFunctionTypes.UAF.value)
|
|
1486
|
+
self._func_other_args = {}
|
|
1487
|
+
self._func_input_fmt_arguments = {}
|
|
1488
|
+
self._func_output_fmt_arguments = {}
|
|
1489
|
+
|
|
1490
|
+
# Lists to hold Input Argument (Table) Information
|
|
1491
|
+
self._func_input_args = []
|
|
1492
|
+
self._func_input_filter_expr_args = []
|
|
1493
|
+
|
|
1494
|
+
# Lists to hold Output Table Information.
|
|
1495
|
+
self._func_output_args = None
|
|
1496
|
+
self._function_output_table_map = {}
|
|
1497
|
+
self._volatile_output = False
|
|
1498
|
+
|
|
1499
|
+
def _generate_query(self, volatile=False):
|
|
1500
|
+
"""
|
|
1501
|
+
DESCRIPTION:
|
|
1502
|
+
Function to generate the SQL query for UAF function.
|
|
1503
|
+
|
|
1504
|
+
RETURNS:
|
|
1505
|
+
None.
|
|
1506
|
+
|
|
1507
|
+
RAISES:
|
|
1508
|
+
None.
|
|
1509
|
+
|
|
1510
|
+
EXAMPLES:
|
|
1511
|
+
self._generate_query()
|
|
1512
|
+
"""
|
|
1513
|
+
query_generator = UAFQueryGenerator(function_name=self._metadata.sql_function_name,
|
|
1514
|
+
func_input_args=self._func_input_args,
|
|
1515
|
+
func_input_filter_expr_args=self._func_input_filter_expr_args,
|
|
1516
|
+
func_other_args=self._func_other_args ,
|
|
1517
|
+
func_output_args=self._func_output_args,
|
|
1518
|
+
func_input_fmt_args=self._func_input_fmt_arguments,
|
|
1519
|
+
func_output_fmt_args=self._func_output_fmt_arguments,
|
|
1520
|
+
volatile_output=volatile)
|
|
1521
|
+
self.sqlmr_query= query_generator._get_display_uaf()
|
|
1522
|
+
|
|
1523
|
+
def _process_input_argument(self, **kwargs):
|
|
1524
|
+
"""
|
|
1525
|
+
DESCRIPTION:
|
|
1526
|
+
Function to process input argument(s).
|
|
1527
|
+
|
|
1528
|
+
PARAMETERS:
|
|
1529
|
+
kwargs:
|
|
1530
|
+
Specifies the keyword arguments passed to a function.
|
|
1531
|
+
|
|
1532
|
+
RETURNS:
|
|
1533
|
+
None.
|
|
1534
|
+
|
|
1535
|
+
RAISES:
|
|
1536
|
+
None.
|
|
1537
|
+
|
|
1538
|
+
EXAMPLES:
|
|
1539
|
+
self._process_input_argument()
|
|
1540
|
+
"""
|
|
1541
|
+
from teradataml.dataframe.sql_interfaces import ColumnExpression
|
|
1542
|
+
|
|
1543
|
+
# Process the Input tables.
|
|
1544
|
+
# Get the list of input arguments from the JsonStore metadata
|
|
1545
|
+
for input_attribute in self._metadata.input_tables:
|
|
1546
|
+
# Get the input table arg name.
|
|
1547
|
+
input_table_arg = input_attribute.get_lang_name()
|
|
1548
|
+
|
|
1549
|
+
# Get the value of input table arg.
|
|
1550
|
+
input_table_arg_value = kwargs.get(input_table_arg, None)
|
|
1551
|
+
self._validate_analytic_function_argument(input_table_arg,
|
|
1552
|
+
input_table_arg_value,
|
|
1553
|
+
input_attribute)
|
|
1554
|
+
|
|
1555
|
+
# Form the 'filter_expr' key name (User provided input).
|
|
1556
|
+
filter_exp_arg = "{}_filter_expr".format(input_table_arg)
|
|
1557
|
+
# Get the 'filter_expr' value.
|
|
1558
|
+
filter_exp_arg_value = kwargs.get(filter_exp_arg, None)
|
|
1559
|
+
|
|
1560
|
+
# If 'filter_expr' is passed and 'data' is None, raise
|
|
1561
|
+
# dependent argument exception.
|
|
1562
|
+
if filter_exp_arg_value is not None and \
|
|
1563
|
+
input_table_arg_value is None:
|
|
1564
|
+
# Raise error, if "data" not provided and "data_filter_expr" is provided.
|
|
1565
|
+
err_ = Messages.get_message(MessageCodes.DEPENDENT_ARGUMENT,
|
|
1566
|
+
filter_exp_arg,
|
|
1567
|
+
input_table_arg)
|
|
1568
|
+
raise TeradataMlException(err_, MessageCodes.DEPENDENT_ARGUMENT)
|
|
1569
|
+
|
|
1570
|
+
# 'filter_expr' argument validation (User provided input).
|
|
1571
|
+
arg_info = []
|
|
1572
|
+
arg_info.append([filter_exp_arg, filter_exp_arg_value, True,
|
|
1573
|
+
(ColumnExpression), False])
|
|
1574
|
+
|
|
1575
|
+
# Validate 'filter_expr' argument types (User provided input).
|
|
1576
|
+
_Validators._validate_function_arguments(arg_info)
|
|
1577
|
+
|
|
1578
|
+
# If data is not None, then add 'data' and 'filter_expr' to lists.
|
|
1579
|
+
if input_table_arg_value is not None:
|
|
1580
|
+
# Append the lists.
|
|
1581
|
+
self._func_input_args.append(input_table_arg_value)
|
|
1582
|
+
self._func_input_filter_expr_args.append(filter_exp_arg_value)
|
|
1583
|
+
|
|
1584
|
+
def _process_function_output(self, **kwargs):
|
|
1585
|
+
"""
|
|
1586
|
+
DESCRIPTION:
|
|
1587
|
+
Internal function to process the output tables. This function creates
|
|
1588
|
+
the required output DataFrames from the tables and a result list.
|
|
1589
|
+
|
|
1590
|
+
PARAMETERS:
|
|
1591
|
+
None.
|
|
1592
|
+
|
|
1593
|
+
RETURNS:
|
|
1594
|
+
None.
|
|
1595
|
+
|
|
1596
|
+
RAISES:
|
|
1597
|
+
None.
|
|
1598
|
+
|
|
1599
|
+
EXAMPLES:
|
|
1600
|
+
self._process_function_output()
|
|
1601
|
+
"""
|
|
1602
|
+
volatile = kwargs.get("volatile", False)
|
|
1603
|
+
persist = kwargs.get("persist", False)
|
|
1604
|
+
output_db_name = kwargs.get("output_db_name")
|
|
1605
|
+
|
|
1606
|
+
# Since the regular function will always refer to latest value, creating
|
|
1607
|
+
# a closure here. The function will go as an attribute to dynamically
|
|
1608
|
+
# created object.
|
|
1609
|
+
def _parent(layer_name, table_name, query=None):
|
|
1610
|
+
|
|
1611
|
+
def _layer(self):
|
|
1612
|
+
if self._data.get(layer_name) is None:
|
|
1613
|
+
from teradataml import DataFrame, in_schema
|
|
1614
|
+
# Execute the Query, create a DataFrame and attach it.
|
|
1615
|
+
if query:
|
|
1616
|
+
UtilFuncs._execute_query(query=query)
|
|
1617
|
+
_db_name, _table_name = UtilFuncs._extract_db_name(table_name), \
|
|
1618
|
+
UtilFuncs._extract_table_name(table_name)
|
|
1619
|
+
_table_name = in_schema(_db_name, _table_name) if _db_name else _table_name
|
|
1620
|
+
self._data[layer_name] = DataFrame.from_table(table_name)
|
|
1621
|
+
|
|
1622
|
+
return self._data[layer_name]
|
|
1623
|
+
|
|
1624
|
+
return _layer
|
|
1625
|
+
|
|
1626
|
+
for output_table in self._metadata.output_tables[1:]:
|
|
1627
|
+
layer_name = output_table.get_layer_name()
|
|
1628
|
+
exposed_layer_name = output_table.get_lang_name()
|
|
1629
|
+
|
|
1630
|
+
# Creating the ART Spec here instead of creating an object of TDSeries to
|
|
1631
|
+
# save additional imports and processing.
|
|
1632
|
+
_art_spec = "ART_SPEC(TABLE_NAME({}), LAYER({}))".format(self._function_output_table_map["result"],
|
|
1633
|
+
layer_name)
|
|
1634
|
+
|
|
1635
|
+
# Generate table name.
|
|
1636
|
+
func_params = self._get_generate_temp_table_params(persist=persist,
|
|
1637
|
+
output_db=output_db_name)
|
|
1638
|
+
_table_name = UtilFuncs._generate_temp_table_name(**func_params)
|
|
1639
|
+
|
|
1640
|
+
# Generate Query.
|
|
1641
|
+
UAF_Query = UAFQueryGenerator(function_name="TD_EXTRACT_RESULTS",
|
|
1642
|
+
func_input_args=_art_spec,
|
|
1643
|
+
func_input_filter_expr_args={},
|
|
1644
|
+
func_other_args={},
|
|
1645
|
+
func_input_fmt_args={},
|
|
1646
|
+
func_output_args=_table_name,
|
|
1647
|
+
volatile_output=volatile,
|
|
1648
|
+
ctas=True)
|
|
1649
|
+
|
|
1650
|
+
query = UAF_Query._get_display_uaf()
|
|
1651
|
+
|
|
1652
|
+
# Store the internal function in a dict. While storing it, convert it to
|
|
1653
|
+
# a property so user do not need to call it.
|
|
1654
|
+
self._dyn_cls_data_members[exposed_layer_name] = property(
|
|
1655
|
+
_parent(exposed_layer_name, _table_name, query))
|
|
1656
|
+
|
|
1657
|
+
# 'result' attribute in UAF Function object should point to output table.
|
|
1658
|
+
self._dyn_cls_data_members["result"] = property(
|
|
1659
|
+
_parent("result", self._function_output_table_map["result"]))
|
|
1660
|
+
|
|
1661
|
+
# To make lazy execution, we will add additional attributes to UAF Function object.
|
|
1662
|
+
# Mask those additional attributes by overwriting the __dir__ method.
|
|
1663
|
+
attrs = list(self._dyn_cls_data_members.keys())
|
|
1664
|
+
self._dyn_cls_data_members["__dir__"] = lambda self: super(self.__class__).__dir__() + attrs
|
|
1665
|
+
|
|
1666
|
+
# Add a variable _data to output object so that the layers DataFrame
|
|
1667
|
+
# will be stored in this variable.
|
|
1668
|
+
self._dyn_cls_data_members["_data"] = {}
|
|
1669
|
+
|
|
1670
|
+
def _get_generate_temp_table_params(self, persist=False, output_db=None, volatile=False):
|
|
1671
|
+
"""
|
|
1672
|
+
DESCRIPTION:
|
|
1673
|
+
Function to get the required parameters to create either table or view.
|
|
1674
|
+
When function has output table arguments or argument persist is set to True,
|
|
1675
|
+
then function returns parameters to create table otherwise returns parameters
|
|
1676
|
+
to create view. If persist is set to True or volatile is set to True, in such cases,
|
|
1677
|
+
tables created are not garbage collected.
|
|
1678
|
+
|
|
1679
|
+
PARAMETERS:
|
|
1680
|
+
persist:
|
|
1681
|
+
Optional Argument.
|
|
1682
|
+
Specifies whether to persist the output table or not.
|
|
1683
|
+
When set to True, output tables created are not garbage collected
|
|
1684
|
+
at the end of the session, otherwise they are garbage collected.
|
|
1685
|
+
Default Value: False
|
|
1686
|
+
Types: bool
|
|
1687
|
+
|
|
1688
|
+
output_db:
|
|
1689
|
+
Optional Argument.
|
|
1690
|
+
Specifies the output DataBase name to create the output tables.
|
|
1691
|
+
Default Value: False
|
|
1692
|
+
Types: str
|
|
1693
|
+
|
|
1694
|
+
volatile:
|
|
1695
|
+
Optional Argument.
|
|
1696
|
+
Specifies whether table to create is a volatile table or not.
|
|
1697
|
+
Default Value: False
|
|
1698
|
+
Types: bool
|
|
1699
|
+
|
|
1700
|
+
RETURNS:
|
|
1701
|
+
dict
|
|
1702
|
+
|
|
1703
|
+
RAISES:
|
|
1704
|
+
None
|
|
1705
|
+
|
|
1706
|
+
EXAMPLES:
|
|
1707
|
+
self._get_generate_temp_table_params(True, True)
|
|
1708
|
+
"""
|
|
1709
|
+
prefix = "td_uaf_out_"
|
|
1710
|
+
|
|
1711
|
+
# If result is to be persisted then, it must not be Garbage collected.
|
|
1712
|
+
gc_on_quit = False if persist or volatile else True
|
|
1713
|
+
|
|
1714
|
+
return {"table_type": TeradataConstants.TERADATA_TABLE,
|
|
1715
|
+
"prefix": prefix,
|
|
1716
|
+
"gc_on_quit": gc_on_quit,
|
|
1717
|
+
"databasename": output_db if output_db else _get_context_temp_databasename()}
|
|
1718
|
+
|
|
1719
|
+
def _process_output_argument(self, **kwargs):
|
|
1720
|
+
"""
|
|
1721
|
+
DESCRIPTION:
|
|
1722
|
+
Function to process output argument(s) of UAF function.
|
|
1723
|
+
|
|
1724
|
+
PARAMETERS:
|
|
1725
|
+
kwargs:
|
|
1726
|
+
Specifies the keyword arguments passed to a function.
|
|
1727
|
+
|
|
1728
|
+
RETURNS:
|
|
1729
|
+
None.
|
|
1730
|
+
|
|
1731
|
+
RAISES:
|
|
1732
|
+
TypeError, ValueError, TeradataMlException.
|
|
1733
|
+
|
|
1734
|
+
EXAMPLES:
|
|
1735
|
+
self._process_output_argument()
|
|
1736
|
+
"""
|
|
1737
|
+
# If kwargs not provided, initialize it with default value.
|
|
1738
|
+
volatile = kwargs.get("volatile", False)
|
|
1739
|
+
persist = kwargs.get("persist", False)
|
|
1740
|
+
output_table_name = kwargs.get("output_table_name", None)
|
|
1741
|
+
output_db_name = kwargs.get("output_db_name", None)
|
|
1742
|
+
|
|
1743
|
+
arg_info = []
|
|
1744
|
+
arg_info.append(["volatile", volatile, False, (bool)])
|
|
1745
|
+
arg_info.append(["persist", persist, False, (bool)])
|
|
1746
|
+
arg_info.append(["output_table_name", output_table_name, True, (str), True])
|
|
1747
|
+
arg_info.append(["output_db_name", output_db_name, True, (str), True])
|
|
1748
|
+
|
|
1749
|
+
_Validators._validate_function_arguments(arg_info)
|
|
1750
|
+
|
|
1751
|
+
# If table is name is not provided by user, generate the temp table name.
|
|
1752
|
+
# Else, get fully qualified table name.
|
|
1753
|
+
if output_table_name is None:
|
|
1754
|
+
# Generate the name of the table, if not provide by user.
|
|
1755
|
+
func_params = self._get_generate_temp_table_params(persist=persist,
|
|
1756
|
+
output_db=output_db_name,
|
|
1757
|
+
volatile=volatile)
|
|
1758
|
+
|
|
1759
|
+
# Generate temp table name and add it to garbage collector.
|
|
1760
|
+
table_name = UtilFuncs._generate_temp_table_name(**func_params)
|
|
1761
|
+
else:
|
|
1762
|
+
# If database name is not provided by user, get the default database name
|
|
1763
|
+
# else use user provided database name.
|
|
1764
|
+
db_name = output_db_name if output_db_name is not None else \
|
|
1765
|
+
_get_context_temp_databasename()
|
|
1766
|
+
|
|
1767
|
+
# Get the fully qualified table name.
|
|
1768
|
+
table_name = "{}.{}".format(UtilFuncs._teradata_quote_arg(db_name,
|
|
1769
|
+
"\"", False),
|
|
1770
|
+
UtilFuncs._teradata_quote_arg(output_table_name,
|
|
1771
|
+
"\"", False))
|
|
1772
|
+
|
|
1773
|
+
# If persist is set to False, add the table name to
|
|
1774
|
+
# Garbage collector.
|
|
1775
|
+
if not persist:
|
|
1776
|
+
GarbageCollector._add_to_garbagecollector(table_name)
|
|
1777
|
+
|
|
1778
|
+
# Populate the output arg, output table map and volatile output.
|
|
1779
|
+
self._func_output_args = table_name
|
|
1780
|
+
self._function_output_table_map["result"] = table_name
|
|
1781
|
+
self._volatile_output = volatile
|
|
1782
|
+
|
|
1783
|
+
def __process_individual_argument(self, argument, **kwargs):
|
|
1784
|
+
"""
|
|
1785
|
+
DESCRIPTION:
|
|
1786
|
+
Internal function to process the individual arguments.
|
|
1787
|
+
1. If the argument does not have nested parameters and is present in kwargs,
|
|
1788
|
+
the function does the following:
|
|
1789
|
+
* Checks the required arguments are passed or not.
|
|
1790
|
+
* Checks the type of the arguments are expected or not.
|
|
1791
|
+
* Checks for permitted values.
|
|
1792
|
+
* Checks for empty string.
|
|
1793
|
+
* If validations run fine,
|
|
1794
|
+
then returns a dict with the SQL name of the argument as key
|
|
1795
|
+
and user provided value as the value.
|
|
1796
|
+
* Dictornary without nested parameters is formed as below:
|
|
1797
|
+
{arg_sql_name : value}
|
|
1798
|
+
2. If the argument has nested params:
|
|
1799
|
+
* Function loops over the nested parameter and calls itself recursively
|
|
1800
|
+
on the nested parameters and repeats the process.
|
|
1801
|
+
* Dictonary with nested arguments are formed as below:
|
|
1802
|
+
{ Parent_sql_name : { Child1_sql_name : value, Child2_sql_name : value}}
|
|
1803
|
+
|
|
1804
|
+
PARAMETERS:
|
|
1805
|
+
argument:
|
|
1806
|
+
Required Argument.
|
|
1807
|
+
Specifies the argument object (_AnlyFuncArgument).
|
|
1808
|
+
Types: _AnlyFuncArgument
|
|
1809
|
+
|
|
1810
|
+
kwargs:
|
|
1811
|
+
Specifies the keyword arguments passed to a function.
|
|
1812
|
+
|
|
1813
|
+
RETURNS:
|
|
1814
|
+
None.
|
|
1815
|
+
|
|
1816
|
+
RAISES:
|
|
1817
|
+
ValueError OR TypeError OR TeradataMlException.
|
|
1818
|
+
|
|
1819
|
+
EXAMPLES:
|
|
1820
|
+
self._process_other_arguments(argument, arg1="string", arg2="db", arg3=2)
|
|
1821
|
+
|
|
1822
|
+
"""
|
|
1823
|
+
sql_name = argument.get_name()
|
|
1824
|
+
lang_name = argument.get_lang_name()
|
|
1825
|
+
arg_value = kwargs.get(lang_name)
|
|
1826
|
+
# Set the "argument".
|
|
1827
|
+
self._spl_func_obj.set_arg_name(argument)
|
|
1828
|
+
# Let's get spl handler if function requires.
|
|
1829
|
+
special_case_handler = self._spl_func_obj._get_handle()
|
|
1830
|
+
|
|
1831
|
+
if len(argument.get_nested_param_list()) == 0:
|
|
1832
|
+
self._validate_analytic_function_argument(lang_name, arg_value, argument)
|
|
1833
|
+
# If argument is not None and it is not equal to the default value,
|
|
1834
|
+
# add the sql_name and arg_value to the dict else return an empty dict
|
|
1835
|
+
if arg_value is not None and arg_value != argument.get_default_value():
|
|
1836
|
+
|
|
1837
|
+
# If get_match_length_of_arguments is True, check if the arg_value is
|
|
1838
|
+
# a list and of the required size.
|
|
1839
|
+
if argument.get_match_length_of_arguments():
|
|
1840
|
+
required_length = argument.get_required_length()
|
|
1841
|
+
if (isinstance(arg_value, list) and len(arg_value) != required_length) or\
|
|
1842
|
+
(not isinstance(arg_value, list)):
|
|
1843
|
+
raise TeradataMlException(Messages.get_message(
|
|
1844
|
+
MessageCodes.INVALID_LIST_LENGTH).format(lang_name,
|
|
1845
|
+
required_length),
|
|
1846
|
+
MessageCodes.INVALID_LIST_LENGTH)
|
|
1847
|
+
|
|
1848
|
+
# Perform the checks which are specific to argument(_AnlyFuncArgument) type.
|
|
1849
|
+
# Check lower bound and upper bound for numeric arguments.
|
|
1850
|
+
if isinstance(arg_value, (int, float)):
|
|
1851
|
+
lower_bound_inclusive = argument.get_lower_bound_type() == "INCLUSIVE"
|
|
1852
|
+
upper_bound_inclusive = argument.get_upper_bound_type() == "INCLUSIVE"
|
|
1853
|
+
_Validators._validate_argument_range(arg_value,
|
|
1854
|
+
lang_name,
|
|
1855
|
+
lbound=argument.get_lower_bound(),
|
|
1856
|
+
ubound=argument.get_upper_bound(),
|
|
1857
|
+
lbound_inclusive=lower_bound_inclusive,
|
|
1858
|
+
ubound_inclusive=upper_bound_inclusive)
|
|
1859
|
+
|
|
1860
|
+
# If the argument is a bool type, convert it to integer since SQL do
|
|
1861
|
+
# not know boolean processing.
|
|
1862
|
+
if bool in argument.get_python_type() and isinstance(arg_value, bool):
|
|
1863
|
+
arg_value = int(arg_value)
|
|
1864
|
+
|
|
1865
|
+
# Handle special cases for "arg_values" based on handling method.
|
|
1866
|
+
arg_value = special_case_handler(arg_value) if special_case_handler is not None else arg_value
|
|
1867
|
+
return {sql_name : arg_value}
|
|
1868
|
+
return {}
|
|
1869
|
+
else:
|
|
1870
|
+
temp_dict = {}
|
|
1871
|
+
for nested_arg in argument.get_nested_param_list():
|
|
1872
|
+
temp_dict.update(self.__process_individual_argument(nested_arg, **kwargs))
|
|
1873
|
+
return_dict = {sql_name : temp_dict} if temp_dict else {}
|
|
1874
|
+
return return_dict
|
|
1875
|
+
|
|
1876
|
+
def _process_other_argument(self, **kwargs):
|
|
1877
|
+
"""
|
|
1878
|
+
DESCRIPTION:
|
|
1879
|
+
Function to process the metadata arguments. It does the following:
|
|
1880
|
+
* Iterates over the metadata arguments, calls __process_individual_argument
|
|
1881
|
+
for each argument and populates the dict '_func_other_args'.
|
|
1882
|
+
|
|
1883
|
+
PARAMETERS:
|
|
1884
|
+
kwargs:
|
|
1885
|
+
Specifies the keyword arguments passed to a function.
|
|
1886
|
+
|
|
1887
|
+
RETURNS:
|
|
1888
|
+
None.
|
|
1889
|
+
|
|
1890
|
+
RAISES:
|
|
1891
|
+
ValueError OR TypeError OR TeradataMlException.
|
|
1892
|
+
|
|
1893
|
+
EXAMPLES:
|
|
1894
|
+
self._process_other_arguments(arg1="string", arg2="db", arg3=2)
|
|
1895
|
+
"""
|
|
1896
|
+
for argument in self._metadata.arguments:
|
|
1897
|
+
self._func_other_args.update(self.__process_individual_argument(argument, **kwargs))
|
|
1898
|
+
|
|
1899
|
+
# Process the InputFmt arguments.
|
|
1900
|
+
for input_fmt_argument in self._metadata.input_fmt_arguments:
|
|
1901
|
+
self._func_input_fmt_arguments.update(
|
|
1902
|
+
self.__process_individual_argument(input_fmt_argument,
|
|
1903
|
+
**kwargs))
|
|
1904
|
+
|
|
1905
|
+
# Process the OutputFmt arguments.
|
|
1906
|
+
for output_fmt_argument in self._metadata.output_fmt_arguments:
|
|
1907
|
+
self._func_output_fmt_arguments.update(
|
|
1908
|
+
self.__process_individual_argument(output_fmt_argument,
|
|
1909
|
+
**kwargs))
|
|
1910
|
+
|
|
1911
|
+
@collect_queryband(attr="func_name")
|
|
1912
|
+
def _execute_query(self, persist=False, volatile=None):
|
|
1913
|
+
"""
|
|
1914
|
+
DESCRIPTION:
|
|
1915
|
+
Function to execute query on Vantage.
|
|
1916
|
+
|
|
1917
|
+
PARAMETERS:
|
|
1918
|
+
persist:
|
|
1919
|
+
Optional Argument.
|
|
1920
|
+
Specifies whether to persist a table or not.
|
|
1921
|
+
Default Value: False
|
|
1922
|
+
Type: bool
|
|
1923
|
+
|
|
1924
|
+
RETURNS:
|
|
1925
|
+
None
|
|
1926
|
+
|
|
1927
|
+
RAISES:
|
|
1928
|
+
TeradataMlException
|
|
1929
|
+
|
|
1930
|
+
EXAMPLES:
|
|
1931
|
+
self._execute_query()
|
|
1932
|
+
"""
|
|
1933
|
+
try:
|
|
1934
|
+
# Execute already generated query.
|
|
1935
|
+
UtilFuncs._execute_query(query=self.sqlmr_query)
|
|
1936
|
+
|
|
1937
|
+
if persist:
|
|
1938
|
+
# SQL is already executed. So, print the table names.
|
|
1939
|
+
for output_attribute, table_name in self._function_output_table_map.items():
|
|
1940
|
+
print("{} data stored in table '{}'".format(output_attribute, table_name))
|
|
1941
|
+
|
|
1942
|
+
except Exception as emsg:
|
|
1943
|
+
raise TeradataMlException(Messages.get_message(MessageCodes.TDMLDF_EXEC_SQL_FAILED, str(emsg)),
|
|
1944
|
+
MessageCodes.TDMLDF_EXEC_SQL_FAILED)
|
|
1945
|
+
|
|
1946
|
+
|
|
1947
|
+
class _BYOMFunctionExecutor(_SQLEFunctionExecutor):
|
|
1948
|
+
def __init__(self, func_name):
|
|
1949
|
+
"""
|
|
1950
|
+
DESCRIPTION:
|
|
1951
|
+
Constructor for the class.
|
|
1952
|
+
|
|
1953
|
+
PARAMETERS:
|
|
1954
|
+
func_name:
|
|
1955
|
+
Required Argument.
|
|
1956
|
+
Specifies the name of the analytic function, which is exposed to the user.
|
|
1957
|
+
Types: str
|
|
1958
|
+
|
|
1959
|
+
RAISES:
|
|
1960
|
+
None
|
|
1961
|
+
|
|
1962
|
+
EXAMPLES:
|
|
1963
|
+
_BYOMFunctionExecutor("ONNXPredict")
|
|
1964
|
+
"""
|
|
1965
|
+
super().__init__(func_name, TeradataAnalyticFunctionTypes.BYOM.value)
|
|
1966
|
+
|
|
1967
|
+
def _generate_query(self, volatile=False):
|
|
1968
|
+
"""
|
|
1969
|
+
DESCRIPTION:
|
|
1970
|
+
Function to generate the SQL query for BYOM analytic function.
|
|
1971
|
+
|
|
1972
|
+
PARAMETERS:
|
|
1973
|
+
volatile:
|
|
1974
|
+
Optional Argument.
|
|
1975
|
+
Specifies whether to create a volatile table or not.
|
|
1976
|
+
Default Value: False
|
|
1977
|
+
Type: bool
|
|
1978
|
+
|
|
1979
|
+
RETURNS:
|
|
1980
|
+
None.
|
|
1981
|
+
|
|
1982
|
+
RAISES:
|
|
1983
|
+
None.
|
|
1984
|
+
|
|
1985
|
+
EXAMPLES:
|
|
1986
|
+
self._generate_query()
|
|
1987
|
+
"""
|
|
1988
|
+
# Check for byom install location and
|
|
1989
|
+
# update the db_name.
|
|
1990
|
+
db_name = None
|
|
1991
|
+
if configure.byom_install_location is not None:
|
|
1992
|
+
db_name = configure.byom_install_location
|
|
1993
|
+
|
|
1994
|
+
self.__aqg_obj = AnalyticQueryGenerator(function_name=self._metadata.sql_function_name,
|
|
1995
|
+
func_input_arg_sql_names=self._func_input_arg_sql_names,
|
|
1996
|
+
func_input_table_view_query=self._func_input_table_view_query,
|
|
1997
|
+
func_input_dataframe_type=self._func_input_dataframe_type,
|
|
1998
|
+
func_input_distribution=self._func_input_distribution,
|
|
1999
|
+
func_input_partition_by_cols=self._func_input_partition_by_cols,
|
|
2000
|
+
func_input_order_by_cols=self._func_input_order_by_cols,
|
|
2001
|
+
func_other_arg_sql_names=self._func_other_arg_sql_names,
|
|
2002
|
+
func_other_args_values=self._func_other_args,
|
|
2003
|
+
func_other_arg_json_datatypes=self._func_other_arg_json_datatypes,
|
|
2004
|
+
func_output_args_sql_names=self._func_output_args_sql_names,
|
|
2005
|
+
func_output_args_values=self._func_output_args,
|
|
2006
|
+
engine="ENGINE_SQL",
|
|
2007
|
+
db_name=db_name,
|
|
2008
|
+
volatile_output=volatile,
|
|
2009
|
+
skip_config_lookup=True,
|
|
2010
|
+
func_input_local_order=self._func_input_local_order)
|
|
2011
|
+
|
|
2012
|
+
# Invoke call to SQL-MR generation.
|
|
2013
|
+
self.sqlmr_query = self.__aqg_obj._gen_sqlmr_select_stmt_sql()
|