/** * 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.store.parquet; import org.apache.drill.BaseTestQuery; import org.apache.drill.exec.proto.UserBitShared; import org.junit.Test; public class TestParquetComplex extends BaseTestQuery { private static final String DATAFILE = "cp.`store/parquet/complex/complex.parquet`"; @Test public void sort() throws Exception { String query = String.format("select * from %s order by amount", DATAFILE); testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline_sorted.json") .build() .run(); } @Test public void topN() throws Exception { String query = String.format("select * from %s order by amount limit 5", DATAFILE); testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline_sorted.json") .build() .run(); } @Test public void hashJoin() throws Exception{ String query = String.format("select t1.amount, t1.`date`, t1.marketing_info, t1.`time`, t1.trans_id, t1.trans_info, t1.user_info " + "from %s t1, %s t2 where t1.amount = t2.amount", DATAFILE, DATAFILE); testBuilder() .sqlQuery(query) .unOrdered() .jsonBaselineFile("store/parquet/complex/baseline.json") .build() .run(); } @Test public void mergeJoin() throws Exception{ test("alter session set `planner.enable_hashjoin` = false"); String query = String.format("select t1.amount, t1.`date`, t1.marketing_info, t1.`time`, t1.trans_id, t1.trans_info, t1.user_info " + "from %s t1, %s t2 where t1.amount = t2.amount", DATAFILE, DATAFILE); testBuilder() .sqlQuery(query) .unOrdered() .jsonBaselineFile("store/parquet/complex/baseline.json") .build() .run(); } @Test public void selectAllColumns() throws Exception { String query = String.format("select amount, `date`, marketing_info, `time`, trans_id, trans_info, user_info from %s", DATAFILE); testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline.json") .build() .run(); } @Test public void selectMap() throws Exception { String query = "select marketing_info from cp.`store/parquet/complex/complex.parquet`"; testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline5.json") .build() .run(); } @Test public void selectMapAndElements() throws Exception { String query = "select marketing_info, t.marketing_info.camp_id as camp_id, t.marketing_info.keywords[2] as keyword2 from cp.`store/parquet/complex/complex.parquet` t"; testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline6.json") .build() .run(); } @Test public void selectMultiElements() throws Exception { String query = "select t.marketing_info.camp_id as camp_id, t.marketing_info.keywords as keywords from cp.`store/parquet/complex/complex.parquet` t"; testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline7.json") .build() .run(); } @Test public void testStar() throws Exception { testBuilder() .sqlQuery("select * from cp.`store/parquet/complex/complex.parquet`") .ordered() .jsonBaselineFile("store/parquet/complex/baseline.json") .build() .run(); } @Test public void missingColumnInMap() throws Exception { String query = "select t.trans_info.keywords as keywords from cp.`store/parquet/complex/complex.parquet` t"; String[] columns = {"keywords"}; testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline2.json") .baselineColumns(columns) .build() .run(); } @Test public void secondElementInMap() throws Exception { String query = String.format("select t.`marketing_info`.keywords as keywords from %s t", DATAFILE); String[] columns = {"keywords"}; testBuilder() .sqlQuery(query) .ordered() .jsonBaselineFile("store/parquet/complex/baseline3.json") .baselineColumns(columns) .build() .run(); } @Test public void elementsOfArray() throws Exception { String query = String.format("select t.`marketing_info`.keywords[0] as keyword0, t.`marketing_info`.keywords[2] as keyword2 from %s t", DATAFILE); String[] columns = {"keyword0", "keyword2"}; testBuilder() .sqlQuery(query) .unOrdered() .jsonBaselineFile("store/parquet/complex/baseline4.json") .baselineColumns(columns) .build() .run(); } @Test public void elementsOfArrayCaseInsensitive() throws Exception { String query = String.format("select t.`MARKETING_INFO`.keywords[0] as keyword0, t.`Marketing_Info`.Keywords[2] as keyword2 from %s t", DATAFILE); String[] columns = {"keyword0", "keyword2"}; testBuilder() .sqlQuery(query) .unOrdered() .jsonBaselineFile("store/parquet/complex/baseline4.json") .baselineColumns(columns) .build() .run(); } @Test //DRILL-3533 public void notxistsField() throws Exception { String query = String.format("select t.`marketing_info`.notexists as notexists, t.`marketing_info`.camp_id as id from %s t", DATAFILE); String[] columns = {"notexists", "id"}; testBuilder() .sqlQuery(query) .unOrdered() .jsonBaselineFile("store/parquet/complex/baseline8.json") .baselineColumns(columns) .build() .run(); } }