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