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,958 +1,958 @@
|
|
|
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: pankajvinod.purandare@teradata.com #
|
|
7
|
-
# Secondary Owner: #
|
|
8
|
-
# #
|
|
9
|
-
# This file implements class creates a SQL-MR object, which can be #
|
|
10
|
-
# used to generate SQL-MR/Analytical query in FFE syntax for Teradata. #
|
|
11
|
-
#########################################################################
|
|
12
|
-
|
|
13
|
-
import os
|
|
14
|
-
from collections import OrderedDict
|
|
15
|
-
from teradataml.common.utils import UtilFuncs
|
|
16
|
-
from teradataml.context.context import _get_function_mappings
|
|
17
|
-
from teradataml.common.messagecodes import MessageCodes
|
|
18
|
-
from teradataml.common.messages import Messages
|
|
19
|
-
from teradataml.common.exceptions import TeradataMlException
|
|
20
|
-
from teradataml.dataframe.dataframe_utils import DataFrameUtils
|
|
21
|
-
from teradataml.options.configure import configure
|
|
22
|
-
from teradataml.common.constants import TeradataReservedKeywords
|
|
23
|
-
|
|
24
|
-
# Current directory is analytics folder.
|
|
25
|
-
teradataml_folder = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
26
|
-
config_folder = os.path.join(teradataml_folder, "config")
|
|
27
|
-
|
|
28
|
-
class AnalyticQueryGenerator:
|
|
29
|
-
"""
|
|
30
|
-
This class creates a SQL-MR object, which can be used to generate
|
|
31
|
-
SQL-MR/Analytical query in FFE syntax for Teradata.
|
|
32
|
-
"""
|
|
33
|
-
|
|
34
|
-
def __init__(self, function_name, func_input_arg_sql_names, func_input_table_view_query, func_input_dataframe_type,
|
|
35
|
-
func_input_distribution, func_input_partition_by_cols, func_input_order_by_cols,
|
|
36
|
-
func_other_arg_sql_names, func_other_args_values, func_other_arg_json_datatypes,
|
|
37
|
-
func_output_args_sql_names, func_output_args_values, func_type="FFE",
|
|
38
|
-
engine="ENGINE_ML", db_name=None, volatile_output=False, skip_config_lookup=False,
|
|
39
|
-
func_input_local_order=None):
|
|
40
|
-
"""
|
|
41
|
-
AnalyticalQueryGenerator constructor, to create a map-reduce object, for
|
|
42
|
-
SQL-MR/Analytical query generation.
|
|
43
|
-
|
|
44
|
-
PARAMETERS:
|
|
45
|
-
function_name:
|
|
46
|
-
Required Argument.
|
|
47
|
-
Specifies the name of the function.
|
|
48
|
-
|
|
49
|
-
func_input_arg_sql_names:
|
|
50
|
-
Required Argument.
|
|
51
|
-
Specifies the list of input SQL Argument names.
|
|
52
|
-
|
|
53
|
-
func_input_table_view_query:
|
|
54
|
-
Required Argument.
|
|
55
|
-
Specifies the list of input argument values, with
|
|
56
|
-
respect to 'func_input_arg_sql_names' which contains
|
|
57
|
-
table_name or SQL (Select query).
|
|
58
|
-
|
|
59
|
-
func_input_dataframe_type:
|
|
60
|
-
Required Argument.
|
|
61
|
-
Specifies the list of dataframe types for each input.
|
|
62
|
-
Values can be "TABLE" or "QUERY".
|
|
63
|
-
|
|
64
|
-
func_input_distribution:
|
|
65
|
-
Required Argument.
|
|
66
|
-
Specifies the list containing distributions for each
|
|
67
|
-
input. Values can be "FACT", "DIMENSION", "NONE".
|
|
68
|
-
|
|
69
|
-
func_input_partition_by cols:
|
|
70
|
-
Required Argument.
|
|
71
|
-
Specifes the list containing partition columns for
|
|
72
|
-
each input, if distribution is FACT.
|
|
73
|
-
|
|
74
|
-
func_input_order_by_cols:
|
|
75
|
-
Required Argument.
|
|
76
|
-
Specifies the list of values, for each input, to be
|
|
77
|
-
used order by clause.
|
|
78
|
-
|
|
79
|
-
func_other_arg_sql_names:
|
|
80
|
-
Required Argument.
|
|
81
|
-
Specifies the list of other function arguments SQL
|
|
82
|
-
name.
|
|
83
|
-
|
|
84
|
-
func_other_args_values:
|
|
85
|
-
Required Argument.
|
|
86
|
-
Specifies the list of other function argument values,
|
|
87
|
-
with respect to each member in 'func_other_arg_sql_names'.
|
|
88
|
-
|
|
89
|
-
func_other_arg_json_datatypes:
|
|
90
|
-
Required Argument.
|
|
91
|
-
Specifies the list of JSON datatypes for each member in
|
|
92
|
-
'func_other_arg_sql_names'.
|
|
93
|
-
|
|
94
|
-
func_output_args_sql_names:
|
|
95
|
-
Required Argument.
|
|
96
|
-
Specifies the list of output SQL argument names.
|
|
97
|
-
|
|
98
|
-
func_output_args_values:
|
|
99
|
-
Required Argument.
|
|
100
|
-
Specifies the list of output table names for each
|
|
101
|
-
output table argument in 'func_output_args_sql_names'.
|
|
102
|
-
|
|
103
|
-
func_type:
|
|
104
|
-
Required Argument. Fixed value 'FFE'.
|
|
105
|
-
Kept for future purpose, to generate different syntaxes.
|
|
106
|
-
|
|
107
|
-
engine:
|
|
108
|
-
Optional Argument.
|
|
109
|
-
Specifies the type of engine.
|
|
110
|
-
Default Value : ENGINE_ML
|
|
111
|
-
Permitted Values : ENGINE_ML, ENGINE_SQL
|
|
112
|
-
|
|
113
|
-
db_name:
|
|
114
|
-
Optional Argument.
|
|
115
|
-
Specifies the install location of function. This argument will be primarily
|
|
116
|
-
used for BYOM functions.
|
|
117
|
-
Default Value: None
|
|
118
|
-
|
|
119
|
-
volatile_output:
|
|
120
|
-
Optional Argument.
|
|
121
|
-
Specifies the table to create is Volatile or not. When set to True,
|
|
122
|
-
volatile table is created, otherwise permanent table is created.
|
|
123
|
-
Default Value: False
|
|
124
|
-
Types: bool
|
|
125
|
-
|
|
126
|
-
skip_config_lookup:
|
|
127
|
-
Optional Argument.
|
|
128
|
-
Specifies whether the Query generater should look at config files before
|
|
129
|
-
generating the SQL Query or not. If set to False, Query generator validates
|
|
130
|
-
whether function is supported for the corresponding vantage version by
|
|
131
|
-
looking at the config file. Otherwise, the QueryGenerator generates the
|
|
132
|
-
SQL without validating it.
|
|
133
|
-
Default Value: False
|
|
134
|
-
|
|
135
|
-
RETURNS:
|
|
136
|
-
AnalyticalQueryGenerator object. (We can call this as map-reduce object)
|
|
137
|
-
|
|
138
|
-
RAISES:
|
|
139
|
-
|
|
140
|
-
EXAMPLES:
|
|
141
|
-
aqg_obj = AnalyticQueryGenerator(self.function_name, self.input_sql_args,
|
|
142
|
-
self.input_table_qry, self.input_df_type,
|
|
143
|
-
self.input_distribution, self.input_partition_columns,
|
|
144
|
-
self.input_order_columns, self.other_sql_args,
|
|
145
|
-
self.other_args_val, [], self.output_sql_args,
|
|
146
|
-
self.output_args_val, engine="ENGINE_SQL",
|
|
147
|
-
db_name="mldb")
|
|
148
|
-
"""
|
|
149
|
-
self.__engine = engine
|
|
150
|
-
self.__function_name = function_name
|
|
151
|
-
if not skip_config_lookup:
|
|
152
|
-
self.__function_name = self._get_alias_name_for_function(function_name)
|
|
153
|
-
self.__db_name = db_name
|
|
154
|
-
if self.__db_name:
|
|
155
|
-
self.__function_name = "\"{}\".{}".format(self.__db_name,
|
|
156
|
-
self.__function_name)
|
|
157
|
-
self.__func_input_arg_sql_names = func_input_arg_sql_names
|
|
158
|
-
self.__func_input_table_view_query = func_input_table_view_query
|
|
159
|
-
self.__func_input_dataframe_type = func_input_dataframe_type
|
|
160
|
-
self.__func_input_distribution = func_input_distribution
|
|
161
|
-
self.__func_input_partition_by_cols = func_input_partition_by_cols
|
|
162
|
-
self.__func_input_order_by_cols = func_input_order_by_cols
|
|
163
|
-
self.__func_other_arg_sql_names = func_other_arg_sql_names
|
|
164
|
-
self.__func_other_args_values = func_other_args_values
|
|
165
|
-
self.__func_other_arg_json_datatypes = func_other_arg_json_datatypes
|
|
166
|
-
self.__func_output_args_sql_names = func_output_args_sql_names
|
|
167
|
-
self.__func_output_args_values = func_output_args_values
|
|
168
|
-
self.__func_input_local_order = func_input_local_order
|
|
169
|
-
self.__func_type = func_type
|
|
170
|
-
self.__SELECT_STMT_FMT = "SELECT * FROM {} as sqlmr"
|
|
171
|
-
self.__QUERY_SIZE = self.__get_string_size(self.__SELECT_STMT_FMT) + 20
|
|
172
|
-
self.__input_arg_clause_lengths = []
|
|
173
|
-
self._multi_query_input_nodes = []
|
|
174
|
-
self.__volatile_output = volatile_output
|
|
175
|
-
|
|
176
|
-
def __process_for_teradata_keyword(self, keyword):
|
|
177
|
-
"""
|
|
178
|
-
Internal function to process Teradata Reserved keywords.
|
|
179
|
-
If keyword is in list of Teradata Reserved keywords, then it'll be quoted in double quotes "keyword".
|
|
180
|
-
|
|
181
|
-
PARAMETERS:
|
|
182
|
-
keyword - A string to check whether it belongs to Teradata Reserved Keywords or not.
|
|
183
|
-
|
|
184
|
-
RETURNS:
|
|
185
|
-
A quoted string, if keyword is one of the Teradata Reserved Keyword, else str as is.
|
|
186
|
-
|
|
187
|
-
RAISES:
|
|
188
|
-
|
|
189
|
-
EXAMPLES:
|
|
190
|
-
# Passing non-reserved returns "xyz" as is.
|
|
191
|
-
keyword = self.__process_for_teradata_keyword("xyz")
|
|
192
|
-
print(keyword)
|
|
193
|
-
# Passing reserved str returns double-quoted str, i.e., "\"threshold\"".
|
|
194
|
-
keyword = self.__process_for_teradata_keyword("threshold")
|
|
195
|
-
print(keyword)
|
|
196
|
-
|
|
197
|
-
"""
|
|
198
|
-
if keyword.upper() in TeradataReservedKeywords.TERADATA_RESERVED_WORDS.value:
|
|
199
|
-
return UtilFuncs._teradata_quote_arg(keyword, "\"", False)
|
|
200
|
-
else:
|
|
201
|
-
return keyword
|
|
202
|
-
|
|
203
|
-
def __generate_sqlmr_func_other_arg_sql(self):
|
|
204
|
-
"""
|
|
205
|
-
Private function to generate a SQL clause for other function arguments.
|
|
206
|
-
For Example,
|
|
207
|
-
Step("False")
|
|
208
|
-
Family("BINOMIAL")
|
|
209
|
-
|
|
210
|
-
PARAMETERS:
|
|
211
|
-
|
|
212
|
-
RETURNS:
|
|
213
|
-
SQL string for other function arguments, as shown in example here.
|
|
214
|
-
|
|
215
|
-
RAISES:
|
|
216
|
-
|
|
217
|
-
EXAMPLES:
|
|
218
|
-
__func_other_arg_sql_names = ["Step", "Family"]
|
|
219
|
-
__func_other_args_values = ["False", "BINOMIAL"]
|
|
220
|
-
other_arg_sql = self.__generate_sqlmr_func_other_arg_sql()
|
|
221
|
-
# Output is as shown in example in description.
|
|
222
|
-
|
|
223
|
-
"""
|
|
224
|
-
args_sql_str = ""
|
|
225
|
-
for index in range(len(self.__func_other_arg_sql_names)):
|
|
226
|
-
args_sql_str = "{0}\n\t{1}({2})".format(args_sql_str,
|
|
227
|
-
self.__process_for_teradata_keyword(
|
|
228
|
-
self.__func_other_arg_sql_names[index]),
|
|
229
|
-
self.__func_other_args_values[index])
|
|
230
|
-
|
|
231
|
-
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
232
|
-
return args_sql_str
|
|
233
|
-
|
|
234
|
-
def __generate_sqlmr_input_arg_sql(self, table_ref, table_ref_type, alias=None):
|
|
235
|
-
"""
|
|
236
|
-
Private function to generate a ON clause for input function arguments.
|
|
237
|
-
For Example,
|
|
238
|
-
ON table_name AS InputTable
|
|
239
|
-
ON (select * from table) AS InputTable
|
|
240
|
-
|
|
241
|
-
PARAMETERS:
|
|
242
|
-
table_ref - Table name or query, to be used as input.
|
|
243
|
-
table_ref_type - Type of data frame.
|
|
244
|
-
alias - Alias to be used for input.
|
|
245
|
-
|
|
246
|
-
RETURNS:
|
|
247
|
-
ON clause SQL string for input function arguments, as shown in example here.
|
|
248
|
-
|
|
249
|
-
RAISES:
|
|
250
|
-
TODO
|
|
251
|
-
|
|
252
|
-
EXAMPLES:
|
|
253
|
-
other_arg_sql = self.__generate_sqlmr_input_arg_sql("table_name", "TABLE", "InputTable")
|
|
254
|
-
# Output is as shown in example in description.
|
|
255
|
-
|
|
256
|
-
"""
|
|
257
|
-
returnSql = "\n\tON"
|
|
258
|
-
if table_ref_type == "TABLE":
|
|
259
|
-
returnSql = "{0} {1}".format(returnSql, table_ref)
|
|
260
|
-
elif table_ref_type == "QUERY":
|
|
261
|
-
returnSql = "{0} ({1})".format(returnSql, table_ref)
|
|
262
|
-
else:
|
|
263
|
-
#TODO raise # Error
|
|
264
|
-
""
|
|
265
|
-
|
|
266
|
-
if alias is not None:
|
|
267
|
-
returnSql = "{0} AS {1}".format(returnSql, self.__process_for_teradata_keyword(alias))
|
|
268
|
-
|
|
269
|
-
return returnSql
|
|
270
|
-
|
|
271
|
-
def __generate_sqlmr_output_arg_sql(self):
|
|
272
|
-
"""
|
|
273
|
-
Private function to generate a SQL clause for output function arguments.
|
|
274
|
-
For Example,
|
|
275
|
-
OUT TABLE OutputTable("out_table_1")
|
|
276
|
-
OUT TABLE CoefficientsTable("out_table_2")
|
|
277
|
-
|
|
278
|
-
PARAMETERS:
|
|
279
|
-
|
|
280
|
-
RETURNS:
|
|
281
|
-
SQL string for output function arguments, as shown in example here.
|
|
282
|
-
|
|
283
|
-
RAISES:
|
|
284
|
-
|
|
285
|
-
EXAMPLES:
|
|
286
|
-
__func_output_args_sql_names = ["OutputTable", "CoefficientsTable"]
|
|
287
|
-
__func_output_args_values = ["out_table_1", "out_table_2"]
|
|
288
|
-
other_arg_sql = self.__generate_sqlmr_output_arg_sql()
|
|
289
|
-
# Output is as shown in example in description.
|
|
290
|
-
|
|
291
|
-
"""
|
|
292
|
-
args_sql_str = ""
|
|
293
|
-
volatile_table_clause = " VOLATILE" if self.__volatile_output else ""
|
|
294
|
-
for index in range(len(self.__func_output_args_sql_names)):
|
|
295
|
-
if self.__func_output_args_values[index] is not None:
|
|
296
|
-
args_sql_str = "{0}\n\tOUT{3} TABLE {1}({2})".format(args_sql_str,
|
|
297
|
-
self.__process_for_teradata_keyword(
|
|
298
|
-
self.__func_output_args_sql_names[index]),
|
|
299
|
-
self.__func_output_args_values[index],
|
|
300
|
-
volatile_table_clause)
|
|
301
|
-
|
|
302
|
-
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
303
|
-
return args_sql_str
|
|
304
|
-
|
|
305
|
-
def _gen_sqlmr_select_stmt_sql(self):
|
|
306
|
-
"""
|
|
307
|
-
Protected function to generate complete analytical query.
|
|
308
|
-
For Example,
|
|
309
|
-
SELECT * FROM GLM(
|
|
310
|
-
input_arguments_clause
|
|
311
|
-
output_arguments_clause
|
|
312
|
-
USING
|
|
313
|
-
other_arguments_clause
|
|
314
|
-
) as sqlmr
|
|
315
|
-
|
|
316
|
-
PARAMETERS:
|
|
317
|
-
|
|
318
|
-
RETURNS:
|
|
319
|
-
A SQL-MR/Analytical query, as shown in example here.
|
|
320
|
-
|
|
321
|
-
RAISES:
|
|
322
|
-
|
|
323
|
-
EXAMPLES:
|
|
324
|
-
aqg_obj = AnalyticQueryGenerator(self.function_name, self.input_sql_args, self.input_table_qry,
|
|
325
|
-
self.input_df_type,
|
|
326
|
-
self.input_distribution, self.input_partition_columns,
|
|
327
|
-
self.input_order_columns,
|
|
328
|
-
self.other_sql_args, self.other_args_val, [], self.output_sql_args,
|
|
329
|
-
self.output_args_val)
|
|
330
|
-
anly_query = aqg_obj._gen_sqlmr_select_stmt_sql()
|
|
331
|
-
# Output is as shown in example in description.
|
|
332
|
-
|
|
333
|
-
"""
|
|
334
|
-
return self.__SELECT_STMT_FMT.format(self._gen_sqlmr_invocation_sql())
|
|
335
|
-
|
|
336
|
-
def _gen_sqlmr_invocation_sql(self):
|
|
337
|
-
"""
|
|
338
|
-
Protected function to generate a part of analytical query, to be used for map-reduce functions.
|
|
339
|
-
For Example,
|
|
340
|
-
GLM(
|
|
341
|
-
input_arguments_clause
|
|
342
|
-
output_arguments_clause
|
|
343
|
-
USING
|
|
344
|
-
other_arguments_clause
|
|
345
|
-
)
|
|
346
|
-
|
|
347
|
-
PARAMETERS:
|
|
348
|
-
|
|
349
|
-
RETURNS:
|
|
350
|
-
A SQL-MR/Analytical query, as shown in example here.
|
|
351
|
-
|
|
352
|
-
RAISES:
|
|
353
|
-
|
|
354
|
-
EXAMPLES:
|
|
355
|
-
aqg_obj = AnalyticQueryGenerator(self.function_name, self.input_sql_args, self.input_table_qry,
|
|
356
|
-
self.input_df_type,
|
|
357
|
-
self.input_distribution, self.input_partition_columns,
|
|
358
|
-
self.input_order_columns,
|
|
359
|
-
self.other_sql_args, self.other_args_val, [], self.output_sql_args,
|
|
360
|
-
self.output_args_val)
|
|
361
|
-
anly_query = aqg_obj._gen_sqlmr_invocation_sql()
|
|
362
|
-
# Output is as shown in example in description.
|
|
363
|
-
|
|
364
|
-
"""
|
|
365
|
-
self.__OUTPUT_ARG_CLAUSE = self.__generate_sqlmr_output_arg_sql()
|
|
366
|
-
self.__OTHER_ARG_CLAUSE = self.__generate_sqlmr_func_other_arg_sql()
|
|
367
|
-
self.__INPUT_ARG_CLAUSE = self.__single_complete_table_ref_clause()
|
|
368
|
-
invocation_sql = "{0}({1}{2}".format(self.__function_name, self.__INPUT_ARG_CLAUSE, self.__OUTPUT_ARG_CLAUSE)
|
|
369
|
-
|
|
370
|
-
if len(self.__func_other_arg_sql_names) != 0:
|
|
371
|
-
invocation_sql = "{0}\n\tUSING{1}".format(invocation_sql, self.__OTHER_ARG_CLAUSE)
|
|
372
|
-
|
|
373
|
-
invocation_sql = invocation_sql + "\n)"
|
|
374
|
-
|
|
375
|
-
return invocation_sql
|
|
376
|
-
|
|
377
|
-
def __single_complete_table_ref_clause(self):
|
|
378
|
-
"""
|
|
379
|
-
Private function to generate complete ON clause for input function arguments, including
|
|
380
|
-
partition by and order by clause, if any.
|
|
381
|
-
For Example,
|
|
382
|
-
ON table_name AS InputTable1 Partition By col1 Order By col2
|
|
383
|
-
ON (select * from table) AS InputTable2 DIMENSION
|
|
384
|
-
|
|
385
|
-
PARAMETERS:
|
|
386
|
-
|
|
387
|
-
RETURNS:
|
|
388
|
-
Complete input argument clause, SQL string for input function arguments, as shown in example here.
|
|
389
|
-
|
|
390
|
-
RAISES:
|
|
391
|
-
|
|
392
|
-
EXAMPLES:
|
|
393
|
-
__func_input_arg_sql_names = ["InputTable1", "InputTable2"]
|
|
394
|
-
__func_input_table_view_query = ["table_name", "select * from table"]
|
|
395
|
-
__func_input_dataframe_type = ["TABLE", "QUERY"]
|
|
396
|
-
__func_input_distribution = ["FACT", "DIMENSION"]
|
|
397
|
-
__func_input_partition_by_cols = ["col1", "NA_character_"]
|
|
398
|
-
__func_input_order_by_cols = ["col2", "NA_character_"]
|
|
399
|
-
other_arg_sql = self.__single_complete_table_ref_clause()
|
|
400
|
-
# Output is as shown in example in description.
|
|
401
|
-
|
|
402
|
-
"""
|
|
403
|
-
on_clause_dict = OrderedDict()
|
|
404
|
-
args_sql_str = []
|
|
405
|
-
|
|
406
|
-
# Let's iterate over the input arguments to the analytic functions.
|
|
407
|
-
# Gather all the information provided by the wrapper.
|
|
408
|
-
for index in range(len(self.__func_input_arg_sql_names)):
|
|
409
|
-
# Get table reference. This contains following information:
|
|
410
|
-
# table name or view name OR
|
|
411
|
-
# A list of [view_name, query, node_query_type, node_id] gathered from
|
|
412
|
-
# 'aed_exec_query_output' for the input node.
|
|
413
|
-
table_ref = self.__func_input_table_view_query[index]
|
|
414
|
-
# Get the table reference type, which is, either "TABLE" or "QUERY"
|
|
415
|
-
table_ref_type = self.__func_input_dataframe_type[index]
|
|
416
|
-
# Input argument alias
|
|
417
|
-
alias = self.__func_input_arg_sql_names[index]
|
|
418
|
-
# Partition information
|
|
419
|
-
distribution = self.__func_input_distribution[index]
|
|
420
|
-
partition_col = self.__func_input_partition_by_cols[index]
|
|
421
|
-
# Order clause information
|
|
422
|
-
order_col = self.__func_input_order_by_cols[index]
|
|
423
|
-
# Order by type information - local order by or order by
|
|
424
|
-
local_order_by_type = self.__func_input_local_order[index] if self.__func_input_local_order else False
|
|
425
|
-
# Get the Partition clause for the input argument.
|
|
426
|
-
partition_clause = self.__gen_sqlmr_input_partition_clause(distribution, partition_col)
|
|
427
|
-
# Get the Order clause for the input argument.
|
|
428
|
-
order_clause = self.__gen_sqlmr_input_order_clause(order_col, local_order_by_type)
|
|
429
|
-
|
|
430
|
-
if table_ref_type == "TABLE":
|
|
431
|
-
# If table reference type is "TABLE", then let's use the table name in the query.
|
|
432
|
-
on_clause = self.__generate_sqlmr_input_arg_sql(table_ref, table_ref_type, alias)
|
|
433
|
-
on_clause_str = "{0}{1}{2}".format(on_clause, partition_clause, order_clause)
|
|
434
|
-
args_sql_str.append(on_clause_str)
|
|
435
|
-
# Update the length of the PARTITION clause.
|
|
436
|
-
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(on_clause_str)
|
|
437
|
-
else:
|
|
438
|
-
# Store the input argument information for the inputs, which will use query as input.
|
|
439
|
-
on_clause_dict[index] = {}
|
|
440
|
-
on_clause_dict[index]["PARTITION_CLAUSE"] = partition_clause
|
|
441
|
-
on_clause_dict[index]["ORDER_CLAUSE"] = order_clause
|
|
442
|
-
on_clause_dict[index]["ON_TABLE"] = self.__generate_sqlmr_input_arg_sql(table_ref[0], "TABLE", alias)
|
|
443
|
-
on_clause_dict[index]["ON_QRY"] = self.__generate_sqlmr_input_arg_sql(table_ref[1], "QUERY", alias)
|
|
444
|
-
on_clause_dict[index]["QRY_TYPE"] = table_ref[2]
|
|
445
|
-
on_clause_dict[index]["NODEID"] = table_ref[3]
|
|
446
|
-
on_clause_dict[index]["LAZY"] = table_ref[4]
|
|
447
|
-
# If input node results in returning multiple queries save that input node
|
|
448
|
-
# in '_multi_query_input_nodes' list.
|
|
449
|
-
if table_ref[5]:
|
|
450
|
-
self._multi_query_input_nodes.append(table_ref[3])
|
|
451
|
-
|
|
452
|
-
# Process OrderedDict to generate input argument clause.
|
|
453
|
-
for key in on_clause_dict.keys():
|
|
454
|
-
# 31000 is maximum query length supported in ON clause
|
|
455
|
-
if self.__QUERY_SIZE + self.__get_string_size(on_clause_dict[key]["ON_QRY"]) <= 31000:
|
|
456
|
-
on_clause_str = "{0}{1}{2}".format(on_clause_dict[key]["ON_QRY"],
|
|
457
|
-
on_clause_dict[key]["PARTITION_CLAUSE"],
|
|
458
|
-
on_clause_dict[key]["ORDER_CLAUSE"])
|
|
459
|
-
else:
|
|
460
|
-
# We are here means query maximum size will be exceeded here.
|
|
461
|
-
# So let's add the input node to multi-query input node list, as
|
|
462
|
-
# we would like execute this node as well as part of the execution.
|
|
463
|
-
# Add it in the list, if we have not done it already.
|
|
464
|
-
if on_clause_dict[key]["NODEID"] not in self._multi_query_input_nodes:
|
|
465
|
-
self._multi_query_input_nodes.append(on_clause_dict[key]["NODEID"])
|
|
466
|
-
|
|
467
|
-
# Use the table name/view name in the on clause.
|
|
468
|
-
on_clause_str = "{0}{1}{2}".format(on_clause_dict[key]["ON_TABLE"],
|
|
469
|
-
on_clause_dict[key]["PARTITION_CLAUSE"],
|
|
470
|
-
on_clause_dict[key]["ORDER_CLAUSE"])
|
|
471
|
-
|
|
472
|
-
# Execute input node here, if function is not lazy.
|
|
473
|
-
if not on_clause_dict[key]["LAZY"]:
|
|
474
|
-
DataFrameUtils._execute_node_return_db_object_name(on_clause_dict[key]["NODEID"])
|
|
475
|
-
|
|
476
|
-
args_sql_str.insert(key, on_clause_str)
|
|
477
|
-
# Add the length of the ON clause.
|
|
478
|
-
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(on_clause_str)
|
|
479
|
-
|
|
480
|
-
return " ".join(args_sql_str)
|
|
481
|
-
|
|
482
|
-
def __gen_sqlmr_input_order_clause(self, column_order, local_order_by_type):
|
|
483
|
-
"""
|
|
484
|
-
Private function to generate complete order by clause for input function arguments.
|
|
485
|
-
For Example,
|
|
486
|
-
Order By col2
|
|
487
|
-
|
|
488
|
-
PARAMETERS:
|
|
489
|
-
column_order - Column to be used in ORDER BY clause. If this is "NA_character_"
|
|
490
|
-
no ORDER BY clause is generated.
|
|
491
|
-
|
|
492
|
-
local_order_by_type - Specifies whether to generate LOCAL ORDER BY or not. When
|
|
493
|
-
set to True, function generates LOCAL ORDER BY, otherwise
|
|
494
|
-
function generates ORDER BY clause.
|
|
495
|
-
|
|
496
|
-
RETURNS:
|
|
497
|
-
Order By clause, as shown in example here.
|
|
498
|
-
|
|
499
|
-
RAISES:
|
|
500
|
-
|
|
501
|
-
EXAMPLES:
|
|
502
|
-
other_arg_sql = self.__gen_sqlmr_input_order_clause("col2")
|
|
503
|
-
# Output is as shown in example in description.
|
|
504
|
-
|
|
505
|
-
"""
|
|
506
|
-
if column_order == "NA_character_" or column_order is None:
|
|
507
|
-
return ""
|
|
508
|
-
local_order = "LOCAL" if local_order_by_type else ""
|
|
509
|
-
args_sql_str = "\n\t{} ORDER BY {}".format(local_order, column_order)
|
|
510
|
-
|
|
511
|
-
# Get the length of the ORDER clause.
|
|
512
|
-
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
513
|
-
return args_sql_str
|
|
514
|
-
|
|
515
|
-
def __gen_sqlmr_input_partition_clause(self, distribution, column):
|
|
516
|
-
"""
|
|
517
|
-
Private function to generate PARTITION BY or DIMENSION clause for input function arguments.
|
|
518
|
-
For Example,
|
|
519
|
-
Partition By col1
|
|
520
|
-
DIMENSION
|
|
521
|
-
|
|
522
|
-
PARAMETERS:
|
|
523
|
-
distribution - Type of clause to be generated. Values accepted here are: FACT, DIMENSION, NONE
|
|
524
|
-
column - Column to be used in PARTITION BY clause, when distribution is "FACT"
|
|
525
|
-
|
|
526
|
-
RETURNS:
|
|
527
|
-
Partition clause, based on the type of distribution:
|
|
528
|
-
When "FACT" - PARTITION BY clause is generated.
|
|
529
|
-
When "DIMENSION" - DIMENSION cluase is generated.
|
|
530
|
-
When "NONE" - No clause is generated, an empty string is returned.
|
|
531
|
-
|
|
532
|
-
RAISES:
|
|
533
|
-
TODO
|
|
534
|
-
|
|
535
|
-
EXAMPLES:
|
|
536
|
-
other_arg_sql = self.__gen_sqlmr_input_partition_clause("FACT", "col1")
|
|
537
|
-
# Output is as shown in example in description.
|
|
538
|
-
|
|
539
|
-
"""
|
|
540
|
-
if distribution == "FACT" and column is not None:
|
|
541
|
-
args_sql_str = "\n\tPARTITION BY {0}".format(column)
|
|
542
|
-
elif distribution == "DIMENSION":
|
|
543
|
-
args_sql_str = "\n\tDIMENSION"
|
|
544
|
-
elif distribution == "HASH" and column is not None:
|
|
545
|
-
args_sql_str = "\n\t HASH BY {0}".format(column)
|
|
546
|
-
elif distribution == "NONE":
|
|
547
|
-
return ""
|
|
548
|
-
else:
|
|
549
|
-
return ""
|
|
550
|
-
# TODO raise error "invalid distribution type"
|
|
551
|
-
|
|
552
|
-
# Get the length of the PARTITION clause.
|
|
553
|
-
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
554
|
-
return args_sql_str
|
|
555
|
-
|
|
556
|
-
def _get_alias_name_for_function(self, function_name):
|
|
557
|
-
"""
|
|
558
|
-
Function to return the alias name mapped to the actual
|
|
559
|
-
analytic function.
|
|
560
|
-
|
|
561
|
-
PARAMETERS:
|
|
562
|
-
function_name:
|
|
563
|
-
Required Argument.
|
|
564
|
-
Specifies the name of the function for which alias
|
|
565
|
-
name should be returned.
|
|
566
|
-
|
|
567
|
-
RETURNS:
|
|
568
|
-
Function alias name for the given function_name.
|
|
569
|
-
|
|
570
|
-
RAISES:
|
|
571
|
-
TeradataMLException
|
|
572
|
-
|
|
573
|
-
EXAMPLES:
|
|
574
|
-
aqgObj._get_alias_name_for_function("GLM")
|
|
575
|
-
"""
|
|
576
|
-
engine_name = UtilFuncs._get_engine_name(self.__engine)
|
|
577
|
-
|
|
578
|
-
# Get function mappings which are already loaded during create_context or set_context.
|
|
579
|
-
function_mappings = _get_function_mappings()
|
|
580
|
-
|
|
581
|
-
try:
|
|
582
|
-
return function_mappings[configure.vantage_version][engine_name][function_name.lower()]
|
|
583
|
-
except KeyError as ke:
|
|
584
|
-
if str(ke) == "'{}'".format(function_name.lower()):
|
|
585
|
-
raise TeradataMlException(Messages.get_message(
|
|
586
|
-
MessageCodes.FUNCTION_NOT_SUPPORTED).format(configure.vantage_version),
|
|
587
|
-
MessageCodes.FUNCTION_NOT_SUPPORTED) from ke
|
|
588
|
-
else:
|
|
589
|
-
raise
|
|
590
|
-
except TeradataMlException:
|
|
591
|
-
raise
|
|
592
|
-
except Exception as err:
|
|
593
|
-
raise TeradataMlException(Messages.get_message(
|
|
594
|
-
MessageCodes.CONFIG_ALIAS_ANLY_FUNC_NOT_FOUND).format(function_name, config_folder),
|
|
595
|
-
MessageCodes.CONFIG_ALIAS_ANLY_FUNC_NOT_FOUND) from err
|
|
596
|
-
|
|
597
|
-
def __get_string_size(self, string):
|
|
598
|
-
return len(string.encode("utf8"))
|
|
599
|
-
|
|
600
|
-
class UAFQueryGenerator:
|
|
601
|
-
def __init__(self, function_name, func_input_args, func_input_filter_expr_args, func_other_args,
|
|
602
|
-
func_output_args, func_input_fmt_args=None, func_output_fmt_args=None,
|
|
603
|
-
volatile_output=False, ctas=False):
|
|
604
|
-
"""
|
|
605
|
-
UAFQueryGenerator constructor, for UAF query generation.
|
|
606
|
-
|
|
607
|
-
PARAMETERS:
|
|
608
|
-
function_name:
|
|
609
|
-
Required Argument.
|
|
610
|
-
Specifies the name of the function.
|
|
611
|
-
|
|
612
|
-
func_input_args:
|
|
613
|
-
Required Argument.
|
|
614
|
-
Specifies the list of input arguments passed by the user.
|
|
615
|
-
[data1, data2, data3]
|
|
616
|
-
Types: list of TDSeries or list of TDMarix or list of TDGenSeries
|
|
617
|
-
|
|
618
|
-
func_input_filter_expr_args:
|
|
619
|
-
Required Argument.
|
|
620
|
-
Specifies the list of filter expressions related to corresponding input argument.
|
|
621
|
-
Types: list of ColumnExpressions
|
|
622
|
-
|
|
623
|
-
func_other_args:
|
|
624
|
-
Required Argument.
|
|
625
|
-
Specifies the dict containing information about other arguments.
|
|
626
|
-
dict contains a key value pair where:
|
|
627
|
-
key is a SQL argument name.
|
|
628
|
-
value is can be of two types:
|
|
629
|
-
An actual value passed by the user to be passed along to the function.
|
|
630
|
-
OR
|
|
631
|
-
A dict of key value pair, similar to a dict passed to the argument.
|
|
632
|
-
|
|
633
|
-
For example,
|
|
634
|
-
In SQL:
|
|
635
|
-
NONSEASONAL()
|
|
636
|
-
FUNC_PARAMS(NONSEASONAL(MODEL_ORDER(2,0,1),ARG1(value1),
|
|
637
|
-
NestParam(MODEL_ORDER1(2,0,1),ARG1(value1)
|
|
638
|
-
),
|
|
639
|
-
CONSTANT(0), ALGORITHM(MLE), COEFF_STATS(1),
|
|
640
|
-
FIT_METRICS(1), RESIDUALS(1), FIT_PERCENTAGE(80) )
|
|
641
|
-
So dict passed here is:
|
|
642
|
-
dict = {
|
|
643
|
-
"NONSEASONAL": {
|
|
644
|
-
"MODEL_ORDER": "2, 0, 1",
|
|
645
|
-
"ARG1": "Value1",
|
|
646
|
-
"NestParam": {
|
|
647
|
-
"MODEL_ORDER": "2, 0, 1",
|
|
648
|
-
"ARG1": "Value1",
|
|
649
|
-
}
|
|
650
|
-
},
|
|
651
|
-
"CONSTANT": 0,
|
|
652
|
-
"ALGORITHM": "MLE",
|
|
653
|
-
"COEFF_STATS": 1,
|
|
654
|
-
"FIT_METRICS": 1,
|
|
655
|
-
"RESIDUALS": 1,
|
|
656
|
-
"FIT_PERCENTAGE": 80
|
|
657
|
-
}
|
|
658
|
-
Types: dict
|
|
659
|
-
|
|
660
|
-
func_output_args:
|
|
661
|
-
Required Argument.
|
|
662
|
-
Specifies the name of the output table to be created or used in a UAF function query.
|
|
663
|
-
Types: str
|
|
664
|
-
|
|
665
|
-
func_input_fmt_args:
|
|
666
|
-
Required Argument.
|
|
667
|
-
Specifies the dict containing information about INPUT_FMT clause in UAF Query.
|
|
668
|
-
dict contains a key value pair where:
|
|
669
|
-
key is a SQL argument name.
|
|
670
|
-
value can be of two types:
|
|
671
|
-
An actual value passed by the user to be passed along to the function.
|
|
672
|
-
OR
|
|
673
|
-
A dict of key value pair, similar to a dict passed to the arguments.
|
|
674
|
-
Types: dict.
|
|
675
|
-
|
|
676
|
-
func_output_fmt_args:
|
|
677
|
-
Required Argument.
|
|
678
|
-
Specifies the dict containing information about OUTPUT_FMT clause in UAF Query.
|
|
679
|
-
dict contains a key value pair where:
|
|
680
|
-
key is a SQL argument name.
|
|
681
|
-
value can be of two types:
|
|
682
|
-
An actual value passed by the user to be passed along to the function.
|
|
683
|
-
OR
|
|
684
|
-
A dict of key value pair, similar to a dict passed to the argument.
|
|
685
|
-
Types: dict.
|
|
686
|
-
|
|
687
|
-
volatile_output:
|
|
688
|
-
Optional Argument.
|
|
689
|
-
Specifies the table to create is Volatile or not. When set to True,
|
|
690
|
-
volatile table is created, otherwise permanent table is created.
|
|
691
|
-
Default Value: False
|
|
692
|
-
Types: bool
|
|
693
|
-
|
|
694
|
-
ctas:
|
|
695
|
-
Optional Argument.
|
|
696
|
-
Specifies whether to create output table using CREATE TABLE or using
|
|
697
|
-
EXECUTE FUNCTION. When set to True, output table is created using CREATE
|
|
698
|
-
TABLE statement. Otherwise, output is created using EXECUTE FUNCTION INTO
|
|
699
|
-
clause.
|
|
700
|
-
Default Value: False
|
|
701
|
-
Types: bool
|
|
702
|
-
|
|
703
|
-
RETURNS:
|
|
704
|
-
UAFQueryGenerator object. (We can call this as map-reduce object)
|
|
705
|
-
|
|
706
|
-
RAISES:
|
|
707
|
-
|
|
708
|
-
EXAMPLES:
|
|
709
|
-
aqg_obj = UAFAnalyticQueryGenerator()
|
|
710
|
-
"""
|
|
711
|
-
self.__function_name = function_name
|
|
712
|
-
self.__func_input_args = func_input_args
|
|
713
|
-
self.__func_input_filter_expr_args = func_input_filter_expr_args
|
|
714
|
-
self.__func_other_args = func_other_args if func_other_args else None
|
|
715
|
-
self.__func_output_args = func_output_args if func_output_args else None
|
|
716
|
-
self.__func_input_fmt_args = func_input_fmt_args if func_input_fmt_args else None
|
|
717
|
-
self.__func_output_fmt_args = func_output_fmt_args if func_output_fmt_args else None
|
|
718
|
-
self.__volatile_output = volatile_output
|
|
719
|
-
self.__parameterised_sql = ""
|
|
720
|
-
self.__parameterised_sql_values = []
|
|
721
|
-
self.__non_parameterised_sql = ""
|
|
722
|
-
self.__ctas = ctas
|
|
723
|
-
|
|
724
|
-
def __generate_uaf_input_arg_sql(self):
|
|
725
|
-
"""
|
|
726
|
-
Private function to generate SERIES_SPEC or MATRIX_SPEC or ART_SPEC
|
|
727
|
-
or GENSERIES_SPEC clause along with 'WHERE' clause.
|
|
728
|
-
For Example,
|
|
729
|
-
SERIES_SPEC(
|
|
730
|
-
TABLE_NAME(StockDataSet),
|
|
731
|
-
SERIES_ID(DataSetID),
|
|
732
|
-
ROW_AXIS(SEQUENCE(SeqNo)),
|
|
733
|
-
PAYLOAD(FIELDS(Magnitude), CONTENT(REAL))
|
|
734
|
-
)
|
|
735
|
-
WHERE DataSetID=556 AND SeqNo > 3,
|
|
736
|
-
|
|
737
|
-
SERIES_SPEC(
|
|
738
|
-
TABLE_NAME(SMOOTH_SERIES),
|
|
739
|
-
SERIES_ID(DataSetID),
|
|
740
|
-
ROW_AXIS(SEQUENCE(ROW_I)),
|
|
741
|
-
PAYLOAD(FIELDS(Magnitude), CONTENT(REAL))
|
|
742
|
-
)
|
|
743
|
-
WHERE DataSetID=556,
|
|
744
|
-
|
|
745
|
-
PARAMETERS:
|
|
746
|
-
None
|
|
747
|
-
|
|
748
|
-
RETURNS:
|
|
749
|
-
tuple, with 3 elements.
|
|
750
|
-
element 1 is a string, represents the parameterised SQL clause,
|
|
751
|
-
element 2 is a list, represents the values for parameterised SQL clause,
|
|
752
|
-
element 3 is a string, represents the non parameterised SQL clause.
|
|
753
|
-
|
|
754
|
-
RAISES:
|
|
755
|
-
None.
|
|
756
|
-
|
|
757
|
-
EXAMPLES:
|
|
758
|
-
>>> self.__generate_sqlmr_input_arg_sql()
|
|
759
|
-
"""
|
|
760
|
-
|
|
761
|
-
# If the input argument is a string instead of list of TDSeries/TDMatrix objects,
|
|
762
|
-
# return the same and do not process those to get SQL expression since the string
|
|
763
|
-
# itself represents the SQL expression.
|
|
764
|
-
if isinstance(self.__func_input_args, str):
|
|
765
|
-
return self.__func_input_args
|
|
766
|
-
|
|
767
|
-
# Function to get the filter expression.
|
|
768
|
-
_filter_expr = lambda filter: "\n WHERE {}".format(filter.compile()) if filter else ""
|
|
769
|
-
_parameterised_sql, _parameterised_sql_values, _non_parameterised_sql, seperator = "", [], "", ""
|
|
770
|
-
|
|
771
|
-
for _arg, _arg_filter in zip(self.__func_input_args, self.__func_input_filter_expr_args):
|
|
772
|
-
_sql, _values = _arg._get_sql_repr()
|
|
773
|
-
_arg_filter_expr = _filter_expr(_arg_filter)
|
|
774
|
-
_parameterised_sql_values = _parameterised_sql_values + _values
|
|
775
|
-
_parameterised_sql = _parameterised_sql + seperator + "{} {}".format(_sql, _arg_filter_expr)
|
|
776
|
-
_non_parameterised_sql = _non_parameterised_sql + seperator + "{} {}".format(_arg._get_sql_repr(True), _arg_filter_expr)
|
|
777
|
-
seperator = ",\n"
|
|
778
|
-
|
|
779
|
-
return _non_parameterised_sql
|
|
780
|
-
|
|
781
|
-
def __generate_uaf_output_arg_sql(self):
|
|
782
|
-
"""
|
|
783
|
-
Private function to generate output clause from output function arguments.
|
|
784
|
-
For Example, ART(TABLE_NAME)
|
|
785
|
-
|
|
786
|
-
PARAMETERS:
|
|
787
|
-
None.
|
|
788
|
-
|
|
789
|
-
RETURNS:
|
|
790
|
-
str, represents a SQL clause for UAF function.
|
|
791
|
-
|
|
792
|
-
RAISES:
|
|
793
|
-
None.
|
|
794
|
-
|
|
795
|
-
EXAMPLES:
|
|
796
|
-
output_arg_sql = self.__generate_uaf_output_arg_sql()
|
|
797
|
-
# Output is as shown in example in description.
|
|
798
|
-
"""
|
|
799
|
-
if self.__ctas or self.__func_output_args is None:
|
|
800
|
-
return ""
|
|
801
|
-
return "INTO {}ART({})".format("VOLATILE " if self.__volatile_output else "", self.__func_output_args)
|
|
802
|
-
|
|
803
|
-
def _get_arg_expressions(self, arg, value):
|
|
804
|
-
"""
|
|
805
|
-
Internal function to generate the parameterised SQL clause, parameterised SQL
|
|
806
|
-
value and non parameterised SQL clause for a given argument and it's value.
|
|
807
|
-
|
|
808
|
-
PARAMETERS:
|
|
809
|
-
arg:
|
|
810
|
-
Required Argument.
|
|
811
|
-
Specifies the name of SQL clause.
|
|
812
|
-
Types: str
|
|
813
|
-
|
|
814
|
-
value:
|
|
815
|
-
Required Argument.
|
|
816
|
-
Specifies the value of SQL Clause. If the type of this argument is a dictionary,
|
|
817
|
-
then the same function will be called recursively to generate the expression.
|
|
818
|
-
Types: int OR str OR float OR dict
|
|
819
|
-
|
|
820
|
-
RETURNS:
|
|
821
|
-
tuple, with 3 elements.
|
|
822
|
-
element 1 is a string, represents the parameterised SQL clause,
|
|
823
|
-
element 2 is a list, represents the values for parameterised SQL clause.
|
|
824
|
-
element 3 is a string, represents the non parameterised SQL clause.
|
|
825
|
-
|
|
826
|
-
RAISES:
|
|
827
|
-
None.
|
|
828
|
-
|
|
829
|
-
EXAMPLES:
|
|
830
|
-
self.__get_other_arg_expressions("arg1", {"arg2": {"arg3": "value3"}}})
|
|
831
|
-
# Output is as shown in example in description.
|
|
832
|
-
"""
|
|
833
|
-
if value is None:
|
|
834
|
-
return "", [], ""
|
|
835
|
-
|
|
836
|
-
if not isinstance(value, dict):
|
|
837
|
-
# If value is a list, convert it to string seperated by comma.
|
|
838
|
-
value = ", ".join((str(i) for i in value)) if isinstance(value, list) else value
|
|
839
|
-
return "{}(?)".format(arg), [value], "{}({})".format(arg, value)
|
|
840
|
-
|
|
841
|
-
# If it is a dictionary.
|
|
842
|
-
_p_sql_clauses, _p_sql_values_l, _np_sql_clauses, seperator = "", [], "", ""
|
|
843
|
-
|
|
844
|
-
# Loop through the dictionary and call the same function again.
|
|
845
|
-
for _arg, _value in value.items():
|
|
846
|
-
_p_sql, _p_sql_values, _np_sql = self._get_arg_expressions(_arg, _value)
|
|
847
|
-
|
|
848
|
-
_p_sql_clauses = _p_sql_clauses + seperator + _p_sql
|
|
849
|
-
_p_sql_values_l = _p_sql_values_l + _p_sql_values
|
|
850
|
-
_np_sql_clauses = _np_sql_clauses + seperator + _np_sql
|
|
851
|
-
|
|
852
|
-
# After the first element, every other element should pad with
|
|
853
|
-
# previous elements with a comma(,).
|
|
854
|
-
seperator = ", "
|
|
855
|
-
|
|
856
|
-
# Append it with parent before returning it.
|
|
857
|
-
return "{}({})".format(arg, _p_sql_clauses), _p_sql_values_l, "{}({})".format(arg, _np_sql_clauses)
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
def __generate_uaf_func_params_sql(self):
|
|
861
|
-
"""
|
|
862
|
-
Private function to generate FUNC_PARAMS clause from function arguments.
|
|
863
|
-
For Example, FUNC_PARAMS(MATHOP("SUB")).
|
|
864
|
-
|
|
865
|
-
PARAMETERS:
|
|
866
|
-
None
|
|
867
|
-
|
|
868
|
-
RETURNS:
|
|
869
|
-
str, represents a SQL clause for UAF function.
|
|
870
|
-
|
|
871
|
-
RAISES:
|
|
872
|
-
None.
|
|
873
|
-
|
|
874
|
-
EXAMPLES:
|
|
875
|
-
other_arg_sql = self.__generate_uaf_func_params_sql({"MATHOP": 'SUB'})
|
|
876
|
-
# Output is as shown in example in description.
|
|
877
|
-
"""
|
|
878
|
-
_, _, func_params = self._get_arg_expressions("FUNC_PARAMS", self.__func_other_args)
|
|
879
|
-
return ",\n{}".format(func_params) if func_params else func_params
|
|
880
|
-
|
|
881
|
-
def __generate_uaf_input_fmt_arg_sql(self):
|
|
882
|
-
"""
|
|
883
|
-
Private function to generate INPUT_FMT clause from function arguments.
|
|
884
|
-
For Example, INPUT_FMT (INPUT_MODE (ONE2ONE)).
|
|
885
|
-
|
|
886
|
-
PARAMETERS:
|
|
887
|
-
None
|
|
888
|
-
|
|
889
|
-
RETURNS:
|
|
890
|
-
str, represents a SQL clause for UAF function.
|
|
891
|
-
|
|
892
|
-
RAISES:
|
|
893
|
-
None.
|
|
894
|
-
|
|
895
|
-
EXAMPLES:
|
|
896
|
-
other_arg_sql = self.__generate_uaf_input_fmt_arg_sql({"INPUT_MODE": 'ONE2ONE'})
|
|
897
|
-
"""
|
|
898
|
-
_, _, input_fmt_sql = self._get_arg_expressions("INPUT_FMT", self.__func_input_fmt_args)
|
|
899
|
-
return ",\n{}".format(input_fmt_sql) if input_fmt_sql else input_fmt_sql
|
|
900
|
-
|
|
901
|
-
def __generate_uaf_output_fmt_arg_sql(self):
|
|
902
|
-
"""
|
|
903
|
-
Private function to generate OUTPUT_FMT clause from function arguments.
|
|
904
|
-
For Example, INPUT_FMT (OUTPUT_MODE (ONE2MANY)).
|
|
905
|
-
|
|
906
|
-
PARAMETERS:
|
|
907
|
-
None.
|
|
908
|
-
|
|
909
|
-
RETURNS:
|
|
910
|
-
str, represents a SQL clause for UAF function.
|
|
911
|
-
|
|
912
|
-
RAISES:
|
|
913
|
-
None.
|
|
914
|
-
|
|
915
|
-
EXAMPLES:
|
|
916
|
-
other_arg_sql = self.__generate_uaf_output_fmt_arg_sql({"OUTPUT_MODE": 'ONE2MANY'})
|
|
917
|
-
"""
|
|
918
|
-
|
|
919
|
-
_, _, output_fmt_sql = self._get_arg_expressions("OUTPUT_FMT", self.__func_output_fmt_args)
|
|
920
|
-
return ",\n{}".format(output_fmt_sql) if output_fmt_sql else output_fmt_sql
|
|
921
|
-
|
|
922
|
-
def _get_display_uaf(self):
|
|
923
|
-
"""
|
|
924
|
-
Private function to generate the non parameterised UAF SQL.
|
|
925
|
-
|
|
926
|
-
PARAMETERS:
|
|
927
|
-
None
|
|
928
|
-
|
|
929
|
-
RETURNS:
|
|
930
|
-
str
|
|
931
|
-
|
|
932
|
-
RAISES:
|
|
933
|
-
None.
|
|
934
|
-
|
|
935
|
-
EXAMPLES:
|
|
936
|
-
other_arg_sql = self._get_display_uaf()
|
|
937
|
-
"""
|
|
938
|
-
input_sql = self.__generate_uaf_input_arg_sql()
|
|
939
|
-
|
|
940
|
-
output_sql = self.__generate_uaf_output_arg_sql()
|
|
941
|
-
|
|
942
|
-
func_params_sql = self.__generate_uaf_func_params_sql()
|
|
943
|
-
|
|
944
|
-
input_fmt_sql = self.__generate_uaf_input_fmt_arg_sql()
|
|
945
|
-
|
|
946
|
-
output_fmt_sql = self.__generate_uaf_output_fmt_arg_sql()
|
|
947
|
-
|
|
948
|
-
input_sql = "{}(\n{})".format(self.__function_name, "{}{}{}{}".format(
|
|
949
|
-
input_sql, func_params_sql, input_fmt_sql, output_fmt_sql))
|
|
950
|
-
|
|
951
|
-
sql = "EXECUTE FUNCTION {} {}".format(output_sql, input_sql)
|
|
952
|
-
if self.__ctas:
|
|
953
|
-
on_preserve_clause = " ON COMMIT PRESERVE ROWS" if self.__volatile_output else ""
|
|
954
|
-
sql = "CREATE {}TABLE {} AS ({}) WITH DATA{}".format("VOLATILE " if self.__volatile_output else "",
|
|
955
|
-
self.__func_output_args,
|
|
956
|
-
sql,
|
|
957
|
-
on_preserve_clause)
|
|
958
|
-
return sql
|
|
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: pankajvinod.purandare@teradata.com #
|
|
7
|
+
# Secondary Owner: #
|
|
8
|
+
# #
|
|
9
|
+
# This file implements class creates a SQL-MR object, which can be #
|
|
10
|
+
# used to generate SQL-MR/Analytical query in FFE syntax for Teradata. #
|
|
11
|
+
#########################################################################
|
|
12
|
+
|
|
13
|
+
import os
|
|
14
|
+
from collections import OrderedDict
|
|
15
|
+
from teradataml.common.utils import UtilFuncs
|
|
16
|
+
from teradataml.context.context import _get_function_mappings
|
|
17
|
+
from teradataml.common.messagecodes import MessageCodes
|
|
18
|
+
from teradataml.common.messages import Messages
|
|
19
|
+
from teradataml.common.exceptions import TeradataMlException
|
|
20
|
+
from teradataml.dataframe.dataframe_utils import DataFrameUtils
|
|
21
|
+
from teradataml.options.configure import configure
|
|
22
|
+
from teradataml.common.constants import TeradataReservedKeywords
|
|
23
|
+
|
|
24
|
+
# Current directory is analytics folder.
|
|
25
|
+
teradataml_folder = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
26
|
+
config_folder = os.path.join(teradataml_folder, "config")
|
|
27
|
+
|
|
28
|
+
class AnalyticQueryGenerator:
|
|
29
|
+
"""
|
|
30
|
+
This class creates a SQL-MR object, which can be used to generate
|
|
31
|
+
SQL-MR/Analytical query in FFE syntax for Teradata.
|
|
32
|
+
"""
|
|
33
|
+
|
|
34
|
+
def __init__(self, function_name, func_input_arg_sql_names, func_input_table_view_query, func_input_dataframe_type,
|
|
35
|
+
func_input_distribution, func_input_partition_by_cols, func_input_order_by_cols,
|
|
36
|
+
func_other_arg_sql_names, func_other_args_values, func_other_arg_json_datatypes,
|
|
37
|
+
func_output_args_sql_names, func_output_args_values, func_type="FFE",
|
|
38
|
+
engine="ENGINE_ML", db_name=None, volatile_output=False, skip_config_lookup=False,
|
|
39
|
+
func_input_local_order=None):
|
|
40
|
+
"""
|
|
41
|
+
AnalyticalQueryGenerator constructor, to create a map-reduce object, for
|
|
42
|
+
SQL-MR/Analytical query generation.
|
|
43
|
+
|
|
44
|
+
PARAMETERS:
|
|
45
|
+
function_name:
|
|
46
|
+
Required Argument.
|
|
47
|
+
Specifies the name of the function.
|
|
48
|
+
|
|
49
|
+
func_input_arg_sql_names:
|
|
50
|
+
Required Argument.
|
|
51
|
+
Specifies the list of input SQL Argument names.
|
|
52
|
+
|
|
53
|
+
func_input_table_view_query:
|
|
54
|
+
Required Argument.
|
|
55
|
+
Specifies the list of input argument values, with
|
|
56
|
+
respect to 'func_input_arg_sql_names' which contains
|
|
57
|
+
table_name or SQL (Select query).
|
|
58
|
+
|
|
59
|
+
func_input_dataframe_type:
|
|
60
|
+
Required Argument.
|
|
61
|
+
Specifies the list of dataframe types for each input.
|
|
62
|
+
Values can be "TABLE" or "QUERY".
|
|
63
|
+
|
|
64
|
+
func_input_distribution:
|
|
65
|
+
Required Argument.
|
|
66
|
+
Specifies the list containing distributions for each
|
|
67
|
+
input. Values can be "FACT", "DIMENSION", "NONE".
|
|
68
|
+
|
|
69
|
+
func_input_partition_by cols:
|
|
70
|
+
Required Argument.
|
|
71
|
+
Specifes the list containing partition columns for
|
|
72
|
+
each input, if distribution is FACT.
|
|
73
|
+
|
|
74
|
+
func_input_order_by_cols:
|
|
75
|
+
Required Argument.
|
|
76
|
+
Specifies the list of values, for each input, to be
|
|
77
|
+
used order by clause.
|
|
78
|
+
|
|
79
|
+
func_other_arg_sql_names:
|
|
80
|
+
Required Argument.
|
|
81
|
+
Specifies the list of other function arguments SQL
|
|
82
|
+
name.
|
|
83
|
+
|
|
84
|
+
func_other_args_values:
|
|
85
|
+
Required Argument.
|
|
86
|
+
Specifies the list of other function argument values,
|
|
87
|
+
with respect to each member in 'func_other_arg_sql_names'.
|
|
88
|
+
|
|
89
|
+
func_other_arg_json_datatypes:
|
|
90
|
+
Required Argument.
|
|
91
|
+
Specifies the list of JSON datatypes for each member in
|
|
92
|
+
'func_other_arg_sql_names'.
|
|
93
|
+
|
|
94
|
+
func_output_args_sql_names:
|
|
95
|
+
Required Argument.
|
|
96
|
+
Specifies the list of output SQL argument names.
|
|
97
|
+
|
|
98
|
+
func_output_args_values:
|
|
99
|
+
Required Argument.
|
|
100
|
+
Specifies the list of output table names for each
|
|
101
|
+
output table argument in 'func_output_args_sql_names'.
|
|
102
|
+
|
|
103
|
+
func_type:
|
|
104
|
+
Required Argument. Fixed value 'FFE'.
|
|
105
|
+
Kept for future purpose, to generate different syntaxes.
|
|
106
|
+
|
|
107
|
+
engine:
|
|
108
|
+
Optional Argument.
|
|
109
|
+
Specifies the type of engine.
|
|
110
|
+
Default Value : ENGINE_ML
|
|
111
|
+
Permitted Values : ENGINE_ML, ENGINE_SQL
|
|
112
|
+
|
|
113
|
+
db_name:
|
|
114
|
+
Optional Argument.
|
|
115
|
+
Specifies the install location of function. This argument will be primarily
|
|
116
|
+
used for BYOM functions.
|
|
117
|
+
Default Value: None
|
|
118
|
+
|
|
119
|
+
volatile_output:
|
|
120
|
+
Optional Argument.
|
|
121
|
+
Specifies the table to create is Volatile or not. When set to True,
|
|
122
|
+
volatile table is created, otherwise permanent table is created.
|
|
123
|
+
Default Value: False
|
|
124
|
+
Types: bool
|
|
125
|
+
|
|
126
|
+
skip_config_lookup:
|
|
127
|
+
Optional Argument.
|
|
128
|
+
Specifies whether the Query generater should look at config files before
|
|
129
|
+
generating the SQL Query or not. If set to False, Query generator validates
|
|
130
|
+
whether function is supported for the corresponding vantage version by
|
|
131
|
+
looking at the config file. Otherwise, the QueryGenerator generates the
|
|
132
|
+
SQL without validating it.
|
|
133
|
+
Default Value: False
|
|
134
|
+
|
|
135
|
+
RETURNS:
|
|
136
|
+
AnalyticalQueryGenerator object. (We can call this as map-reduce object)
|
|
137
|
+
|
|
138
|
+
RAISES:
|
|
139
|
+
|
|
140
|
+
EXAMPLES:
|
|
141
|
+
aqg_obj = AnalyticQueryGenerator(self.function_name, self.input_sql_args,
|
|
142
|
+
self.input_table_qry, self.input_df_type,
|
|
143
|
+
self.input_distribution, self.input_partition_columns,
|
|
144
|
+
self.input_order_columns, self.other_sql_args,
|
|
145
|
+
self.other_args_val, [], self.output_sql_args,
|
|
146
|
+
self.output_args_val, engine="ENGINE_SQL",
|
|
147
|
+
db_name="mldb")
|
|
148
|
+
"""
|
|
149
|
+
self.__engine = engine
|
|
150
|
+
self.__function_name = function_name
|
|
151
|
+
if not skip_config_lookup:
|
|
152
|
+
self.__function_name = self._get_alias_name_for_function(function_name)
|
|
153
|
+
self.__db_name = db_name
|
|
154
|
+
if self.__db_name:
|
|
155
|
+
self.__function_name = "\"{}\".{}".format(self.__db_name,
|
|
156
|
+
self.__function_name)
|
|
157
|
+
self.__func_input_arg_sql_names = func_input_arg_sql_names
|
|
158
|
+
self.__func_input_table_view_query = func_input_table_view_query
|
|
159
|
+
self.__func_input_dataframe_type = func_input_dataframe_type
|
|
160
|
+
self.__func_input_distribution = func_input_distribution
|
|
161
|
+
self.__func_input_partition_by_cols = func_input_partition_by_cols
|
|
162
|
+
self.__func_input_order_by_cols = func_input_order_by_cols
|
|
163
|
+
self.__func_other_arg_sql_names = func_other_arg_sql_names
|
|
164
|
+
self.__func_other_args_values = func_other_args_values
|
|
165
|
+
self.__func_other_arg_json_datatypes = func_other_arg_json_datatypes
|
|
166
|
+
self.__func_output_args_sql_names = func_output_args_sql_names
|
|
167
|
+
self.__func_output_args_values = func_output_args_values
|
|
168
|
+
self.__func_input_local_order = func_input_local_order
|
|
169
|
+
self.__func_type = func_type
|
|
170
|
+
self.__SELECT_STMT_FMT = "SELECT * FROM {} as sqlmr"
|
|
171
|
+
self.__QUERY_SIZE = self.__get_string_size(self.__SELECT_STMT_FMT) + 20
|
|
172
|
+
self.__input_arg_clause_lengths = []
|
|
173
|
+
self._multi_query_input_nodes = []
|
|
174
|
+
self.__volatile_output = volatile_output
|
|
175
|
+
|
|
176
|
+
def __process_for_teradata_keyword(self, keyword):
|
|
177
|
+
"""
|
|
178
|
+
Internal function to process Teradata Reserved keywords.
|
|
179
|
+
If keyword is in list of Teradata Reserved keywords, then it'll be quoted in double quotes "keyword".
|
|
180
|
+
|
|
181
|
+
PARAMETERS:
|
|
182
|
+
keyword - A string to check whether it belongs to Teradata Reserved Keywords or not.
|
|
183
|
+
|
|
184
|
+
RETURNS:
|
|
185
|
+
A quoted string, if keyword is one of the Teradata Reserved Keyword, else str as is.
|
|
186
|
+
|
|
187
|
+
RAISES:
|
|
188
|
+
|
|
189
|
+
EXAMPLES:
|
|
190
|
+
# Passing non-reserved returns "xyz" as is.
|
|
191
|
+
keyword = self.__process_for_teradata_keyword("xyz")
|
|
192
|
+
print(keyword)
|
|
193
|
+
# Passing reserved str returns double-quoted str, i.e., "\"threshold\"".
|
|
194
|
+
keyword = self.__process_for_teradata_keyword("threshold")
|
|
195
|
+
print(keyword)
|
|
196
|
+
|
|
197
|
+
"""
|
|
198
|
+
if keyword.upper() in TeradataReservedKeywords.TERADATA_RESERVED_WORDS.value:
|
|
199
|
+
return UtilFuncs._teradata_quote_arg(keyword, "\"", False)
|
|
200
|
+
else:
|
|
201
|
+
return keyword
|
|
202
|
+
|
|
203
|
+
def __generate_sqlmr_func_other_arg_sql(self):
|
|
204
|
+
"""
|
|
205
|
+
Private function to generate a SQL clause for other function arguments.
|
|
206
|
+
For Example,
|
|
207
|
+
Step("False")
|
|
208
|
+
Family("BINOMIAL")
|
|
209
|
+
|
|
210
|
+
PARAMETERS:
|
|
211
|
+
|
|
212
|
+
RETURNS:
|
|
213
|
+
SQL string for other function arguments, as shown in example here.
|
|
214
|
+
|
|
215
|
+
RAISES:
|
|
216
|
+
|
|
217
|
+
EXAMPLES:
|
|
218
|
+
__func_other_arg_sql_names = ["Step", "Family"]
|
|
219
|
+
__func_other_args_values = ["False", "BINOMIAL"]
|
|
220
|
+
other_arg_sql = self.__generate_sqlmr_func_other_arg_sql()
|
|
221
|
+
# Output is as shown in example in description.
|
|
222
|
+
|
|
223
|
+
"""
|
|
224
|
+
args_sql_str = ""
|
|
225
|
+
for index in range(len(self.__func_other_arg_sql_names)):
|
|
226
|
+
args_sql_str = "{0}\n\t{1}({2})".format(args_sql_str,
|
|
227
|
+
self.__process_for_teradata_keyword(
|
|
228
|
+
self.__func_other_arg_sql_names[index]),
|
|
229
|
+
self.__func_other_args_values[index])
|
|
230
|
+
|
|
231
|
+
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
232
|
+
return args_sql_str
|
|
233
|
+
|
|
234
|
+
def __generate_sqlmr_input_arg_sql(self, table_ref, table_ref_type, alias=None):
|
|
235
|
+
"""
|
|
236
|
+
Private function to generate a ON clause for input function arguments.
|
|
237
|
+
For Example,
|
|
238
|
+
ON table_name AS InputTable
|
|
239
|
+
ON (select * from table) AS InputTable
|
|
240
|
+
|
|
241
|
+
PARAMETERS:
|
|
242
|
+
table_ref - Table name or query, to be used as input.
|
|
243
|
+
table_ref_type - Type of data frame.
|
|
244
|
+
alias - Alias to be used for input.
|
|
245
|
+
|
|
246
|
+
RETURNS:
|
|
247
|
+
ON clause SQL string for input function arguments, as shown in example here.
|
|
248
|
+
|
|
249
|
+
RAISES:
|
|
250
|
+
TODO
|
|
251
|
+
|
|
252
|
+
EXAMPLES:
|
|
253
|
+
other_arg_sql = self.__generate_sqlmr_input_arg_sql("table_name", "TABLE", "InputTable")
|
|
254
|
+
# Output is as shown in example in description.
|
|
255
|
+
|
|
256
|
+
"""
|
|
257
|
+
returnSql = "\n\tON"
|
|
258
|
+
if table_ref_type == "TABLE":
|
|
259
|
+
returnSql = "{0} {1}".format(returnSql, table_ref)
|
|
260
|
+
elif table_ref_type == "QUERY":
|
|
261
|
+
returnSql = "{0} ({1})".format(returnSql, table_ref)
|
|
262
|
+
else:
|
|
263
|
+
#TODO raise # Error
|
|
264
|
+
""
|
|
265
|
+
|
|
266
|
+
if alias is not None:
|
|
267
|
+
returnSql = "{0} AS {1}".format(returnSql, self.__process_for_teradata_keyword(alias))
|
|
268
|
+
|
|
269
|
+
return returnSql
|
|
270
|
+
|
|
271
|
+
def __generate_sqlmr_output_arg_sql(self):
|
|
272
|
+
"""
|
|
273
|
+
Private function to generate a SQL clause for output function arguments.
|
|
274
|
+
For Example,
|
|
275
|
+
OUT TABLE OutputTable("out_table_1")
|
|
276
|
+
OUT TABLE CoefficientsTable("out_table_2")
|
|
277
|
+
|
|
278
|
+
PARAMETERS:
|
|
279
|
+
|
|
280
|
+
RETURNS:
|
|
281
|
+
SQL string for output function arguments, as shown in example here.
|
|
282
|
+
|
|
283
|
+
RAISES:
|
|
284
|
+
|
|
285
|
+
EXAMPLES:
|
|
286
|
+
__func_output_args_sql_names = ["OutputTable", "CoefficientsTable"]
|
|
287
|
+
__func_output_args_values = ["out_table_1", "out_table_2"]
|
|
288
|
+
other_arg_sql = self.__generate_sqlmr_output_arg_sql()
|
|
289
|
+
# Output is as shown in example in description.
|
|
290
|
+
|
|
291
|
+
"""
|
|
292
|
+
args_sql_str = ""
|
|
293
|
+
volatile_table_clause = " VOLATILE" if self.__volatile_output else ""
|
|
294
|
+
for index in range(len(self.__func_output_args_sql_names)):
|
|
295
|
+
if self.__func_output_args_values[index] is not None:
|
|
296
|
+
args_sql_str = "{0}\n\tOUT{3} TABLE {1}({2})".format(args_sql_str,
|
|
297
|
+
self.__process_for_teradata_keyword(
|
|
298
|
+
self.__func_output_args_sql_names[index]),
|
|
299
|
+
self.__func_output_args_values[index],
|
|
300
|
+
volatile_table_clause)
|
|
301
|
+
|
|
302
|
+
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
303
|
+
return args_sql_str
|
|
304
|
+
|
|
305
|
+
def _gen_sqlmr_select_stmt_sql(self):
|
|
306
|
+
"""
|
|
307
|
+
Protected function to generate complete analytical query.
|
|
308
|
+
For Example,
|
|
309
|
+
SELECT * FROM GLM(
|
|
310
|
+
input_arguments_clause
|
|
311
|
+
output_arguments_clause
|
|
312
|
+
USING
|
|
313
|
+
other_arguments_clause
|
|
314
|
+
) as sqlmr
|
|
315
|
+
|
|
316
|
+
PARAMETERS:
|
|
317
|
+
|
|
318
|
+
RETURNS:
|
|
319
|
+
A SQL-MR/Analytical query, as shown in example here.
|
|
320
|
+
|
|
321
|
+
RAISES:
|
|
322
|
+
|
|
323
|
+
EXAMPLES:
|
|
324
|
+
aqg_obj = AnalyticQueryGenerator(self.function_name, self.input_sql_args, self.input_table_qry,
|
|
325
|
+
self.input_df_type,
|
|
326
|
+
self.input_distribution, self.input_partition_columns,
|
|
327
|
+
self.input_order_columns,
|
|
328
|
+
self.other_sql_args, self.other_args_val, [], self.output_sql_args,
|
|
329
|
+
self.output_args_val)
|
|
330
|
+
anly_query = aqg_obj._gen_sqlmr_select_stmt_sql()
|
|
331
|
+
# Output is as shown in example in description.
|
|
332
|
+
|
|
333
|
+
"""
|
|
334
|
+
return self.__SELECT_STMT_FMT.format(self._gen_sqlmr_invocation_sql())
|
|
335
|
+
|
|
336
|
+
def _gen_sqlmr_invocation_sql(self):
|
|
337
|
+
"""
|
|
338
|
+
Protected function to generate a part of analytical query, to be used for map-reduce functions.
|
|
339
|
+
For Example,
|
|
340
|
+
GLM(
|
|
341
|
+
input_arguments_clause
|
|
342
|
+
output_arguments_clause
|
|
343
|
+
USING
|
|
344
|
+
other_arguments_clause
|
|
345
|
+
)
|
|
346
|
+
|
|
347
|
+
PARAMETERS:
|
|
348
|
+
|
|
349
|
+
RETURNS:
|
|
350
|
+
A SQL-MR/Analytical query, as shown in example here.
|
|
351
|
+
|
|
352
|
+
RAISES:
|
|
353
|
+
|
|
354
|
+
EXAMPLES:
|
|
355
|
+
aqg_obj = AnalyticQueryGenerator(self.function_name, self.input_sql_args, self.input_table_qry,
|
|
356
|
+
self.input_df_type,
|
|
357
|
+
self.input_distribution, self.input_partition_columns,
|
|
358
|
+
self.input_order_columns,
|
|
359
|
+
self.other_sql_args, self.other_args_val, [], self.output_sql_args,
|
|
360
|
+
self.output_args_val)
|
|
361
|
+
anly_query = aqg_obj._gen_sqlmr_invocation_sql()
|
|
362
|
+
# Output is as shown in example in description.
|
|
363
|
+
|
|
364
|
+
"""
|
|
365
|
+
self.__OUTPUT_ARG_CLAUSE = self.__generate_sqlmr_output_arg_sql()
|
|
366
|
+
self.__OTHER_ARG_CLAUSE = self.__generate_sqlmr_func_other_arg_sql()
|
|
367
|
+
self.__INPUT_ARG_CLAUSE = self.__single_complete_table_ref_clause()
|
|
368
|
+
invocation_sql = "{0}({1}{2}".format(self.__function_name, self.__INPUT_ARG_CLAUSE, self.__OUTPUT_ARG_CLAUSE)
|
|
369
|
+
|
|
370
|
+
if len(self.__func_other_arg_sql_names) != 0:
|
|
371
|
+
invocation_sql = "{0}\n\tUSING{1}".format(invocation_sql, self.__OTHER_ARG_CLAUSE)
|
|
372
|
+
|
|
373
|
+
invocation_sql = invocation_sql + "\n)"
|
|
374
|
+
|
|
375
|
+
return invocation_sql
|
|
376
|
+
|
|
377
|
+
def __single_complete_table_ref_clause(self):
|
|
378
|
+
"""
|
|
379
|
+
Private function to generate complete ON clause for input function arguments, including
|
|
380
|
+
partition by and order by clause, if any.
|
|
381
|
+
For Example,
|
|
382
|
+
ON table_name AS InputTable1 Partition By col1 Order By col2
|
|
383
|
+
ON (select * from table) AS InputTable2 DIMENSION
|
|
384
|
+
|
|
385
|
+
PARAMETERS:
|
|
386
|
+
|
|
387
|
+
RETURNS:
|
|
388
|
+
Complete input argument clause, SQL string for input function arguments, as shown in example here.
|
|
389
|
+
|
|
390
|
+
RAISES:
|
|
391
|
+
|
|
392
|
+
EXAMPLES:
|
|
393
|
+
__func_input_arg_sql_names = ["InputTable1", "InputTable2"]
|
|
394
|
+
__func_input_table_view_query = ["table_name", "select * from table"]
|
|
395
|
+
__func_input_dataframe_type = ["TABLE", "QUERY"]
|
|
396
|
+
__func_input_distribution = ["FACT", "DIMENSION"]
|
|
397
|
+
__func_input_partition_by_cols = ["col1", "NA_character_"]
|
|
398
|
+
__func_input_order_by_cols = ["col2", "NA_character_"]
|
|
399
|
+
other_arg_sql = self.__single_complete_table_ref_clause()
|
|
400
|
+
# Output is as shown in example in description.
|
|
401
|
+
|
|
402
|
+
"""
|
|
403
|
+
on_clause_dict = OrderedDict()
|
|
404
|
+
args_sql_str = []
|
|
405
|
+
|
|
406
|
+
# Let's iterate over the input arguments to the analytic functions.
|
|
407
|
+
# Gather all the information provided by the wrapper.
|
|
408
|
+
for index in range(len(self.__func_input_arg_sql_names)):
|
|
409
|
+
# Get table reference. This contains following information:
|
|
410
|
+
# table name or view name OR
|
|
411
|
+
# A list of [view_name, query, node_query_type, node_id] gathered from
|
|
412
|
+
# 'aed_exec_query_output' for the input node.
|
|
413
|
+
table_ref = self.__func_input_table_view_query[index]
|
|
414
|
+
# Get the table reference type, which is, either "TABLE" or "QUERY"
|
|
415
|
+
table_ref_type = self.__func_input_dataframe_type[index]
|
|
416
|
+
# Input argument alias
|
|
417
|
+
alias = self.__func_input_arg_sql_names[index]
|
|
418
|
+
# Partition information
|
|
419
|
+
distribution = self.__func_input_distribution[index]
|
|
420
|
+
partition_col = self.__func_input_partition_by_cols[index]
|
|
421
|
+
# Order clause information
|
|
422
|
+
order_col = self.__func_input_order_by_cols[index]
|
|
423
|
+
# Order by type information - local order by or order by
|
|
424
|
+
local_order_by_type = self.__func_input_local_order[index] if self.__func_input_local_order else False
|
|
425
|
+
# Get the Partition clause for the input argument.
|
|
426
|
+
partition_clause = self.__gen_sqlmr_input_partition_clause(distribution, partition_col)
|
|
427
|
+
# Get the Order clause for the input argument.
|
|
428
|
+
order_clause = self.__gen_sqlmr_input_order_clause(order_col, local_order_by_type)
|
|
429
|
+
|
|
430
|
+
if table_ref_type == "TABLE":
|
|
431
|
+
# If table reference type is "TABLE", then let's use the table name in the query.
|
|
432
|
+
on_clause = self.__generate_sqlmr_input_arg_sql(table_ref, table_ref_type, alias)
|
|
433
|
+
on_clause_str = "{0}{1}{2}".format(on_clause, partition_clause, order_clause)
|
|
434
|
+
args_sql_str.append(on_clause_str)
|
|
435
|
+
# Update the length of the PARTITION clause.
|
|
436
|
+
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(on_clause_str)
|
|
437
|
+
else:
|
|
438
|
+
# Store the input argument information for the inputs, which will use query as input.
|
|
439
|
+
on_clause_dict[index] = {}
|
|
440
|
+
on_clause_dict[index]["PARTITION_CLAUSE"] = partition_clause
|
|
441
|
+
on_clause_dict[index]["ORDER_CLAUSE"] = order_clause
|
|
442
|
+
on_clause_dict[index]["ON_TABLE"] = self.__generate_sqlmr_input_arg_sql(table_ref[0], "TABLE", alias)
|
|
443
|
+
on_clause_dict[index]["ON_QRY"] = self.__generate_sqlmr_input_arg_sql(table_ref[1], "QUERY", alias)
|
|
444
|
+
on_clause_dict[index]["QRY_TYPE"] = table_ref[2]
|
|
445
|
+
on_clause_dict[index]["NODEID"] = table_ref[3]
|
|
446
|
+
on_clause_dict[index]["LAZY"] = table_ref[4]
|
|
447
|
+
# If input node results in returning multiple queries save that input node
|
|
448
|
+
# in '_multi_query_input_nodes' list.
|
|
449
|
+
if table_ref[5]:
|
|
450
|
+
self._multi_query_input_nodes.append(table_ref[3])
|
|
451
|
+
|
|
452
|
+
# Process OrderedDict to generate input argument clause.
|
|
453
|
+
for key in on_clause_dict.keys():
|
|
454
|
+
# 31000 is maximum query length supported in ON clause
|
|
455
|
+
if self.__QUERY_SIZE + self.__get_string_size(on_clause_dict[key]["ON_QRY"]) <= 31000:
|
|
456
|
+
on_clause_str = "{0}{1}{2}".format(on_clause_dict[key]["ON_QRY"],
|
|
457
|
+
on_clause_dict[key]["PARTITION_CLAUSE"],
|
|
458
|
+
on_clause_dict[key]["ORDER_CLAUSE"])
|
|
459
|
+
else:
|
|
460
|
+
# We are here means query maximum size will be exceeded here.
|
|
461
|
+
# So let's add the input node to multi-query input node list, as
|
|
462
|
+
# we would like execute this node as well as part of the execution.
|
|
463
|
+
# Add it in the list, if we have not done it already.
|
|
464
|
+
if on_clause_dict[key]["NODEID"] not in self._multi_query_input_nodes:
|
|
465
|
+
self._multi_query_input_nodes.append(on_clause_dict[key]["NODEID"])
|
|
466
|
+
|
|
467
|
+
# Use the table name/view name in the on clause.
|
|
468
|
+
on_clause_str = "{0}{1}{2}".format(on_clause_dict[key]["ON_TABLE"],
|
|
469
|
+
on_clause_dict[key]["PARTITION_CLAUSE"],
|
|
470
|
+
on_clause_dict[key]["ORDER_CLAUSE"])
|
|
471
|
+
|
|
472
|
+
# Execute input node here, if function is not lazy.
|
|
473
|
+
if not on_clause_dict[key]["LAZY"]:
|
|
474
|
+
DataFrameUtils._execute_node_return_db_object_name(on_clause_dict[key]["NODEID"])
|
|
475
|
+
|
|
476
|
+
args_sql_str.insert(key, on_clause_str)
|
|
477
|
+
# Add the length of the ON clause.
|
|
478
|
+
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(on_clause_str)
|
|
479
|
+
|
|
480
|
+
return " ".join(args_sql_str)
|
|
481
|
+
|
|
482
|
+
def __gen_sqlmr_input_order_clause(self, column_order, local_order_by_type):
|
|
483
|
+
"""
|
|
484
|
+
Private function to generate complete order by clause for input function arguments.
|
|
485
|
+
For Example,
|
|
486
|
+
Order By col2
|
|
487
|
+
|
|
488
|
+
PARAMETERS:
|
|
489
|
+
column_order - Column to be used in ORDER BY clause. If this is "NA_character_"
|
|
490
|
+
no ORDER BY clause is generated.
|
|
491
|
+
|
|
492
|
+
local_order_by_type - Specifies whether to generate LOCAL ORDER BY or not. When
|
|
493
|
+
set to True, function generates LOCAL ORDER BY, otherwise
|
|
494
|
+
function generates ORDER BY clause.
|
|
495
|
+
|
|
496
|
+
RETURNS:
|
|
497
|
+
Order By clause, as shown in example here.
|
|
498
|
+
|
|
499
|
+
RAISES:
|
|
500
|
+
|
|
501
|
+
EXAMPLES:
|
|
502
|
+
other_arg_sql = self.__gen_sqlmr_input_order_clause("col2")
|
|
503
|
+
# Output is as shown in example in description.
|
|
504
|
+
|
|
505
|
+
"""
|
|
506
|
+
if column_order == "NA_character_" or column_order is None:
|
|
507
|
+
return ""
|
|
508
|
+
local_order = "LOCAL" if local_order_by_type else ""
|
|
509
|
+
args_sql_str = "\n\t{} ORDER BY {}".format(local_order, column_order)
|
|
510
|
+
|
|
511
|
+
# Get the length of the ORDER clause.
|
|
512
|
+
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
513
|
+
return args_sql_str
|
|
514
|
+
|
|
515
|
+
def __gen_sqlmr_input_partition_clause(self, distribution, column):
|
|
516
|
+
"""
|
|
517
|
+
Private function to generate PARTITION BY or DIMENSION clause for input function arguments.
|
|
518
|
+
For Example,
|
|
519
|
+
Partition By col1
|
|
520
|
+
DIMENSION
|
|
521
|
+
|
|
522
|
+
PARAMETERS:
|
|
523
|
+
distribution - Type of clause to be generated. Values accepted here are: FACT, DIMENSION, NONE
|
|
524
|
+
column - Column to be used in PARTITION BY clause, when distribution is "FACT"
|
|
525
|
+
|
|
526
|
+
RETURNS:
|
|
527
|
+
Partition clause, based on the type of distribution:
|
|
528
|
+
When "FACT" - PARTITION BY clause is generated.
|
|
529
|
+
When "DIMENSION" - DIMENSION cluase is generated.
|
|
530
|
+
When "NONE" - No clause is generated, an empty string is returned.
|
|
531
|
+
|
|
532
|
+
RAISES:
|
|
533
|
+
TODO
|
|
534
|
+
|
|
535
|
+
EXAMPLES:
|
|
536
|
+
other_arg_sql = self.__gen_sqlmr_input_partition_clause("FACT", "col1")
|
|
537
|
+
# Output is as shown in example in description.
|
|
538
|
+
|
|
539
|
+
"""
|
|
540
|
+
if distribution == "FACT" and column is not None:
|
|
541
|
+
args_sql_str = "\n\tPARTITION BY {0}".format(column)
|
|
542
|
+
elif distribution == "DIMENSION":
|
|
543
|
+
args_sql_str = "\n\tDIMENSION"
|
|
544
|
+
elif distribution == "HASH" and column is not None:
|
|
545
|
+
args_sql_str = "\n\t HASH BY {0}".format(column)
|
|
546
|
+
elif distribution == "NONE":
|
|
547
|
+
return ""
|
|
548
|
+
else:
|
|
549
|
+
return ""
|
|
550
|
+
# TODO raise error "invalid distribution type"
|
|
551
|
+
|
|
552
|
+
# Get the length of the PARTITION clause.
|
|
553
|
+
self.__QUERY_SIZE = self.__QUERY_SIZE + self.__get_string_size(args_sql_str)
|
|
554
|
+
return args_sql_str
|
|
555
|
+
|
|
556
|
+
def _get_alias_name_for_function(self, function_name):
|
|
557
|
+
"""
|
|
558
|
+
Function to return the alias name mapped to the actual
|
|
559
|
+
analytic function.
|
|
560
|
+
|
|
561
|
+
PARAMETERS:
|
|
562
|
+
function_name:
|
|
563
|
+
Required Argument.
|
|
564
|
+
Specifies the name of the function for which alias
|
|
565
|
+
name should be returned.
|
|
566
|
+
|
|
567
|
+
RETURNS:
|
|
568
|
+
Function alias name for the given function_name.
|
|
569
|
+
|
|
570
|
+
RAISES:
|
|
571
|
+
TeradataMLException
|
|
572
|
+
|
|
573
|
+
EXAMPLES:
|
|
574
|
+
aqgObj._get_alias_name_for_function("GLM")
|
|
575
|
+
"""
|
|
576
|
+
engine_name = UtilFuncs._get_engine_name(self.__engine)
|
|
577
|
+
|
|
578
|
+
# Get function mappings which are already loaded during create_context or set_context.
|
|
579
|
+
function_mappings = _get_function_mappings()
|
|
580
|
+
|
|
581
|
+
try:
|
|
582
|
+
return function_mappings[configure.vantage_version][engine_name][function_name.lower()]
|
|
583
|
+
except KeyError as ke:
|
|
584
|
+
if str(ke) == "'{}'".format(function_name.lower()):
|
|
585
|
+
raise TeradataMlException(Messages.get_message(
|
|
586
|
+
MessageCodes.FUNCTION_NOT_SUPPORTED).format(configure.vantage_version),
|
|
587
|
+
MessageCodes.FUNCTION_NOT_SUPPORTED) from ke
|
|
588
|
+
else:
|
|
589
|
+
raise
|
|
590
|
+
except TeradataMlException:
|
|
591
|
+
raise
|
|
592
|
+
except Exception as err:
|
|
593
|
+
raise TeradataMlException(Messages.get_message(
|
|
594
|
+
MessageCodes.CONFIG_ALIAS_ANLY_FUNC_NOT_FOUND).format(function_name, config_folder),
|
|
595
|
+
MessageCodes.CONFIG_ALIAS_ANLY_FUNC_NOT_FOUND) from err
|
|
596
|
+
|
|
597
|
+
def __get_string_size(self, string):
|
|
598
|
+
return len(string.encode("utf8"))
|
|
599
|
+
|
|
600
|
+
class UAFQueryGenerator:
|
|
601
|
+
def __init__(self, function_name, func_input_args, func_input_filter_expr_args, func_other_args,
|
|
602
|
+
func_output_args, func_input_fmt_args=None, func_output_fmt_args=None,
|
|
603
|
+
volatile_output=False, ctas=False):
|
|
604
|
+
"""
|
|
605
|
+
UAFQueryGenerator constructor, for UAF query generation.
|
|
606
|
+
|
|
607
|
+
PARAMETERS:
|
|
608
|
+
function_name:
|
|
609
|
+
Required Argument.
|
|
610
|
+
Specifies the name of the function.
|
|
611
|
+
|
|
612
|
+
func_input_args:
|
|
613
|
+
Required Argument.
|
|
614
|
+
Specifies the list of input arguments passed by the user.
|
|
615
|
+
[data1, data2, data3]
|
|
616
|
+
Types: list of TDSeries or list of TDMarix or list of TDGenSeries
|
|
617
|
+
|
|
618
|
+
func_input_filter_expr_args:
|
|
619
|
+
Required Argument.
|
|
620
|
+
Specifies the list of filter expressions related to corresponding input argument.
|
|
621
|
+
Types: list of ColumnExpressions
|
|
622
|
+
|
|
623
|
+
func_other_args:
|
|
624
|
+
Required Argument.
|
|
625
|
+
Specifies the dict containing information about other arguments.
|
|
626
|
+
dict contains a key value pair where:
|
|
627
|
+
key is a SQL argument name.
|
|
628
|
+
value is can be of two types:
|
|
629
|
+
An actual value passed by the user to be passed along to the function.
|
|
630
|
+
OR
|
|
631
|
+
A dict of key value pair, similar to a dict passed to the argument.
|
|
632
|
+
|
|
633
|
+
For example,
|
|
634
|
+
In SQL:
|
|
635
|
+
NONSEASONAL()
|
|
636
|
+
FUNC_PARAMS(NONSEASONAL(MODEL_ORDER(2,0,1),ARG1(value1),
|
|
637
|
+
NestParam(MODEL_ORDER1(2,0,1),ARG1(value1)
|
|
638
|
+
),
|
|
639
|
+
CONSTANT(0), ALGORITHM(MLE), COEFF_STATS(1),
|
|
640
|
+
FIT_METRICS(1), RESIDUALS(1), FIT_PERCENTAGE(80) )
|
|
641
|
+
So dict passed here is:
|
|
642
|
+
dict = {
|
|
643
|
+
"NONSEASONAL": {
|
|
644
|
+
"MODEL_ORDER": "2, 0, 1",
|
|
645
|
+
"ARG1": "Value1",
|
|
646
|
+
"NestParam": {
|
|
647
|
+
"MODEL_ORDER": "2, 0, 1",
|
|
648
|
+
"ARG1": "Value1",
|
|
649
|
+
}
|
|
650
|
+
},
|
|
651
|
+
"CONSTANT": 0,
|
|
652
|
+
"ALGORITHM": "MLE",
|
|
653
|
+
"COEFF_STATS": 1,
|
|
654
|
+
"FIT_METRICS": 1,
|
|
655
|
+
"RESIDUALS": 1,
|
|
656
|
+
"FIT_PERCENTAGE": 80
|
|
657
|
+
}
|
|
658
|
+
Types: dict
|
|
659
|
+
|
|
660
|
+
func_output_args:
|
|
661
|
+
Required Argument.
|
|
662
|
+
Specifies the name of the output table to be created or used in a UAF function query.
|
|
663
|
+
Types: str
|
|
664
|
+
|
|
665
|
+
func_input_fmt_args:
|
|
666
|
+
Required Argument.
|
|
667
|
+
Specifies the dict containing information about INPUT_FMT clause in UAF Query.
|
|
668
|
+
dict contains a key value pair where:
|
|
669
|
+
key is a SQL argument name.
|
|
670
|
+
value can be of two types:
|
|
671
|
+
An actual value passed by the user to be passed along to the function.
|
|
672
|
+
OR
|
|
673
|
+
A dict of key value pair, similar to a dict passed to the arguments.
|
|
674
|
+
Types: dict.
|
|
675
|
+
|
|
676
|
+
func_output_fmt_args:
|
|
677
|
+
Required Argument.
|
|
678
|
+
Specifies the dict containing information about OUTPUT_FMT clause in UAF Query.
|
|
679
|
+
dict contains a key value pair where:
|
|
680
|
+
key is a SQL argument name.
|
|
681
|
+
value can be of two types:
|
|
682
|
+
An actual value passed by the user to be passed along to the function.
|
|
683
|
+
OR
|
|
684
|
+
A dict of key value pair, similar to a dict passed to the argument.
|
|
685
|
+
Types: dict.
|
|
686
|
+
|
|
687
|
+
volatile_output:
|
|
688
|
+
Optional Argument.
|
|
689
|
+
Specifies the table to create is Volatile or not. When set to True,
|
|
690
|
+
volatile table is created, otherwise permanent table is created.
|
|
691
|
+
Default Value: False
|
|
692
|
+
Types: bool
|
|
693
|
+
|
|
694
|
+
ctas:
|
|
695
|
+
Optional Argument.
|
|
696
|
+
Specifies whether to create output table using CREATE TABLE or using
|
|
697
|
+
EXECUTE FUNCTION. When set to True, output table is created using CREATE
|
|
698
|
+
TABLE statement. Otherwise, output is created using EXECUTE FUNCTION INTO
|
|
699
|
+
clause.
|
|
700
|
+
Default Value: False
|
|
701
|
+
Types: bool
|
|
702
|
+
|
|
703
|
+
RETURNS:
|
|
704
|
+
UAFQueryGenerator object. (We can call this as map-reduce object)
|
|
705
|
+
|
|
706
|
+
RAISES:
|
|
707
|
+
|
|
708
|
+
EXAMPLES:
|
|
709
|
+
aqg_obj = UAFAnalyticQueryGenerator()
|
|
710
|
+
"""
|
|
711
|
+
self.__function_name = function_name
|
|
712
|
+
self.__func_input_args = func_input_args
|
|
713
|
+
self.__func_input_filter_expr_args = func_input_filter_expr_args
|
|
714
|
+
self.__func_other_args = func_other_args if func_other_args else None
|
|
715
|
+
self.__func_output_args = func_output_args if func_output_args else None
|
|
716
|
+
self.__func_input_fmt_args = func_input_fmt_args if func_input_fmt_args else None
|
|
717
|
+
self.__func_output_fmt_args = func_output_fmt_args if func_output_fmt_args else None
|
|
718
|
+
self.__volatile_output = volatile_output
|
|
719
|
+
self.__parameterised_sql = ""
|
|
720
|
+
self.__parameterised_sql_values = []
|
|
721
|
+
self.__non_parameterised_sql = ""
|
|
722
|
+
self.__ctas = ctas
|
|
723
|
+
|
|
724
|
+
def __generate_uaf_input_arg_sql(self):
|
|
725
|
+
"""
|
|
726
|
+
Private function to generate SERIES_SPEC or MATRIX_SPEC or ART_SPEC
|
|
727
|
+
or GENSERIES_SPEC clause along with 'WHERE' clause.
|
|
728
|
+
For Example,
|
|
729
|
+
SERIES_SPEC(
|
|
730
|
+
TABLE_NAME(StockDataSet),
|
|
731
|
+
SERIES_ID(DataSetID),
|
|
732
|
+
ROW_AXIS(SEQUENCE(SeqNo)),
|
|
733
|
+
PAYLOAD(FIELDS(Magnitude), CONTENT(REAL))
|
|
734
|
+
)
|
|
735
|
+
WHERE DataSetID=556 AND SeqNo > 3,
|
|
736
|
+
|
|
737
|
+
SERIES_SPEC(
|
|
738
|
+
TABLE_NAME(SMOOTH_SERIES),
|
|
739
|
+
SERIES_ID(DataSetID),
|
|
740
|
+
ROW_AXIS(SEQUENCE(ROW_I)),
|
|
741
|
+
PAYLOAD(FIELDS(Magnitude), CONTENT(REAL))
|
|
742
|
+
)
|
|
743
|
+
WHERE DataSetID=556,
|
|
744
|
+
|
|
745
|
+
PARAMETERS:
|
|
746
|
+
None
|
|
747
|
+
|
|
748
|
+
RETURNS:
|
|
749
|
+
tuple, with 3 elements.
|
|
750
|
+
element 1 is a string, represents the parameterised SQL clause,
|
|
751
|
+
element 2 is a list, represents the values for parameterised SQL clause,
|
|
752
|
+
element 3 is a string, represents the non parameterised SQL clause.
|
|
753
|
+
|
|
754
|
+
RAISES:
|
|
755
|
+
None.
|
|
756
|
+
|
|
757
|
+
EXAMPLES:
|
|
758
|
+
>>> self.__generate_sqlmr_input_arg_sql()
|
|
759
|
+
"""
|
|
760
|
+
|
|
761
|
+
# If the input argument is a string instead of list of TDSeries/TDMatrix objects,
|
|
762
|
+
# return the same and do not process those to get SQL expression since the string
|
|
763
|
+
# itself represents the SQL expression.
|
|
764
|
+
if isinstance(self.__func_input_args, str):
|
|
765
|
+
return self.__func_input_args
|
|
766
|
+
|
|
767
|
+
# Function to get the filter expression.
|
|
768
|
+
_filter_expr = lambda filter: "\n WHERE {}".format(filter.compile()) if filter else ""
|
|
769
|
+
_parameterised_sql, _parameterised_sql_values, _non_parameterised_sql, seperator = "", [], "", ""
|
|
770
|
+
|
|
771
|
+
for _arg, _arg_filter in zip(self.__func_input_args, self.__func_input_filter_expr_args):
|
|
772
|
+
_sql, _values = _arg._get_sql_repr()
|
|
773
|
+
_arg_filter_expr = _filter_expr(_arg_filter)
|
|
774
|
+
_parameterised_sql_values = _parameterised_sql_values + _values
|
|
775
|
+
_parameterised_sql = _parameterised_sql + seperator + "{} {}".format(_sql, _arg_filter_expr)
|
|
776
|
+
_non_parameterised_sql = _non_parameterised_sql + seperator + "{} {}".format(_arg._get_sql_repr(True), _arg_filter_expr)
|
|
777
|
+
seperator = ",\n"
|
|
778
|
+
|
|
779
|
+
return _non_parameterised_sql
|
|
780
|
+
|
|
781
|
+
def __generate_uaf_output_arg_sql(self):
|
|
782
|
+
"""
|
|
783
|
+
Private function to generate output clause from output function arguments.
|
|
784
|
+
For Example, ART(TABLE_NAME)
|
|
785
|
+
|
|
786
|
+
PARAMETERS:
|
|
787
|
+
None.
|
|
788
|
+
|
|
789
|
+
RETURNS:
|
|
790
|
+
str, represents a SQL clause for UAF function.
|
|
791
|
+
|
|
792
|
+
RAISES:
|
|
793
|
+
None.
|
|
794
|
+
|
|
795
|
+
EXAMPLES:
|
|
796
|
+
output_arg_sql = self.__generate_uaf_output_arg_sql()
|
|
797
|
+
# Output is as shown in example in description.
|
|
798
|
+
"""
|
|
799
|
+
if self.__ctas or self.__func_output_args is None:
|
|
800
|
+
return ""
|
|
801
|
+
return "INTO {}ART({})".format("VOLATILE " if self.__volatile_output else "", self.__func_output_args)
|
|
802
|
+
|
|
803
|
+
def _get_arg_expressions(self, arg, value):
|
|
804
|
+
"""
|
|
805
|
+
Internal function to generate the parameterised SQL clause, parameterised SQL
|
|
806
|
+
value and non parameterised SQL clause for a given argument and it's value.
|
|
807
|
+
|
|
808
|
+
PARAMETERS:
|
|
809
|
+
arg:
|
|
810
|
+
Required Argument.
|
|
811
|
+
Specifies the name of SQL clause.
|
|
812
|
+
Types: str
|
|
813
|
+
|
|
814
|
+
value:
|
|
815
|
+
Required Argument.
|
|
816
|
+
Specifies the value of SQL Clause. If the type of this argument is a dictionary,
|
|
817
|
+
then the same function will be called recursively to generate the expression.
|
|
818
|
+
Types: int OR str OR float OR dict
|
|
819
|
+
|
|
820
|
+
RETURNS:
|
|
821
|
+
tuple, with 3 elements.
|
|
822
|
+
element 1 is a string, represents the parameterised SQL clause,
|
|
823
|
+
element 2 is a list, represents the values for parameterised SQL clause.
|
|
824
|
+
element 3 is a string, represents the non parameterised SQL clause.
|
|
825
|
+
|
|
826
|
+
RAISES:
|
|
827
|
+
None.
|
|
828
|
+
|
|
829
|
+
EXAMPLES:
|
|
830
|
+
self.__get_other_arg_expressions("arg1", {"arg2": {"arg3": "value3"}}})
|
|
831
|
+
# Output is as shown in example in description.
|
|
832
|
+
"""
|
|
833
|
+
if value is None:
|
|
834
|
+
return "", [], ""
|
|
835
|
+
|
|
836
|
+
if not isinstance(value, dict):
|
|
837
|
+
# If value is a list, convert it to string seperated by comma.
|
|
838
|
+
value = ", ".join((str(i) for i in value)) if isinstance(value, list) else value
|
|
839
|
+
return "{}(?)".format(arg), [value], "{}({})".format(arg, value)
|
|
840
|
+
|
|
841
|
+
# If it is a dictionary.
|
|
842
|
+
_p_sql_clauses, _p_sql_values_l, _np_sql_clauses, seperator = "", [], "", ""
|
|
843
|
+
|
|
844
|
+
# Loop through the dictionary and call the same function again.
|
|
845
|
+
for _arg, _value in value.items():
|
|
846
|
+
_p_sql, _p_sql_values, _np_sql = self._get_arg_expressions(_arg, _value)
|
|
847
|
+
|
|
848
|
+
_p_sql_clauses = _p_sql_clauses + seperator + _p_sql
|
|
849
|
+
_p_sql_values_l = _p_sql_values_l + _p_sql_values
|
|
850
|
+
_np_sql_clauses = _np_sql_clauses + seperator + _np_sql
|
|
851
|
+
|
|
852
|
+
# After the first element, every other element should pad with
|
|
853
|
+
# previous elements with a comma(,).
|
|
854
|
+
seperator = ", "
|
|
855
|
+
|
|
856
|
+
# Append it with parent before returning it.
|
|
857
|
+
return "{}({})".format(arg, _p_sql_clauses), _p_sql_values_l, "{}({})".format(arg, _np_sql_clauses)
|
|
858
|
+
|
|
859
|
+
|
|
860
|
+
def __generate_uaf_func_params_sql(self):
|
|
861
|
+
"""
|
|
862
|
+
Private function to generate FUNC_PARAMS clause from function arguments.
|
|
863
|
+
For Example, FUNC_PARAMS(MATHOP("SUB")).
|
|
864
|
+
|
|
865
|
+
PARAMETERS:
|
|
866
|
+
None
|
|
867
|
+
|
|
868
|
+
RETURNS:
|
|
869
|
+
str, represents a SQL clause for UAF function.
|
|
870
|
+
|
|
871
|
+
RAISES:
|
|
872
|
+
None.
|
|
873
|
+
|
|
874
|
+
EXAMPLES:
|
|
875
|
+
other_arg_sql = self.__generate_uaf_func_params_sql({"MATHOP": 'SUB'})
|
|
876
|
+
# Output is as shown in example in description.
|
|
877
|
+
"""
|
|
878
|
+
_, _, func_params = self._get_arg_expressions("FUNC_PARAMS", self.__func_other_args)
|
|
879
|
+
return ",\n{}".format(func_params) if func_params else func_params
|
|
880
|
+
|
|
881
|
+
def __generate_uaf_input_fmt_arg_sql(self):
|
|
882
|
+
"""
|
|
883
|
+
Private function to generate INPUT_FMT clause from function arguments.
|
|
884
|
+
For Example, INPUT_FMT (INPUT_MODE (ONE2ONE)).
|
|
885
|
+
|
|
886
|
+
PARAMETERS:
|
|
887
|
+
None
|
|
888
|
+
|
|
889
|
+
RETURNS:
|
|
890
|
+
str, represents a SQL clause for UAF function.
|
|
891
|
+
|
|
892
|
+
RAISES:
|
|
893
|
+
None.
|
|
894
|
+
|
|
895
|
+
EXAMPLES:
|
|
896
|
+
other_arg_sql = self.__generate_uaf_input_fmt_arg_sql({"INPUT_MODE": 'ONE2ONE'})
|
|
897
|
+
"""
|
|
898
|
+
_, _, input_fmt_sql = self._get_arg_expressions("INPUT_FMT", self.__func_input_fmt_args)
|
|
899
|
+
return ",\n{}".format(input_fmt_sql) if input_fmt_sql else input_fmt_sql
|
|
900
|
+
|
|
901
|
+
def __generate_uaf_output_fmt_arg_sql(self):
|
|
902
|
+
"""
|
|
903
|
+
Private function to generate OUTPUT_FMT clause from function arguments.
|
|
904
|
+
For Example, INPUT_FMT (OUTPUT_MODE (ONE2MANY)).
|
|
905
|
+
|
|
906
|
+
PARAMETERS:
|
|
907
|
+
None.
|
|
908
|
+
|
|
909
|
+
RETURNS:
|
|
910
|
+
str, represents a SQL clause for UAF function.
|
|
911
|
+
|
|
912
|
+
RAISES:
|
|
913
|
+
None.
|
|
914
|
+
|
|
915
|
+
EXAMPLES:
|
|
916
|
+
other_arg_sql = self.__generate_uaf_output_fmt_arg_sql({"OUTPUT_MODE": 'ONE2MANY'})
|
|
917
|
+
"""
|
|
918
|
+
|
|
919
|
+
_, _, output_fmt_sql = self._get_arg_expressions("OUTPUT_FMT", self.__func_output_fmt_args)
|
|
920
|
+
return ",\n{}".format(output_fmt_sql) if output_fmt_sql else output_fmt_sql
|
|
921
|
+
|
|
922
|
+
def _get_display_uaf(self):
|
|
923
|
+
"""
|
|
924
|
+
Private function to generate the non parameterised UAF SQL.
|
|
925
|
+
|
|
926
|
+
PARAMETERS:
|
|
927
|
+
None
|
|
928
|
+
|
|
929
|
+
RETURNS:
|
|
930
|
+
str
|
|
931
|
+
|
|
932
|
+
RAISES:
|
|
933
|
+
None.
|
|
934
|
+
|
|
935
|
+
EXAMPLES:
|
|
936
|
+
other_arg_sql = self._get_display_uaf()
|
|
937
|
+
"""
|
|
938
|
+
input_sql = self.__generate_uaf_input_arg_sql()
|
|
939
|
+
|
|
940
|
+
output_sql = self.__generate_uaf_output_arg_sql()
|
|
941
|
+
|
|
942
|
+
func_params_sql = self.__generate_uaf_func_params_sql()
|
|
943
|
+
|
|
944
|
+
input_fmt_sql = self.__generate_uaf_input_fmt_arg_sql()
|
|
945
|
+
|
|
946
|
+
output_fmt_sql = self.__generate_uaf_output_fmt_arg_sql()
|
|
947
|
+
|
|
948
|
+
input_sql = "{}(\n{})".format(self.__function_name, "{}{}{}{}".format(
|
|
949
|
+
input_sql, func_params_sql, input_fmt_sql, output_fmt_sql))
|
|
950
|
+
|
|
951
|
+
sql = "EXECUTE FUNCTION {} {}".format(output_sql, input_sql)
|
|
952
|
+
if self.__ctas:
|
|
953
|
+
on_preserve_clause = " ON COMMIT PRESERVE ROWS" if self.__volatile_output else ""
|
|
954
|
+
sql = "CREATE {}TABLE {} AS ({}) WITH DATA{}".format("VOLATILE " if self.__volatile_output else "",
|
|
955
|
+
self.__func_output_args,
|
|
956
|
+
sql,
|
|
957
|
+
on_preserve_clause)
|
|
958
|
+
return sql
|