blob: cb855ce4d9e894e0309a38f066bd21b62e2ba10b [file] [log] [blame]
/*
* 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.
*/
package org.apache.drill.exec.hive.complex_types;
import java.math.BigDecimal;
import java.nio.file.Paths;
import org.apache.drill.categories.HiveStorageTest;
import org.apache.drill.categories.SlowTest;
import org.apache.drill.exec.ExecConstants;
import org.apache.drill.exec.hive.HiveTestFixture;
import org.apache.drill.exec.hive.HiveTestUtilities;
import org.apache.drill.exec.util.StoragePluginTestUtils;
import org.apache.drill.test.ClusterFixture;
import org.apache.drill.test.ClusterTest;
import org.apache.hadoop.hive.ql.Driver;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import static java.util.Arrays.asList;
import static java.util.Collections.emptyList;
import static java.util.Collections.emptyMap;
import static org.apache.drill.exec.expr.fn.impl.DateUtility.parseBest;
import static org.apache.drill.exec.expr.fn.impl.DateUtility.parseLocalDate;
import static org.apache.drill.exec.hive.HiveTestUtilities.assertNativeScanUsed;
import static org.apache.drill.test.TestBuilder.mapOf;
import static org.apache.drill.test.TestBuilder.mapOfObject;
@Category({SlowTest.class, HiveStorageTest.class})
public class TestHiveMaps extends ClusterTest {
private static HiveTestFixture hiveTestFixture;
@BeforeClass
public static void setUp() throws Exception {
startCluster(ClusterFixture.builder(dirTestWatcher)
.sessionOption(ExecConstants.HIVE_OPTIMIZE_PARQUET_SCAN_WITH_NATIVE_READER, true));
hiveTestFixture = HiveTestFixture.builder(dirTestWatcher).build();
hiveTestFixture.getDriverManager().runWithinSession(TestHiveMaps::generateData);
hiveTestFixture.getPluginManager().addHivePluginTo(cluster.drillbit());
}
@AfterClass
public static void tearDown() throws Exception {
if (hiveTestFixture != null) {
hiveTestFixture.getPluginManager().removeHivePluginFrom(cluster.drillbit());
}
}
private static void generateData(Driver d) {
HiveTestUtilities.executeQuery(d, "CREATE TABLE map_tbl(" +
"rid INT, " +
"int_string MAP<INT, STRING>," +
"timestamp_decimal MAP<TIMESTAMP, DECIMAL(9,3)>," +
"char_tinyint MAP<CHAR(2), TINYINT>," +
"date_boolean MAP<DATE, BOOLEAN>," +
"double_float MAP<DOUBLE, FLOAT>," +
"varchar_bigint MAP<VARCHAR(5), BIGINT>," +
"boolean_smallint MAP<BOOLEAN, SMALLINT>," +
"decimal_char MAP<DECIMAL(9,3), CHAR(1)>) " +
"ROW FORMAT DELIMITED " +
"FIELDS TERMINATED BY ',' " +
"COLLECTION ITEMS TERMINATED BY '#' " +
"MAP KEYS TERMINATED BY '@' " +
"STORED AS TEXTFILE");
HiveTestUtilities.loadData(d, "map_tbl", Paths.get("complex_types/map/map_tbl.txt"));
HiveTestUtilities.executeQuery(d, "CREATE TABLE map_complex_tbl(" +
"rid INT, " +
"map_n_1 MAP<INT,MAP<STRING, INT>>, " +
"map_n_2 MAP<INT,MAP<BOOLEAN, MAP<STRING, INT>>>, " +
"map_arr MAP<STRING, ARRAY<INT>>, " +
"map_arr_2 MAP<STRING, ARRAY<ARRAY<INT>>>, " +
"map_arr_map MAP<STRING, ARRAY<MAP<STRING, INT>>>, " +
"map_struct MAP<STRING, STRUCT<fs:STRING, fi:INT>>, " +
"map_struct_map MAP<STRING, STRUCT<i:INT, m:MAP<INT,INT>>>" +
") ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE"
);
HiveTestUtilities.loadData(d, "map_complex_tbl", Paths.get("complex_types/map/map_complex_tbl.json"));
HiveTestUtilities.executeQuery(d, "CREATE TABLE map_tbl_p(" +
"rid INT, " +
"int_string MAP<INT, STRING>," +
"timestamp_decimal MAP<TIMESTAMP, DECIMAL(9,3)>," +
"char_tinyint MAP<CHAR(2), TINYINT>," +
"date_boolean MAP<DATE, BOOLEAN>," +
"double_float MAP<DOUBLE, FLOAT>," +
"varchar_bigint MAP<VARCHAR(5), BIGINT>," +
"boolean_smallint MAP<BOOLEAN, SMALLINT>," +
"decimal_char MAP<DECIMAL(9,3), CHAR(1)>) " +
"STORED AS PARQUET");
HiveTestUtilities.insertData(d, "map_tbl", "map_tbl_p");
HiveTestUtilities.executeQuery(d, "CREATE VIEW map_tbl_vw AS SELECT int_string FROM map_tbl WHERE rid=1");
}
@Test
public void mapIntToString() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, int_string FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "int_string")
.baselineValues(1, mapOfObject(1, "First", 2, "Second", 3, "Third"))
.baselineValues(2, mapOfObject(4, "Fourth", 5, "Fifth"))
.baselineValues(3, mapOfObject(6, "Sixth", 2, "!!"))
.go();
}
@Test
public void mapIntToStringInHiveView() throws Exception {
testBuilder()
.sqlQuery("SELECT * FROM hive.map_tbl_vw")
.unOrdered()
.baselineColumns("int_string")
.baselineValues(mapOfObject(1, "First", 2, "Second", 3, "Third"))
.go();
}
@Test
public void mapIntToStringInDrillView() throws Exception {
queryBuilder().sql(
"CREATE VIEW %s.`map_vw` AS SELECT int_string FROM hive.map_tbl WHERE rid=1",
StoragePluginTestUtils.DFS_TMP_SCHEMA
).run();
testBuilder()
.sqlQuery("SELECT * FROM %s.map_vw", StoragePluginTestUtils.DFS_TMP_SCHEMA)
.unOrdered()
.baselineColumns("int_string")
.baselineValues(mapOfObject(1, "First", 2, "Second", 3, "Third"))
.go();
}
@Test
public void mapTimestampToDecimal() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, timestamp_decimal FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "timestamp_decimal")
.baselineValues(1, mapOfObject(
parseBest("2018-10-21 04:51:36"), new BigDecimal("-100000.000"),
parseBest("2017-07-11 09:26:48"), new BigDecimal("102030.001")
))
.baselineValues(2, mapOfObject(
parseBest("1913-03-03 18:47:14"), new BigDecimal("84.509")
))
.baselineValues(3, mapOfObject(
parseBest("2016-01-21 12:39:30"), new BigDecimal("906668.849")
))
.go();
}
@Test
public void mapCharToTinyint() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, char_tinyint FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "char_tinyint")
.baselineValues(1, mapOfObject("MN", -128, "MX", 127, "ZR", 0))
.baselineValues(2, mapOfObject("ls", 1, "ks", 2))
.baselineValues(3, mapOfObject("fx", 20, "fy", 30, "fz", 40, "fk", -31))
.go();
}
@Test
public void mapDateToBoolean() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, date_boolean FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "date_boolean")
.baselineValues(1, mapOfObject(
parseLocalDate("1965-12-15"), true, parseLocalDate("1970-09-02"), false,
parseLocalDate("2025-05-25"), true, parseLocalDate("2919-01-17"), false
))
.baselineValues(2, mapOfObject(
parseLocalDate("1944-05-09"), false, parseLocalDate("2002-02-11"), true
))
.baselineValues(3, mapOfObject(
parseLocalDate("2068-10-05"), false, parseLocalDate("2051-07-27"), false,
parseLocalDate("2052-08-28"), true
))
.go();
}
@Test
public void mapDoubleToFloat() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, double_float FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "double_float")
.baselineValues(1, mapOfObject(
0.47745359256854, -5.3763375f
))
.baselineValues(2, mapOfObject(
-0.47745359256854, -0.6549191f,
-13.241563769628, -82.399826f,
0.3436367772981237, 12.633938f,
9.73366, 86.19402f
))
.baselineValues(3, mapOfObject(
170000000.00, 9867.5623f
))
.go();
}
@Test
public void mapVarcharToBigint() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, varchar_bigint FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "varchar_bigint")
.baselineValues(1, mapOfObject("m", -3226305034926780974L))
.baselineValues(2, mapOfObject("MBAv", 0L))
.baselineValues(3, mapOfObject("7R9F", -2077124879355227614L, "12AAa", -6787493227661516341L))
.go();
}
@Test
public void mapBooleanToSmallint() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, boolean_smallint FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "boolean_smallint")
.baselineValues(1, mapOfObject(true, -19088))
.baselineValues(2, mapOfObject(false, -4774))
.baselineValues(3, mapOfObject(false, 32767, true, 25185))
.go();
}
@Test
public void mapDecimalToChar() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, decimal_char FROM hive.map_tbl")
.unOrdered()
.baselineColumns("rid", "decimal_char")
.baselineValues(1, mapOfObject(
new BigDecimal("-3.930"), "L"))
.baselineValues(2, mapOfObject(
new BigDecimal("-0.600"), "P", new BigDecimal("21.555"), "C", new BigDecimal("99.999"), "X"))
.baselineValues(3, mapOfObject(
new BigDecimal("-444023.971"), "L", new BigDecimal("827746.528"), "A"))
.go();
}
@Test
public void mapIntToStringParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, int_string FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "int_string")
.baselineValues(1, mapOfObject(1, "First", 2, "Second", 3, "Third"))
.baselineValues(2, mapOfObject(4, "Fourth", 5, "Fifth"))
.baselineValues(3, mapOfObject(6, "Sixth", 2, "!!"))
.go();
}
@Test
public void mapTimestampToDecimalParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, timestamp_decimal FROM hive.map_tbl_p")
.optionSettingQueriesForTestQuery("alter session set `" + ExecConstants.PARQUET_READER_INT96_AS_TIMESTAMP + "` = true")
.unOrdered()
.baselineColumns("rid", "timestamp_decimal")
.baselineValues(1, mapOfObject(
parseBest("2018-10-21 04:51:36"), new BigDecimal("-100000.000"),
parseBest("2017-07-11 09:26:48"), new BigDecimal("102030.001")
))
.baselineValues(2, mapOfObject(
parseBest("1913-03-03 18:47:14"), new BigDecimal("84.509")
))
.baselineValues(3, mapOfObject(
parseBest("2016-01-21 12:39:30"), new BigDecimal("906668.849")
))
.go();
}
@Test
public void mapCharToTinyintParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, char_tinyint FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "char_tinyint")
.baselineValues(1, mapOfObject("MN", -128, "MX", 127, "ZR", 0))
.baselineValues(2, mapOfObject("ls", 1, "ks", 2))
.baselineValues(3, mapOfObject("fx", 20, "fy", 30, "fz", 40, "fk", -31))
.go();
}
@Test
public void mapDateToBooleanParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, date_boolean FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "date_boolean")
.baselineValues(1, mapOfObject(
parseLocalDate("1965-12-15"), true, parseLocalDate("1970-09-02"), false,
parseLocalDate("2025-05-25"), true, parseLocalDate("2919-01-17"), false
))
.baselineValues(2, mapOfObject(
parseLocalDate("1944-05-09"), false, parseLocalDate("2002-02-11"), true
))
.baselineValues(3, mapOfObject(
parseLocalDate("2068-10-05"), false, parseLocalDate("2051-07-27"), false,
parseLocalDate("2052-08-28"), true
))
.go();
}
@Test
public void mapDoubleToFloatParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, double_float FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "double_float")
.baselineValues(1, mapOfObject(
0.47745359256854, -5.3763375f
))
.baselineValues(2, mapOfObject(
-0.47745359256854, -0.6549191f,
-13.241563769628, -82.399826f,
0.3436367772981237, 12.633938f,
9.73366, 86.19402f
))
.baselineValues(3, mapOfObject(
170000000.00, 9867.5623f
))
.go();
}
@Test
public void mapVarcharToBigintParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, varchar_bigint FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "varchar_bigint")
.baselineValues(1, mapOfObject("m", -3226305034926780974L))
.baselineValues(2, mapOfObject("MBAv", 0L))
.baselineValues(3, mapOfObject("7R9F", -2077124879355227614L, "12AAa", -6787493227661516341L))
.go();
}
@Test
public void mapBooleanToSmallintParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, boolean_smallint FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "boolean_smallint")
.baselineValues(1, mapOfObject(true, -19088))
.baselineValues(2, mapOfObject(false, -4774))
.baselineValues(3, mapOfObject(false, 32767, true, 25185))
.go();
}
@Test
public void mapDecimalToCharParquet() throws Exception {
assertNativeScanUsed(queryBuilder(), "map_tbl_p");
testBuilder()
.sqlQuery("SELECT rid, decimal_char FROM hive.map_tbl_p")
.unOrdered()
.baselineColumns("rid", "decimal_char")
.baselineValues(1, mapOfObject(
new BigDecimal("-3.930"), "L"))
.baselineValues(2, mapOfObject(
new BigDecimal("-0.600"), "P", new BigDecimal("21.555"), "C", new BigDecimal("99.999"), "X"))
.baselineValues(3, mapOfObject(
new BigDecimal("-444023.971"), "L", new BigDecimal("827746.528"), "A"))
.go();
}
@Test
public void nestedMap() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_n_1 FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_n_1")
.baselineValues(1, mapOfObject(1, mapOfObject("A-0", 21, "A-1", 22)))
.baselineValues(2, mapOfObject(1, mapOfObject("A+0", 12, "A-1", 22)))
.baselineValues(3, mapOfObject(1, mapOfObject("A-0", 11, "A+1", 11)))
.go();
}
@Test
public void doublyNestedMap() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_n_2 FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_n_2")
.baselineValues(1, mapOfObject(
3, mapOfObject(true, mapOfObject("k1", 1, "k2", 2), false, mapOfObject("k3", 1, "k4", 2))
))
.baselineValues(2, mapOfObject(
3, mapOfObject(true, mapOfObject("k1", 1, "k2", 2), false, mapOfObject("k3", 1, "k4", 2)),
4, mapOfObject(true, mapOfObject("k1", 1, "k2", 2))
))
.baselineValues(3, mapOfObject(
3, mapOfObject(false, mapOfObject("k1", 1, "k2", 2))
))
.go();
}
@Test
public void mapWithArrayValue() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_arr FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_arr")
.baselineValues(1, mapOfObject("a1", asList(0, 9, 8), "a2", asList(-9, 0, 1)))
.baselineValues(2, mapOfObject("a1", asList(7, 7, 7)))
.baselineValues(3, mapOfObject("x", asList(5, 6, 7, 8, 9, 10, 100), "y", asList(0, 0, 0, 1, 0, 1, 0, 1)))
.go();
}
@Test
public void mapWithNestedArrayValue() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_arr_2 FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_arr_2")
.baselineValues(1, mapOfObject("aa1", asList(asList(-7, 3, 1), asList(0), asList(-2, -22))))
.baselineValues(2, mapOfObject("1a1", asList(asList(-7, 3, 10, -2, -22), asList(0, -1, 0))))
.baselineValues(3, mapOfObject("aa1", asList(asList(0))))
.go();
}
@Test
public void mapWithArrayOfMapsValue() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_arr_map FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_arr_map")
.baselineValues(1, mapOfObject(
"key01", asList(mapOfObject("key01.0", 0), mapOfObject("key01.1", 1), mapOfObject("key01.2", 2), mapOfObject("key01.3", 3))
))
.baselineValues(2, mapOfObject(
"key01", asList(mapOfObject("key01.0", 0), mapOfObject("key01.1", 1)), "key02", asList(mapOfObject("key02.0", 0))
))
.baselineValues(3, mapOfObject(
"key01", asList(mapOfObject("key01.0", 0))
))
.go();
}
@Test
public void mapWithStructValue() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_struct FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_struct")
.baselineValues(1, mapOfObject(
"a", mapOf("fs", "(0-0)", "fi", 101),
"b", mapOf("fs", "=-=", "fi", 202)
))
.baselineValues(2, mapOfObject(
"a", mapOf("fs", "|>-<|", "fi", 888),
"c", mapOf("fs", "//*?//;..*/", "fi", 1021)
))
.baselineValues(3, mapOfObject(
"c", mapOf("fs", "<<`~`~`~`>>", "fi", 9889)
))
.go();
}
@Test
public void mapWithStructMapValue() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, map_struct_map FROM hive.map_complex_tbl")
.unOrdered()
.baselineColumns("rid", "map_struct_map")
.baselineValues(1, mapOfObject(
"z", mapOf("i", 1, "m", mapOfObject(1, 1, 3, 2, 7, 0)),
"zz", mapOf("i", 2, "m", mapOfObject(0, 0)),
"zzz", mapOf("i", 3, "m", mapOfObject(2, 2))
))
.baselineValues(2, mapOfObject(
"x", mapOf("i", 2, "m", mapOfObject(0, 2, 3, 1))
))
.baselineValues(3, mapOfObject(
"x", mapOf("i", 3, "m", mapOfObject(0, 0, 1, 1)),
"z", mapOf("i", 4, "m", mapOfObject(3, 3))
))
.go();
}
@Test
public void getByKeyP0() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.int_string[2] p0 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p0")
.baselineValues(1, "Second")
.baselineValues(2, null)
.baselineValues(3, "!!")
.go();
}
@Test
public void getByKeyP1() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.timestamp_decimal[CAST('2018-10-21 04:51:36' as TIMESTAMP)] p1 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p1")
.baselineValues(1, new BigDecimal("-100000.000"))
.baselineValues(2, null)
.baselineValues(3, null)
.go();
}
@Test
public void getByKeyP2() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.char_tinyint.fk p2 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p2")
.baselineValues(1, null)
.baselineValues(2, null)
.baselineValues(3, -31)
.go();
}
@Test
public void getByKeyP3() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.date_boolean[CAST('2025-05-25' as DATE)] p3 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p3")
.baselineValues(1, true)
.baselineValues(2, null)
.baselineValues(3, null)
.go();
}
@Test
public void getByKeyP4() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.varchar_bigint['12AAa'] p4 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p4")
.baselineValues(1, null)
.baselineValues(2, null)
.baselineValues(3, -6787493227661516341L)
.go();
}
@Test
public void getByKeyP5() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.boolean_smallint[true] p5 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p5")
.baselineValues(1, -19088)
.baselineValues(2, null)
.baselineValues(3, 25185)
.go();
}
@Test
public void getByKeyP6() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mp.decimal_char[99.999] p6 FROM hive.map_tbl mp")
.unOrdered()
.baselineColumns("rid", "p6")
.baselineValues(1, null)
.baselineValues(2, "X")
.baselineValues(3, null)
.go();
}
@Test
public void getByKeyP7() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_n_1[1] p7 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p7")
.baselineValues(1, mapOfObject("A-0", 21, "A-1", 22))
.baselineValues(2, mapOfObject("A+0", 12, "A-1", 22))
.baselineValues(3, mapOfObject("A-0", 11, "A+1", 11))
.go();
}
@Test
public void getByKeyP8() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_n_1[1]['A-0'] p8 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p8")
.baselineValues(1, 21)
.baselineValues(2, null)
.baselineValues(3, 11)
.go();
}
@Test
public void getByKeyP9() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_n_2[4] p9 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p9")
.baselineValues(1, emptyMap())
.baselineValues(2, mapOfObject(true, mapOfObject("k1", 1, "k2", 2)))
.baselineValues(3, emptyMap())
.go();
}
@Test
public void getByKeyP10() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_n_2[3][true] p10 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p10")
.baselineValues(1, mapOfObject("k1", 1, "k2", 2))
.baselineValues(2, mapOfObject("k1", 1, "k2", 2))
.baselineValues(3, mapOfObject())
.go();
}
@Test
public void getByKeyP11() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_n_2[3][true]['k2'] p11 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p11")
.baselineValues(1, 2)
.baselineValues(2, 2)
.baselineValues(3, null)
.go();
}
@Test
public void getByKeyP12() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_arr['a1'] p12 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p12")
.baselineValues(1, asList(0, 9, 8))
.baselineValues(2, asList(7, 7, 7))
.baselineValues(3, emptyList())
.go();
}
@Test
public void getByKeyP13() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_arr['a1'][2] p13 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p13")
.baselineValues(1, 8)
.baselineValues(2, 7)
.baselineValues(3, null)
.go();
}
@Test
public void getByKeyP14() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_arr_2['aa1'][0] p14 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p14")
.baselineValues(1, asList(-7, 3, 1))
.baselineValues(2, emptyList())
.baselineValues(3, asList(0))
.go();
}
@Test
public void getByKeyP15() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_arr_map['key01'][1] p15 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p15")
.baselineValues(1, mapOfObject("key01.1", 1))
.baselineValues(2, mapOfObject("key01.1", 1))
.baselineValues(3, emptyMap())
.go();
}
@Test
public void getByKeyP16() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_arr_map['key01'][1]['key01.1'] p16 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p16")
.baselineValues(1, 1)
.baselineValues(2, 1)
.baselineValues(3, null)
.go();
}
@Test
public void getByKeyP17() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_struct['a'] p17 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p17")
.baselineValues(1, mapOf("fs", "(0-0)", "fi", 101))
.baselineValues(2, mapOf("fs", "|>-<|", "fi", 888))
.baselineValues(3, mapOf())
.go();
}
@Test
public void getByKeyP18() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_struct['c']['fs'] p18 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p18")
.baselineValues(1, null)
.baselineValues(2, "//*?//;..*/")
.baselineValues(3, "<<`~`~`~`>>")
.go();
}
@Test
public void getByKeyP19() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_struct_map['z']['i'] p19 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p19")
.baselineValues(1, 1)
.baselineValues(2, null)
.baselineValues(3, 4)
.go();
}
@Test
public void getByKeyP20() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_struct_map['z']['m'] p20 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p20")
.baselineValues(1, mapOfObject(1, 1, 3, 2, 7, 0))
.baselineValues(2, emptyMap())
.baselineValues(3, mapOfObject(3, 3))
.go();
}
@Test
public void getByKeyP21() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_struct_map['z']['m'][3] p21 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p21")
.baselineValues(1, 2)
.baselineValues(2, null)
.baselineValues(3, 3)
.go();
}
@Test
public void getByKeyP22() throws Exception {
testBuilder()
.sqlQuery("SELECT rid, mc.map_struct_map.z.m[3] p22 FROM hive.map_complex_tbl mc")
.unOrdered()
.baselineColumns("rid", "p22")
.baselineValues(1, 2)
.baselineValues(2, null)
.baselineValues(3, 3)
.go();
}
@Test
public void countMapColumn() throws Exception {
testBuilder()
.sqlQuery("SELECT COUNT(int_string) AS cnt FROM hive.map_tbl")
.unOrdered()
.baselineColumns("cnt")
.baselineValues(3L)
.go();
}
@Test
public void typeOfFunctions() throws Exception {
testBuilder()
.sqlQuery("SELECT sqlTypeOf(%1$s) sto, typeOf(%1$s) to, modeOf(%1$s) mo, drillTypeOf(%1$s) dto " +
"FROM hive.map_tbl LIMIT 1", "int_string")
.unOrdered()
.baselineColumns("sto", "to", "mo", "dto")
.baselineValues("MAP", "DICT<INT,VARCHAR>", "NOT NULL", "DICT<INT,VARCHAR>")
.go();
}
}