From e7e1e967cfcdbe03bd5fe20344e38b7c22d3e48d Mon Sep 17 00:00:00 2001 From: wuwenchi Date: Tue, 2 Jul 2024 22:50:53 +0800 Subject: [PATCH] [test](migrate) move 2 cases from p2 to p0 for 2.1 (#37139) pick #37004 --- .../docker-compose/hive/hive-2x.yaml.tpl | 2 +- .../docker-compose/hive/hive-3x.yaml.tpl | 2 +- .../create_table.hql | 27 ++ .../hive_textfile_array_all_types/data.tar.gz | Bin 0 -> 625 bytes .../hive_textfile_array_all_types/run.sh | 13 + .../create_table.hql | 32 ++ .../hive_textfile_array_delimiter/data.tar.gz | Bin 0 -> 690 bytes .../hive_textfile_array_delimiter/run.sh | 13 + .../create_table.hql | 16 + .../hive_textfile_nestedarray/data.tar.gz | Bin 0 -> 280 bytes .../hive_textfile_nestedarray/run.sh | 13 + .../logs1_parquet/create_table.hql | 39 ++ .../data/multi_catalog/logs1_parquet/run.sh | 21 ++ .../one_partition/create_table.hql | 22 ++ .../multi_catalog/one_partition/data.tar.gz | Bin 0 -> 296 bytes .../data/multi_catalog/one_partition/run.sh | 13 + .../test_csv_format_error/create_table.hql | 68 ++++ .../test_csv_format_error/data.tar.gz | Bin 0 -> 151583 bytes .../test_csv_format_error/run.sh | 13 + .../create_table.hql | 25 ++ .../test_date_string_partition/data.tar.gz | Bin 0 -> 353 bytes .../test_date_string_partition/run.sh | 13 + .../two_partition/create_table.hql | 25 ++ .../multi_catalog/two_partition/data.tar.gz | Bin 0 -> 375 bytes .../data/multi_catalog/two_partition/run.sh | 13 + .../statistics/statistics/create_table.hql | 33 ++ .../data/statistics/statistics/data.tar.gz | Bin 0 -> 3956 bytes .../scripts/data/statistics/statistics/run.sh | 13 + .../tpch_1000_parquet/part/create_table.hql | 24 ++ .../data/tpch_1000_parquet/part/run.sh | 22 ++ .../hive/test_hive_default_partition.out | 174 +++++++++ .../hive/test_hive_to_array.out | 21 ++ .../hive/test_text_garbled_file.out | Bin 296830 -> 593565 bytes .../hive/test_hive_default_partition.groovy | 17 +- .../hive/test_hive_statistic.groovy | 344 ++++++++++++++++++ .../hive/test_hive_statistic_timeout.groovy | 23 +- .../hive/test_hive_to_array.groovy | 17 +- .../hive/test_text_garbled_file.groovy | 47 +++ .../hive/test_hive_statistic.groovy | 338 ----------------- .../hive/test_text_garbled_file.groovy | 46 --- 40 files changed, 1085 insertions(+), 404 deletions(-) create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/data.tar.gz create mode 100755 docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/create_table.hql create mode 100644 docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh rename regression-test/data/{external_table_p2 => external_table_p0}/hive/test_hive_default_partition.out (51%) rename regression-test/data/{external_table_p2 => external_table_p0}/hive/test_hive_to_array.out (50%) rename regression-test/data/{external_table_p2 => external_table_p0}/hive/test_text_garbled_file.out (50%) rename regression-test/suites/{external_table_p2 => external_table_p0}/hive/test_hive_default_partition.groovy (95%) create mode 100644 regression-test/suites/external_table_p0/hive/test_hive_statistic.groovy rename regression-test/suites/{external_table_p2 => external_table_p0}/hive/test_hive_statistic_timeout.groovy (76%) rename regression-test/suites/{external_table_p2 => external_table_p0}/hive/test_hive_to_array.groovy (79%) create mode 100644 regression-test/suites/external_table_p0/hive/test_text_garbled_file.groovy delete mode 100644 regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy delete mode 100644 regression-test/suites/external_table_p2/hive/test_text_garbled_file.groovy diff --git a/docker/thirdparties/docker-compose/hive/hive-2x.yaml.tpl b/docker/thirdparties/docker-compose/hive/hive-2x.yaml.tpl index ca0fe2e9dd..de19ed9de1 100644 --- a/docker/thirdparties/docker-compose/hive/hive-2x.yaml.tpl +++ b/docker/thirdparties/docker-compose/hive/hive-2x.yaml.tpl @@ -101,7 +101,7 @@ services: - "${PG_PORT}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] - interval: 5s + interval: 10s timeout: 60s retries: 120 diff --git a/docker/thirdparties/docker-compose/hive/hive-3x.yaml.tpl b/docker/thirdparties/docker-compose/hive/hive-3x.yaml.tpl index 09d150c17b..9004f28b61 100644 --- a/docker/thirdparties/docker-compose/hive/hive-3x.yaml.tpl +++ b/docker/thirdparties/docker-compose/hive/hive-3x.yaml.tpl @@ -101,7 +101,7 @@ services: - "${PG_PORT}:5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] - interval: 5s + interval: 10s timeout: 60s retries: 120 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/create_table.hql new file mode 100644 index 0000000000..6b70039683 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/create_table.hql @@ -0,0 +1,27 @@ +create database if not exists multi_catalog; +use multi_catalog; + +CREATE TABLE IF NOT EXISTS `hive_textfile_array_all_types`( + `col1` array, + `col2` array, + `col3` array, + `col4` array, + `col5` array, + `col6` array, + `col7` array, + `col8` array, + `col9` array, + `col10` array, + `col11` array, + `col12` array, + `col13` array) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/hive_textfile_array_all_types'; + +msck repair table hive_textfile_array_all_types; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b9d64ab29bc18d2e83b2667a014ec1e5189543ec GIT binary patch literal 625 zcmb2|=3uDItW9HJemnJl(INwZhO_@(2LE7s`ia@;?P-g^`6G-|lbBQDXd4rdS+2JHPq&p^2MxYP7v{FMm7X@FZ$#(CVh?%z8_%)EH>J`xDdn zcb!?DiImCjW9!mSUyXjg_xo@AQ+J-%@BEdhzV&aUe%REx63@>hCauZ}lHXSL{p+h8 zrvG=HS$bhc{mIao!T zTt#XY9(-NS=M2Be-sdjtlK0>JYR~NXrIByHiHR+{75PC?c;=Dn)YdkmYMIAdjrZ7| z|G-(XY{tzzZSLUB$9T=ot(mVoIc61moZW{Sl_$c_{T~Y6+PEm)Xa2ECJ5Nq|;-jV{ z`A%VSM5&>%L93+kjRb3HIn$+mfA;guYnrp*Nzm=3+r0~?KZ`1T&aRfy_N$BMt8H3b z{1A2*x0ETDxs=KT9 z>|C&}`1-YYodd;|1zUexUwQb7yY4IN{y&G39>@9I^_2O}vD@yNr;Kxc#pENFExo!? aZS~bFl{lId(9t8=I>vyv1`G@u3=9B?S2R@s literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh new file mode 100755 index 0000000000..7c2e7e7aed --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_all_types/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}"/create_table.hql + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/create_table.hql new file mode 100644 index 0000000000..7e40a2c6bb --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/create_table.hql @@ -0,0 +1,32 @@ +create database if not exists multi_catalog; +use multi_catalog; + +CREATE TABLE IF NOT EXISTS `hive_textfile_array_delimiter`( + `col1` array, + `col2` array, + `col3` array, + `col4` array, + `col5` array, + `col6` array, + `col7` array, + `col8` array, + `col9` array, + `col10` array, + `col11` array, + `col12` int, + `col13` array>>) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +WITH SERDEPROPERTIES ( + 'colelction.delim'=',', + 'field.delim'='\t', + 'line.delim'='\n', + 'serialization.format'='\t') +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/hive_textfile_array_delimiter'; + +msck repair table hive_textfile_array_delimiter; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..f2ec01fa79f4fd892ac5ccdf3d06a49d564e4b4f GIT binary patch literal 690 zcmb2|=3qFTS)0bd{C4X9yjunW4a!IV&shF|aox7JB)QtLHnOgBQ!&_v*}gmS&! z-_OFrI?J0;!-4ZcQ_}n&I!B!U{4fYTzS7RCGB{uMj`-DMjr=>$On7#xr`2Zm*_Ydm zXT_y_VN(j;Q&G20=8mYgRYI)zYWCxS3w87$=P(>qU6O|mVU>$ zfU;Fzue@G)BY5-NTaUS?&zKlDdE&juXJ5C~MIXHP!8z7uH}4y+U(xnEv-URSKVA36 zb*13K=g0qS-emsU>dB2uUUo+;Iz-*|p7XFe&r~uB;VJEETbMe7`CO1{u&e7F!#Tlc zM1oFDnfbqw;kDPoo|Ue(QQMLIv_SQy(hV`k?JsIBpAzfgzG$`lYVY=C z=Dx9S-o?c3KM=dMRPoi>#~n{UC-1G~Ui{GY?b^8Q-&KCFXe%uDT(MAe?kqp$lZnf> z?p;~%Sbguyul&KkqjIwQV_55-Xi2D4&UHB-w9JhKYX$bg9ZZw0O?s{umAu6 literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh new file mode 100755 index 0000000000..7c2e7e7aed --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_array_delimiter/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}"/create_table.hql + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/create_table.hql new file mode 100644 index 0000000000..478a534153 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/create_table.hql @@ -0,0 +1,16 @@ +create database if not exists multi_catalog; +use multi_catalog; + +CREATE TABLE IF NOT EXISTS `hive_textfile_nestedarray`( + `col1` int, + `col2` array>>) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/hive_textfile_nestedarray'; + +msck repair table hive_textfile_nestedarray; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7c6f8bfef0cb4e434318ced231ec915b85016d97 GIT binary patch literal 280 zcmb2|=3w}gS)0bd{Pxn_tY!y+wuh$H?s2W<7v|3VdvUek%4nr2G7^`!l*i|4ZkaNn z#YA)I{o+m9U7LU0Di1DCUw8U!5ZCEbnx~$BZBCRo^}Hgms8B~}@5)0{&wowZK6lr~ zRcGq9pP&8vYr%`1$>0C4sC&6zZeEe~)8{V}E6%)C%U^z{{PB&wf6mM=%=$lLPk~SI ze-W39|Hb;g)UUt1t2<3+eaAidH|tl$|L*?W=UaO7ityjh|6&X{SAG@IxaDGMs$F)( zM`zm98^Y|TCt3(zUn+8Ef`!mFB^9qnYgs0FObQE%PF-DhZ-U9^c_GidF9p2%Zn#u` e2Tyu${M^!O_y28SKm+C0n literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh new file mode 100755 index 0000000000..7c2e7e7aed --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/hive_textfile_nestedarray/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}"/create_table.hql + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/create_table.hql new file mode 100644 index 0000000000..d4fb4be9a4 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/create_table.hql @@ -0,0 +1,39 @@ + +create database if not exists multi_catalog; +use multi_catalog; + +CREATE TABLE IF NOT EXISTS `logs1_parquet`( + `log_time` timestamp, + `machine_name` varchar(128), + `machine_group` varchar(128), + `cpu_idle` float, + `cpu_nice` float, + `cpu_system` float, + `cpu_user` float, + `cpu_wio` float, + `disk_free` float, + `disk_total` float, + `part_max_used` float, + `load_fifteen` float, + `load_five` float, + `load_one` float, + `mem_buffers` float, + `mem_cached` float, + `mem_free` float, + `mem_shared` float, + `swap_free` float, + `bytes_in` float, + `bytes_out` float) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +WITH SERDEPROPERTIES ( + 'field.delim'=',', + 'serialization.format'=',') +STORED AS INPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/logs1_parquet'; + +msck repair table logs1_parquet; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh new file mode 100644 index 0000000000..219916c011 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/logs1_parquet/run.sh @@ -0,0 +1,21 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +if [[ ! -d "${CUR_DIR}/data" ]]; then + echo "${CUR_DIR}/data does not exist" + cd "${CUR_DIR}" && rm -f data.tar.gz \ + && curl -O https://s3BucketName.s3Endpoint/regression/datalake/pipeline_data/multi_catalog/logs1_parquet/data.tar.gz \ + && tar xzf data.tar.gz + cd - +else + echo "${CUR_DIR}/data exist, continue !" +fi + +## mkdir and put data to hdfs +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}"/create_table.hql \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/create_table.hql new file mode 100644 index 0000000000..8d12858b5f --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/create_table.hql @@ -0,0 +1,22 @@ +create database if not exists multi_catalog; +use multi_catalog; + + +CREATE TABLE IF NOT EXISTS `one_partition`( + `id` int) +PARTITIONED BY ( + `part1` int) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +WITH SERDEPROPERTIES ( + 'field.delim'='|', + 'serialization.format'='|') +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/one_partition'; + + +msck repair table one_partition; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..ff9d50b2da66b1398049fbf55ddf50629844a9b2 GIT binary patch literal 296 zcmb2|=3wB@s!d~HetYer*I@$@wg)laHGi>vo1>y09>+5$LO^uoy|zbeuYJ`wC$G=f z<}k`JUF>`D?|omdXpd9#|Giz6bBfz^?V6`^-ntbXia+k()su1DY1*yNM{**UmOU!1 zy|Lf)sh;oE#QKQq`m_{rjcsX79H+tg`Ox{Yl$S z*tg|>df)fr((l=SDqpUjcD;M~?L+oDa@~7Qynnxk|DM9ZpT^l@Pvj44{(ODFa#zFA z8I6C=7XDMataVnc@{w}-y#2l^Gpl(G=HL51|JZMSj{pC<&3^pvPEx3s%Io4^@R)#O?8K9t{{*`R^dbJ`34F(1P D>OY-$ literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh new file mode 100755 index 0000000000..cc8392b9ba --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/one_partition/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}/create_table.hql" + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/create_table.hql new file mode 100644 index 0000000000..a1a3112032 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/create_table.hql @@ -0,0 +1,68 @@ +create database if not exists multi_catalog; +use multi_catalog; + +CREATE TABLE IF NOT EXISTS `test_csv_format_error`( + `device_id` string COMMENT '设备唯一识别ID ', + `user_id` bigint COMMENT '设备唯一识别ID HASH DEVICE_ID ', + `user_app_id` int COMMENT '使用样本应用的用户Id ', + `standard_app_id` int COMMENT '标准应用ID ', + `standard_app_name` string COMMENT '标准应用名称 ', + `standard_package_name` string COMMENT '标准应用包名 ', + `device_brand_id` int COMMENT '设备品牌ID ', + `device_brand_name` string COMMENT '设备品牌名称 ', + `device_eqp_id` int COMMENT '设备型号ID ', + `device_eqp_name` string COMMENT '设备型号名称 ', + `os_version_id` int COMMENT '系统版本ID ', + `os_version_name` string COMMENT '系统版本名称 ', + `os_type_id` int COMMENT '操作系统类型ID 0 安卓 1 IOS ', + `os_type_name` string COMMENT '操作系统类型名称 0 安卓 1 IOS ', + `os_name` string COMMENT '操作系统名称 ', + `oem_os_version` string COMMENT '厂商封装后的操作系统版本 ', + `oem_os_name` string COMMENT '厂商封装后的操作系统名称 ', + `app_version` string COMMENT '样本应用版本 ', + `app_key` string COMMENT '样本应用key ', + `app_channel` string COMMENT '推广渠道 ', + `package_name` string COMMENT '宿主APP包名 ', + `app_name` string COMMENT '宿主APP名称', + `sdk_version` string COMMENT 'SDK版本 ', + `api_level` string COMMENT 'API等级 ', + `carrier_id` int COMMENT '运营商ID ', + `carrier_name` string COMMENT '运营商名称 ', + `phone_num` string COMMENT '手机号码 ', + `ip` string COMMENT 'IP地址 ', + `country_id` int COMMENT '国家id', + `country_name` string COMMENT '国家name', + `province_id` int COMMENT '省份ID ', + `province_name` string COMMENT '省份名称 ', + `city_id` int COMMENT '地级市ID ', + `city_name` string COMMENT '地级市名称 ', + `county_id` int COMMENT '县级市ID ', + `county_name` string COMMENT '县级市名称 ', + `mac_address` string COMMENT 'MAC地址 ', + `network_id` int COMMENT '网络类型ID ', + `network_name` string COMMENT '网络类型 ', + `org_package_name` string COMMENT '原始应用包名 ', + `org_app_name` string COMMENT '原始应用程序名 ', + `org_app_version` string COMMENT '原始应用版本 ', + `app_flag` int COMMENT '安装、更新、还是卸载', + `action_time` string COMMENT '行为发生的时间', + `day_realy` string COMMENT '行为发生的日期', + `memo` map COMMENT '备注') +COMMENT 'ods-App_Installed' +PARTITIONED BY ( + `day` string) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +WITH SERDEPROPERTIES ( + 'colelction.delim'=',', + 'field.delim'='\t', + 'mapkey.delim'=':', + 'serialization.format'='\t') +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/test_csv_format_error'; + +msck repair table test_csv_format_error; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c0c9d63e2b88cef45bd09e52fe8fbf72781a2a2c GIT binary patch literal 151583 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

`C`-@@dBo{9JQ{pI6+JRz2IhT2xU^_yNENm(18 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 literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh new file mode 100755 index 0000000000..cc8392b9ba --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_csv_format_error/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}/create_table.hql" + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/create_table.hql new file mode 100644 index 0000000000..85db999365 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/create_table.hql @@ -0,0 +1,25 @@ +create database if not exists multi_catalog; +use multi_catalog; + + + +CREATE TABLE IF NOT EXISTS `test_date_string_partition`( + `k1` int) +PARTITIONED BY ( + `day1` string, + `day2` date) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +WITH SERDEPROPERTIES ( + 'field.delim'=',', + 'serialization.format'=',') +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/test_date_string_partition'; + + +msck repair table test_date_string_partition; + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/test_date_string_partition/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..70f7491953a5676e2ec053f3db58b0cc2d5925e5 GIT binary patch literal 353 zcmb2|=3qD*UYEwe{C1{eUbBIK>)v;oI~+o)ZN8OU-mD-JaJnt*fySw~+$)t#r+VcG ztF4-`osorUiTS*I=h)U)k!!o<6pJojo6tW0HutFo+gr{}Qd`Q~uzgj5_WtWL4-2f? zr*Y+DLC&tf)xWQoZa?=w_|?h!jJANjYG2EieQ)obI=_lPH^Y9{?kUG^?(hEmKJ$}5 zi^4z49Z&bK^Lr+0a$|1YP09J8{3rh%tayFIo_*!NwIIz6OsQHKe6Zb z{=0tLzv+L{9Y59IUea6t=ybjQ-}%iU|F8eGUnjR|-~ZG9/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}/create_table.hql" + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/create_table.hql new file mode 100644 index 0000000000..7cdc601567 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/create_table.hql @@ -0,0 +1,25 @@ +create database if not exists multi_catalog; +use multi_catalog; + + +CREATE TABLE IF NOT EXISTS `two_partition`( + `id` int) +PARTITIONED BY ( + `part1` int, + `part2` string) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' +WITH SERDEPROPERTIES ( + 'field.delim'='|', + 'serialization.format'='|') +STORED AS INPUTFORMAT + 'org.apache.hadoop.mapred.TextInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' +LOCATION + '/user/doris/suites/multi_catalog/two_partition'; + + + +msck repair table two_partition; + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/multi_catalog/two_partition/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..cf12e715f3e0aeee1e36d6cca2a194a711287b0c GIT binary patch literal 375 zcmb2|=3t1%L->BA-LUGQ#?y}apO@{O!vE_WVUE~YFFXIZ_xZ+%zQ?ckuj4vy&iMbIe&fa8 z@dC?!KKD!h@x7k&#ESpz4aXh+)*t1$w%_7zIm7?I_FTFv|FMO*zp?kRIV*|R83oARH/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/multi_catalog/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/multi_catalog/ + +# create table +hive -f "${CUR_DIR}/create_table.hql" + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/create_table.hql new file mode 100644 index 0000000000..e131a4dc78 --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/create_table.hql @@ -0,0 +1,33 @@ +create database if not exists statistics; +use statistics; + + +CREATE TABLE IF NOT EXISTS `statistics`( + `lo_orderkey` int, + `lo_linenumber` int, + `lo_custkey` int, + `lo_partkey` int, + `lo_suppkey` int, + `lo_orderdate` int, + `lo_orderpriority` string, + `lo_shippriority` int, + `lo_quantity` int, + `lo_extendedprice` int, + `lo_ordtotalprice` int, + `lo_discount` int, + `lo_revenue` int, + `lo_supplycost` int, + `lo_tax` int, + `lo_commitdate` int, + `lo_shipmode` string) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' +LOCATION + '/user/doris/suites/statistics/statistics'; + + +msck repair table statistics; diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/data.tar.gz b/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/data.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..bf2af70acb918a1634ad21bf00fc6dce1e55f42a GIT binary patch literal 3956 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 Q^#6=DJ5MPxXfQAU0Ft_}l>h($ literal 0 HcmV?d00001 diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh new file mode 100755 index 0000000000..1b9818427b --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/statistics/statistics/run.sh @@ -0,0 +1,13 @@ +#!/bin/bash +set -x + +CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +## mkdir and put data to hdfs +cd "${CUR_DIR}" && rm -rf data/ && tar xzf data.tar.gz +hadoop fs -mkdir -p /user/doris/suites/statistics/ +hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/statistics/ + +# create table +hive -f "${CUR_DIR}/create_table.hql" + diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/create_table.hql b/docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/create_table.hql new file mode 100644 index 0000000000..bf02000f3f --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/create_table.hql @@ -0,0 +1,24 @@ +create database if not exists tpch_1000_parquet; +use tpch_1000_parquet; + + +CREATE TABLE IF NOT EXISTS `part`( + `p_partkey` int, + `p_name` varchar(55), + `p_mfgr` char(25), + `p_brand` char(10), + `p_type` varchar(25), + `p_size` int, + `p_container` char(10), + `p_retailprice` decimal(15,2), + `p_comment` varchar(23)) +ROW FORMAT SERDE + 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +STORED AS INPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' +OUTPUTFORMAT + 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' +LOCATION + '/user/doris/suites/tpch_1000_parquet/part'; + +msck repair table part; \ No newline at end of file diff --git a/docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh b/docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh new file mode 100644 index 0000000000..8d77dd927b --- /dev/null +++ b/docker/thirdparties/docker-compose/hive/scripts/data/tpch_1000_parquet/part/run.sh @@ -0,0 +1,22 @@ +#!/bin/bash +set -x + +# CUR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &>/dev/null && pwd)" + +# if [[ ! -d "${CUR_DIR}/data" ]]; then +# echo "${CUR_DIR}/data does not exist" +# cd "${CUR_DIR}" && rm -f data.tar.gz \ +# && curl -O https://s3BucketName.s3Endpoint/regression/datalake/pipeline_data/tpch_1000_parquet/part/data.tar.gz \ +# && tar xzf data.tar.gz +# cd - +# else +# echo "${CUR_DIR}/data exist, continue !" +# fi + +# ## mkdir and put data to hdfs +# hadoop fs -mkdir -p /user/doris/suites/tpch_1000_parquet/ +# hadoop fs -put "${CUR_DIR}"/data/* /user/doris/suites/tpch_1000_parquet/ + +# # create table +# hive -f "${CUR_DIR}"/create_table.hql + diff --git a/regression-test/data/external_table_p2/hive/test_hive_default_partition.out b/regression-test/data/external_table_p0/hive/test_hive_default_partition.out similarity index 51% rename from regression-test/data/external_table_p2/hive/test_hive_default_partition.out rename to regression-test/data/external_table_p0/hive/test_hive_default_partition.out index cace5bba2b..24227b9af2 100644 --- a/regression-test/data/external_table_p2/hive/test_hive_default_partition.out +++ b/regression-test/data/external_table_p0/hive/test_hive_default_partition.out @@ -173,3 +173,177 @@ -- !string_part_prune5 -- 2 2023-08-16 2023-08-16 +-- !one_partition1 -- +1 1 +2 1 +3 2 +4 2 +5 \N +6 \N + +-- !one_partition2 -- +5 \N +6 \N + +-- !one_partition3 -- +1 +2 +3 +4 + +-- !one_partition4 -- +1 +1 +2 +2 + +-- !one_partition5 -- +4 2 +5 \N +6 \N + +-- !one_partition6 -- +3 2 +4 2 +5 \N +6 \N + +-- !two_partition1 -- +1 \N one +2 \N one +3 2 \N +4 2 \N +5 3 three +6 3 three +7 \N \N +8 \N \N + +-- !two_partition2 -- +1 \N one +2 \N one +7 \N \N +8 \N \N + +-- !two_partition3 -- +3 2 \N +4 2 \N +5 3 three +6 3 three + +-- !two_partition4 -- +3 2 \N +4 2 \N +7 \N \N +8 \N \N + +-- !two_partition5 -- +1 \N one +2 \N one +5 3 three +6 3 three + +-- !two_partition6 -- +5 3 three +6 3 three + +-- !two_partition7 -- +1 \N one +2 \N one + +-- !two_partition8 -- +3 2 \N +4 2 \N + +-- !two_partition9 -- +7 \N \N +8 \N \N + +-- !two_partition10 -- +1 \N one +2 \N one +3 2 \N +4 2 \N +5 3 three +6 3 three + +-- !two_partition11 -- +1 \N one +2 \N one +5 3 three +6 3 three +7 \N \N +8 \N \N + +-- !two_partition12 -- +3 2 \N +4 2 \N +5 3 three +6 3 three +7 \N \N +8 \N \N + +-- !two_partition13 -- +1 \N one +2 \N one +3 2 \N +4 2 \N +7 \N \N +8 \N \N + +-- !two_partition14 -- +1 \N one +2 \N one +3 2 \N +4 2 \N +5 3 three +6 3 three + +-- !two_partition15 -- +6 3 three +7 \N \N +8 \N \N + +-- !two_partition16 -- +3 2 \N +4 2 \N +5 3 three +6 3 three + +-- !two_partition17 -- +1 \N one +2 \N one + +-- !two_partition18 -- +5 3 three +6 3 three + +-- !string_part_prune1 -- +3 2023-08-17 2023-08-17 + +-- !string_part_prune2 -- + +-- !string_part_prune3 -- +3 2023-08-17 2023-08-17 + +-- !string_part_prune4 -- +1 2023-08-15 2023-08-15 +1 2023-8-15 2023-08-15 +2 2023-08-16 2023-08-16 +3 2023-08-17 2023-08-17 + +-- !string_part_prune5 -- +3 2023-08-17 2023-08-17 + +-- !string_part_prune5 -- +1 2023-08-15 2023-08-15 +2 2023-08-16 2023-08-16 + +-- !string_part_prune5 -- +2 2023-08-16 2023-08-16 + +-- !string_part_prune5 -- +2 2023-08-16 2023-08-16 + +-- !string_part_prune5 -- +2 2023-08-16 2023-08-16 + diff --git a/regression-test/data/external_table_p2/hive/test_hive_to_array.out b/regression-test/data/external_table_p0/hive/test_hive_to_array.out similarity index 50% rename from regression-test/data/external_table_p2/hive/test_hive_to_array.out rename to regression-test/data/external_table_p0/hive/test_hive_to_array.out index 0965e8d8be..5dab8a9276 100644 --- a/regression-test/data/external_table_p2/hive/test_hive_to_array.out +++ b/regression-test/data/external_table_p0/hive/test_hive_to_array.out @@ -20,3 +20,24 @@ [4, 5, 6, 7] [2100, 3100, 4100, 5100] [110000, 220000, 330000] [60000000000000, 60000000000000, 60000000000000] [1] [120.301, 450.602, 780.9001] [100.0000001, 200.0000002, 300.0000003] ["hive", "text", "file", "format"] ["2023-07-09 12:00:00.000000", "2023-07-09 12:00:00.000000", "2023-07-09 12:00:00.000000"] ["2021-07-09", "2021-07-09", "2021-07-09"] [3311111.111, 2211111.111, 3121111.111] 5 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] [40, 50, 60, 70] [210, 310, 410, 510] [110000, 210000, 310000] [400000000000000, 50000000000000, 60000000000000] [1] [120.301, 450.602, 780.9001] [100.0000001, 200.0000002, 300.0000003] ["hello", "world"] ["2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000"] ["2021-07-06", "2021-07-06", "2021-07-06"] [3311111.111, 2211111.111, 3121111.111] 4 [[[1]]] +-- !types -- +[1, 2, 3, 4] [10, 20, 30, 40] [100, 200, 300] [100000000000000, 20000000000000, 30000000000000, 40000000000000] [1, 0, 1] [1.23, 4.56, 7.89] [10.1, 20.2, 30.3] ["apple", "banana", "orange"] ["2023-07-04 12:00:00.000000", "2023-07-05 12:00:00.000000", "2023-07-06 12:00:00.000000"] ["2023-07-04", "2023-07-05", "2023-07-06"] [1111111.111, 2111111.111, 3111111.111] ["a", "b", "c"] ["aa", "bb", "cc"] +[10, 20, 30] [100, 200, 300, 400] [1000, 2000, 3000] [1000000000000000, 200000000000000, 300000000000000, 400000000000000] [1, 1, 1, 1] [12.3, 45.6, 78.9] [100.1, 200.2, 300.3] ["grapes", "watermelon", "kiwi"] ["2023-07-03 12:00:00.000000", "2023-07-03 12:00:00.000000", "2023-07-03 12:00:00.000000"] ["2021-07-05", "2021-07-05", "2021-07-05"] [2222222.111, 2222222.112, 2222222.113] \N \N +[20, 30, 40, 50] [200, 300, 400, 500] [10000, 20000, 30000] [100000000000000, 20000000000000, 30000000000000] [1, 1, 1, 1, 0, 0] [120.3, 450.6, 780.9] [100.001, 200.002, 300.003] ["melon", "strawberry", "blueberry"] ["2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000"] ["2021-07-06", "2021-07-06", "2021-07-06"] [1111111.111, 2111111.111, 3111111.111] \N \N +[4, 5, 6, 7] [2100, 3100, 4100, 5100] [110000, 220000, 330000] [60000000000000, 60000000000000, 60000000000000] [1] [120.301, 450.602, 780.9001] [100.0000001, 200.0000002, 300.0000003] ["hive", "text", "file", "format"] ["2023-07-09 12:00:00.000000", "2023-07-09 12:00:00.000000", "2023-07-09 12:00:00.000000"] ["2021-07-09", "2021-07-09", "2021-07-09"] [3311111.111, 2211111.111, 3121111.111] ["d", "d", "d", "d"] ["ffffffff"] +[40, 50, 60, 70] [210, 310, 410, 510] [110000, 210000, 310000] [400000000000000, 50000000000000, 60000000000000] [1] [120.301, 450.602, 780.9001] [100.0000001, 200.0000002, 300.0000003] ["hello", "world"] ["2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000"] ["2021-07-06", "2021-07-06", "2021-07-06"] [3311111.111, 2211111.111, 3121111.111] ["1"] ["hello", "world"] + +-- !array -- +1 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] +2 [[[19, 20, 21], [22, 23, 24], [25, 26, 27]], [[28], [31], [34]], [[28, 29], [31, 32], [34, 35]]] +3 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]]] +4 [[[1]]] +5 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] + +-- !delimiter -- +[1, 2, 3, 4] [10, 20, 30, 40] [100, 200, 300] [100000000000000, 20000000000000, 30000000000000, 40000000000000] [1, 0, 1] [1.23, 4.56, 7.89] [10.1, 20.2, 30.3] ["apple", "banana", "orange"] ["2023-07-04 12:00:00.000000", "2023-07-05 12:00:00.000000", "2023-07-06 12:00:00.000000"] ["2023-07-04", "2023-07-05", "2023-07-06"] [1111111.111, 2111111.111, 3111111.111] 1 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] +[10, 20, 30] [100, 200, 300, 400] [1000, 2000, 3000] [1000000000000000, 200000000000000, 300000000000000, 400000000000000] [1, 1, 1, 1] [12.3, 45.6, 78.9] [100.1, 200.2, 300.3] ["grapes", "watermelon", "kiwi"] ["2023-07-03 12:00:00.000000", "2023-07-03 12:00:00.000000", "2023-07-03 12:00:00.000000"] ["2021-07-05", "2021-07-05", "2021-07-05"] [2222222.111, 2222222.112, 2222222.113] 2 [[[19, 20, 21], [22, 23, 24], [25, 26, 27]], [[28], [31], [34]], [[28, 29], [31, 32], [34, 35]]] +[20, 30, 40, 50] [200, 300, 400, 500] [10000, 20000, 30000] [100000000000000, 20000000000000, 30000000000000] [1, 1, 1, 1, 0, 0] [120.3, 450.6, 780.9] [100.001, 200.002, 300.003] ["melon", "strawberry", "blueberry"] ["2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000"] ["2021-07-06", "2021-07-06", "2021-07-06"] [1111111.111, 2111111.111, 3111111.111] 3 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]]] +[4, 5, 6, 7] [2100, 3100, 4100, 5100] [110000, 220000, 330000] [60000000000000, 60000000000000, 60000000000000] [1] [120.301, 450.602, 780.9001] [100.0000001, 200.0000002, 300.0000003] ["hive", "text", "file", "format"] ["2023-07-09 12:00:00.000000", "2023-07-09 12:00:00.000000", "2023-07-09 12:00:00.000000"] ["2021-07-09", "2021-07-09", "2021-07-09"] [3311111.111, 2211111.111, 3121111.111] 5 [[[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]], [[1, 2, 3], [4, 5, 6], [7, 8, 9]], [[10, 11, 12], [13, 14, 15], [16, 17, 18]]] +[40, 50, 60, 70] [210, 310, 410, 510] [110000, 210000, 310000] [400000000000000, 50000000000000, 60000000000000] [1] [120.301, 450.602, 780.9001] [100.0000001, 200.0000002, 300.0000003] ["hello", "world"] ["2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000", "2023-07-02 12:00:00.000000"] ["2021-07-06", "2021-07-06", "2021-07-06"] [3311111.111, 2211111.111, 3121111.111] 4 [[[1]]] + diff --git a/regression-test/data/external_table_p2/hive/test_text_garbled_file.out b/regression-test/data/external_table_p0/hive/test_text_garbled_file.out similarity index 50% rename from regression-test/data/external_table_p2/hive/test_text_garbled_file.out rename to regression-test/data/external_table_p0/hive/test_text_garbled_file.out index b003cd49e97d245b8156b39680815aec11edf00b..0c44dc7de0a4770206dd0778d4ee8c7bd756f614 100644 GIT binary patch delta 33 ocmey@Cp34iN<#}{3sVd87M8m9#`xBF#@2YI)_CTv@htM~0N^hS8~^|S delta 17 YcmbO`SLI)yP(ur23sVd87M8kp07AhA%m4rY diff --git a/regression-test/suites/external_table_p2/hive/test_hive_default_partition.groovy b/regression-test/suites/external_table_p0/hive/test_hive_default_partition.groovy similarity index 95% rename from regression-test/suites/external_table_p2/hive/test_hive_default_partition.groovy rename to regression-test/suites/external_table_p0/hive/test_hive_default_partition.groovy index 6e7215e31d..9fdd77b971 100644 --- a/regression-test/suites/external_table_p2/hive/test_hive_default_partition.groovy +++ b/regression-test/suites/external_table_p0/hive/test_hive_default_partition.groovy @@ -15,7 +15,7 @@ // specific language governing permissions and limitations // under the License. -suite("test_hive_default_partition", "p2,external,hive,external_remote,external_remote_hive") { +suite("test_hive_default_partition", "p0,external,hive,external_docker,external_docker_hive") { def one_partition1 = """select * from one_partition order by id;""" def one_partition2 = """select id, part1 from one_partition where part1 is null order by id;""" def one_partition3 = """select id from one_partition where part1 is not null order by id;""" @@ -52,11 +52,16 @@ suite("test_hive_default_partition", "p2,external,hive,external_remote,external_ def string_part_prune8 = """select * from test_date_string_partition where cast(day1 as date) in ("2023-08-16", "2023-08-18");""" def string_part_prune9 = """select * from test_date_string_partition where cast(day1 as date) in (cast("2023-08-16" as date), "2023-08-18");""" - String enabled = context.config.otherConfigs.get("enableExternalHiveTest") - if (enabled != null && enabled.equalsIgnoreCase("true")) { - String extHiveHmsHost = context.config.otherConfigs.get("extHiveHmsHost") - String extHiveHmsPort = context.config.otherConfigs.get("extHiveHmsPort") - String catalog_name = "hive_default_partition" + String enabled = context.config.otherConfigs.get("enableHiveTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable hive test.") + return; + } + + for (String hivePrefix : ["hive2", "hive3"]) { + String extHiveHmsHost = context.config.otherConfigs.get("externalEnvIp") + String extHiveHmsPort = context.config.otherConfigs.get(hivePrefix + "HmsPort") + String catalog_name = hivePrefix + "_hive_default_partition" sql """drop catalog if exists ${catalog_name};""" sql """ create catalog if not exists ${catalog_name} properties ( diff --git a/regression-test/suites/external_table_p0/hive/test_hive_statistic.groovy b/regression-test/suites/external_table_p0/hive/test_hive_statistic.groovy new file mode 100644 index 0000000000..5da056ff00 --- /dev/null +++ b/regression-test/suites/external_table_p0/hive/test_hive_statistic.groovy @@ -0,0 +1,344 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_hive_statistic", "p0,external,hive,external_docker,external_docker_hive") { + String enabled = context.config.otherConfigs.get("enableHiveTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable Hive test.") + return + } + + for (String hivePrefix : ["hive2", "hive3"]) { + String extHiveHmsHost = context.config.otherConfigs.get("externalEnvIp") + String extHiveHmsPort = context.config.otherConfigs.get(hivePrefix + "HmsPort") + String catalog_name = hivePrefix + "_test_hive_statistic" + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + 'type'='hms', + 'hadoop.username' = 'hadoop', + 'hive.metastore.uris' = 'thrift://${extHiveHmsHost}:${extHiveHmsPort}' + ); + """ + logger.info("catalog " + catalog_name + " created") + sql """switch ${catalog_name};""" + + // TODO will be supported in future + // Test analyze table without init. + // sql """analyze table ${catalog_name}.tpch_1000_parquet.region with sync""" + + // logger.info("switched to catalog " + catalog_name) + // sql """use statistics;""" + // sql """analyze table `statistics` with sync""" + // def result = sql """show column stats `statistics` (lo_quantity)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_quantity") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "46.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "1") + // assertEquals(result[0][8], "50") + + // result = sql """show column stats `statistics` (lo_orderkey)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_orderkey") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "26.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "1") + // assertEquals(result[0][8], "98") + + // result = sql """show column stats `statistics` (lo_linenumber)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_linenumber") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "7.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "1") + // assertEquals(result[0][8], "7") + + // result = sql """show column stats `statistics` (lo_custkey)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_custkey") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "26.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "67423") + // assertEquals(result[0][8], "2735521") + + // result = sql """show column stats `statistics` (lo_partkey)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_partkey") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "100.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "2250") + // assertEquals(result[0][8], "989601") + + // result = sql """show column stats `statistics` (lo_suppkey)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_suppkey") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "100.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "4167") + // assertEquals(result[0][8], "195845") + + // result = sql """show column stats `statistics` (lo_orderdate)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_orderdate") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "26.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "19920221") + // assertEquals(result[0][8], "19980721") + + // result = sql """show column stats `statistics` (lo_orderpriority)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_orderpriority") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "5.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "880.0") + // assertEquals(result[0][6], "8.8") + // assertEquals(result[0][7], "'1-URGENT'") + // assertEquals(result[0][8], "'5-LOW'") + + // result = sql """show column stats `statistics` (lo_shippriority)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_shippriority") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "1.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "0") + // assertEquals(result[0][8], "0") + + // result = sql """show column stats `statistics` (lo_extendedprice)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_extendedprice") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "100.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "104300") + // assertEquals(result[0][8], "9066094") + + // result = sql """show column stats `statistics` (lo_ordtotalprice)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_ordtotalprice") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "26.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "3428256") + // assertEquals(result[0][8], "36771805") + + // result = sql """show column stats `statistics` (lo_discount)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_discount") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "11.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "0") + // assertEquals(result[0][8], "10") + + // result = sql """show column stats `statistics` (lo_revenue)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_revenue") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "100.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "101171") + // assertEquals(result[0][8], "8703450") + + // result = sql """show column stats `statistics` (lo_supplycost)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_supplycost") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "100.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "58023") + // assertEquals(result[0][8], "121374") + + // result = sql """show column stats `statistics` (lo_tax)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_tax") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "9.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "0") + // assertEquals(result[0][8], "8") + + // result = sql """show column stats `statistics` (lo_commitdate)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_commitdate") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "95.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "400.0") + // assertEquals(result[0][6], "4.0") + // assertEquals(result[0][7], "19920515") + // assertEquals(result[0][8], "19981016") + + // result = sql """show column stats `statistics` (lo_shipmode)""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_shipmode") + // assertEquals(result[0][2], "100.0") + // assertEquals(result[0][3], "7.0") + // assertEquals(result[0][4], "0.0") + // assertEquals(result[0][5], "421.0") + // assertEquals(result[0][6], "4.21") + // assertEquals(result[0][7], "'AIR'") + // assertEquals(result[0][8], "'TRUCK'") + + // sql """ALTER TABLE statistics MODIFY COLUMN lo_shipmode SET STATS ('row_count'='6001215')""" + // result = sql "show column stats `statistics` (lo_shipmode)" + // assertEquals(result.size(), 1) + // assertEquals(result[0][0], "lo_shipmode") + // assertEquals(result[0][2], "6001215.0") + + // sql """drop stats statistics""" + // result = sql """show column stats statistics""" + // assertEquals(result.size(), 0) + + // sql """analyze database `statistics` with sync""" + // result = sql """show table stats statistics""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][2], "100") + + // result = sql """show table cached stats statistics""" + // assertEquals(result.size(), 1) + // assertEquals(result[0][2], "100") + + // sql """drop stats statistics""" + // result = sql """show column cached stats statistics""" + // assertEquals(result.size(), 0) + + sql """use multi_catalog""" + sql """analyze table logs1_parquet (log_time) with sync""" + def ctlId + def dbId + def tblId + result = sql """show catalogs""" + + for (int i = 0; i < result.size(); i++) { + if (result[i][1] == catalog_name) { + ctlId = result[i][0] + } + } + result = sql """show proc '/catalogs/$ctlId'""" + for (int i = 0; i < result.size(); i++) { + if (result[i][1] == 'multi_catalog') { + dbId = result[i][0] + } + } + result = sql """show proc '/catalogs/$ctlId/$dbId'""" + for (int i = 0; i < result.size(); i++) { + if (result[i][1] == 'logs1_parquet') { + tblId = result[i][0] + } + } + + result = sql """select * from internal.__internal_schema.column_statistics where id = '${tblId}--1-log_time'""" + assertEquals(result.size(), 1) + def id = result[0][0] + def catalog_id = result[0][1] + def db_id = result[0][2] + def tbl_id = result[0][3] + def idx_id = result[0][4] + def col_id = result[0][5] + def count = result[0][7] + def ndv = result[0][8] + def null_count = result[0][9] + def data_size_in_bytes = result[0][12] + def update_time = result[0][13] + + sql """insert into internal.__internal_schema.column_statistics values ('$id', '$catalog_id', '$db_id', '$tbl_id', '$idx_id', '$col_id', NULL, $count, $ndv, $null_count, '', '', '$data_size_in_bytes', '$update_time')""" + + result = sql """show column stats logs1_parquet (log_time)""" + assertEquals(result.size(), 1) + assertEquals(result[0][7], "N/A") + assertEquals(result[0][8], "N/A") + + sql """use tpch1_parquet;""" + sql """drop stats region""" + sql """alter table region modify column r_comment set stats ('row_count'='5.0', 'ndv'='5.0', 'num_nulls'='0.0', 'data_size'='330.0', 'min_value'='ges. thinly even pinto beans ca', 'max_value'='uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl');""" + sql """alter table region modify column r_name set stats ('row_count'='5.0', 'ndv'='5.0', 'num_nulls'='0.0', 'data_size'='34.0', 'min_value'='AFRICA', 'max_value'='MIDDLE EAST');""" + sql """alter table region modify column r_regionkey set stats ('row_count'='5.0', 'ndv'='5.0', 'num_nulls'='0.0', 'data_size'='20.0', 'min_value'='0', 'max_value'='4');""" + result = sql """show column stats region(r_regionkey)""" + assertEquals(result.size(), 1) + assertEquals(result[0][0], "r_regionkey") + assertEquals(result[0][2], "5.0") + assertEquals(result[0][3], "5.0") + assertEquals(result[0][4], "0.0") + assertEquals(result[0][5], "20.0") + assertEquals(result[0][6], "4.0") + assertEquals(result[0][7], "0") + assertEquals(result[0][8], "4") + + result = sql """show column stats region(r_comment)""" + assertEquals(result.size(), 1) + assertEquals(result[0][0], "r_comment") + assertEquals(result[0][2], "5.0") + assertEquals(result[0][3], "5.0") + assertEquals(result[0][4], "0.0") + assertEquals(result[0][5], "330.0") + assertEquals(result[0][6], "66.0") + assertEquals(result[0][7], "\'ges. thinly even pinto beans ca\'") + assertEquals(result[0][8], "\'uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl\'") + + result = sql """show column stats region(r_name)""" + assertEquals(result.size(), 1) + assertEquals(result[0][0], "r_name") + assertEquals(result[0][2], "5.0") + assertEquals(result[0][3], "5.0") + assertEquals(result[0][4], "0.0") + assertEquals(result[0][5], "34.0") + assertEquals(result[0][6], "6.8") + assertEquals(result[0][7], "\'AFRICA\'") + assertEquals(result[0][8], "\'MIDDLE EAST\'") + + sql """drop catalog ${catalog_name}""" + } +} + diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy b/regression-test/suites/external_table_p0/hive/test_hive_statistic_timeout.groovy similarity index 76% rename from regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy rename to regression-test/suites/external_table_p0/hive/test_hive_statistic_timeout.groovy index a52a230478..d1ae297f3d 100644 --- a/regression-test/suites/external_table_p2/hive/test_hive_statistic_timeout.groovy +++ b/regression-test/suites/external_table_p0/hive/test_hive_statistic_timeout.groovy @@ -15,12 +15,21 @@ // specific language governing permissions and limitations // under the License. -suite("test_hive_statistic_timeout", "p2,external,hive,external_remote,external_remote_hive, nonConcurrent") { - String enabled = context.config.otherConfigs.get("enableExternalHiveTest") - if (enabled != null && enabled.equalsIgnoreCase("true")) { - String extHiveHmsHost = context.config.otherConfigs.get("extHiveHmsHost") - String extHiveHmsPort = context.config.otherConfigs.get("extHiveHmsPort") - String catalog_name = "test_hive_statistic_timeout" +suite("test_hive_statistic_timeout", "p0,external,hive,external_docker,external_docker_hive") { + String enabled = context.config.otherConfigs.get("enableHiveTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable Hive test.") + return + } + + for (String hivePrefix : ["hive2", "hive3"]) { + String extHiveHmsHost = context.config.otherConfigs.get("externalEnvIp") + String extHiveHmsPort = context.config.otherConfigs.get(hivePrefix + "HmsPort") + String catalog_name = hivePrefix + "_test_hive_statistic_timeout" + + // TODO tpch will be supported in future + return + sql """drop catalog if exists ${catalog_name};""" sql """ create catalog if not exists ${catalog_name} properties ( @@ -33,6 +42,7 @@ suite("test_hive_statistic_timeout", "p2,external,hive,external_remote,external_ sql """use ${catalog_name}.tpch_1000_parquet""" sql """set global analyze_timeout=1""" + try { test { sql """analyze table part (p_partkey, p_container, p_type, p_retailprice) with sync with full;""" @@ -41,6 +51,7 @@ suite("test_hive_statistic_timeout", "p2,external,hive,external_remote,external_ } finally { sql """set global analyze_timeout=43200""" } + sql """drop catalog ${catalog_name}"""; } } diff --git a/regression-test/suites/external_table_p2/hive/test_hive_to_array.groovy b/regression-test/suites/external_table_p0/hive/test_hive_to_array.groovy similarity index 79% rename from regression-test/suites/external_table_p2/hive/test_hive_to_array.groovy rename to regression-test/suites/external_table_p0/hive/test_hive_to_array.groovy index b03a83a158..058afc5143 100644 --- a/regression-test/suites/external_table_p2/hive/test_hive_to_array.groovy +++ b/regression-test/suites/external_table_p0/hive/test_hive_to_array.groovy @@ -15,12 +15,17 @@ // specific language governing permissions and limitations // under the License. -suite("test_hive_to_array", "p2,external,hive,external_remote,external_remote_hive") { - String enabled = context.config.otherConfigs.get("enableExternalHiveTest") - if (enabled != null && enabled.equalsIgnoreCase("true")) { - String extHiveHmsHost = context.config.otherConfigs.get("extHiveHmsHost") - String extHiveHmsPort = context.config.otherConfigs.get("extHiveHmsPort") - String catalog_name = "test_hive_to_array" +suite("test_hive_to_array", "p0,external,hive,external_docker,external_docker_hive") { + String enabled = context.config.otherConfigs.get("enableHiveTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable Hive test.") + return + } + + for (String hivePrefix : ["hive2", "hive3"]) { + String extHiveHmsHost = context.config.otherConfigs.get("externalEnvIp") + String extHiveHmsPort = context.config.otherConfigs.get(hivePrefix + "HmsPort") + String catalog_name = hivePrefix + "_test_hive_to_array" sql """drop catalog if exists ${catalog_name};""" sql """ create catalog if not exists ${catalog_name} properties ( diff --git a/regression-test/suites/external_table_p0/hive/test_text_garbled_file.groovy b/regression-test/suites/external_table_p0/hive/test_text_garbled_file.groovy new file mode 100644 index 0000000000..27e171bab8 --- /dev/null +++ b/regression-test/suites/external_table_p0/hive/test_text_garbled_file.groovy @@ -0,0 +1,47 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_text_garbled_file", "p0,external,hive,external_docker,external_docker_hive") { + //test hive garbled files , prevent be hanged + + String enabled = context.config.otherConfigs.get("enableHiveTest") + if (enabled != null && enabled.equalsIgnoreCase("true")) { + + for (String hivePrefix : ["hive2", "hive3"]) { + String extHiveHmsHost = context.config.otherConfigs.get("externalEnvIp") + String extHiveHmsPort = context.config.otherConfigs.get(hivePrefix + "HmsPort") + String catalog_name = hivePrefix + "_test_text_garbled_file" + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + 'type'='hms', + 'hadoop.username' = 'hadoop', + 'hive.metastore.uris' = 'thrift://${extHiveHmsHost}:${extHiveHmsPort}' + ); + """ + logger.info("catalog " + catalog_name + " created") + sql """switch ${catalog_name};""" + logger.info("switched to catalog " + catalog_name) + + + order_qt_garbled_file """ + select * from ${catalog_name}.multi_catalog.test_csv_format_error; + """ + } + } +} + diff --git a/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy b/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy deleted file mode 100644 index 4fcd70fe73..0000000000 --- a/regression-test/suites/external_table_p2/hive/test_hive_statistic.groovy +++ /dev/null @@ -1,338 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -suite("test_hive_statistic", "p2,external,hive,external_remote,external_remote_hive") { - String enabled = context.config.otherConfigs.get("enableExternalHiveTest") - if (enabled != null && enabled.equalsIgnoreCase("true")) { - String extHiveHmsHost = context.config.otherConfigs.get("extHiveHmsHost") - String extHiveHmsPort = context.config.otherConfigs.get("extHiveHmsPort") - String catalog_name = "test_hive_statistic" - sql """drop catalog if exists ${catalog_name};""" - sql """ - create catalog if not exists ${catalog_name} properties ( - 'type'='hms', - 'hadoop.username' = 'hadoop', - 'hive.metastore.uris' = 'thrift://${extHiveHmsHost}:${extHiveHmsPort}' - ); - """ - logger.info("catalog " + catalog_name + " created") - - // Test analyze table without init. - sql """analyze table ${catalog_name}.tpch_1000_parquet.region with sync""" - - sql """switch ${catalog_name};""" - logger.info("switched to catalog " + catalog_name) - sql """use statistics;""" - sql """analyze table `statistics` with sync""" - def result = sql """show column stats `statistics` (lo_quantity)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_quantity") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "46.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "1") - assertEquals(result[0][8], "50") - - result = sql """show column stats `statistics` (lo_orderkey)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_orderkey") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "26.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "1") - assertEquals(result[0][8], "98") - - result = sql """show column stats `statistics` (lo_linenumber)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_linenumber") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "7.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "1") - assertEquals(result[0][8], "7") - - result = sql """show column stats `statistics` (lo_custkey)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_custkey") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "26.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "67423") - assertEquals(result[0][8], "2735521") - - result = sql """show column stats `statistics` (lo_partkey)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_partkey") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "100.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "2250") - assertEquals(result[0][8], "989601") - - result = sql """show column stats `statistics` (lo_suppkey)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_suppkey") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "100.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "4167") - assertEquals(result[0][8], "195845") - - result = sql """show column stats `statistics` (lo_orderdate)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_orderdate") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "26.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "19920221") - assertEquals(result[0][8], "19980721") - - result = sql """show column stats `statistics` (lo_orderpriority)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_orderpriority") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "5.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "880.0") - assertEquals(result[0][6], "8.8") - assertEquals(result[0][7], "'1-URGENT'") - assertEquals(result[0][8], "'5-LOW'") - - result = sql """show column stats `statistics` (lo_shippriority)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_shippriority") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "1.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "0") - assertEquals(result[0][8], "0") - - result = sql """show column stats `statistics` (lo_extendedprice)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_extendedprice") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "100.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "104300") - assertEquals(result[0][8], "9066094") - - result = sql """show column stats `statistics` (lo_ordtotalprice)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_ordtotalprice") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "26.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "3428256") - assertEquals(result[0][8], "36771805") - - result = sql """show column stats `statistics` (lo_discount)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_discount") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "11.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "0") - assertEquals(result[0][8], "10") - - result = sql """show column stats `statistics` (lo_revenue)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_revenue") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "100.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "101171") - assertEquals(result[0][8], "8703450") - - result = sql """show column stats `statistics` (lo_supplycost)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_supplycost") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "100.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "58023") - assertEquals(result[0][8], "121374") - - result = sql """show column stats `statistics` (lo_tax)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_tax") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "9.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "0") - assertEquals(result[0][8], "8") - - result = sql """show column stats `statistics` (lo_commitdate)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_commitdate") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "95.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "400.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "19920515") - assertEquals(result[0][8], "19981016") - - result = sql """show column stats `statistics` (lo_shipmode)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_shipmode") - assertEquals(result[0][2], "100.0") - assertEquals(result[0][3], "7.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "421.0") - assertEquals(result[0][6], "4.21") - assertEquals(result[0][7], "'AIR'") - assertEquals(result[0][8], "'TRUCK'") - - sql """ALTER TABLE statistics MODIFY COLUMN lo_shipmode SET STATS ('row_count'='6001215')""" - result = sql "show column stats `statistics` (lo_shipmode)" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "lo_shipmode") - assertEquals(result[0][2], "6001215.0") - - sql """drop stats statistics""" - result = sql """show column stats statistics""" - assertEquals(result.size(), 0) - - sql """analyze database `statistics` with sync""" - result = sql """show table stats statistics""" - assertEquals(result.size(), 1) - assertEquals(result[0][2], "100") - - result = sql """show table cached stats statistics""" - assertEquals(result.size(), 1) - assertEquals(result[0][2], "100") - - sql """drop stats statistics""" - result = sql """show column cached stats statistics""" - assertEquals(result.size(), 0) - - sql """use multi_catalog""" - sql """analyze table logs1_parquet (log_time) with sync""" - def ctlId - def dbId - def tblId - result = sql """show catalogs""" - - for (int i = 0; i < result.size(); i++) { - if (result[i][1] == catalog_name) { - ctlId = result[i][0] - } - } - result = sql """show proc '/catalogs/$ctlId'""" - for (int i = 0; i < result.size(); i++) { - if (result[i][1] == 'multi_catalog') { - dbId = result[i][0] - } - } - result = sql """show proc '/catalogs/$ctlId/$dbId'""" - for (int i = 0; i < result.size(); i++) { - if (result[i][1] == 'logs1_parquet') { - tblId = result[i][0] - } - } - - result = sql """select * from internal.__internal_schema.column_statistics where id = '${tblId}--1-log_time'""" - assertEquals(result.size(), 1) - def id = result[0][0] - def catalog_id = result[0][1] - def db_id = result[0][2] - def tbl_id = result[0][3] - def idx_id = result[0][4] - def col_id = result[0][5] - def count = result[0][7] - def ndv = result[0][8] - def null_count = result[0][9] - def data_size_in_bytes = result[0][12] - def update_time = result[0][13] - - sql """insert into internal.__internal_schema.column_statistics values ('$id', '$catalog_id', '$db_id', '$tbl_id', '$idx_id', '$col_id', NULL, $count, $ndv, $null_count, '', '', '$data_size_in_bytes', '$update_time')""" - - result = sql """show column stats logs1_parquet (log_time)""" - assertEquals(result.size(), 1) - assertEquals(result[0][7], "N/A") - assertEquals(result[0][8], "N/A") - - sql """use tpch1_parquet;""" - sql """drop stats region""" - sql """alter table region modify column r_comment set stats ('row_count'='5.0', 'ndv'='5.0', 'num_nulls'='0.0', 'data_size'='330.0', 'min_value'='ges. thinly even pinto beans ca', 'max_value'='uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl');""" - sql """alter table region modify column r_name set stats ('row_count'='5.0', 'ndv'='5.0', 'num_nulls'='0.0', 'data_size'='34.0', 'min_value'='AFRICA', 'max_value'='MIDDLE EAST');""" - sql """alter table region modify column r_regionkey set stats ('row_count'='5.0', 'ndv'='5.0', 'num_nulls'='0.0', 'data_size'='20.0', 'min_value'='0', 'max_value'='4');""" - result = sql """show column stats region(r_regionkey)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "r_regionkey") - assertEquals(result[0][2], "5.0") - assertEquals(result[0][3], "5.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "20.0") - assertEquals(result[0][6], "4.0") - assertEquals(result[0][7], "0") - assertEquals(result[0][8], "4") - - result = sql """show column stats region(r_comment)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "r_comment") - assertEquals(result[0][2], "5.0") - assertEquals(result[0][3], "5.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "330.0") - assertEquals(result[0][6], "66.0") - assertEquals(result[0][7], "\'ges. thinly even pinto beans ca\'") - assertEquals(result[0][8], "\'uickly special accounts cajole carefully blithely close requests. carefully final asymptotes haggle furiousl\'") - - result = sql """show column stats region(r_name)""" - assertEquals(result.size(), 1) - assertEquals(result[0][0], "r_name") - assertEquals(result[0][2], "5.0") - assertEquals(result[0][3], "5.0") - assertEquals(result[0][4], "0.0") - assertEquals(result[0][5], "34.0") - assertEquals(result[0][6], "6.8") - assertEquals(result[0][7], "\'AFRICA\'") - assertEquals(result[0][8], "\'MIDDLE EAST\'") - - sql """drop catalog ${catalog_name}""" - } -} - diff --git a/regression-test/suites/external_table_p2/hive/test_text_garbled_file.groovy b/regression-test/suites/external_table_p2/hive/test_text_garbled_file.groovy deleted file mode 100644 index a3ea6a3bcc..0000000000 --- a/regression-test/suites/external_table_p2/hive/test_text_garbled_file.groovy +++ /dev/null @@ -1,46 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -suite("test_text_garbled_file", "p2,external,hive,external_remote,external_remote_hive") { - //test hive garbled files , prevent be hanged - - String enabled = context.config.otherConfigs.get("enableExternalHiveTest") - if (enabled != null && enabled.equalsIgnoreCase("true")) { - String extHiveHmsHost = context.config.otherConfigs.get("extHiveHmsHost") - String extHiveHmsPort = context.config.otherConfigs.get("extHiveHmsPort") - String catalog_name = "test_text_garbled_file" - sql """drop catalog if exists ${catalog_name};""" - sql """ - create catalog if not exists ${catalog_name} properties ( - 'type'='hms', - 'hadoop.username' = 'hadoop', - 'hive.metastore.uris' = 'thrift://${extHiveHmsHost}:${extHiveHmsPort}' - ); - """ - logger.info("catalog " + catalog_name + " created") - sql """switch ${catalog_name};""" - logger.info("switched to catalog " + catalog_name) - - - order_qt_garbled_file """ - select * from ${catalog_name}.multi_catalog.test_csv_format_error; - """ - - - } -} -