From 6d27a016b9e4145133fe90531b13eea96819ef0d Mon Sep 17 00:00:00 2001 From: zzzzzzzs <1443539042@qq.com> Date: Wed, 27 Sep 2023 09:55:52 +0800 Subject: [PATCH] [Improvement](regression-test) add http_stream case (#24930) --- .../HttpStreamTableValuedFunction.java | 8 +- .../test_http_stream_properties.out | 23 ++ .../stream_load/basic_array_data.csv.bz2 | Bin 6094 -> 6096 bytes .../stream_load/basic_array_data.csv.gz | Bin 4624 -> 4615 bytes .../test_http_stream_properties.groovy | 387 ++++++++++++++++++ 5 files changed, 414 insertions(+), 4 deletions(-) create mode 100644 regression-test/data/load_p0/http_stream/test_http_stream_properties.out create mode 100644 regression-test/suites/load_p0/http_stream/test_http_stream_properties.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HttpStreamTableValuedFunction.java b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HttpStreamTableValuedFunction.java index bb32c82653..265045d7a6 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HttpStreamTableValuedFunction.java +++ b/fe/fe-core/src/main/java/org/apache/doris/tablefunction/HttpStreamTableValuedFunction.java @@ -22,10 +22,10 @@ import org.apache.doris.analysis.StorageBackend.StorageType; import org.apache.doris.common.AnalysisException; import org.apache.doris.thrift.TFileType; +import org.apache.commons.collections.map.CaseInsensitiveMap; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import java.util.HashMap; import java.util.Map; /** @@ -37,16 +37,16 @@ public class HttpStreamTableValuedFunction extends ExternalFileTableValuedFuncti public static final String NAME = "http_stream"; public HttpStreamTableValuedFunction(Map params) throws AnalysisException { - Map fileParams = new HashMap<>(); + Map fileParams = new CaseInsensitiveMap(); for (String key : params.keySet()) { String lowerKey = key.toLowerCase(); if (!FILE_FORMAT_PROPERTIES.contains(lowerKey)) { throw new AnalysisException(key + " is invalid property"); } - fileParams.put(lowerKey, params.get(key)); + fileParams.put(lowerKey, params.get(key).toLowerCase()); } - String formatString = fileParams.getOrDefault(FORMAT, ""); + String formatString = fileParams.getOrDefault(FORMAT, "").toLowerCase(); if (formatString.equals("parquet") || formatString.equals("avro") || formatString.equals("orc")) { diff --git a/regression-test/data/load_p0/http_stream/test_http_stream_properties.out b/regression-test/data/load_p0/http_stream/test_http_stream_properties.out new file mode 100644 index 0000000000..93bde743d0 --- /dev/null +++ b/regression-test/data/load_p0/http_stream/test_http_stream_properties.out @@ -0,0 +1,23 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql_squence -- +8 2023-08-14 true 109 -31573 -1362465190 3990845741226497177 2732763251146840270 -25698.553 1.312831962567818E9 99999999.9 99999999.9 2023-03-07T14:13:19 2022-10-18 2023-07-16T05:03:13 D PBn1wa6X8WneZYLMac11zzyhGl7tPXB5XgjmOV8L6uav9ja5oY433ktb2yhyQQIqBveZPkme {"animal":"lion","weight":200,"habitat":["savannah","grassland"]} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +20 2023-08-17 false -5 18158 784479801 1485484354598941738 -6632681928222776815 9708.431 -3.30432620706069E8 -99999999.9 99999999.9 2022-09-15T21:40:55 2023-02-23 2023-08-13T21:31:54 O X 2pYmX2vAhfEEHZZYPsgAmda1G7otnwx5TmUC879FPhDeIjvWI79ksBZpfFG2gp7jhCSbpZiecKGklB5SvG8tm31i5SUqe1xrWgLt4HSq7lMJWp75tx2kxD7pRIOpn {"name":"Sarah","age":30,"city":"London","isMarried":false} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +21 2023-08-18 false 63 -27847 -35409596 8638201997392767650 4919963231735304178 -23382.541 -1.803403621426313E9 -22009767.0 99999999.9 2023-03-31T10:56:14 2023-01-20 2023-02-18T13:37:52 N T PSiFwUEx3eVFNtjlnQ70YkgZNvKrGmQ2DN5K9yYHiSdFWeEDB1UpL3Frt8z1kEAIWRDWqXZuyi {"city":"Sydney","population":5312000,"area":2058.7} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +31 2023-08-27 false 17 -18849 1728109133 3266501886640700374 527195452623418935 -24062.328 -1.514348021262435E9 -99999999.9 -99999999.9 2022-10-07T03:24:23 2022-09-25 \N 0 8 yKMiAntORoRa8svnMfcxlOPwwND1m5s2fdS26Xu6cfs6HK5SAibqIp9h8sZcpjHy4 {"team":"Manchester United","players":["Ronaldo","Rooney","Giggs"],"coach":"Ole Gunnar Solskjaer"} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +41 2023-08-27 true -104 22750 \N 8527773271030840740 5554497317268279215 -5296.828 -1.71564688801304E9 -99999999.9 99999999.9 2022-12-02T17:56:44 2022-10-12 2023-02-19T07:02:54 V \N E9GzQdTwX1ITUQz27IVznAs6Ca4WwprKk6Odjs6SH75D2F1089QiY3HQ52LXRD1V6xAWjhLE2hWgW3EdHuAOnUDVrb5V {"food":"Sushi","price":10,"restaurant":"Sushi King"} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +49 2023-08-08 false \N 16275 -2144851675 -2303421957908954634 -46526938720058765 -13141.143 -6.866322332302E8 99999999.9 -99999999.9 2022-09-01T00:16:01 2023-03-25 2022-09-07T14:59:03 s yvuILR2iNxfe8RRml {"student":true,"name":"Alice","grade":9,"subjects":["math","science","history"]} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +50 2023-08-06 true 109 -6330 1479023892 -8630800697573159428 -1645095773540208759 17880.96 -1.453844792013949E9 -99999999.9 -99999999.9 2022-09-22T02:03:21 2023-05-14 2023-03-25T02:18:34 m JKnIgXvGVidGiWl9YRSi3mFI7wHKt1sBpWSadKF8VX3LAuElm4sdc9gtxREaUr57oikSYlU8We8h1MWqQlYNiJObl {"city":"Tokyo","temperature":20.5,"humidity":75} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +50 2023-08-24 true 15 14403 \N -6418906115745394180 9205303779366462513 -4331.549 -6.15112179557648E8 99999999.9 -99999999.9 2022-12-29T02:27:20 2023-06-01 2023-08-12T04:50:04 a eCl38sztIvBQvGvGKyYZmyMXy9vIJx197iu3JwP9doJGcrYUl9Uova0rz4iCCgrjlAiZU18Fs9YtCq830nhM {"band":"The Beatles","members":["John Lennon","Paul McCartney","George Harrison","Ringo Starr"]} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +57 2023-08-19 true 2 -25462 -74112029 6458082754318544493 -7910671781690629051 -15205.859 -3.06870797484914E8 99999999.9 -99999999.9 2023-07-10T18:39:10 2023-02-12 2023-01-27T07:26:06 y Xi9nDVrLv8m6AwEpUxmtzFAuK48sQ {"name":"John","age":25,"city":"New York"} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +58 2023-08-22 \N 0 -18231 1832867360 6997858407575297145 2480714305422728023 -5450.489 1.475901032138386E9 -99999999.9 -99999999.9 2023-02-02T05:13:24 2022-09-18 2023-04-23T10:51:15 k LdFXF7Kmfzgmnn2R6zLsXdmi3A2cLBLq4G4WDVNDhxvH7dYH8Kga2WA47uSIxp6NSrwPSdw0ssB1TS8RFJTDJAB0Uba3e05NL2Aiw0ja {"restaurant":"Pizza Hut","menu":["pizza","pasta","salad"]} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +60 2023-08-27 false -52 -2338 -757056972 1047567408607120856 6541476642780646552 6614.0894 -1.204448798517855E9 99999999.9 99999999.9 2022-12-29T14:47:30 2022-09-24 2023-08-01T12:41:59 O F RM4F1Ke7lkcnuxF2nK0j9VBW3MDcgyHR4pseBjtFnqS6GUkVFuzF6u3Cp9Nv7ab0O6UYrpP4DhU {"game":"Chess","players":2,"time":"1 hour"} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +62 2023-08-21 false 81 20302 -200761532 6365479976421007608 \N -29916.533 1.709141750828478E9 99999999.9 -99999999.9 2023-05-04T01:14:51 2022-09-17 2022-12-04T19:30:09 d v BKWy9dTNg1aZW7ancEJAmEDOPK5TwFsNSHbI78emu9gymeIlx5NoLmyii0QAqdzRvSQPZKiqKkwInGCTIBnK1yYkK7zD {"username":"user123","password":"pass123","email":"user123@example.com"} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +65 2023-08-09 false 94 31514 814994517 -297697460695940343 734910652450318597 -13061.892 6.2750847041706E7 -9808654.0 \N 2023-08-14T22:01:27 2023-05-19 2022-11-13T13:44:28 V aGeMsI24O12chGlP5ak0AHghAz7bu5MargJBStHnt0yMnChH0JnfYhsfH1u59XIHkJKMsHYktBqORkGlovu8V47E74KeFpaqxn5yLyXfDbhhzUKf {"language":"Python","version":3.9,"frameworks":["Django","Flask"]} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +66 2023-08-15 true -91 28378 609923317 4872185586197131212 1207709464099378591 \N -1.863683325985123E9 -99999999.9 -99999999.9 2022-09-24T10:39:23 2022-09-24 2022-10-16T18:36:43 Y z AI1BSPQdKiHJiQH1kguyLSWsDXkC7zwy7PwgWnyGSaa9tBKRex8vHBdxg2QSKZKL2mV2lHz7iI1PnsTd4MXDcIKhqiHyPuQPt2tEtgt0UgF6 {"book":{"title":"The Great Gatsby","author":"F. Scott Fitzgerald"},"year":1925} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +68 2023-08-23 true -73 20117 1737338128 795638676048937749 -5551546237562433901 -30627.04 6.8589475684545E7 99999999.9 99999999.9 2022-12-28T20:26:51 2022-10-04 2023-07-30T00:20:06 y keZ3JlWWpdnPBejf0cuiCQCVBBTd5gjvO08NVdcAFewqL7nRT4N9lnvSU6pWmletA5VbPQCeQapJdcnQCHfZUDCf4ulCnczyqr7SGrbGRT0XYcd7iktKM {"country":"Brazil","continent":"South America","population":211049527} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +80 2023-08-18 false -18 -8971 679027874 6535956962935330265 3960889045799757165 -13219.76 1.187161924505394E9 -99999999.9 -99999999.9 2023-03-11T07:40 2022-11-29 2023-01-14T07:24:07 \N D 3Nhx6xX1qdwaq7lxwLRSKMtJFbC03swWv12mpySSVysH3igGZTiGPuKMsYW7HAkf6CWc7c0nzqDsjuH3FYVMNCWRmfxMrmY8rykQCC4Ve {"car":"BMW","model":"X5","year":2020,"color":"black"} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +81 2023-08-23 false 106 11492 -667795397 4480250461471356146 -5346660566234294101 9082.75 3.85167225902608E8 -99999999.9 99999999.9 2023-03-20T03:33:16 2022-11-24 2023-02-16T18:29:41 G 9 Lk3eNVQNjucbekD1rZmUlGPiXS5JvcWr2LQzRU8GSGIbSag {"flower":"rose","color":"red","fragrance":true} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +85 2023-08-11 true -7 24304 -2043877415 -2024144417867729183 \N 5363.0244 -5.78615669042831E8 -99999999.9 -99999999.9 2023-07-15T01:07:41 2023-08-13 2023-01-20T11:57:48 i WQ9dh9ajPu0y {"country":"France","capital":"Paris","population":67081000} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +90 2023-08-27 true 22 16456 -1476824962 -3279894870153540825 8990195191470116763 26651.906 2.06860148942546E8 -99999999.9 -99999999.9 2022-10-07T03:11:03 2023-03-18 2023-04-15T00:38:33 T L QW0GQ3GoMtHgxPQOWGfVaveynahNpsNs09siMFA1OtO6QEDBQTdivmGyq7bFzejAqwbbVQQpREAmeLjcFSXLnQuou2KbwYD {"company":"Apple","products":[{"name":"iPhone","price":1000},{"name":"MacBook","price":1500}]} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N +91 2023-08-27 true 90 2465 702240964 6373830997821598984 305860046137409400 15991.356 1.599972327386147E9 -99999999.9 \N 2023-04-26T19:31:10 2023-07-21 \N 2 B7YKYBYT8w0YC926bZ8Yz1VzyiWw2NWDAiTlEoPVyz9AXGti2Npg1FxWqWk4hEaALw0ZBSuiAIPj41lq36g5QRpPmAjNPK {"fruit":"apple","color":"red","qty":5,"price":2.5} true 1 2 3 4 5 6.0 7.0 888888888 999999999 2023-08-24 2023-08-24T12:00 2023-08-24 2023-08-24T12:00 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 我能吞下玻璃而不伤身体 \N + diff --git a/regression-test/data/load_p0/stream_load/basic_array_data.csv.bz2 b/regression-test/data/load_p0/stream_load/basic_array_data.csv.bz2 index ea0e4779944bbf09317fcb9326fd9f1f0a200d13..7fe73b0e0d53b45d6908ed3bd291f7049cac7642 100644 GIT binary patch delta 5799 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 delta 5816 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 v%lyHdUE!Ye~T^RlU={@NxSf~)HJb?!QA2dSk diff --git a/regression-test/data/load_p0/stream_load/basic_array_data.csv.gz b/regression-test/data/load_p0/stream_load/basic_array_data.csv.gz index 185cfdb78a95b53862049d0f9b04fd8d02178f9b..0f88cce595b8d5fd794b42feca8cd3b6f6d55dac 100644 GIT binary patch delta 4560 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 diff --git a/regression-test/suites/load_p0/http_stream/test_http_stream_properties.groovy b/regression-test/suites/load_p0/http_stream/test_http_stream_properties.groovy new file mode 100644 index 0000000000..b217dcb57d --- /dev/null +++ b/regression-test/suites/load_p0/http_stream/test_http_stream_properties.groovy @@ -0,0 +1,387 @@ +// 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_http_stream_properties", "p0") { + + def tables = [ + "dup_tbl_basic", + "uniq_tbl_basic", + "mow_tbl_basic", + "agg_tbl_basic", + "dup_tbl_array", + "uniq_tbl_array", + "mow_tbl_array", + ] + + def columns = [ + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19", + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19", + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19", + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c19,to_bitmap(c5) c19,HLL_HASH(c5) c20,TO_QUANTILE_STATE(c5,1.0) c21,to_bitmap(c6) c22,HLL_HASH(c6) c23,TO_QUANTILE_STATE(c6,1.0) c24", + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18", + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18", + "c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18", + ] + + def target_columns = [ + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17,k18", + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17,k18", + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17,k18", + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17,k18,k19,k20,k21,kd19,kd20,kd21", + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17", + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17", + "k00,k01,k02,k03,k04,k05,k06,k07,k08,k09,k10,k11,k12,k13,k14,k15,k16,k17", + ] + + def timezoneColumns = [ + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c1", + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c1", + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c1", + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18,c1,k19=to_bitmap(c5),k20=HLL_HASH(c5),k21=TO_QUANTILE_STATE(c5,1.0),kd19=to_bitmap(c6),kd20=HLL_HASH(c6),kd21=TO_QUANTILE_STATE(c6,1.0)", + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18", + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18", + "k00=unix_timestamp('2007-11-30 10:30:19'),c1,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13,c14,c15,c16,c17,c18", + ] + + def files = [ + "../stream_load/basic_data.csv", + "../stream_load/basic_data.csv", + "../stream_load/basic_data.csv", + "../stream_load/basic_data.csv", + "../stream_load/basic_array_data.csv", + "../stream_load/basic_array_data.csv", + "../stream_load/basic_array_data.csv" + ] + + def timezoneFiles = [ + "basic_data_timezone.csv", + "basic_data_timezone.csv", + "basic_data_timezone.csv", + "basic_data_timezone.csv", + "basic_array_data_timezone.csv", + "basic_array_data_timezone.csv", + "basic_array_data_timezone.csv", + ] + + def errorFiles = [ + "basic_data_with_errors.csv", + "basic_data_with_errors.csv", + "basic_data_with_errors.csv", + "basic_data_with_errors.csv", + "basic_array_data_with_errors.csv", + "basic_array_data_with_errors.csv", + "basic_array_data_with_errors.csv", + ] + + // def compress_type = [ + // "gz", + // "bz2", + // "lz4", + // "deflate", + // "lzo", + // ] + + // def compress_files = [ + // "basic_data.csv.gz", + // "basic_data.csv.bz2", + // "basic_data.csv.lz4", + // "basic_data.csv.deflate", + // "basic_data.csv.lzo", + // "basic_array_data.csv.gz", + // "basic_array_data.csv.bz2", + // "basic_array_data.csv.lz4", + // "basic_array_data.csv.deflate", + // "basic_array_data.csv.lzo", + // ] + def compress_files = [ + "dup_tbl_basic": [ + ["../stream_load/basic_data.csv.gz", "gz"], + ["../stream_load/basic_data.csv.bz2", "bz2"], + ], + "uniq_tbl_basic": [ + ["../stream_load/basic_data.csv.gz", "gz"], + ["../stream_load/basic_data.csv.bz2", "bz2"], + ], + "mow_tbl_basic": [ + ["../stream_load/basic_data.csv.gz", "gz"], + ["../stream_load/basic_data.csv.bz2", "bz2"], + ], + "agg_tbl_basic": [ + ["../stream_load/basic_data.csv.gz", "gz"], + ["../stream_load/basic_data.csv.bz2", "bz2"], + ], + "dup_tbl_array": [ + ["../stream_load/basic_array_data.csv.gz", "gz"], + ["../stream_load/basic_array_data.csv.bz2", "bz2"], + ], + "uniq_tbl_array": [ + ["../stream_load/basic_array_data.csv.gz", "gz"], + ["../stream_load/basic_array_data.csv.bz2", "bz2"], + ], + "mow_tbl_array": [ + ["../stream_load/basic_array_data.csv.gz", "gz"], + ["../stream_load/basic_array_data.csv.bz2", "bz2"], + ], + ] + + def loadedRows = [12,12,12,12,8,8,15] + + def filteredRows = [8,8,8,8,12,12,5] + + def maxFilterRatio = [0.4,0.4,0.4,0.4,0.6,0.6,0.6] + + InetSocketAddress address = context.config.feHttpInetSocketAddress + String user = context.config.feHttpUser + String password = context.config.feHttpPassword + String db = context.config.getDbNameByFile(context.file) + + def i = 0 + try { + for (String tableName in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_drop.sql""").text + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_create.sql""").text + + def tableNm = "stream_load_" + tableName + + streamLoad { + set 'version', '1' + set 'sql', """ + insert into ${db}.${tableNm}(${target_columns[i]}) select ${columns[i]} from http_stream("format"="csv", "column_separator"="|") + """ + file files[i] + time 10000 // limit inflight 10s + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertEquals(20, json.NumberTotalRows) + assertEquals(20, json.NumberLoadedRows) + assertEquals(0, json.NumberFilteredRows) + assertEquals(0, json.NumberUnselectedRows) + } + } + i++ + } + } finally { + for (String tableName in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_drop.sql""").text + } + } + + // TODO timezone + + // TODO strict_mode + + // TODO max_filter_ratio + + // sequence + try { + sql new File("""${context.file.parent}/../stream_load/ddl/uniq_tbl_basic_drop_sequence.sql""").text + sql new File("""${context.file.parent}/../stream_load/ddl//uniq_tbl_basic_create_sequence.sql""").text + + String tableNm = "stream_load_uniq_tbl_basic_sequence" + + streamLoad { + set 'version', '1' + set 'sql', """ + insert into ${db}.${tableNm}(${target_columns[0]}) select ${columns[0]} from http_stream("format"="CSV", "column_separator"="|") + """ + file files[0] + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertEquals(20, json.NumberTotalRows) + assertEquals(20, json.NumberLoadedRows) + assertEquals(0, json.NumberFilteredRows) + assertEquals(0, json.NumberUnselectedRows) + } + } + qt_sql_squence "select * from stream_load_uniq_tbl_basic_sequence order by k00,k01" + } finally { + sql new File("""${context.file.parent}/../stream_load/ddl/uniq_tbl_basic_drop_sequence.sql""").text + } + + // TODO merge type + + // TODO two_phase_commit + + // compress_type + // gz/bz2 + // TODO lzo/deflate/lz4 + i = 0 + try { + for (String tableName in tables) { + compress_files[tableName].each { fileName, type -> { + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_drop.sql""").text + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_create.sql""").text + def tableNm = "stream_load_" + tableName + streamLoad { + set 'version', '1' + set 'sql', """ + insert into ${db}.${tableNm}(${target_columns[i]}) select ${columns[i]} from http_stream("format"="CSV", "column_separator"="|", "compress_type"="${type}") + """ + file fileName + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${tableName}".toString()) + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertEquals(20, json.NumberTotalRows) + assertEquals(20, json.NumberLoadedRows) + assertEquals(0, json.NumberFilteredRows) + assertEquals(0, json.NumberUnselectedRows) + } + } + } + } + i++ + } + } finally { + for (String table in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${table}_drop.sql""").text + } + } + + // skip_lines + i = 0 + try { + for (String tableName in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_drop.sql""").text + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_create.sql""").text + + def tableNm = "stream_load_" + tableName + + streamLoad { + set 'version', '1' + set 'sql', """ + insert into ${db}.${tableNm}(${target_columns[i]}) select ${columns[i]} from http_stream("format"="CSV", "column_separator"="|", "skip_lines"="2") + """ + file files[i] + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertEquals(18, json.NumberTotalRows) + assertEquals(18, json.NumberLoadedRows) + assertEquals(0, json.NumberFilteredRows) + assertEquals(0, json.NumberUnselectedRows) + } + } + if (i <= 3) { + qt_sql_skip_lines "select * from ${tableNm} order by k00,k01" + } else { + qt_sql_skip_lines "select * from ${tableNm} order by k00" + } + i++ + } + } finally { + for (String table in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${table}_drop.sql""").text + } + } + + // column_separator + i = 0 + try { + for (String tableName in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_drop.sql""").text + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_create.sql""").text + def tableNm = "stream_load_" + tableName + streamLoad { + set 'version', '1' + set 'sql', """ + insert into ${db}.${tableNm}(${target_columns[i]}) select ${columns[i]} from http_stream("format"="CSV", "column_separator"=",") + """ + file files[i] + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals("fail", json.Status.toLowerCase()) + // assertEquals(0, json.NumberTotalRows) + // assertEquals(0, json.NumberLoadedRows) + // assertEquals(0, json.NumberFilteredRows) + // assertEquals(0, json.NumberUnselectedRows) + } + } + i++ + } + } finally { + for (String table in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${table}_drop.sql""").text + } + } + + // line_delimiter + i = 0 + try { + for (String tableName in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_drop.sql""").text + sql new File("""${context.file.parent}/../stream_load/ddl/${tableName}_create.sql""").text + def tableNm = "stream_load_" + tableName + streamLoad { + set 'version', '1' + set 'sql', """ + insert into ${db}.${tableNm}(${target_columns[i]}) select ${columns[i]} from http_stream("format"="CSV", "column_separator"=",", "line_delimiter"=",") + """ + file files[i] + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + log.info("Stream load result: ${result}".toString()) + def json = parseJson(result) + assertEquals("fail", json.Status.toLowerCase()) + // assertEquals(1, json.NumberTotalRows) + // assertEquals(0, json.NumberLoadedRows) + // assertEquals(1, json.NumberFilteredRows) + // assertEquals(0, json.NumberUnselectedRows) + } + } + i++ + } + } finally { + for (String table in tables) { + sql new File("""${context.file.parent}/../stream_load/ddl/${table}_drop.sql""").text + } + } +} +