You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by jo...@apache.org on 2019/01/10 21:19:53 UTC

[01/10] impala git commit: IMPALA-8060: [DOCS] A typo fix

Repository: impala
Updated Branches:
  refs/heads/master 56dea8438 -> 51f30a6b9


IMPALA-8060: [DOCS] A typo fix

Change-Id: Ia1fc02f9676c46f95f799f5c71e2b34ed30a4899
Reviewed-on: http://gerrit.cloudera.org:8080/12201
Tested-by: Impala Public Jenkins <im...@cloudera.com>
Reviewed-by: Bikramjeet Vig <bi...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/43058cbf
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/43058cbf
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/43058cbf

Branch: refs/heads/master
Commit: 43058cbf65179e39de13b3e2f39feedf6d7dec10
Parents: 56dea84
Author: Alex Rodoni <ar...@cloudera.com>
Authored: Wed Jan 9 13:08:13 2019 -0800
Committer: Alex Rodoni <ar...@cloudera.com>
Committed: Wed Jan 9 21:37:32 2019 +0000

----------------------------------------------------------------------
 docs/topics/impala_admission.xml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/43058cbf/docs/topics/impala_admission.xml
----------------------------------------------------------------------
diff --git a/docs/topics/impala_admission.xml b/docs/topics/impala_admission.xml
index b424f8b..58aef0d 100644
--- a/docs/topics/impala_admission.xml
+++ b/docs/topics/impala_admission.xml
@@ -119,7 +119,7 @@ under the License.
           <dt> Queue Timeout </dt>
           <dd> The amount of time, in milliseconds, that a query waits in the
             admission control queue for this pool before being canceled. The
-            default value is 60,000 milliseconds. <p>It the following cases,
+            default value is 60,000 milliseconds. <p>In the following cases,
                 <uicontrol>Queue Timeout</uicontrol> is not significant, and you
               can specify a high value to avoid canceling queries
                 unexpectedly:<ul id="ul_kzr_rbg_gw">


[02/10] impala git commit: IMPALA-7867 (Part 4): Collection cleanup in catalog

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/StructType.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/StructType.java b/fe/src/main/java/org/apache/impala/catalog/StructType.java
index 77d4648..53d8622 100644
--- a/fe/src/main/java/org/apache/impala/catalog/StructType.java
+++ b/fe/src/main/java/org/apache/impala/catalog/StructType.java
@@ -20,23 +20,21 @@ package org.apache.impala.catalog;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.commons.lang3.StringUtils;
-
 import org.apache.impala.thrift.TColumnType;
-import org.apache.impala.thrift.TStructField;
 import org.apache.impala.thrift.TTypeNode;
 import org.apache.impala.thrift.TTypeNodeType;
+
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 /**
  * Describes a STRUCT type. STRUCT types have a list of named struct fields.
  */
 public class StructType extends Type {
-  private final HashMap<String, StructField> fieldMap_ = Maps.newHashMap();
+  private final Map<String, StructField> fieldMap_ = new HashMap<>();
   private final List<StructField> fields_;
 
   public StructType(List<StructField> fields) {
@@ -49,13 +47,13 @@ public class StructType extends Type {
   }
 
   public StructType() {
-    fields_ = Lists.newArrayList();
+    fields_ = new ArrayList<>();
   }
 
   @Override
   public String toSql(int depth) {
     if (depth >= MAX_NESTING_DEPTH) return "STRUCT<...>";
-    ArrayList<String> fieldsSql = Lists.newArrayList();
+    List<String> fieldsSql = new ArrayList<>();
     for (StructField f: fields_) fieldsSql.add(f.toSql(depth + 1));
     return String.format("STRUCT<%s>", Joiner.on(",").join(fieldsSql));
   }
@@ -63,7 +61,7 @@ public class StructType extends Type {
   @Override
   protected String prettyPrint(int lpad) {
     String leftPadding = StringUtils.repeat(' ', lpad);
-    ArrayList<String> fieldsSql = Lists.newArrayList();
+    List<String> fieldsSql = new ArrayList<>();
     for (StructField f: fields_) fieldsSql.add(f.prettyPrint(lpad + 2));
     return String.format("%sSTRUCT<\n%s\n%s>",
         leftPadding, Joiner.on(",\n").join(fieldsSql), leftPadding);
@@ -100,7 +98,7 @@ public class StructType extends Type {
     Preconditions.checkNotNull(fields_);
     Preconditions.checkState(!fields_.isEmpty());
     node.setType(TTypeNodeType.STRUCT);
-    node.setStruct_fields(new ArrayList<TStructField>());
+    node.setStruct_fields(new ArrayList<>());
     for (StructField field: fields_) {
       field.toThrift(container, node);
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/Table.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Table.java b/fe/src/main/java/org/apache/impala/catalog/Table.java
index 97cbd62..f506078 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Table.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Table.java
@@ -19,6 +19,7 @@ package org.apache.impala.catalog;
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -52,7 +53,6 @@ import org.apache.log4j.Logger;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 /**
  * Base class for table metadata.
@@ -94,10 +94,10 @@ public abstract class Table extends CatalogObjectImpl implements FeTable {
 
   // colsByPos[i] refers to the ith column in the table. The first numClusteringCols are
   // the clustering columns.
-  protected final ArrayList<Column> colsByPos_ = Lists.newArrayList();
+  protected final ArrayList<Column> colsByPos_ = new ArrayList<>();
 
   // map from lowercase column name to Column object.
-  private final Map<String, Column> colsByName_ = Maps.newHashMap();
+  private final Map<String, Column> colsByName_ = new HashMap<>();
 
   // Type of this table (array of struct) that mirrors the columns. Useful for analysis.
   protected final ArrayType type_ = new ArrayType(new StructType());
@@ -135,6 +135,7 @@ public abstract class Table extends CatalogObjectImpl implements FeTable {
   }
 
   public ReentrantLock getLock() { return tableLock_; }
+  @Override
   public abstract TTableDescriptor toThriftDescriptor(
       int tableId, Set<Long> referencedPartitions);
 
@@ -214,7 +215,7 @@ public abstract class Table extends CatalogObjectImpl implements FeTable {
   // stats. This method allows each table type to volunteer the set of columns we should
   // ask the metastore for in loadAllColumnStats().
   protected List<String> getColumnNamesWithHmsStats() {
-    List<String> ret = Lists.newArrayList();
+    List<String> ret = new ArrayList<>();
     for (String name: colsByName_.keySet()) ret.add(name);
     return ret;
   }
@@ -356,8 +357,8 @@ public abstract class Table extends CatalogObjectImpl implements FeTable {
     table.setAccess_level(accessLevel_);
 
     // Populate both regular columns and clustering columns (if there are any).
-    table.setColumns(new ArrayList<TColumn>());
-    table.setClustering_columns(new ArrayList<TColumn>());
+    table.setColumns(new ArrayList<>());
+    table.setClustering_columns(new ArrayList<>());
     for (int i = 0; i < colsByPos_.size(); ++i) {
       TColumn colDesc = colsByPos_.get(i).toThrift();
       // Clustering columns come first.
@@ -453,7 +454,7 @@ public abstract class Table extends CatalogObjectImpl implements FeTable {
   }
 
   @Override // FeTable
-  public ArrayList<Column> getColumns() { return colsByPos_; }
+  public List<Column> getColumns() { return colsByPos_; }
 
   @Override // FeTable
   public List<String> getColumnNames() { return Column.toColumnNames(colsByPos_); }
@@ -474,7 +475,7 @@ public abstract class Table extends CatalogObjectImpl implements FeTable {
 
   @Override // FeTable
   public List<Column> getColumnsInHiveOrder() {
-    ArrayList<Column> columns = Lists.newArrayList(getNonClusteringColumns());
+    List<Column> columns = Lists.newArrayList(getNonClusteringColumns());
     columns.addAll(getClusteringColumns());
     return Collections.unmodifiableList(columns);
   }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/TableLoadingMgr.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/TableLoadingMgr.java b/fe/src/main/java/org/apache/impala/catalog/TableLoadingMgr.java
index d07c0ed..b79af30 100644
--- a/fe/src/main/java/org/apache/impala/catalog/TableLoadingMgr.java
+++ b/fe/src/main/java/org/apache/impala/catalog/TableLoadingMgr.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.catalog;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.Callable;
@@ -34,7 +35,6 @@ import org.apache.impala.util.HdfsCachingUtil;
 import org.apache.log4j.Logger;
 
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Maps;
 
 /**
 * Class that manages scheduling the loading of table metadata from the Hive Metastore and
@@ -114,13 +114,13 @@ public class TableLoadingMgr {
   // attempts to load the same table by a different thread become no-ops.
   // This map is different from loadingTables_ because the latter tracks all in-flight
   // loads - even those being processed by threads other than table loading threads.
-  private final ConcurrentHashMap<TTableName, AtomicBoolean> tableLoadingBarrier_ =
-      new ConcurrentHashMap<TTableName, AtomicBoolean>();
+  private final Map<TTableName, AtomicBoolean> tableLoadingBarrier_ =
+      new ConcurrentHashMap<>();
 
   // Map of table name to a FutureTask associated with the table load. Used to
   // prevent duplicate loads of the same table.
-  private final ConcurrentHashMap<TTableName, FutureTask<Table>> loadingTables_ =
-      new ConcurrentHashMap<TTableName, FutureTask<Table>>();
+  private final Map<TTableName, FutureTask<Table>> loadingTables_ =
+      new ConcurrentHashMap<>();
 
   // Map of table name to the cache directives that are being waited on for that table.
   // Once all directives have completed, the table's metadata will be refreshed and
@@ -128,7 +128,7 @@ public class TableLoadingMgr {
   // A caching operation may take a long time to complete, so to maximize query
   // throughput it is preferable to allow the user to continue to run queries against
   // the table while a cache request completes in the background.
-  private final Map<TTableName, List<Long>> pendingTableCacheDirs_ = Maps.newHashMap();
+  private final Map<TTableName, List<Long>> pendingTableCacheDirs_ = new HashMap<>();
 
   // The number of parallel threads to use to load table metadata. Should be set to a
   // value that provides good throughput while not putting too much stress on the

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/TopicUpdateLog.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/TopicUpdateLog.java b/fe/src/main/java/org/apache/impala/catalog/TopicUpdateLog.java
index 9d23c4f..779d8f7 100644
--- a/fe/src/main/java/org/apache/impala/catalog/TopicUpdateLog.java
+++ b/fe/src/main/java/org/apache/impala/catalog/TopicUpdateLog.java
@@ -17,10 +17,11 @@
 
 package org.apache.impala.catalog;
 
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import org.apache.log4j.Logger;
+
 import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
 
@@ -90,7 +91,7 @@ public class TopicUpdateLog {
 
   // Entries in the topic update log stored as a map of catalog object keys to
   // Entry objects.
-  private final ConcurrentHashMap<String, Entry> topicLogEntries_ =
+  private final Map<String, Entry> topicLogEntries_ =
       new ConcurrentHashMap<>();
 
   /**

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/Type.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Type.java b/fe/src/main/java/org/apache/impala/catalog/Type.java
index 73f15e0..c98d7aa 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Type.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Type.java
@@ -31,6 +31,7 @@ import org.apache.impala.thrift.TPrimitiveType;
 import org.apache.impala.thrift.TScalarType;
 import org.apache.impala.thrift.TStructField;
 import org.apache.impala.thrift.TTypeNode;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
@@ -71,19 +72,19 @@ public abstract class Type {
   public static final ScalarType FIXED_UDA_INTERMEDIATE =
       ScalarType.createFixedUdaIntermediateType(-1);
 
-  private static ArrayList<ScalarType> integerTypes;
-  private static ArrayList<ScalarType> numericTypes;
-  private static ArrayList<ScalarType> supportedTypes;
-  private static ArrayList<ScalarType> unsupportedTypes;
+  private static List<ScalarType> integerTypes;
+  private static List<ScalarType> numericTypes;
+  private static List<ScalarType> supportedTypes;
+  private static List<ScalarType> unsupportedTypes;
 
   static {
-    integerTypes = Lists.newArrayList();
+    integerTypes = new ArrayList<>();
     integerTypes.add(TINYINT);
     integerTypes.add(SMALLINT);
     integerTypes.add(INT);
     integerTypes.add(BIGINT);
 
-    numericTypes = Lists.newArrayList();
+    numericTypes = new ArrayList<>();
     numericTypes.add(TINYINT);
     numericTypes.add(SMALLINT);
     numericTypes.add(INT);
@@ -92,7 +93,7 @@ public abstract class Type {
     numericTypes.add(DOUBLE);
     numericTypes.add(DECIMAL);
 
-    supportedTypes = Lists.newArrayList();
+    supportedTypes = new ArrayList<>();
     supportedTypes.add(NULL);
     supportedTypes.add(BOOLEAN);
     supportedTypes.add(TINYINT);
@@ -107,22 +108,22 @@ public abstract class Type {
     supportedTypes.add(TIMESTAMP);
     supportedTypes.add(DECIMAL);
 
-    unsupportedTypes = Lists.newArrayList();
+    unsupportedTypes = new ArrayList<>();
     unsupportedTypes.add(BINARY);
     unsupportedTypes.add(DATE);
     unsupportedTypes.add(DATETIME);
   }
 
-  public static ArrayList<ScalarType> getIntegerTypes() {
+  public static List<ScalarType> getIntegerTypes() {
     return integerTypes;
   }
-  public static ArrayList<ScalarType> getNumericTypes() {
+  public static List<ScalarType> getNumericTypes() {
     return numericTypes;
   }
-  public static ArrayList<ScalarType> getSupportedTypes() {
+  public static List<ScalarType> getSupportedTypes() {
     return supportedTypes;
   }
-  public static ArrayList<ScalarType> getUnsupportedTypes() {
+  public static List<ScalarType> getUnsupportedTypes() {
     return unsupportedTypes;
   }
 
@@ -229,7 +230,7 @@ public abstract class Type {
 
   public TColumnType toThrift() {
     TColumnType container = new TColumnType();
-    container.setTypes(new ArrayList<TTypeNode>());
+    container.setTypes(new ArrayList<>());
     toThrift(container);
     return container;
   }
@@ -367,8 +368,8 @@ public abstract class Type {
     return toThrift(Lists.newArrayList(types));
   }
 
-  public static List<TColumnType> toThrift(ArrayList<Type> types) {
-    ArrayList<TColumnType> result = Lists.newArrayList();
+  public static List<TColumnType> toThrift(List<Type> types) {
+    List<TColumnType> result = new ArrayList<>();
     for (Type t: types) {
       result.add(t.toThrift());
     }
@@ -429,7 +430,7 @@ public abstract class Type {
       }
       case STRUCT: {
         Preconditions.checkState(nodeIdx + node.getStruct_fieldsSize() < col.getTypesSize());
-        ArrayList<StructField> structFields = Lists.newArrayList();
+        List<StructField> structFields = new ArrayList<>();
         ++nodeIdx;
         for (int i = 0; i < node.getStruct_fieldsSize(); ++i) {
           TStructField thriftField = node.getStruct_fields().get(i);

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/CatalogdMetaProvider.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/CatalogdMetaProvider.java b/fe/src/main/java/org/apache/impala/catalog/local/CatalogdMetaProvider.java
index 0c74dfa..0bc04a2 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/CatalogdMetaProvider.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/CatalogdMetaProvider.java
@@ -19,6 +19,7 @@ package org.apache.impala.catalog.local;
 
 import java.lang.management.ManagementFactory;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -41,10 +42,10 @@ import org.apache.impala.catalog.Catalog;
 import org.apache.impala.catalog.CatalogDeltaLog;
 import org.apache.impala.catalog.CatalogException;
 import org.apache.impala.catalog.Function;
-import org.apache.impala.catalog.Principal;
-import org.apache.impala.catalog.PrincipalPrivilege;
 import org.apache.impala.catalog.HdfsPartition.FileDescriptor;
 import org.apache.impala.catalog.ImpaladCatalog.ObjectUpdateSequencer;
+import org.apache.impala.catalog.Principal;
+import org.apache.impala.catalog.PrincipalPrivilege;
 import org.apache.impala.common.InternalException;
 import org.apache.impala.common.Pair;
 import org.apache.impala.common.Reference;
@@ -608,7 +609,6 @@ public class CatalogdMetaProvider implements MetaProvider {
     return ret;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public List<PartitionRef> loadPartitionList(final TableMetaRef table)
       throws TException {
@@ -652,7 +652,7 @@ public class CatalogdMetaProvider implements MetaProvider {
     final int numMisses = partitionRefs.size() - numHits;
 
     // Load the remainder from the catalogd.
-    List<PartitionRef> missingRefs = Lists.newArrayList();
+    List<PartitionRef> missingRefs = new ArrayList<>();
     for (PartitionRef ref: partitionRefs) {
       if (!refToMeta.containsKey(ref)) missingRefs.add(ref);
     }
@@ -1049,7 +1049,7 @@ public class CatalogdMetaProvider implements MetaProvider {
    */
   @VisibleForTesting
   void invalidateCacheForObject(TCatalogObject obj) {
-    List<String> invalidated = Lists.newArrayList();
+    List<String> invalidated = new ArrayList<>();
     switch (obj.type) {
     case TABLE:
     case VIEW:

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/DirectMetaProvider.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/DirectMetaProvider.java b/fe/src/main/java/org/apache/impala/catalog/local/DirectMetaProvider.java
index edba217..8bc8996 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/DirectMetaProvider.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/DirectMetaProvider.java
@@ -19,6 +19,7 @@ package org.apache.impala.catalog.local;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
@@ -292,7 +293,7 @@ class DirectMetaProvider implements MetaProvider {
       String partName, Partition msPartition, ListMap<TNetworkAddress> hostIndex) {
     Path partDir = new Path(msPartition.getSd().getLocation());
 
-    List<LocatedFileStatus> stats = Lists.newArrayList();
+    List<LocatedFileStatus> stats = new ArrayList<>();
     try {
       FileSystem fs = partDir.getFileSystem(CONF);
       RemoteIterator<LocatedFileStatus> it = fs.listFiles(partDir, /*recursive=*/false);

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java b/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
index 96e3325..56d275a 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalCatalog.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.catalog.local;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -37,10 +38,10 @@ import org.apache.impala.catalog.FeFsTable;
 import org.apache.impala.catalog.FeTable;
 import org.apache.impala.catalog.Function;
 import org.apache.impala.catalog.Function.CompareMode;
-import org.apache.impala.common.InternalException;
 import org.apache.impala.catalog.HdfsCachePool;
 import org.apache.impala.catalog.PartitionNotFoundException;
 import org.apache.impala.catalog.PrunablePartition;
+import org.apache.impala.common.InternalException;
 import org.apache.impala.thrift.TCatalogObject;
 import org.apache.impala.thrift.TGetPartitionStatsResponse;
 import org.apache.impala.thrift.TPartitionKeyValue;
@@ -50,7 +51,6 @@ import org.apache.thrift.TException;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Maps;
 
 /**
  * Implementation of FeCatalog which runs within the impalad and fetches metadata
@@ -69,7 +69,7 @@ import com.google.common.collect.Maps;
  */
 public class LocalCatalog implements FeCatalog {
   private final MetaProvider metaProvider_;
-  private Map<String, FeDb> dbs_ = Maps.newHashMap();
+  private Map<String, FeDb> dbs_ = new HashMap<>();
   private String nullPartitionKeyValue_;
   private final String defaultKuduMasterHosts_;
 
@@ -86,7 +86,7 @@ public class LocalCatalog implements FeCatalog {
 
   private void loadDbs() {
     if (!dbs_.isEmpty()) return;
-    Map<String, FeDb> dbs = Maps.newHashMap();
+    Map<String, FeDb> dbs = new HashMap<>();
     List<String> names;
     try {
       names = metaProvider_.loadDbList();

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/LocalDb.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalDb.java b/fe/src/main/java/org/apache/impala/catalog/local/LocalDb.java
index c7f7116..20d84f5 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalDb.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalDb.java
@@ -17,7 +17,9 @@
 
 package org.apache.impala.catalog.local;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -37,13 +39,10 @@ import org.apache.impala.thrift.TFunctionCategory;
 import org.apache.impala.util.FunctionUtils;
 import org.apache.impala.util.PatternMatcher;
 import org.apache.thrift.TException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
 
@@ -54,8 +53,6 @@ import com.google.common.collect.Maps;
  * each catalog instance.
  */
 class LocalDb implements FeDb {
-  private static final Logger LOG = LoggerFactory.getLogger(LocalDb.class);
-
   private final LocalCatalog catalog_;
   /** The lower-case name of the database. */
   private final String name_;
@@ -149,7 +146,7 @@ class LocalDb implements FeDb {
    */
   private void loadTableNames() {
     if (tables_ != null) return;
-    Map<String, LocalTable> newMap = Maps.newHashMap();
+    Map<String, LocalTable> newMap = new HashMap<>();
     try {
       List<String> names = catalog_.getMetaProvider().loadTableNames(name_);
       for (String tableName : names) {
@@ -242,7 +239,7 @@ class LocalDb implements FeDb {
   public List<Function> getFunctions(
       TFunctionCategory category, PatternMatcher matcher) {
     loadFunctionNames();
-    List<Function> result = Lists.newArrayList();
+    List<Function> result = new ArrayList<>();
     Iterable<String> fnNames = Iterables.filter(functions_.keySet(), matcher);
     for (String fnName : fnNames) {
       result.addAll(getFunctions(category, fnName));

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/LocalFsTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalFsTable.java b/fe/src/main/java/org/apache/impala/catalog/local/LocalFsTable.java
index 5b16fbe..a1266c3 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalFsTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalFsTable.java
@@ -20,6 +20,7 @@ package org.apache.impala.catalog.local;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -65,7 +66,6 @@ import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 public class LocalFsTable extends LocalTable implements FeFsTable {
   /**
@@ -81,7 +81,7 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
    *
    * Set by loadPartitionValueMap().
    */
-  private ArrayList<TreeMap<LiteralExpr, HashSet<Long>>> partitionValueMap_;
+  private List<TreeMap<LiteralExpr, Set<Long>>> partitionValueMap_;
 
   /**
    * For each partition column, the set of partition IDs having a NULL value
@@ -89,7 +89,7 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
    *
    * Set by loadPartitionValueMap().
    */
-  private ArrayList<HashSet<Long>> nullPartitionIds_;
+  private List<Set<Long>> nullPartitionIds_;
 
   /**
    * The value that will be stored in a partition name to indicate NULL.
@@ -277,7 +277,7 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
       // null means "all partitions".
       referencedPartitions = getPartitionIds();
     }
-    Map<Long, THdfsPartition> idToPartition = Maps.newHashMap();
+    Map<Long, THdfsPartition> idToPartition = new HashMap<>();
     List<? extends FeFsPartition> partitions = loadPartitions(referencedPartitions);
     for (FeFsPartition partition : partitions) {
       idToPartition.put(partition.getId(),
@@ -360,7 +360,7 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
   }
 
   @Override
-  public TreeMap<LiteralExpr, HashSet<Long>> getPartitionValueMap(int col) {
+  public TreeMap<LiteralExpr, Set<Long>> getPartitionValueMap(int col) {
     loadPartitionValueMap();
     return partitionValueMap_.get(col);
   }
@@ -383,7 +383,7 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
     // Possible in the case that all partitions were pruned.
     if (ids.isEmpty()) return Collections.emptyList();
 
-    List<PartitionRef> refs = Lists.newArrayList();
+    List<PartitionRef> refs = new ArrayList<>();
     for (Long id : ids) {
       LocalPartitionSpec spec = partitionSpecs_.get(id);
       Preconditions.checkArgument(spec != null, "Invalid partition ID for table %s: %s",
@@ -430,13 +430,13 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
     if (partitionValueMap_ != null) return;
 
     loadPartitionSpecs();
-    ArrayList<TreeMap<LiteralExpr, HashSet<Long>>> valMapByCol =
+    List<TreeMap<LiteralExpr, Set<Long>>> valMapByCol =
         new ArrayList<>();
-    ArrayList<HashSet<Long>> nullParts = new ArrayList<>();
+    List<Set<Long>> nullParts = new ArrayList<>();
 
     for (int i = 0; i < getNumClusteringCols(); i++) {
-      valMapByCol.add(new TreeMap<LiteralExpr, HashSet<Long>>());
-      nullParts.add(new HashSet<Long>());
+      valMapByCol.add(new TreeMap<>());
+      nullParts.add(new HashSet<>());
     }
     for (LocalPartitionSpec partition : partitionSpecs_.values()) {
       List<LiteralExpr> vals = partition.getPartitionValues();
@@ -447,7 +447,7 @@ public class LocalFsTable extends LocalTable implements FeFsTable {
           continue;
         }
 
-        HashSet<Long> ids = valMapByCol.get(i).get(val);
+        Set<Long> ids = valMapByCol.get(i).get(val);
         if (ids == null) {
           ids = new HashSet<>();
           valMapByCol.get(i).put(val,  ids);

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/LocalHbaseTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalHbaseTable.java b/fe/src/main/java/org/apache/impala/catalog/local/LocalHbaseTable.java
index 8480500..ca88a9f 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalHbaseTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalHbaseTable.java
@@ -17,6 +17,10 @@
 
 package org.apache.impala.catalog.local;
 
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hive.metastore.api.MetaException;
 import org.apache.hadoop.hive.metastore.api.Table;
@@ -30,10 +34,6 @@ import org.apache.impala.thrift.TResultSet;
 import org.apache.impala.thrift.TTableDescriptor;
 import org.apache.impala.thrift.TTableType;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Set;
-
 public class LocalHbaseTable extends LocalTable implements FeHBaseTable {
   // Name of table in HBase.
   // 'this.name' is the alias of the HBase table in Hive.
@@ -102,7 +102,7 @@ public class LocalHbaseTable extends LocalTable implements FeHBaseTable {
   }
 
   @Override
-  public ArrayList<Column> getColumnsInHiveOrder() {
+  public List<Column> getColumnsInHiveOrder() {
     return getColumns();
   }
 

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/LocalKuduTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalKuduTable.java b/fe/src/main/java/org/apache/impala/catalog/local/LocalKuduTable.java
index fc48ca1..3ba2db3 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalKuduTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalKuduTable.java
@@ -176,7 +176,7 @@ public class LocalKuduTable extends LocalTable implements FeKuduTable {
     Preconditions.checkNotNull(partitionBy_);
     // IMPALA-5154: partitionBy_ may be empty if Kudu table created outside Impala,
     // partition_by must be explicitly created because the field is required.
-    tbl.partition_by = Lists.newArrayList();
+    tbl.partition_by = new ArrayList<>();
     for (KuduPartitionParam partitionParam: partitionBy_) {
       tbl.addToPartition_by(partitionParam.toThrift());
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/local/LocalTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/local/LocalTable.java b/fe/src/main/java/org/apache/impala/catalog/local/LocalTable.java
index 81a0741..c544890 100644
--- a/fe/src/main/java/org/apache/impala/catalog/local/LocalTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/local/LocalTable.java
@@ -185,14 +185,14 @@ abstract class LocalTable implements FeTable {
   }
 
   @Override
-  public ArrayList<Column> getColumns() {
+  public List<Column> getColumns() {
     // TODO(todd) why does this return ArrayList instead of List?
     return new ArrayList<>(cols_.colsByPos_);
   }
 
   @Override
   public List<Column> getColumnsInHiveOrder() {
-    ArrayList<Column> columns = Lists.newArrayList(getNonClusteringColumns());
+    List<Column> columns = Lists.newArrayList(getNonClusteringColumns());
     columns.addAll(getClusteringColumns());
     return columns;
   }
@@ -327,7 +327,7 @@ abstract class LocalTable implements FeTable {
 
 
     private static StructType columnsToStructType(List<Column> cols) {
-      ArrayList<StructField> fields = Lists.newArrayListWithCapacity(cols.size());
+      List<StructField> fields = Lists.newArrayListWithCapacity(cols.size());
       for (Column col : cols) {
         fields.add(new StructField(col.getName(), col.getType(), col.getComment()));
       }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/planner/HdfsPartitionPruner.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/planner/HdfsPartitionPruner.java b/fe/src/main/java/org/apache/impala/planner/HdfsPartitionPruner.java
index fad5cf0..9fb204a 100644
--- a/fe/src/main/java/org/apache/impala/planner/HdfsPartitionPruner.java
+++ b/fe/src/main/java/org/apache/impala/planner/HdfsPartitionPruner.java
@@ -252,7 +252,7 @@ public class HdfsPartitionPruner {
     // Get the partition column position and retrieve the associated partition
     // value metadata.
     int partitionPos = slot.getDesc().getColumn().getPosition();
-    TreeMap<LiteralExpr, HashSet<Long>> partitionValueMap =
+    TreeMap<LiteralExpr, Set<Long>> partitionValueMap =
         tbl_.getPartitionValueMap(partitionPos);
     if (partitionValueMap.isEmpty()) return new HashSet<>();
 
@@ -297,7 +297,7 @@ public class HdfsPartitionPruner {
     }
 
     // Determine the partition key value range of this predicate.
-    NavigableMap<LiteralExpr, HashSet<Long>> rangeValueMap = null;
+    NavigableMap<LiteralExpr, Set<Long>> rangeValueMap = null;
     LiteralExpr firstKey = partitionValueMap.firstKey();
     LiteralExpr lastKey = partitionValueMap.lastKey();
     boolean upperInclusive = false;
@@ -357,7 +357,7 @@ public class HdfsPartitionPruner {
     SlotRef slot = inPredicate.getBoundSlot();
     Preconditions.checkNotNull(slot);
     int partitionPos = slot.getDesc().getColumn().getPosition();
-    TreeMap<LiteralExpr, HashSet<Long>> partitionValueMap =
+    TreeMap<LiteralExpr, Set<Long>> partitionValueMap =
         tbl_.getPartitionValueMap(partitionPos);
 
     if (inPredicate.isNotIn()) {

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/test/java/org/apache/impala/catalog/CatalogObjectToFromThriftTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/catalog/CatalogObjectToFromThriftTest.java b/fe/src/test/java/org/apache/impala/catalog/CatalogObjectToFromThriftTest.java
index 114e289..0747464 100644
--- a/fe/src/test/java/org/apache/impala/catalog/CatalogObjectToFromThriftTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/CatalogObjectToFromThriftTest.java
@@ -19,6 +19,7 @@ package org.apache.impala.catalog;
 
 import static org.junit.Assert.fail;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Map;
 
@@ -228,7 +229,7 @@ public class CatalogObjectToFromThriftTest {
       new HdfsPartition(hdfsTable, part.toHmsPartition(),
         Lists.newArrayList(LiteralExpr.create("11.1", ScalarType.createDecimalType(1, 0)),
             LiteralExpr.create("11.1", ScalarType.createDecimalType(1, 0))),
-        null, Lists.<HdfsPartition.FileDescriptor>newArrayList(),
+        null, new ArrayList<>(),
         TAccessLevel.READ_WRITE);
       fail("Expected metadata to be malformed.");
     } catch (SqlCastException e) {

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/test/java/org/apache/impala/catalog/CatalogTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/catalog/CatalogTest.java b/fe/src/test/java/org/apache/impala/catalog/CatalogTest.java
index 2226dc0..0946b38 100644
--- a/fe/src/test/java/org/apache/impala/catalog/CatalogTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/CatalogTest.java
@@ -70,7 +70,6 @@ import org.junit.Test;
 import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
 public class CatalogTest {
@@ -430,7 +429,7 @@ public class CatalogTest {
     assertEquals(24, partitions.size());
     Set<HdfsStorageDescriptor> uniqueSds = Collections.newSetFromMap(
         new IdentityHashMap<HdfsStorageDescriptor, Boolean>());
-    Set<Long> months = Sets.newHashSet();
+    Set<Long> months = new HashSet<>();
     for (FeFsPartition p: partitions) {
       assertEquals(2, p.getPartitionValues().size());
 
@@ -740,7 +739,7 @@ public class CatalogTest {
 
   private List<String> getFunctionSignatures(String db) throws DatabaseNotFoundException {
     List<Function> fns = catalog_.getFunctions(db);
-    List<String> names = Lists.newArrayList();
+    List<String> names = new ArrayList<>();
     for (Function fn: fns) {
       names.add(fn.signatureString());
     }
@@ -752,9 +751,9 @@ public class CatalogTest {
     List<String> fnNames = getFunctionSignatures("default");
     assertEquals(fnNames.size(), 0);
 
-    ArrayList<Type> args1 = Lists.newArrayList();
-    ArrayList<Type> args2 = Lists.<Type>newArrayList(Type.INT);
-    ArrayList<Type> args3 = Lists.<Type>newArrayList(Type.TINYINT);
+    List<Type> args1 = new ArrayList<>();
+    List<Type> args2 = Lists.<Type>newArrayList(Type.INT);
+    List<Type> args3 = Lists.<Type>newArrayList(Type.TINYINT);
 
     catalog_.removeFunction(
         new Function(new FunctionName("default", "Foo"), args1,
@@ -837,7 +836,7 @@ public class CatalogTest {
     assertEquals(fnNames.size(), 0);
 
     // Test to check if catalog can handle loading corrupt udfs
-    HashMap<String, String> dbParams = Maps.newHashMap();
+    Map<String, String> dbParams = new HashMap<>();
     String badFnKey = "impala_registered_function_badFn";
     String badFnVal = Base64.encodeBase64String("badFn".getBytes());
     String dbName = "corrupt_udf_test";
@@ -899,7 +898,7 @@ public class CatalogTest {
     assertNull(catalog_.getAuthPolicy().getPrincipal("role1", TPrincipalType.USER));
     assertNull(catalog_.getAuthPolicy().getPrincipal("role2", TPrincipalType.ROLE));
     // Add the same role, the old role will be deleted.
-    role = catalog_.addRole("role1", new HashSet<String>());
+    role = catalog_.addRole("role1", new HashSet<>());
     assertSame(role, authPolicy.getPrincipal("role1", TPrincipalType.ROLE));
     // Delete the role.
     assertSame(role, catalog_.removeRole("role1"));
@@ -912,7 +911,7 @@ public class CatalogTest {
     for (int i = 0; i < size; i++) {
       String name = prefix + i;
       catalog_.addUser(name);
-      catalog_.addRole(name, new HashSet<String>());
+      catalog_.addRole(name, new HashSet<>());
     }
 
     for (int i = 0; i < size; i++) {

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/test/java/org/apache/impala/catalog/HdfsPartitionTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/catalog/HdfsPartitionTest.java b/fe/src/test/java/org/apache/impala/catalog/HdfsPartitionTest.java
index f40897d..72d0cde 100644
--- a/fe/src/test/java/org/apache/impala/catalog/HdfsPartitionTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/HdfsPartitionTest.java
@@ -18,7 +18,8 @@
 package org.apache.impala.catalog;
 
 import static org.apache.impala.catalog.HdfsPartition.comparePartitionKeyValues;
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -48,13 +49,13 @@ public class HdfsPartitionTest {
     FeSupport.loadLibrary();
   }
 
-  private List<LiteralExpr> valuesNull_= Lists.newArrayList();
-  private List<LiteralExpr> valuesDecimal_ = Lists.newArrayList();
-  private List<LiteralExpr> valuesDecimal1_ = Lists.newArrayList();
-  private List<LiteralExpr> valuesDecimal2_ = Lists.newArrayList();
-  private List<LiteralExpr> valuesMixed_= Lists.newArrayList();
-  private List<LiteralExpr> valuesMixed1_ = Lists.newArrayList();
-  private List<LiteralExpr> valuesMixed2_ = Lists.newArrayList();
+  private List<LiteralExpr> valuesNull_= new ArrayList<>();
+  private List<LiteralExpr> valuesDecimal_ = new ArrayList<>();
+  private List<LiteralExpr> valuesDecimal1_ = new ArrayList<>();
+  private List<LiteralExpr> valuesDecimal2_ = new ArrayList<>();
+  private List<LiteralExpr> valuesMixed_= new ArrayList<>();
+  private List<LiteralExpr> valuesMixed1_ = new ArrayList<>();
+  private List<LiteralExpr> valuesMixed2_ = new ArrayList<>();
 
   public HdfsPartitionTest() {
     valuesNull_.add(NullLiteral.create(Type.BIGINT));
@@ -77,7 +78,7 @@ public class HdfsPartitionTest {
 
   @Test
   public void testCompare() {
-    List<List<LiteralExpr>> allLists = Lists.newArrayList();
+    List<List<LiteralExpr>> allLists = new ArrayList<>();
     allLists.add(valuesNull_);
     allLists.add(valuesDecimal_);
     allLists.add(valuesDecimal1_);
@@ -96,7 +97,7 @@ public class HdfsPartitionTest {
       }
     }
 
-    List<LiteralExpr> valuesTest = Lists.newArrayList();
+    List<LiteralExpr> valuesTest = new ArrayList<>();
     valuesTest.add(NumericLiteral.create(3));
     verifyAntiSymmetric(valuesDecimal1_, valuesTest, valuesNull_);
     valuesTest.add(NullLiteral.create(Type.BIGINT));

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/test/java/org/apache/impala/catalog/HdfsStorageDescriptorTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/catalog/HdfsStorageDescriptorTest.java b/fe/src/test/java/org/apache/impala/catalog/HdfsStorageDescriptorTest.java
index d814497..4abf782 100644
--- a/fe/src/test/java/org/apache/impala/catalog/HdfsStorageDescriptorTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/HdfsStorageDescriptorTest.java
@@ -27,12 +27,12 @@ import java.util.List;
 import org.apache.hadoop.hive.metastore.api.SerDeInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
 import org.apache.hadoop.hive.serde.serdeConstants;
-import org.junit.BeforeClass;
-import org.junit.Test;
-
 import org.apache.impala.catalog.HdfsStorageDescriptor.InvalidStorageDescriptorException;
 import org.apache.impala.service.FeSupport;
 import org.apache.impala.thrift.THdfsFileFormat;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
 import com.google.common.collect.ImmutableList;
 
 public class HdfsStorageDescriptorTest {
@@ -96,32 +96,32 @@ public class HdfsStorageDescriptorTest {
   public void testDelimiters() throws InvalidStorageDescriptorException {
     StorageDescriptor sd = HiveStorageDescriptorFactory.createSd(THdfsFileFormat.TEXT,
         RowFormat.DEFAULT_ROW_FORMAT);
-    sd.setParameters(new HashMap<String, String>());
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.setParameters(new HashMap<>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "-2");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "-128");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "127");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.LINE_DELIM, "\001");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "|");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "\t");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "ab");
     try {
       HdfsStorageDescriptor.fromStorageDescriptor("fake", sd);
@@ -132,7 +132,7 @@ public class HdfsStorageDescriptorTest {
           e.getMessage());
     }
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "128");
     try {
       HdfsStorageDescriptor.fromStorageDescriptor("fake", sd);
@@ -143,7 +143,7 @@ public class HdfsStorageDescriptorTest {
           e.getMessage());
     }
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "\128");
     try {
       HdfsStorageDescriptor.fromStorageDescriptor("fake", sd);
@@ -154,7 +154,7 @@ public class HdfsStorageDescriptorTest {
           e.getMessage());
     }
 
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.LINE_DELIM, "-129");
     try {
       HdfsStorageDescriptor.fromStorageDescriptor("fake", sd);
@@ -166,7 +166,7 @@ public class HdfsStorageDescriptorTest {
     }
 
     // Test that a unicode character out of the valid range will not be accepted.
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.LINE_DELIM, "\u1111");
     try {
       HdfsStorageDescriptor.fromStorageDescriptor("fake", sd);
@@ -178,7 +178,7 @@ public class HdfsStorageDescriptorTest {
     }
 
     // Validate that unicode character in the valid range will be accepted.
-    sd.getSerdeInfo().setParameters(new HashMap<String,String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     sd.getSerdeInfo().putToParameters(serdeConstants.FIELD_DELIM, "\u0001");
     assertNotNull(HdfsStorageDescriptor.fromStorageDescriptor("fakeTbl", sd));
 

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/test/java/org/apache/impala/catalog/PartialCatalogInfoTest.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/catalog/PartialCatalogInfoTest.java b/fe/src/test/java/org/apache/impala/catalog/PartialCatalogInfoTest.java
index 6241523..1b5e288 100644
--- a/fe/src/test/java/org/apache/impala/catalog/PartialCatalogInfoTest.java
+++ b/fe/src/test/java/org/apache/impala/catalog/PartialCatalogInfoTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
@@ -30,8 +31,6 @@ import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import avro.shaded.com.google.common.collect.Lists;
-import com.google.common.base.Preconditions;
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
 import org.apache.impala.common.InternalException;
 import org.apache.impala.service.BackendConfig;
@@ -52,6 +51,7 @@ import org.apache.thrift.TException;
 import org.apache.thrift.TSerializer;
 import org.junit.Test;
 
+import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 public class PartialCatalogInfoTest {
@@ -97,7 +97,7 @@ public class PartialCatalogInfoTest {
     Preconditions.checkState(requestCount > 0);
     final ExecutorService threadPoolExecutor = Executors.newFixedThreadPool(requestCount);
     final List<Future<TGetPartialCatalogObjectResponse>> tasksToWaitFor =
-        Lists.newArrayList();
+        new ArrayList<>();
     for (int i = 0; i < requestCount; ++i) {
       tasksToWaitFor.add(threadPoolExecutor.submit(new
           CallableGetPartialCatalogObjectRequest(request)));

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/test/java/org/apache/impala/catalog/TestSchemaUtils.java
----------------------------------------------------------------------
diff --git a/fe/src/test/java/org/apache/impala/catalog/TestSchemaUtils.java b/fe/src/test/java/org/apache/impala/catalog/TestSchemaUtils.java
index 43ac610..171652d 100644
--- a/fe/src/test/java/org/apache/impala/catalog/TestSchemaUtils.java
+++ b/fe/src/test/java/org/apache/impala/catalog/TestSchemaUtils.java
@@ -23,8 +23,7 @@ import java.util.Map;
 public class TestSchemaUtils {
   // maps from PrimitiveType to column name
   // in alltypes table
-  private static Map<Type, String> typeToColumnNameMap_ =
-      new HashMap<Type, String>();
+  private static Map<Type, String> typeToColumnNameMap_ = new HashMap<>();
   static {
     typeToColumnNameMap_.put(Type.BOOLEAN, "bool_col");
     typeToColumnNameMap_.put(Type.TINYINT, "tinyint_col");


[06/10] impala git commit: IMPALA-6533: Add min-max filter for decimal types on kudu tables.

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/workloads/functional-query/queries/QueryTest/decimal_min_max_filters.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/decimal_min_max_filters.test b/testdata/workloads/functional-query/queries/QueryTest/decimal_min_max_filters.test
new file mode 100644
index 0000000..39001c0
--- /dev/null
+++ b/testdata/workloads/functional-query/queries/QueryTest/decimal_min_max_filters.test
@@ -0,0 +1,4937 @@
+====
+---- QUERY
+#########################################################
+# Additonal test cases for Decimal Min Max Filters
+# Covers the following:
+# 1.  Inner Join with broadcast (2 tables) with 4 predicates
+#     all results in decimal min-max filter
+# 2.  Inner Join with broadcast (2 tables) with 4 predicates
+#     3 results in decimal min=max filter; 1 doesn't
+# 3.  Inner Join with Shuffle (3 tables)
+# 4.  Right outer join (2 tables)
+# 5.  Left Semi join (2 tables)
+# 6.  Right Semi join (2 tables)
+#
+# Test case 1.1: Decimal Min-max filters multiple 4 bytes
+#########################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d5_0, a.d5_1, a.d5_3, a.d5_5
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_0 = b.d5_0
+and a.d5_1 = b.d5_1
+and a.d5_3 = b.d5_3
+and a.d5_5 = b.d5_5
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.000,0.00000
+2,0.2,0.200,0.20000
+3,0.3,0.030,0.03000
+4,0.4,0.004,0.00400
+5,0.5,0.005,0.00050
+6,0.6,0.006,0.00006
+11,1.1,0.011,0.00011
+18,1.8,0.018,0.00018
+19,1.9,0.019,0.00019
+27,2.7,0.027,0.00027
+28,2.8,0.028,0.00028
+29,2.9,0.029,0.00029
+38,3.8,0.038,0.00038
+39,3.9,0.039,0.00039
+49,4.9,0.049,0.00049
+78,7.8,0.078,0.00078
+89,8.9,0.089,0.00089
+91,9.1,0.091,0.00091
+167,16.7,0.167,0.00167
+178,17.8,0.178,0.00178
+222,22.2,0.222,0.00222
+223,22.3,0.223,0.00223
+333,33.3,0.333,0.00333
+334,33.4,0.334,0.00334
+444,44.4,0.444,0.00444
+445,44.5,0.445,0.00445
+555,55.5,0.555,0.00555
+556,55.6,0.556,0.00556
+666,66.6,0.666,0.00666
+667,66.7,0.667,0.00667
+777,77.7,0.777,0.00777
+888,88.8,0.888,0.00888
+999,99.9,0.999,0.00999
+1111,111.1,1.111,0.01111
+1112,111.2,1.112,0.01112
+7789,778.9,7.789,0.07789
+8891,889.1,8.891,0.08891
+9912,991.2,9.912,0.09912
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 102
+====
+---- QUERY
+#########################################################
+# Test case 1.2: Decimal Min-max filters multiple 4 bytes
+#########################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d9_0, a.d9_1, a.d9_5, a.d9_9
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_0 = b.d9_0
+and a.d9_1 = b.d9_1
+and a.d9_5 = b.d9_5
+and a.d9_9 = b.d9_9
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.00000,0.000000000
+2,0.2,0.20000,0.200000000
+3,0.3,0.03000,0.030000000
+4,0.4,0.00400,0.004000000
+5,0.5,0.00050,0.000500000
+6,0.6,0.00006,0.000060000
+11,1.1,0.00011,0.000000011
+18,1.8,0.00018,0.000000018
+19,1.9,0.00019,0.000000019
+27,2.7,0.00027,0.000000027
+28,2.8,0.00028,0.000000028
+29,2.9,0.00029,0.000000029
+38,3.8,0.00038,0.000000038
+39,3.9,0.00039,0.000000039
+49,4.9,0.00049,0.000000049
+78,7.8,0.00078,0.000078000
+89,8.9,0.00089,0.000008900
+91,9.1,0.00091,0.000000910
+167,16.7,0.00167,0.000000167
+178,17.8,0.00178,0.000000178
+222,22.2,0.00222,0.000000222
+223,22.3,0.00223,0.000000223
+333,33.3,0.00333,0.000000333
+334,33.4,0.00334,0.000000334
+444,44.4,0.00444,0.000000444
+445,44.5,0.00445,0.000000445
+555,55.5,0.00555,0.000000555
+556,55.6,0.00556,0.000000556
+666,66.6,0.00666,0.000000666
+667,66.7,0.00667,0.000000667
+777,77.7,0.00777,0.000000777
+888,88.8,0.00888,0.000000888
+999,99.9,0.00999,0.000000999
+1111,111.1,0.01111,0.000001111
+1112,111.2,0.01112,0.000001112
+7789,778.9,0.07789,0.000007789
+8891,889.1,0.08891,0.000008891
+9912,991.2,0.09912,0.000009912
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 99
+====
+---- QUERY
+#########################################################
+# Test case 1.3: Decimal Min-max filters multiple 8 bytes
+#########################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d14_0, a.d14_1, a.d14_7, a.d14_14
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_0 = b.d14_0
+and a.d14_1 = b.d14_1
+and a.d14_7 = b.d14_7
+and a.d14_14 = b.d14_14
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.0000000,0.00000000000000
+2,0.2,0.2000000,0.20000000000000
+3,0.3,0.0300000,0.03000000000000
+4,0.4,0.0040000,0.00400000000000
+5,0.5,0.0005000,0.00050000000000
+6,0.6,0.0000600,0.00006000000000
+11,1.1,0.0000011,0.00000001100000
+18,1.8,0.0000018,0.00000000000018
+19,1.9,0.0000019,0.00000000000019
+27,2.7,0.0000027,0.00000000000027
+28,2.8,0.0000028,0.00000000000028
+29,2.9,0.0000029,0.00000000000029
+38,3.8,0.0000038,0.00000000000038
+39,3.9,0.0000039,0.00000000000039
+49,4.9,0.0000049,0.00000000000049
+78,7.8,0.0000780,0.00007800000000
+89,8.9,0.0000089,0.00000890000000
+91,9.1,0.0000091,0.00000091000000
+167,16.7,0.0000167,0.00000000000167
+178,17.8,0.0000178,0.00000000000178
+222,22.2,0.0000222,0.00000000000222
+223,22.3,0.0000223,0.00000002230000
+333,33.3,0.0000333,0.00000000000333
+334,33.4,0.0000334,0.00000000334000
+444,44.4,0.0000444,0.00000000000444
+445,44.5,0.0000445,0.00000000044500
+555,55.5,0.0000555,0.00000000000555
+556,55.6,0.0000556,0.00000000005560
+666,66.6,0.0000666,0.00000000000666
+667,66.7,0.0000667,0.00000000000667
+777,77.7,0.0000777,0.00000000000777
+888,88.8,0.0000888,0.00000000000888
+999,99.9,0.0000999,0.00000000000999
+1111,111.1,0.0001111,0.00000000001111
+1112,111.2,0.0001112,0.00000000001112
+7789,778.9,0.0007789,0.00000000007789
+8891,889.1,0.0008891,0.00000000008891
+9912,991.2,0.0009912,0.00000000009912
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 97
+====
+---- QUERY
+#########################################################
+# Test case 1.4: Decimal Min-max filters multiple 8 bytes
+#########################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d18_0, a.d18_1, a.d18_9, a.d18_18
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d18_0 = b.d18_0
+and a.d18_1 = b.d18_1
+and a.d18_9 = b.d18_9
+and a.d18_18 = b.d18_18
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.000000000,0.000000000000000000
+2,0.2,0.200000000,0.200000000000000000
+3,0.3,0.030000000,0.030000000000000000
+4,0.4,0.004000000,0.004000000000000000
+5,0.5,0.000500000,0.000500000000000000
+6,0.6,0.000060000,0.000060000000000000
+11,1.1,0.000000011,0.000000011000000000
+18,1.8,0.000000018,0.000000000000000018
+19,1.9,0.000000019,0.000000000000000019
+27,2.7,0.000000027,0.000000000000000027
+28,2.8,0.000000028,0.000000000000000028
+29,2.9,0.000000029,0.000000000000000029
+38,3.8,0.000000038,0.000000000000000038
+39,3.9,0.000000039,0.000000000000000039
+49,4.9,0.000000049,0.000000000000000049
+78,7.8,0.000078000,0.000078000000000000
+89,8.9,0.000008900,0.000008900000000000
+91,9.1,0.000000910,0.000000910000000000
+167,16.7,0.000000167,0.000000000000000167
+178,17.8,0.000000178,0.000000000000000178
+222,22.2,0.000000222,0.000000000000000222
+223,22.3,0.000000223,0.000000022300000000
+333,33.3,0.000000333,0.000000000000000333
+334,33.4,0.000000334,0.000000003340000000
+444,44.4,0.000000444,0.000000000000000444
+445,44.5,0.000000445,0.000000000445000000
+555,55.5,0.000000555,0.000000000000000555
+556,55.6,0.000000556,0.000000000055600000
+666,66.6,0.000000666,0.000000000000000666
+667,66.7,0.000000667,0.000000000006670000
+777,77.7,0.000000777,0.000000000000000777
+888,88.8,0.000000888,0.000000000000000888
+999,99.9,0.000000999,0.000000000000000999
+1111,111.1,0.000001111,0.000000000000001111
+1112,111.2,0.000001112,0.000000000000001112
+7789,778.9,0.000007789,0.000000000007789000
+8891,889.1,0.000008891,0.000000000000889100
+9912,991.2,0.000009912,0.000000000000099120
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 99
+====
+---- QUERY
+##########################################################
+# Test case 1.5: Decimal Min-max filters multiple 16 bytes
+##########################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d28_0, a.d28_1, a.d28_14, a.d28_28
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_0 = b.d28_0
+and a.d28_1 = b.d28_1
+and a.d28_14 = b.d28_14
+and a.d28_28 = b.d28_28
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.00000000000000,0.0000000000000000000000000000
+2,0.2,0.20000000000000,0.2000000000000000000000000000
+3,0.3,0.03000000000000,0.0300000000000000000000000000
+4,0.4,0.00400000000000,0.0040000000000000000000000000
+5,0.5,0.00050000000000,0.0005000000000000000000000000
+6,0.6,0.00006000000000,0.0000600000000000000000000000
+11,1.1,0.00000001100000,0.0000000110000000000000000000
+18,1.8,0.00000000000018,0.0000000000000000000000000018
+19,1.9,0.00000000000019,0.0000000000000000000000000019
+27,2.7,0.00000000000027,0.0000000000000000000000000027
+28,2.8,0.00000000000028,0.0000000000000000000000000028
+29,2.9,0.00000000000029,0.0000000000000000000000000029
+38,3.8,0.00000000000038,0.0000000000000000000000000038
+39,3.9,0.00000000000039,0.0000000000000000000000000039
+49,4.9,0.00000000000049,0.0000000000000000000000000049
+78,7.8,0.00007800000000,0.0000780000000000000000000000
+89,8.9,0.00000890000000,0.0000089000000000000000000000
+91,9.1,0.00000091000000,0.0000009100000000000000000000
+167,16.7,0.00000000000167,0.0000000000000000000000001670
+178,17.8,0.00000000000178,0.0000000000000000000000000178
+222,22.2,0.00000000000222,0.0000000000000000222000000000
+223,22.3,0.00000002230000,0.0000000223000000000000000000
+333,33.3,0.00000000000333,0.0000000000000000033300000000
+334,33.4,0.00000000334000,0.0000000033400000000000000000
+444,44.4,0.00000000000444,0.0000000000000000004440000000
+445,44.5,0.00000000044500,0.0000000004450000000000000000
+555,55.5,0.00000000000555,0.0000000000000000000555000000
+556,55.6,0.00000000005560,0.0000000000556000000000000000
+666,66.6,0.00000000000666,0.0000000000000000000066600000
+667,66.7,0.00000000000667,0.0000000000066700000000000000
+777,77.7,0.00000000000777,0.0000000000000000000007770000
+888,88.8,0.00000000000888,0.0000000000000000000000888000
+999,99.9,0.00000000000999,0.0000000000000000000000099900
+1111,111.1,0.00000000001111,0.0000000000000000000000001111
+1112,111.2,0.00000000001112,0.0000000000000011120000000000
+7789,778.9,0.00000000007789,0.0000000000077890000000000000
+8891,889.1,0.00000000008891,0.0000000000008891000000000000
+9912,991.2,0.00000000009912,0.0000000000000991200000000000
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 97
+====
+---- QUERY
+##########################################################
+# Test case 1.6: Decimal Min-max filters multiple 16 bytes
+##########################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d38_0, a.d38_1, a.d38_19, a.d38_38
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_0 = b.d38_0
+and a.d38_1 = b.d38_1
+and a.d38_19 = b.d38_19
+and a.d38_38 = b.d38_38
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.0000000000000000000,0.00000000000000000000000000000000000000
+2,0.2,0.2000000000000000000,0.20000000000000000000000000000000000000
+3,0.3,0.0300000000000000000,0.03000000000000000000000000000000000000
+4,0.4,0.0040000000000000000,0.00400000000000000000000000000000000000
+5,0.5,0.0005000000000000000,0.00050000000000000000000000000000000000
+6,0.6,0.0000600000000000000,0.00006000000000000000000000000000000000
+11,1.1,0.0000000110000000000,0.00000001100000000000000000000000000000
+18,1.8,0.0000000000000000018,0.00000000000000000000000000001800000000
+19,1.9,0.0000000000000000019,0.00000000000000000000000000000190000000
+27,2.7,0.0000000000000000027,0.00000000000000000000000000000027000000
+28,2.8,0.0000000000000000028,0.00000000000000000000000000000002800000
+29,2.9,0.0000000000000000029,0.00000000000000000000000000000000290000
+38,3.8,0.0000000000000000038,0.00000000000000000000000000000000038000
+39,3.9,0.0000000000000000039,0.00000000000000000000000000000000003900
+49,4.9,0.0000000000000000049,0.00000000000000000000000000000000000490
+78,7.8,0.0000780000000000000,0.00007800000000000000000000000000000000
+89,8.9,0.0000089000000000000,0.00000890000000000000000000000000000000
+91,9.1,0.0000009100000000000,0.00000091000000000000000000000000000000
+167,16.7,0.0000000000000000167,0.00000000000000000000000016700000000000
+178,17.8,0.0000000000000000178,0.00000000000000000000000001780000000000
+222,22.2,0.0000000000000000222,0.00000000000000002220000000000000000000
+223,22.3,0.0000000223000000000,0.00000002230000000000000000000000000000
+333,33.3,0.0000000000000000333,0.00000000000000000333000000000000000000
+334,33.4,0.0000000033400000000,0.00000000334000000000000000000000000000
+444,44.4,0.0000000000000000444,0.00000000000000000044400000000000000000
+445,44.5,0.0000000004450000000,0.00000000044500000000000000000000000000
+555,55.5,0.0000000000000000555,0.00000000000000000005550000000000000000
+556,55.6,0.0000000000556000000,0.00000000005560000000000000000000000000
+666,66.6,0.0000000000000000666,0.00000000000000000000666000000000000000
+667,66.7,0.0000000000066700000,0.00000000000667000000000000000000000000
+777,77.7,0.0000000000000000777,0.00000000000000000000077700000000000000
+888,88.8,0.0000000000000000888,0.00000000000000000000008880000000000000
+999,99.9,0.0000000000000000999,0.00000000000000000000000999000000000000
+1111,111.1,0.0000000000000001111,0.00000000000000000000000000000000001111
+1112,111.2,0.0000000000000011120,0.00000000000000111200000000000000000000
+7789,778.9,0.0000000000077890000,0.00000000000778900000000000000000000000
+8891,889.1,0.0000000000008891000,0.00000000000088910000000000000000000000
+9912,991.2,0.0000000000000991200,0.00000000000009912000000000000000000000
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 97
+====
+---- QUERY
+####################################################
+# Test case 2.1: Decimal Min-max filters multiple
+#   d5_0 = d9_0 uses cast and will not use minmax
+#   filters.  The other 3 will.
+####################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d5_0, a.d5_1, a.d5_3, a.d5_5
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_0 = b.d9_0
+and a.d5_1 = b.d5_1
+and a.d5_3 = b.d5_3
+and a.d5_5 = b.d5_5
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.000,0.00000
+2,0.2,0.200,0.20000
+3,0.3,0.030,0.03000
+4,0.4,0.004,0.00400
+5,0.5,0.005,0.00050
+6,0.6,0.006,0.00006
+11,1.1,0.011,0.00011
+18,1.8,0.018,0.00018
+19,1.9,0.019,0.00019
+27,2.7,0.027,0.00027
+28,2.8,0.028,0.00028
+29,2.9,0.029,0.00029
+38,3.8,0.038,0.00038
+39,3.9,0.039,0.00039
+49,4.9,0.049,0.00049
+78,7.8,0.078,0.00078
+89,8.9,0.089,0.00089
+91,9.1,0.091,0.00091
+167,16.7,0.167,0.00167
+178,17.8,0.178,0.00178
+222,22.2,0.222,0.00222
+223,22.3,0.223,0.00223
+333,33.3,0.333,0.00333
+334,33.4,0.334,0.00334
+444,44.4,0.444,0.00444
+445,44.5,0.445,0.00445
+555,55.5,0.555,0.00555
+556,55.6,0.556,0.00556
+666,66.6,0.666,0.00666
+667,66.7,0.667,0.00667
+777,77.7,0.777,0.00777
+888,88.8,0.888,0.00888
+999,99.9,0.999,0.00999
+1111,111.1,1.111,0.01111
+1112,111.2,1.112,0.01112
+7789,778.9,7.789,0.07789
+8891,889.1,8.891,0.08891
+9912,991.2,9.912,0.09912
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 102
+====
+---- QUERY
+####################################################
+# Test case 2.2: Decimal Min-max filters multiple
+#   d9_1 = d14_1 uses cast and will not use minmax
+#   filters.  The other 3 will.
+####################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d9_0, a.d9_1, a.d9_5, a.d9_9
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_0 = b.d9_0
+and a.d9_1 = b.d14_1
+and a.d9_5 = b.d9_5
+and a.d9_9 = b.d9_9
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.00000,0.000000000
+2,0.2,0.20000,0.200000000
+3,0.3,0.03000,0.030000000
+4,0.4,0.00400,0.004000000
+5,0.5,0.00050,0.000500000
+6,0.6,0.00006,0.000060000
+11,1.1,0.00011,0.000000011
+18,1.8,0.00018,0.000000018
+19,1.9,0.00019,0.000000019
+27,2.7,0.00027,0.000000027
+28,2.8,0.00028,0.000000028
+29,2.9,0.00029,0.000000029
+38,3.8,0.00038,0.000000038
+39,3.9,0.00039,0.000000039
+49,4.9,0.00049,0.000000049
+78,7.8,0.00078,0.000078000
+89,8.9,0.00089,0.000008900
+91,9.1,0.00091,0.000000910
+167,16.7,0.00167,0.000000167
+178,17.8,0.00178,0.000000178
+222,22.2,0.00222,0.000000222
+223,22.3,0.00223,0.000000223
+333,33.3,0.00333,0.000000333
+334,33.4,0.00334,0.000000334
+444,44.4,0.00444,0.000000444
+445,44.5,0.00445,0.000000445
+555,55.5,0.00555,0.000000555
+556,55.6,0.00556,0.000000556
+666,66.6,0.00666,0.000000666
+667,66.7,0.00667,0.000000667
+777,77.7,0.00777,0.000000777
+888,88.8,0.00888,0.000000888
+999,99.9,0.00999,0.000000999
+1111,111.1,0.01111,0.000001111
+1112,111.2,0.01112,0.000001112
+7789,778.9,0.07789,0.000007789
+8891,889.1,0.08891,0.000008891
+9912,991.2,0.09912,0.000009912
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 99
+====
+---- QUERY
+####################################################
+# Test case 2.3: Decimal Min-max filters multiple
+#   d14_7 = d18_9 uses cast and will not use minmax
+#   filters.  The other 3 will.
+####################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d14_0, a.d14_1, a.d14_7, a.d14_14
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_0 = b.d14_0
+and a.d14_1 = b.d14_1
+and a.d14_7 = b.d18_9
+and a.d14_14 = b.d14_14
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.0000000,0.00000000000000
+2,0.2,0.2000000,0.20000000000000
+3,0.3,0.0300000,0.03000000000000
+4,0.4,0.0040000,0.00400000000000
+5,0.5,0.0005000,0.00050000000000
+6,0.6,0.0000600,0.00006000000000
+78,7.8,0.0000780,0.00007800000000
+89,8.9,0.0000089,0.00000890000000
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 107
+====
+---- QUERY
+####################################################
+# Test case 2.4: Decimal Min-max filters multiple
+#   d18_18 = d28_28 uses cast and will not use minmax
+#   filters.  The other 3 will.
+####################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d18_0, a.d18_1, a.d18_9, a.d18_18
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d18_0 = b.d18_0
+and a.d18_1 = b.d18_1
+and a.d18_9 = b.d18_9
+and a.d18_18 = b.d28_28
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.000000000,0.000000000000000000
+2,0.2,0.200000000,0.200000000000000000
+3,0.3,0.030000000,0.030000000000000000
+4,0.4,0.004000000,0.004000000000000000
+5,0.5,0.000500000,0.000500000000000000
+6,0.6,0.000060000,0.000060000000000000
+11,1.1,0.000000011,0.000000011000000000
+78,7.8,0.000078000,0.000078000000000000
+89,8.9,0.000008900,0.000008900000000000
+91,9.1,0.000000910,0.000000910000000000
+223,22.3,0.000000223,0.000000022300000000
+334,33.4,0.000000334,0.000000003340000000
+445,44.5,0.000000445,0.000000000445000000
+556,55.6,0.000000556,0.000000000055600000
+667,66.7,0.000000667,0.000000000006670000
+1112,111.2,0.000001112,0.000000000000001112
+7789,778.9,0.000007789,0.000000000007789000
+8891,889.1,0.000008891,0.000000000000889100
+9912,991.2,0.000009912,0.000000000000099120
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 102
+====
+---- QUERY
+####################################################
+# Test case 2.5: Decimal Min-max filters multiple
+#   d28_0 = d38_0 uses cast and will not use minmax
+#   filters.  The other 3 will.
+####################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d28_0, a.d28_1, a.d28_14, a.d28_28
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_0 = b.d38_0
+and a.d28_1 = b.d28_1
+and a.d28_14 = b.d28_14
+and a.d28_28 = b.d28_28
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.00000000000000,0.0000000000000000000000000000
+2,0.2,0.20000000000000,0.2000000000000000000000000000
+3,0.3,0.03000000000000,0.0300000000000000000000000000
+4,0.4,0.00400000000000,0.0040000000000000000000000000
+5,0.5,0.00050000000000,0.0005000000000000000000000000
+6,0.6,0.00006000000000,0.0000600000000000000000000000
+11,1.1,0.00000001100000,0.0000000110000000000000000000
+18,1.8,0.00000000000018,0.0000000000000000000000000018
+19,1.9,0.00000000000019,0.0000000000000000000000000019
+27,2.7,0.00000000000027,0.0000000000000000000000000027
+28,2.8,0.00000000000028,0.0000000000000000000000000028
+29,2.9,0.00000000000029,0.0000000000000000000000000029
+38,3.8,0.00000000000038,0.0000000000000000000000000038
+39,3.9,0.00000000000039,0.0000000000000000000000000039
+49,4.9,0.00000000000049,0.0000000000000000000000000049
+78,7.8,0.00007800000000,0.0000780000000000000000000000
+89,8.9,0.00000890000000,0.0000089000000000000000000000
+91,9.1,0.00000091000000,0.0000009100000000000000000000
+167,16.7,0.00000000000167,0.0000000000000000000000001670
+178,17.8,0.00000000000178,0.0000000000000000000000000178
+222,22.2,0.00000000000222,0.0000000000000000222000000000
+223,22.3,0.00000002230000,0.0000000223000000000000000000
+333,33.3,0.00000000000333,0.0000000000000000033300000000
+334,33.4,0.00000000334000,0.0000000033400000000000000000
+444,44.4,0.00000000000444,0.0000000000000000004440000000
+445,44.5,0.00000000044500,0.0000000004450000000000000000
+555,55.5,0.00000000000555,0.0000000000000000000555000000
+556,55.6,0.00000000005560,0.0000000000556000000000000000
+666,66.6,0.00000000000666,0.0000000000000000000066600000
+667,66.7,0.00000000000667,0.0000000000066700000000000000
+777,77.7,0.00000000000777,0.0000000000000000000007770000
+888,88.8,0.00000000000888,0.0000000000000000000000888000
+999,99.9,0.00000000000999,0.0000000000000000000000099900
+1111,111.1,0.00000000001111,0.0000000000000000000000001111
+1112,111.2,0.00000000001112,0.0000000000000011120000000000
+7789,778.9,0.00000000007789,0.0000000000077890000000000000
+8891,889.1,0.00000000008891,0.0000000000008891000000000000
+9912,991.2,0.00000000009912,0.0000000000000991200000000000
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 97
+====
+---- QUERY
+####################################################
+# Test case 2.6: Decimal Min-max filters multiple
+#   d38_1 = d5_1 uses cast and will not use minmax
+#   filters.  The other 3 will.
+####################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN a.d38_0, a.d38_1, a.d38_19, a.d38_38
+from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_0 = b.d38_0
+and a.d38_1 = b.d5_1
+and a.d38_19 = b.d38_19
+and a.d38_38 = b.d38_38
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1,1.0,1.0000000000000000000,0.00000000000000000000000000000000000000
+2,0.2,0.2000000000000000000,0.20000000000000000000000000000000000000
+3,0.3,0.0300000000000000000,0.03000000000000000000000000000000000000
+4,0.4,0.0040000000000000000,0.00400000000000000000000000000000000000
+5,0.5,0.0005000000000000000,0.00050000000000000000000000000000000000
+6,0.6,0.0000600000000000000,0.00006000000000000000000000000000000000
+11,1.1,0.0000000110000000000,0.00000001100000000000000000000000000000
+18,1.8,0.0000000000000000018,0.00000000000000000000000000001800000000
+19,1.9,0.0000000000000000019,0.00000000000000000000000000000190000000
+27,2.7,0.0000000000000000027,0.00000000000000000000000000000027000000
+28,2.8,0.0000000000000000028,0.00000000000000000000000000000002800000
+29,2.9,0.0000000000000000029,0.00000000000000000000000000000000290000
+38,3.8,0.0000000000000000038,0.00000000000000000000000000000000038000
+39,3.9,0.0000000000000000039,0.00000000000000000000000000000000003900
+49,4.9,0.0000000000000000049,0.00000000000000000000000000000000000490
+78,7.8,0.0000780000000000000,0.00007800000000000000000000000000000000
+89,8.9,0.0000089000000000000,0.00000890000000000000000000000000000000
+91,9.1,0.0000009100000000000,0.00000091000000000000000000000000000000
+167,16.7,0.0000000000000000167,0.00000000000000000000000016700000000000
+178,17.8,0.0000000000000000178,0.00000000000000000000000001780000000000
+222,22.2,0.0000000000000000222,0.00000000000000002220000000000000000000
+223,22.3,0.0000000223000000000,0.00000002230000000000000000000000000000
+333,33.3,0.0000000000000000333,0.00000000000000000333000000000000000000
+334,33.4,0.0000000033400000000,0.00000000334000000000000000000000000000
+444,44.4,0.0000000000000000444,0.00000000000000000044400000000000000000
+445,44.5,0.0000000004450000000,0.00000000044500000000000000000000000000
+555,55.5,0.0000000000000000555,0.00000000000000000005550000000000000000
+556,55.6,0.0000000000556000000,0.00000000005560000000000000000000000000
+666,66.6,0.0000000000000000666,0.00000000000000000000666000000000000000
+667,66.7,0.0000000000066700000,0.00000000000667000000000000000000000000
+777,77.7,0.0000000000000000777,0.00000000000000000000077700000000000000
+888,88.8,0.0000000000000000888,0.00000000000000000000008880000000000000
+999,99.9,0.0000000000000000999,0.00000000000000000000000999000000000000
+1111,111.1,0.0000000000000001111,0.00000000000000000000000000000000001111
+1112,111.2,0.0000000000000011120,0.00000000000000111200000000000000000000
+7789,778.9,0.0000000000077890000,0.00000000000778900000000000000000000000
+8891,889.1,0.0000000000008891000,0.00000000000088910000000000000000000000
+9912,991.2,0.0000000000000991200,0.00000000000009912000000000000000000000
+---- TYPES
+DECIMAL, DECIMAL, DECIMAL, DECIMAL
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 97
+====
+
+---- QUERY
+######################################################################
+# Test case 3.1: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d5_0
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d5_0 = b.d5_0
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d5_0 = c.d5_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 149
+====
+---- QUERY
+######################################################################
+# Test case 3.2: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d5_1
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d5_1 = b.d5_1
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d5_1 = c.d5_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 148
+====
+---- QUERY
+######################################################################
+# Test case 3.3: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d5_3
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d5_3 = b.d5_3
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d5_3 = c.d5_3
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.004
+0.005
+0.006
+0.011
+0.018
+0.019
+0.027
+0.028
+0.029
+0.030
+0.038
+0.039
+0.049
+0.078
+0.089
+0.091
+0.167
+0.178
+0.200
+0.222
+0.223
+0.333
+0.334
+0.444
+0.445
+0.555
+0.556
+0.666
+0.667
+0.777
+0.888
+0.999
+1.000
+1.111
+1.112
+7.789
+8.891
+9.912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 143
+====
+---- QUERY
+#######################################################################
+# Test case 3.4.1: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d5_5
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d5_5 = b.d5_5
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d5_5 = c.d5_5
+where a.d5_5 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00006
+0.00011
+0.00018
+0.00019
+0.00027
+0.00028
+0.00029
+0.00038
+0.00039
+0.00049
+0.00050
+0.00078
+0.00089
+0.00091
+0.00167
+0.00178
+0.00222
+0.00223
+0.00333
+0.00334
+0.00400
+0.00444
+0.00445
+0.00555
+0.00556
+0.00666
+0.00667
+0.00777
+0.00888
+0.00999
+0.01111
+0.01112
+0.03000
+0.07789
+0.08891
+0.09912
+0.20000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 347
+====
+---- QUERY
+#######################################################################
+# Test case 3.4.2: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(a.d5_5)
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d5_5 = b.d5_5
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d5_5 = c.d5_5
+where a.d5_5 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+180
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 360
+====
+---- QUERY
+######################################################################
+# Test case 3.5: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d9_0
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d9_0 = b.d9_0
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d9_0 = c.d9_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 149
+====
+---- QUERY
+######################################################################
+# Test case 3.6: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d9_1
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d9_1 = b.d9_1
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d9_1 = c.d9_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 148
+====
+---- QUERY
+######################################################################
+# Test case 3.7: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d9_5
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d9_5 = b.d9_5
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d9_5 = c.d9_5
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00006
+0.00011
+0.00018
+0.00019
+0.00027
+0.00028
+0.00029
+0.00038
+0.00039
+0.00049
+0.00050
+0.00078
+0.00089
+0.00091
+0.00167
+0.00178
+0.00222
+0.00223
+0.00333
+0.00334
+0.00400
+0.00444
+0.00445
+0.00555
+0.00556
+0.00666
+0.00667
+0.00777
+0.00888
+0.00999
+0.01111
+0.01112
+0.03000
+0.07789
+0.08891
+0.09912
+0.20000
+1.00000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 174
+====
+---- QUERY
+#######################################################################
+# Test case 3.8.1: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d9_9
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d9_9 = b.d9_9
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d9_9 = c.d9_9
+where a.d9_9 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.000000011
+0.000000018
+0.000000019
+0.000000027
+0.000000028
+0.000000029
+0.000000038
+0.000000039
+0.000000049
+0.000000167
+0.000000178
+0.000000222
+0.000000223
+0.000000333
+0.000000334
+0.000000444
+0.000000445
+0.000000555
+0.000000556
+0.000000666
+0.000000667
+0.000000777
+0.000000888
+0.000000910
+0.000000999
+0.000001111
+0.000001112
+0.000007789
+0.000008891
+0.000008900
+0.000009912
+0.000060000
+0.000078000
+0.000500000
+0.004000000
+0.030000000
+0.200000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 379
+====
+---- QUERY
+#######################################################################
+# Test case 3.8.2: Two DecimalMinMaxFilters with shuffle join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(a.d9_9)
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d9_9 = b.d9_9
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d9_9 = c.d9_9
+where a.d9_9 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+306
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 612
+====
+---- QUERY
+######################################################################
+# Test case 3.9: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d14_0
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d14_0 = b.d14_0
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d14_0 = c.d14_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 149
+====
+---- QUERY
+######################################################################
+# Test case 3.10: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d14_1
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d14_1 = b.d14_1
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d14_1 = c.d14_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 148
+====
+---- QUERY
+######################################################################
+# Test case 3.11: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d14_7
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d14_7 = b.d14_7
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d14_7 = c.d14_7
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.0000011
+0.0000018
+0.0000019
+0.0000027
+0.0000028
+0.0000029
+0.0000038
+0.0000039
+0.0000049
+0.0000089
+0.0000091
+0.0000167
+0.0000178
+0.0000222
+0.0000223
+0.0000333
+0.0000334
+0.0000444
+0.0000445
+0.0000555
+0.0000556
+0.0000600
+0.0000666
+0.0000667
+0.0000777
+0.0000780
+0.0000888
+0.0000999
+0.0001111
+0.0001112
+0.0005000
+0.0007789
+0.0008891
+0.0009912
+0.0040000
+0.0300000
+0.2000000
+1.0000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 235
+====
+---- QUERY
+########################################################################
+# Test case 3.12.1: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d14_14
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d14_14 = b.d14_14
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d14_14 = c.d14_14
+where a.d14_14 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00000000000018
+0.00000000000019
+0.00000000000027
+0.00000000000028
+0.00000000000029
+0.00000000000038
+0.00000000000039
+0.00000000000049
+0.00000000000167
+0.00000000000178
+0.00000000000222
+0.00000000000333
+0.00000000000444
+0.00000000000555
+0.00000000000666
+0.00000000000667
+0.00000000000777
+0.00000000000888
+0.00000000000999
+0.00000000001111
+0.00000000001112
+0.00000000005560
+0.00000000007789
+0.00000000008891
+0.00000000009912
+0.00000000044500
+0.00000000334000
+0.00000001100000
+0.00000002230000
+0.00000091000000
+0.00000890000000
+0.00006000000000
+0.00007800000000
+0.00050000000000
+0.00400000000000
+0.03000000000000
+0.20000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 479
+====
+---- QUERY
+########################################################################
+# Test case 3.12.2: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(a.d14_14)
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d14_14 = b.d14_14
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d14_14 = c.d14_14
+where a.d14_14 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+441
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 882
+====
+---- QUERY
+######################################################################
+# Test case 3.13: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d18_0
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d18_0 = b.d18_0
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d18_0 = c.d18_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 149
+====
+---- QUERY
+######################################################################
+# Test case 3.14: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d18_1
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d18_1 = b.d18_1
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d18_1 = c.d18_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 148
+====
+---- QUERY
+######################################################################
+# Test case 3.15: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d18_9
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d18_9 = b.d18_9
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d18_9 = c.d18_9
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.000000011
+0.000000018
+0.000000019
+0.000000027
+0.000000028
+0.000000029
+0.000000038
+0.000000039
+0.000000049
+0.000000167
+0.000000178
+0.000000222
+0.000000223
+0.000000333
+0.000000334
+0.000000444
+0.000000445
+0.000000555
+0.000000556
+0.000000666
+0.000000667
+0.000000777
+0.000000888
+0.000000910
+0.000000999
+0.000001111
+0.000001112
+0.000007789
+0.000008891
+0.000008900
+0.000009912
+0.000060000
+0.000078000
+0.000500000
+0.004000000
+0.030000000
+0.200000000
+1.000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 296
+====
+---- QUERY
+########################################################################
+# Test case 3.16.1: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d18_18
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d18_18 = b.d18_18
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d18_18 = c.d18_18
+where a.d18_18 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.000000000000000018
+0.000000000000000019
+0.000000000000000027
+0.000000000000000028
+0.000000000000000029
+0.000000000000000038
+0.000000000000000039
+0.000000000000000049
+0.000000000000000167
+0.000000000000000178
+0.000000000000000222
+0.000000000000000333
+0.000000000000000444
+0.000000000000000555
+0.000000000000000666
+0.000000000000000777
+0.000000000000000888
+0.000000000000000999
+0.000000000000001111
+0.000000000000001112
+0.000000000000099120
+0.000000000000889100
+0.000000000006670000
+0.000000000007789000
+0.000000000055600000
+0.000000000445000000
+0.000000003340000000
+0.000000011000000000
+0.000000022300000000
+0.000000910000000000
+0.000008900000000000
+0.000060000000000000
+0.000078000000000000
+0.000500000000000000
+0.004000000000000000
+0.030000000000000000
+0.200000000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 536
+====
+---- QUERY
+########################################################################
+# Test case 3.16.2: Two DecimalMinMaxFilters with shuffle join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(a.d18_18)
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d18_18 = b.d18_18
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d18_18 = c.d18_18
+where a.d18_18 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+531
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 1062
+====
+---- QUERY
+#######################################################################
+# Test case 3.17: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d28_0
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d28_0 = b.d28_0
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d28_0 = c.d28_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 149
+====
+---- QUERY
+#######################################################################
+# Test case 3.18: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d28_1
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d28_1 = b.d28_1
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d28_1 = c.d28_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 148
+====
+---- QUERY
+#######################################################################
+# Test case 3.19: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d28_14
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d28_14 = b.d28_14
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d28_14 = c.d28_14
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00000000000018
+0.00000000000019
+0.00000000000027
+0.00000000000028
+0.00000000000029
+0.00000000000038
+0.00000000000039
+0.00000000000049
+0.00000000000167
+0.00000000000178
+0.00000000000222
+0.00000000000333
+0.00000000000444
+0.00000000000555
+0.00000000000666
+0.00000000000667
+0.00000000000777
+0.00000000000888
+0.00000000000999
+0.00000000001111
+0.00000000001112
+0.00000000005560
+0.00000000007789
+0.00000000008891
+0.00000000009912
+0.00000000044500
+0.00000000334000
+0.00000001100000
+0.00000002230000
+0.00000091000000
+0.00000890000000
+0.00006000000000
+0.00007800000000
+0.00050000000000
+0.00400000000000
+0.03000000000000
+0.20000000000000
+1.00000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 424
+====
+---- QUERY
+#########################################################################
+# Test case 3.20.1: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d28_28
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d28_28 = b.d28_28
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d28_28 = c.d28_28
+where a.d28_28 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.0000000000000000000000000018
+0.0000000000000000000000000019
+0.0000000000000000000000000027
+0.0000000000000000000000000028
+0.0000000000000000000000000029
+0.0000000000000000000000000038
+0.0000000000000000000000000039
+0.0000000000000000000000000049
+0.0000000000000000000000000178
+0.0000000000000000000000001111
+0.0000000000000000000000001670
+0.0000000000000000000000099900
+0.0000000000000000000000888000
+0.0000000000000000000007770000
+0.0000000000000000000066600000
+0.0000000000000000000555000000
+0.0000000000000000004440000000
+0.0000000000000000033300000000
+0.0000000000000000222000000000
+0.0000000000000011120000000000
+0.0000000000000991200000000000
+0.0000000000008891000000000000
+0.0000000000066700000000000000
+0.0000000000077890000000000000
+0.0000000000556000000000000000
+0.0000000004450000000000000000
+0.0000000033400000000000000000
+0.0000000110000000000000000000
+0.0000000223000000000000000000
+0.0000009100000000000000000000
+0.0000089000000000000000000000
+0.0000600000000000000000000000
+0.0000780000000000000000000000
+0.0005000000000000000000000000
+0.0040000000000000000000000000
+0.0300000000000000000000000000
+0.2000000000000000000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 656
+====
+---- QUERY
+#########################################################################
+# Test case 3.20.2: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(a.d28_28)
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d28_28 = b.d28_28
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d28_28 = c.d28_28
+where a.d28_28 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+686
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 1372
+====
+---- QUERY
+#######################################################################
+# Test case 3.21: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d38_0
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d38_0 = b.d38_0
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d38_0 = c.d38_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 149
+====
+---- QUERY
+#######################################################################
+# Test case 3.22: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d38_1
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d38_1 = b.d38_1
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d38_1 = c.d38_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 148
+====
+---- QUERY
+#######################################################################
+# Test case 3.23: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d38_19
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d38_19 = b.d38_19
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d38_19 = c.d38_19
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.0000000000000000018
+0.0000000000000000019
+0.0000000000000000027
+0.0000000000000000028
+0.0000000000000000029
+0.0000000000000000038
+0.0000000000000000039
+0.0000000000000000049
+0.0000000000000000167
+0.0000000000000000178
+0.0000000000000000222
+0.0000000000000000333
+0.0000000000000000444
+0.0000000000000000555
+0.0000000000000000666
+0.0000000000000000777
+0.0000000000000000888
+0.0000000000000000999
+0.0000000000000001111
+0.0000000000000011120
+0.0000000000000991200
+0.0000000000008891000
+0.0000000000066700000
+0.0000000000077890000
+0.0000000000556000000
+0.0000000004450000000
+0.0000000033400000000
+0.0000000110000000000
+0.0000000223000000000
+0.0000009100000000000
+0.0000089000000000000
+0.0000600000000000000
+0.0000780000000000000
+0.0005000000000000000
+0.0040000000000000000
+0.0300000000000000000
+0.2000000000000000000
+1.0000000000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 529
+====
+---- QUERY
+#########################################################################
+# Test case 3.24.1: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join a.d38_38
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d38_38 = b.d38_38
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d38_38 = c.d38_38
+where a.d38_38 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00000000000000000000000000000000000490
+0.00000000000000000000000000000000001111
+0.00000000000000000000000000000000003900
+0.00000000000000000000000000000000038000
+0.00000000000000000000000000000000290000
+0.00000000000000000000000000000002800000
+0.00000000000000000000000000000027000000
+0.00000000000000000000000000000190000000
+0.00000000000000000000000000001800000000
+0.00000000000000000000000001780000000000
+0.00000000000000000000000016700000000000
+0.00000000000000000000000999000000000000
+0.00000000000000000000008880000000000000
+0.00000000000000000000077700000000000000
+0.00000000000000000000666000000000000000
+0.00000000000000000005550000000000000000
+0.00000000000000000044400000000000000000
+0.00000000000000000333000000000000000000
+0.00000000000000002220000000000000000000
+0.00000000000000111200000000000000000000
+0.00000000000009912000000000000000000000
+0.00000000000088910000000000000000000000
+0.00000000000667000000000000000000000000
+0.00000000000778900000000000000000000000
+0.00000000005560000000000000000000000000
+0.00000000044500000000000000000000000000
+0.00000000334000000000000000000000000000
+0.00000001100000000000000000000000000000
+0.00000002230000000000000000000000000000
+0.00000091000000000000000000000000000000
+0.00000890000000000000000000000000000000
+0.00006000000000000000000000000000000000
+0.00007800000000000000000000000000000000
+0.00050000000000000000000000000000000000
+0.00400000000000000000000000000000000000
+0.03000000000000000000000000000000000000
+0.20000000000000000000000000000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 680
+====
+---- QUERY
+#########################################################################
+# Test case 3.24.2: Two DecimalMinMaxFilters with shuffle join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(a.d38_38)
+from decimal_rtf_tbl a
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl b on a.d38_38 = b.d38_38
+  inner join /* +shuffle */ decimal_rtf_tiny_tbl c on b.d38_38 = c.d38_38
+where a.d38_38 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+732
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 1464
+====
+
+---- QUERY
+######################################################################
+# Test case 4.1: DecimalMinMaxFilters with right outer join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d5_0)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d5_0 = b.d5_0
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 4.2: DecimalMinMaxFilters with right outer join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d5_1)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d5_1 = b.d5_1
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 4.3: DecimalMinMaxFilters with right outer join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d5_3)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d5_3 = b.d5_3
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 105
+====
+---- QUERY
+#######################################################################
+# Test case 4.4.1: DecimalMinMaxFilters with right outer join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d5_5)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d5_5 = b.d5_5
+where a.d5_5 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 310
+====
+---- QUERY
+#######################################################################
+# Test case 4.4.2: DecimalMinMaxFilters with right outer join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d5_5)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d5_5 = b.d5_5
+where a.d5_5 = 0
+---- RESULTS
+180
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 180
+====
+---- QUERY
+######################################################################
+# Test case 4.5: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d9_0)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d9_0 = b.d9_0
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 4.6: DecimalMinMaxFilters with right outer join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d9_1)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d9_1 = b.d9_1
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 4.7: DecimalMinMaxFilters with right outer join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d9_5)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d9_5 = b.d9_5
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 136
+====
+---- QUERY
+#######################################################################
+# Test case 4.8.1: DecimalMinMaxFilters with right outer join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d9_9)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d9_9 = b.d9_9
+where a.d9_9 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 342
+====
+---- QUERY
+#######################################################################
+# Test case 4.8.2: DecimalMinMaxFilters with right outer join - 4 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d9_9)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d9_9 = b.d9_9
+where a.d9_9 = 0
+---- RESULTS
+306
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 306
+====
+---- QUERY
+######################################################################
+# Test case 4.9: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d14_0)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d14_0 = b.d14_0
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 4.10: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d14_1)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d14_1 = b.d14_1
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 4.11: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d14_7)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d14_7 = b.d14_7
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 197
+====
+---- QUERY
+########################################################################
+# Test case 4.12.1: DecimalMinMaxFilters with right outer join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d14_14)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d14_14 = b.d14_14
+where a.d14_14 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 444
+====
+---- QUERY
+########################################################################
+# Test case 4.12.2: DecimalMinMaxFilters with right outer join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d14_14)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d14_14 = b.d14_14
+where a.d14_14 = 0
+---- RESULTS
+441
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 441
+====
+---- QUERY
+######################################################################
+# Test case 4.13: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d18_0)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d18_0 = b.d18_0
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 4.14: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d18_1)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d18_1 = b.d18_1
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 4.15: DecimalMinMaxFilters with right outer join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d18_9)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d18_9 = b.d18_9
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 258
+====
+---- QUERY
+########################################################################
+# Test case 4.16.1: DecimalMinMaxFilters with right outer join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d18_18)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d18_18 = b.d18_18
+where a.d18_18 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 501
+====
+---- QUERY
+########################################################################
+# Test case 4.16.2: DecimalMinMaxFilters with right outer join - 8 bytes
+########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d18_18)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d18_18 = b.d18_18
+where a.d18_18 = 0
+---- RESULTS
+531
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 531
+====
+---- QUERY
+#######################################################################
+# Test case 4.17: DecimalMinMaxFilters with right outer join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d28_0)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d28_0 = b.d28_0
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+#######################################################################
+# Test case 4.18: DecimalMinMaxFilters with right outer join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d28_1)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d28_1 = b.d28_1
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+#######################################################################
+# Test case 4.19: DecimalMinMaxFilters with right outer join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d28_14)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d28_14 = b.d28_14
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 386
+====
+---- QUERY
+#########################################################################
+# Test case 4.20.1: DecimalMinMaxFilters with right outer join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d28_28)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d28_28 = b.d28_28
+where a.d28_28 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 620
+====
+---- QUERY
+#########################################################################
+# Test case 4.20.2: DecimalMinMaxFilters with right outer join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d28_28)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d28_28 = b.d28_28
+where a.d28_28 = 0
+---- RESULTS
+686
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 686
+====
+---- QUERY
+#######################################################################
+# Test case 4.21: DecimalMinMaxFilters with right outer join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d38_0)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d38_0 = b.d38_0
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+#######################################################################
+# Test case 4.22: DecimalMinMaxFilters with right outer join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d38_1)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d38_1 = b.d38_1
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+#######################################################################
+# Test case 4.23: DecimalMinMaxFilters with right outer join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d38_19)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d38_19 = b.d38_19
+---- RESULTS
+40
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 491
+====
+---- QUERY
+#########################################################################
+# Test case 4.24.1: DecimalMinMaxFilters with right outer join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d38_38)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d38_38 = b.d38_38
+where a.d38_38 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 643
+====
+---- QUERY
+#########################################################################
+# Test case 4.24.2: DecimalMinMaxFilters with right outer join - 16 bytes
+#########################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select straight_join count(b.d38_38)
+from decimal_rtf_tbl a
+  right outer join decimal_rtf_tiny_tbl b on a.d38_38 = b.d38_38
+where a.d38_38 = 0
+---- RESULTS
+732
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 732
+====
+---- QUERY
+######################################################################
+# Test case 5.1: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d5_0
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d5_0 = b.d5_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 5.2: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d5_1
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d5_1 = b.d5_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 5.3: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d5_3
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d5_3 = b.d5_3
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.004
+0.005
+0.006
+0.011
+0.018
+0.019
+0.027
+0.028
+0.029
+0.030
+0.038
+0.039
+0.049
+0.078
+0.089
+0.091
+0.167
+0.178
+0.200
+0.222
+0.223
+0.333
+0.334
+0.444
+0.445
+0.555
+0.556
+0.666
+0.667
+0.777
+0.888
+0.999
+1.000
+1.111
+1.112
+7.789
+8.891
+9.912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 105
+====
+---- QUERY
+######################################################################
+# Test case 5.4.1: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d5_5
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d5_5 = b.d5_5
+where a.d5_5 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00006
+0.00011
+0.00018
+0.00019
+0.00027
+0.00028
+0.00029
+0.00038
+0.00039
+0.00049
+0.00050
+0.00078
+0.00089
+0.00091
+0.00167
+0.00178
+0.00222
+0.00223
+0.00333
+0.00334
+0.00400
+0.00444
+0.00445
+0.00555
+0.00556
+0.00666
+0.00667
+0.00777
+0.00888
+0.00999
+0.01111
+0.01112
+0.03000
+0.07789
+0.08891
+0.09912
+0.20000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 310
+====
+---- QUERY
+######################################################################
+# Test case 5.4.2: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select count(a.d5_5)
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d5_5 = b.d5_5
+where a.d5_5 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+180
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 180
+====
+---- QUERY
+######################################################################
+# Test case 5.5: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d9_0
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d9_0 = b.d9_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 5.6: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d9_1
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d9_1 = b.d9_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 5.7: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d9_5
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d9_5 = b.d9_5
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00006
+0.00011
+0.00018
+0.00019
+0.00027
+0.00028
+0.00029
+0.00038
+0.00039
+0.00049
+0.00050
+0.00078
+0.00089
+0.00091
+0.00167
+0.00178
+0.00222
+0.00223
+0.00333
+0.00334
+0.00400
+0.00444
+0.00445
+0.00555
+0.00556
+0.00666
+0.00667
+0.00777
+0.00888
+0.00999
+0.01111
+0.01112
+0.03000
+0.07789
+0.08891
+0.09912
+0.20000
+1.00000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 136
+====
+---- QUERY
+######################################################################
+# Test case 5.8.1: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d9_9
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d9_9 = b.d9_9
+where a.d9_9 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.000000011
+0.000000018
+0.000000019
+0.000000027
+0.000000028
+0.000000029
+0.000000038
+0.000000039
+0.000000049
+0.000000167
+0.000000178
+0.000000222
+0.000000223
+0.000000333
+0.000000334
+0.000000444
+0.000000445
+0.000000555
+0.000000556
+0.000000666
+0.000000667
+0.000000777
+0.000000888
+0.000000910
+0.000000999
+0.000001111
+0.000001112
+0.000007789
+0.000008891
+0.000008900
+0.000009912
+0.000060000
+0.000078000
+0.000500000
+0.004000000
+0.030000000
+0.200000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 342
+====
+---- QUERY
+######################################################################
+# Test case 5.8.2: DecimalMinMaxFilters with left semi join - 4 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select count(a.d9_9)
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d9_9 = b.d9_9
+where a.d9_9 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+306
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 306
+====
+---- QUERY
+######################################################################
+# Test case 5.9: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d14_0
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d14_0 = b.d14_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 5.10: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d14_1
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d14_1 = b.d14_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 5.11: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d14_7
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d14_7 = b.d14_7
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.0000011
+0.0000018
+0.0000019
+0.0000027
+0.0000028
+0.0000029
+0.0000038
+0.0000039
+0.0000049
+0.0000089
+0.0000091
+0.0000167
+0.0000178
+0.0000222
+0.0000223
+0.0000333
+0.0000334
+0.0000444
+0.0000445
+0.0000555
+0.0000556
+0.0000600
+0.0000666
+0.0000667
+0.0000777
+0.0000780
+0.0000888
+0.0000999
+0.0001111
+0.0001112
+0.0005000
+0.0007789
+0.0008891
+0.0009912
+0.0040000
+0.0300000
+0.2000000
+1.0000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 197
+====
+---- QUERY
+######################################################################
+# Test case 5.12.1: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d14_14
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d14_14 = b.d14_14
+where a.d14_14 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00000000000018
+0.00000000000019
+0.00000000000027
+0.00000000000028
+0.00000000000029
+0.00000000000038
+0.00000000000039
+0.00000000000049
+0.00000000000167
+0.00000000000178
+0.00000000000222
+0.00000000000333
+0.00000000000444
+0.00000000000555
+0.00000000000666
+0.00000000000667
+0.00000000000777
+0.00000000000888
+0.00000000000999
+0.00000000001111
+0.00000000001112
+0.00000000005560
+0.00000000007789
+0.00000000008891
+0.00000000009912
+0.00000000044500
+0.00000000334000
+0.00000001100000
+0.00000002230000
+0.00000091000000
+0.00000890000000
+0.00006000000000
+0.00007800000000
+0.00050000000000
+0.00400000000000
+0.03000000000000
+0.20000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 442
+====
+---- QUERY
+######################################################################
+# Test case 5.12.2: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select count(a.d14_14)
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d14_14 = b.d14_14
+where a.d14_14 = 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+441
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 441
+====
+---- QUERY
+######################################################################
+# Test case 5.13: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d18_0
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d18_0 = b.d18_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+######################################################################
+# Test case 5.14: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d18_1
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d18_1 = b.d18_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+######################################################################
+# Test case 5.15: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d18_9
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d18_9 = b.d18_9
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.000000011
+0.000000018
+0.000000019
+0.000000027
+0.000000028
+0.000000029
+0.000000038
+0.000000039
+0.000000049
+0.000000167
+0.000000178
+0.000000222
+0.000000223
+0.000000333
+0.000000334
+0.000000444
+0.000000445
+0.000000555
+0.000000556
+0.000000666
+0.000000667
+0.000000777
+0.000000888
+0.000000910
+0.000000999
+0.000001111
+0.000001112
+0.000007789
+0.000008891
+0.000008900
+0.000009912
+0.000060000
+0.000078000
+0.000500000
+0.004000000
+0.030000000
+0.200000000
+1.000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 258
+====
+---- QUERY
+######################################################################
+# Test case 5.16.1: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d18_18
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d18_18 = b.d18_18
+where a.d18_18 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.000000000000000018
+0.000000000000000019
+0.000000000000000027
+0.000000000000000028
+0.000000000000000029
+0.000000000000000038
+0.000000000000000039
+0.000000000000000049
+0.000000000000000167
+0.000000000000000178
+0.000000000000000222
+0.000000000000000333
+0.000000000000000444
+0.000000000000000555
+0.000000000000000666
+0.000000000000000777
+0.000000000000000888
+0.000000000000000999
+0.000000000000001111
+0.000000000000001112
+0.000000000000099120
+0.000000000000889100
+0.000000000006670000
+0.000000000007789000
+0.000000000055600000
+0.000000000445000000
+0.000000003340000000
+0.000000011000000000
+0.000000022300000000
+0.000000910000000000
+0.000008900000000000
+0.000060000000000000
+0.000078000000000000
+0.000500000000000000
+0.004000000000000000
+0.030000000000000000
+0.200000000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 499
+====
+---- QUERY
+######################################################################
+# Test case 5.16.2: DecimalMinMaxFilters with left semi join - 8 bytes
+######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select count(a.d18_18)
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d18_18 = b.d18_18
+where a.d18_18 = 0
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+531
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 531
+====
+---- QUERY
+#######################################################################
+# Test case 5.17: DecimalMinMaxFilters with left semi join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d28_0
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d28_0 = b.d28_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19
+27
+28
+29
+38
+39
+49
+78
+89
+91
+167
+178
+222
+223
+333
+334
+444
+445
+555
+556
+666
+667
+777
+888
+999
+1111
+1112
+7789
+8891
+9912
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+#######################################################################
+# Test case 5.18: DecimalMinMaxFilters with left semi join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d28_1
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d28_1 = b.d28_1
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.2
+0.3
+0.4
+0.5
+0.6
+1.0
+1.1
+1.8
+1.9
+2.7
+2.8
+2.9
+3.8
+3.9
+4.9
+7.8
+8.9
+9.1
+16.7
+17.8
+22.2
+22.3
+33.3
+33.4
+44.4
+44.5
+55.5
+55.6
+66.6
+66.7
+77.7
+88.8
+99.9
+111.1
+111.2
+778.9
+889.1
+991.2
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+#######################################################################
+# Test case 5.19: DecimalMinMaxFilters with left semi join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d28_14
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d28_14 = b.d28_14
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.00000000000018
+0.00000000000019
+0.00000000000027
+0.00000000000028
+0.00000000000029
+0.00000000000038
+0.00000000000039
+0.00000000000049
+0.00000000000167
+0.00000000000178
+0.00000000000222
+0.00000000000333
+0.00000000000444
+0.00000000000555
+0.00000000000666
+0.00000000000667
+0.00000000000777
+0.00000000000888
+0.00000000000999
+0.00000000001111
+0.00000000001112
+0.00000000005560
+0.00000000007789
+0.00000000008891
+0.00000000009912
+0.00000000044500
+0.00000000334000
+0.00000001100000
+0.00000002230000
+0.00000091000000
+0.00000890000000
+0.00006000000000
+0.00007800000000
+0.00050000000000
+0.00400000000000
+0.03000000000000
+0.20000000000000
+1.00000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 386
+====
+---- QUERY
+#######################################################################
+# Test case 5.20.1: DecimalMinMaxFilters with left semi join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d28_28
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d28_28 = b.d28_28
+where a.d28_28 != 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+0.0000000000000000000000000018
+0.0000000000000000000000000019
+0.0000000000000000000000000027
+0.0000000000000000000000000028
+0.0000000000000000000000000029
+0.0000000000000000000000000038
+0.0000000000000000000000000039
+0.0000000000000000000000000049
+0.0000000000000000000000000178
+0.0000000000000000000000001111
+0.0000000000000000000000001670
+0.0000000000000000000000099900
+0.0000000000000000000000888000
+0.0000000000000000000007770000
+0.0000000000000000000066600000
+0.0000000000000000000555000000
+0.0000000000000000004440000000
+0.0000000000000000033300000000
+0.0000000000000000222000000000
+0.0000000000000011120000000000
+0.0000000000000991200000000000
+0.0000000000008891000000000000
+0.0000000000066700000000000000
+0.0000000000077890000000000000
+0.0000000000556000000000000000
+0.0000000004450000000000000000
+0.0000000033400000000000000000
+0.0000000110000000000000000000
+0.0000000223000000000000000000
+0.0000009100000000000000000000
+0.0000089000000000000000000000
+0.0000600000000000000000000000
+0.0000780000000000000000000000
+0.0005000000000000000000000000
+0.0040000000000000000000000000
+0.0300000000000000000000000000
+0.2000000000000000000000000000
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 619
+====
+---- QUERY
+#######################################################################
+# Test case 5.20.2: DecimalMinMaxFilters with left semi join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select count(a.d28_28)
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d28_28 = b.d28_28
+where a.d28_28 = 0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+686
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 686
+====
+---- QUERY
+#######################################################################
+# Test case 5.21: DecimalMinMaxFilters with left semi join - 16 bytes
+#######################################################################
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select a.d38_0
+from decimal_rtf_tbl a
+  left semi join decimal_rtf_tiny_tbl b on a.d38_0 = b.d38_0
+order by 1
+---- RESULTS: VERIFY_IS_EQUAL_SORTED
+1
+2
+3
+4
+5
+6
+11
+18
+19

<TRUNCATED>

[10/10] impala git commit: IMPALA-8063: Add sleep to ImpalaTestSuite::wait_for_state() loop

Posted by jo...@apache.org.
IMPALA-8063: Add sleep to ImpalaTestSuite::wait_for_state() loop

ImpalaTestSuite::wait_for_state() loops waiting for the state
on the connection handle to reach the expected state. This loop
does not sleep, and the get_state() does some logging, so this
loop is generating a large amount of logging.

This adds a 0.5 second sleep to the loop. Running test_web_pages.py
shows a large reduction in logging.

webserver/test_web_page.py contains several tests that xfail but
still have run=True. Those tests are broken and use wait_for_state()
heavily, so disable those while IMPALA-8059 is being fixed.

Change-Id: Iaed0a9b292d431a64e22b460c92f6ef57b6abd1e
Reviewed-on: http://gerrit.cloudera.org:8080/12207
Reviewed-by: Sahil Takiar <st...@cloudera.com>
Reviewed-by: Pooja Nilangekar <po...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>
Reviewed-by: Joe McDonnell <jo...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/51f30a6b
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/51f30a6b
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/51f30a6b

Branch: refs/heads/master
Commit: 51f30a6b9088cf3a0217a49a5792f1b41a8ad51b
Parents: aacd5c3
Author: Joe McDonnell <jo...@cloudera.com>
Authored: Wed Jan 9 19:14:05 2019 -0800
Committer: Joe McDonnell <jo...@cloudera.com>
Committed: Thu Jan 10 21:19:02 2019 +0000

----------------------------------------------------------------------
 tests/common/impala_test_suite.py | 1 +
 tests/webserver/test_web_pages.py | 6 +++---
 2 files changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/51f30a6b/tests/common/impala_test_suite.py
----------------------------------------------------------------------
diff --git a/tests/common/impala_test_suite.py b/tests/common/impala_test_suite.py
index 5f93c69..668e607 100644
--- a/tests/common/impala_test_suite.py
+++ b/tests/common/impala_test_suite.py
@@ -842,6 +842,7 @@ class ImpalaTestSuite(BaseTestSuite):
     actual_state = self.client.get_state(handle)
     while actual_state != expected_state and time.time() - start_time < timeout:
       actual_state = self.client.get_state(handle)
+      time.sleep(0.5)
     if actual_state != expected_state:
       raise Timeout("query '%s' did not reach expected state '%s', last known state '%s'"
                     % (handle.get_handle().id, expected_state, actual_state))

http://git-wip-us.apache.org/repos/asf/impala/blob/51f30a6b/tests/webserver/test_web_pages.py
----------------------------------------------------------------------
diff --git a/tests/webserver/test_web_pages.py b/tests/webserver/test_web_pages.py
index 07c8da3..61455d9 100644
--- a/tests/webserver/test_web_pages.py
+++ b/tests/webserver/test_web_pages.py
@@ -304,7 +304,7 @@ class TestWebPage(ImpalaTestSuite):
       self.client.cancel(query_handle)
     return response_json
 
-  @pytest.mark.xfail(run=True, reason="IMPALA-8059")
+  @pytest.mark.xfail(run=False, reason="IMPALA-8059")
   def test_backend_states(self, unique_database):
     """Test that /query_backends returns the list of backend states for DML or
     queries; nothing for DDL statements"""
@@ -335,7 +335,7 @@ class TestWebPage(ImpalaTestSuite):
                                                         self.QUERY_BACKENDS_URL)
     assert 'backend_states' not in response_json
 
-  @pytest.mark.xfail(run=True, reason="IMPALA-8059")
+  @pytest.mark.xfail(run=False, reason="IMPALA-8059")
   def test_backend_instances(self, unique_database, query_options=None):
     """Test that /query_finstances returns the list of fragment instances for DML or queries;
     nothing for DDL statements"""
@@ -370,7 +370,7 @@ class TestWebPage(ImpalaTestSuite):
                                                          self.QUERY_BACKENDS_URL)
     assert 'backend_instances' not in response_json
 
-  @pytest.mark.xfail(run=True, reason="IMPALA-8059")
+  @pytest.mark.xfail(run=False, reason="IMPALA-8059")
   def test_backend_instances_mt_dop(self, unique_database):
     """Test that accessing /query_finstances does not crash the backend when running with
     mt_dop."""


[07/10] impala git commit: IMPALA-6533: Add min-max filter for decimal types on kudu tables.

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/data/decimal_rtf_tiny_tbl.txt
----------------------------------------------------------------------
diff --git a/testdata/data/decimal_rtf_tiny_tbl.txt b/testdata/data/decimal_rtf_tiny_tbl.txt
new file mode 100644
index 0000000..a13750c
--- /dev/null
+++ b/testdata/data/decimal_rtf_tiny_tbl.txt
@@ -0,0 +1,40 @@
+1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0
+2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2
+3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03
+4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004
+5,0.5,0.005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005
+6,0.6,0.006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006
+78,7.8,0.078,0.00078,78,7.8,0.00078,0.000078,78,7.8,0.000078,0.000078,78,7.8,0.000078,0.000078,78,7.8,0.000078,0.000078,78,7.8,0.000078,0.000078
+89,8.9,0.089,0.00089,89,8.9,0.00089,0.0000089,89,8.9,0.0000089,0.0000089,89,8.9,0.0000089,0.0000089,89,8.9,0.0000089,0.0000089,89,8.9,0.0000089,0.0000089
+91,9.1,0.091,0.00091,91,9.1,0.00091,0.00000091,91,9.1,0.0000091,0.00000091,91,9.1,0.00000091,0.00000091,91,9.1,0.00000091,0.00000091,91,9.1,0.00000091,0.00000091
+11,1.1,0.011,0.00011,11,1.1,0.00011,0.000000011,11,1.1,0.0000011,0.000000011,11,1.1,0.000000011,0.000000011,11,1.1,0.000000011,0.000000011,11,1.1,0.000000011,0.000000011
+223,22.3,0.223,0.00223,223,22.3,0.00223,0.000000223,223,22.3,0.0000223,0.0000000223,223,22.3,0.000000223,0.0000000223,223,22.3,0.0000000223,0.0000000223,223,22.3,0.0000000223,0.0000000223
+334,33.4,0.334,0.00334,334,33.4,0.00334,0.000000334,334,33.4,0.0000334,0.00000000334,334,33.4,0.000000334,0.00000000334,334,33.4,0.00000000334,0.00000000334,334,33.4,0.00000000334,0.00000000334
+445,44.5,0.445,0.00445,445,44.5,0.00445,0.000000445,445,44.5,0.0000445,0.000000000445,445,44.5,0.000000445,0.000000000445,445,44.5,0.000000000445,0.000000000445,445,44.5,0.000000000445,0.000000000445
+556,55.6,0.556,0.00556,556,55.6,0.00556,0.000000556,556,55.6,0.0000556,0.0000000000556,556,55.6,0.000000556,0.0000000000556,556,55.6,0.0000000000556,0.0000000000556,556,55.6,0.0000000000556,0.0000000000556
+667,66.7,0.667,0.00667,667,66.7,0.00667,0.000000667,667,66.7,0.0000667,0.00000000000667,667,66.7,0.000000667,0.00000000000667,667,66.7,0.00000000000667,0.00000000000667,667,66.7,0.00000000000667,0.00000000000667
+7789,778.9,7.789,0.07789,7789,778.9,0.07789,0.000007789,7789,778.9,0.0007789,0.00000000007789,7789,778.9,0.000007789,0.000000000007789,7789,778.9,0.00000000007789,0.000000000007789,7789,778.9,0.000000000007789,0.000000000007789
+8891,889.1,8.891,0.08891,8891,889.1,0.08891,0.000008891,8891,889.1,0.0008891,0.00000000008891,8891,889.1,0.000008891,0.0000000000008891,8891,889.1,0.00000000008891,0.0000000000008891,8891,889.1,0.0000000000008891,0.0000000000008891
+9912,991.2,9.912,0.09912,9912,991.2,0.09912,0.000009912,9912,991.2,0.0009912,0.00000000009912,9912,991.2,0.000009912,0.00000000000009912,9912,991.2,0.00000000009912,0.00000000000009912,9912,991.2,0.00000000000009912,0.00000000000009912
+1112,111.2,1.112,0.01112,1112,111.2,0.01112,0.000001112,1112,111.2,0.0001112,0.00000000001112,1112,111.2,0.000001112,0.000000000000001112,1112,111.2,0.00000000001112,0.000000000000001112,1112,111.2,0.000000000000001112,0.000000000000001112
+222,22.2,0.222,0.00222,222,22.2,0.00222,0.000000222,222,22.2,0.0000222,0.00000000000222,222,22.2,0.000000222,0.000000000000000222,222,22.2,0.00000000000222,0.0000000000000000222,222,22.2,0.0000000000000000222,0.0000000000000000222
+333,33.3,0.333,0.00333,333,33.3,0.00333,0.000000333,333,33.3,0.0000333,0.00000000000333,333,33.3,0.000000333,0.000000000000000333,333,33.3,0.00000000000333,0.00000000000000000333,333,33.3,0.0000000000000000333,0.00000000000000000333
+444,44.4,0.444,0.00444,444,44.4,0.00444,0.000000444,444,44.4,0.0000444,0.00000000000444,444,44.4,0.000000444,0.000000000000000444,444,44.4,0.00000000000444,0.000000000000000000444,444,44.4,0.0000000000000000444,0.000000000000000000444
+555,55.5,0.555,0.00555,555,55.5,0.00555,0.000000555,555,55.5,0.0000555,0.00000000000555,555,55.5,0.000000555,0.000000000000000555,555,55.5,0.00000000000555,0.0000000000000000000555,555,55.5,0.0000000000000000555,0.0000000000000000000555
+666,66.6,0.666,0.00666,666,66.6,0.00666,0.000000666,666,66.6,0.0000666,0.00000000000666,666,66.6,0.000000666,0.000000000000000666,666,66.6,0.00000000000666,0.00000000000000000000666,666,66.6,0.0000000000000000666,0.00000000000000000000666
+777,77.7,0.777,0.00777,777,77.7,0.00777,0.000000777,777,77.7,0.0000777,0.00000000000777,777,77.7,0.000000777,0.000000000000000777,777,77.7,0.00000000000777,0.000000000000000000000777,777,77.7,0.0000000000000000777,0.000000000000000000000777
+888,88.8,0.888,0.00888,888,88.8,0.00888,0.000000888,888,88.8,0.0000888,0.00000000000888,888,88.8,0.000000888,0.000000000000000888,888,88.8,0.00000000000888,0.0000000000000000000000888,888,88.8,0.0000000000000000888,0.0000000000000000000000888
+999,99.9,0.999,0.00999,999,99.9,0.00999,0.000000999,999,99.9,0.0000999,0.00000000000999,999,99.9,0.000000999,0.000000000000000999,999,99.9,0.00000000000999,0.00000000000000000000000999,999,99.9,0.0000000000000000999,0.00000000000000000000000999
+167,16.7,0.167,0.00167,167,16.7,0.00167,0.000000167,167,16.7,0.0000167,0.00000000000167,167,16.7,0.000000167,0.000000000000000167,167,16.7,0.00000000000167,0.000000000000000000000000167,167,16.7,0.0000000000000000167,0.000000000000000000000000167
+178,17.8,0.178,0.00178,178,17.8,0.00178,0.000000178,178,17.8,0.0000178,0.00000000000178,178,17.8,0.000000178,0.000000000000000178,178,17.8,0.00000000000178,0.0000000000000000000000000178,178,17.8,0.0000000000000000178,0.0000000000000000000000000178
+18,1.8,0.018,0.00018,18,1.8,0.00018,0.000000018,18,1.8,0.0000018,0.00000000000018,18,1.8,0.000000018,0.000000000000000018,18,1.8,0.00000000000018,0.0000000000000000000000000018,18,1.8,0.0000000000000000018,0.000000000000000000000000000018
+19,1.9,0.019,0.00019,19,1.9,0.00019,0.000000019,19,1.9,0.0000019,0.00000000000019,19,1.9,0.000000019,0.000000000000000019,19,1.9,0.00000000000019,0.0000000000000000000000000019,19,1.9,0.0000000000000000019,0.0000000000000000000000000000019
+27,2.7,0.027,0.00027,27,2.7,0.00027,0.000000027,27,2.7,0.0000027,0.00000000000027,27,2.7,0.000000027,0.000000000000000027,27,2.7,0.00000000000027,0.0000000000000000000000000027,27,2.7,0.0000000000000000027,0.00000000000000000000000000000027
+28,2.8,0.028,0.00028,28,2.8,0.00028,0.000000028,28,2.8,0.0000028,0.00000000000028,28,2.8,0.000000028,0.000000000000000028,28,2.8,0.00000000000028,0.0000000000000000000000000028,28,2.8,0.0000000000000000028,0.000000000000000000000000000000028
+29,2.9,0.029,0.00029,29,2.9,0.00029,0.000000029,29,2.9,0.0000029,0.00000000000029,29,2.9,0.000000029,0.000000000000000029,29,2.9,0.00000000000029,0.0000000000000000000000000029,29,2.9,0.0000000000000000029,0.0000000000000000000000000000000029
+38,3.8,0.038,0.00038,38,3.8,0.00038,0.000000038,38,3.8,0.0000038,0.00000000000038,38,3.8,0.000000038,0.000000000000000038,38,3.8,0.00000000000038,0.0000000000000000000000000038,38,3.8,0.0000000000000000038,0.00000000000000000000000000000000038
+39,3.9,0.039,0.00039,39,3.9,0.00039,0.000000039,39,3.9,0.0000039,0.00000000000039,39,3.9,0.000000039,0.000000000000000039,39,3.9,0.00000000000039,0.0000000000000000000000000039,39,3.9,0.0000000000000000039,0.000000000000000000000000000000000039
+49,4.9,0.049,0.00049,49,4.9,0.00049,0.000000049,49,4.9,0.0000049,0.00000000000049,49,4.9,0.000000049,0.000000000000000049,49,4.9,0.00000000000049,0.0000000000000000000000000049,49,4.9,0.0000000000000000049,0.0000000000000000000000000000000000049
+1111,111.1,1.111,0.01111,1111,111.1,0.01111,0.000001111,1111,111.1,0.0001111,0.00000000001111,1111,111.1,0.000001111,0.000000000000001111,1111,111.1,0.00000000001111,0.0000000000000000000000001111,1111,111.1,0.0000000000000001111,0.00000000000000000000000000000000001111
+2222,222.2,2.222,0.02222,2222,222.2,0.02222,0.000002222,2222,222.2,0.0002222,0.00000000002222,2222,222.2,0.000002222,0.000000000000002222,2222,222.2,0.00000000002222,0.0000000000000000000000002222,2222,222.2,0.0000000000000002222,0.00000000000000000000000000000000002222
+3333,333.3,3.333,0.03333,3333,333.3,0.03333,0.000003333,3333,333.3,0.0003333,0.00000000003333,3333,333.3,0.000003333,0.000000000000003333,3333,333.3,0.00000000003333,0.0000000000000000000000003333,3333,333.3,0.0000000000000003333,0.00000000000000000000000000000000003333

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/datasets/functional/functional_schema_template.sql
----------------------------------------------------------------------
diff --git a/testdata/datasets/functional/functional_schema_template.sql b/testdata/datasets/functional/functional_schema_template.sql
index 117dc33..a21bdc8 100644
--- a/testdata/datasets/functional/functional_schema_template.sql
+++ b/testdata/datasets/functional/functional_schema_template.sql
@@ -1770,6 +1770,164 @@ SELECT d1, d2, d3, d4, d5, d6
 FROM {db_name}.{table_name};
 ====
 ---- DATASET
+-- Reasonably large table with decimal values.  This is used for
+-- testing min-max filters with decimal types on kudu tables
+functional
+---- BASE_TABLE_NAME
+decimal_rtf_tbl
+---- COLUMNS
+d5_0   DECIMAL(5, 0)
+d5_1   DECIMAL(5, 1)
+d5_3   DECIMAL(5, 3)
+d5_5   DECIMAL(5, 5)
+d9_0   DECIMAL(9, 0)
+d9_1   DECIMAL(9, 1)
+d9_5   DECIMAL(9, 5)
+d9_9   DECIMAL(9, 9)
+d14_0  DECIMAL(14, 0)
+d14_1  DECIMAL(14, 1)
+d14_7  DECIMAL(14, 7)
+d14_14 DECIMAL(14, 14)
+d18_0  DECIMAL(18, 0)
+d18_1  DECIMAL(18, 1)
+d18_9  DECIMAL(18, 9)
+d18_18 DECIMAL(18, 18)
+d28_0  DECIMAL(28, 0)
+d28_1  DECIMAL(28, 1)
+d28_14 DECIMAL(28, 14)
+d28_28 DECIMAL(28, 28)
+d38_0  DECIMAL(38, 0)
+d38_1  DECIMAL(38, 1)
+d38_19 DECIMAL(38, 19)
+d38_38 DECIMAL(38, 38)
+---- PARTITION_COLUMNS
+dpc    DECIMAL(9, 0)
+---- ALTER
+ALTER TABLE {table_name} ADD IF NOT EXISTS PARTITION(dpc=1);
+---- ROW_FORMAT
+delimited fields terminated by ','
+---- LOAD
+LOAD DATA LOCAL INPATH '{impala_home}/testdata/data/decimal_rtf_tbl.txt'
+OVERWRITE INTO TABLE {db_name}{db_suffix}.{table_name} PARTITION(dpc=1);
+---- DEPENDENT_LOAD
+INSERT OVERWRITE TABLE {db_name}{db_suffix}.{table_name} partition(dpc)
+select * from functional.{table_name};
+---- CREATE_KUDU
+DROP TABLE IF EXISTS {db_name}{db_suffix}.{table_name};
+CREATE TABLE {db_name}{db_suffix}.{table_name} (
+  d5_0   DECIMAL(5, 0),
+  d5_1   DECIMAL(5, 1),
+  d5_3   DECIMAL(5, 3),
+  d5_5   DECIMAL(5, 5),
+  d9_0   DECIMAL(9, 0),
+  d9_1   DECIMAL(9, 1),
+  d9_5   DECIMAL(9, 5),
+  d9_9   DECIMAL(9, 9),
+  d14_0  DECIMAL(14, 0),
+  d14_1  DECIMAL(14, 1),
+  d14_7  DECIMAL(14, 7),
+  d14_14 DECIMAL(14, 14),
+  d18_0  DECIMAL(18, 0),
+  d18_1  DECIMAL(18, 1),
+  d18_9  DECIMAL(18, 9),
+  d18_18 DECIMAL(18, 18),
+  d28_0  DECIMAL(28, 0),
+  d28_1  DECIMAL(28, 1),
+  d28_14 DECIMAL(28, 14),
+  d28_28 DECIMAL(28, 28),
+  d38_0  DECIMAL(38, 0),
+  d38_1  DECIMAL(38, 1),
+  d38_19 DECIMAL(38, 19),
+  d38_38 DECIMAL(38, 38),
+  PRIMARY KEY (d5_0, d5_1, d5_3, d5_5, d9_0, d9_1, d9_5, d9_9, d14_0, d14_1, d14_7, d14_14, d18_0, d18_1, d18_9, d18_18, d28_0, d28_1, d28_14, d28_28, d38_0, d38_1, d38_19, d38_38)
+)
+PARTITION BY HASH PARTITIONS 10
+STORED AS KUDU;
+---- DEPENDENT_LOAD_KUDU
+INSERT into TABLE {db_name}{db_suffix}.{table_name}
+SELECT d5_0, d5_1, d5_3, d5_5, d9_0, d9_1, d9_5, d9_9, d14_0, d14_1, d14_7, d14_14, d18_0, d18_1, d18_9, d18_18, d28_0, d28_1, d28_14, d28_28, d38_0, d38_1, d38_19, d38_38
+FROM {db_name}.{table_name};
+====
+---- DATASET
+-- Small table with decimal values.  This is used for
+-- testing min-max filters with decimal types on kudu tables
+functional
+---- BASE_TABLE_NAME
+decimal_rtf_tiny_tbl
+---- COLUMNS
+d5_0   DECIMAL(5, 0)
+d5_1   DECIMAL(5, 1)
+d5_3   DECIMAL(5, 3)
+d5_5   DECIMAL(5, 5)
+d9_0   DECIMAL(9, 0)
+d9_1   DECIMAL(9, 1)
+d9_5   DECIMAL(9, 5)
+d9_9   DECIMAL(9, 9)
+d14_0  DECIMAL(14, 0)
+d14_1  DECIMAL(14, 1)
+d14_7  DECIMAL(14, 7)
+d14_14 DECIMAL(14, 14)
+d18_0  DECIMAL(18, 0)
+d18_1  DECIMAL(18, 1)
+d18_9  DECIMAL(18, 9)
+d18_18 DECIMAL(18, 18)
+d28_0  DECIMAL(28, 0)
+d28_1  DECIMAL(28, 1)
+d28_14 DECIMAL(28, 14)
+d28_28 DECIMAL(28, 28)
+d38_0  DECIMAL(38, 0)
+d38_1  DECIMAL(38, 1)
+d38_19 DECIMAL(38, 19)
+d38_38 DECIMAL(38, 38)
+---- PARTITION_COLUMNS
+dpc    DECIMAL(9, 0)
+---- ALTER
+ALTER TABLE {table_name} ADD IF NOT EXISTS PARTITION(dpc=1);
+---- ROW_FORMAT
+delimited fields terminated by ','
+---- LOAD
+LOAD DATA LOCAL INPATH '{impala_home}/testdata/data/decimal_rtf_tiny_tbl.txt'
+OVERWRITE INTO TABLE {db_name}{db_suffix}.{table_name} PARTITION(dpc=1);
+---- DEPENDENT_LOAD
+INSERT OVERWRITE TABLE {db_name}{db_suffix}.{table_name} partition(dpc)
+select * from functional.{table_name};
+---- CREATE_KUDU
+DROP TABLE IF EXISTS {db_name}{db_suffix}.{table_name};
+CREATE TABLE {db_name}{db_suffix}.{table_name} (
+  d5_0   DECIMAL(5, 0),
+  d5_1   DECIMAL(5, 1),
+  d5_3   DECIMAL(5, 3),
+  d5_5   DECIMAL(5, 5),
+  d9_0   DECIMAL(9, 0),
+  d9_1   DECIMAL(9, 1),
+  d9_5   DECIMAL(9, 5),
+  d9_9   DECIMAL(9, 9),
+  d14_0  DECIMAL(14, 0),
+  d14_1  DECIMAL(14, 1),
+  d14_7  DECIMAL(14, 7),
+  d14_14 DECIMAL(14, 14),
+  d18_0  DECIMAL(18, 0),
+  d18_1  DECIMAL(18, 1),
+  d18_9  DECIMAL(18, 9),
+  d18_18 DECIMAL(18, 18),
+  d28_0  DECIMAL(28, 0),
+  d28_1  DECIMAL(28, 1),
+  d28_14 DECIMAL(28, 14),
+  d28_28 DECIMAL(28, 28),
+  d38_0  DECIMAL(38, 0),
+  d38_1  DECIMAL(38, 1),
+  d38_19 DECIMAL(38, 19),
+  d38_38 DECIMAL(38, 38),
+  PRIMARY KEY (d5_0, d5_1, d5_3, d5_5, d9_0, d9_1, d9_5, d9_9, d14_0, d14_1, d14_7, d14_14, d18_0, d18_1, d18_9, d18_18, d28_0, d28_1, d28_14, d28_28, d38_0, d38_1, d38_19, d38_38)
+)
+PARTITION BY HASH PARTITIONS 10
+STORED AS KUDU;
+---- DEPENDENT_LOAD_KUDU
+INSERT into TABLE {db_name}{db_suffix}.{table_name}
+SELECT d5_0, d5_1, d5_3, d5_5, d9_0, d9_1, d9_5, d9_9, d14_0, d14_1, d14_7, d14_14, d18_0, d18_1, d18_9, d18_18, d28_0, d28_1, d28_14, d28_28, d38_0, d38_1, d38_19, d38_38
+FROM {db_name}.{table_name};
+====
+---- DATASET
 functional
 ---- BASE_TABLE_NAME
 decimal_tiny

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/datasets/functional/schema_constraints.csv
----------------------------------------------------------------------
diff --git a/testdata/datasets/functional/schema_constraints.csv b/testdata/datasets/functional/schema_constraints.csv
index 3b356b2..1ce6ce3 100644
--- a/testdata/datasets/functional/schema_constraints.csv
+++ b/testdata/datasets/functional/schema_constraints.csv
@@ -140,6 +140,16 @@ table_name:decimal_tiny, constraint:restrict_to, table_format:kudu/none/none
 table_name:decimal_tbl, constraint:restrict_to, table_format:orc/def/block
 table_name:decimal_tiny, constraint:restrict_to, table_format:orc/def/block
 
+table_name:decimal_rtf_tbl, constraint:restrict_to, table_format:text/none/none
+table_name:decimal_rtf_tbl, constraint:restrict_to, table_format:parquet/none/none
+table_name:decimal_rtf_tbl, constraint:restrict_to, table_format:kudu/none/none
+table_name:decimal_rtf_tbl, constraint:restrict_to, table_format:orc/def/block
+
+table_name:decimal_rtf_tiny_tbl, constraint:restrict_to, table_format:text/none/none
+table_name:decimal_rtf_tiny_tbl, constraint:restrict_to, table_format:parquet/none/none
+table_name:decimal_rtf_tiny_tbl, constraint:restrict_to, table_format:kudu/none/none
+table_name:decimal_rtf_tiny_tbl, constraint:restrict_to, table_format:orc/def/block
+
 table_name:avro_decimal_tbl, constraint:restrict_to, table_format:avro/snap/block
 
 # CHAR is not supported by HBase.
@@ -195,6 +205,8 @@ table_name:zipcode_incomes, constraint:only, table_format:kudu/none/none
 table_name:nulltable, constraint:only, table_format:kudu/none/none
 table_name:nullescapedtable, constraint:only, table_format:kudu/none/none
 table_name:decimal_tbl, constraint:only, table_format:kudu/none/none
+table_name:decimal_rtf_tbl, constraint:only, table_format:kudu/none/none
+table_name:decimal_rtf_tiny_tbl, constraint:only, table_format:kudu/none/none
 table_name:decimal_tiny, constraint:only, table_format:kudu/none/none
 table_name:strings_with_quotes, constraint:only, table_format:kudu/none/none
 table_name:manynulls, constraint:only, table_format:kudu/none/none


[04/10] impala git commit: IMPALA-7666: Adding an opaque client identifier to query options.

Posted by jo...@apache.org.
IMPALA-7666: Adding an opaque client identifier to query options.

We sometimes struggle to identify the client (e.g., a given version of a
JDBC driver, Tableau, Hue, etc.) for a given query. This commit adds a
User-Agent header style, called "Client Identifier", which clients can
set as a Query Option. Nothing is done with this header, but it's
written into logs and query profiles.

This commit includes changes to impala-shell to include the version of
impala shell with an associated test.

A future commit will serialize the name of the py.test being run into
this field, which is handy for figuring out where a query came from.

Change-Id: I0a7708492f05d33b2bc99fc3a03b461bbb6f3ea4
Reviewed-on: http://gerrit.cloudera.org:8080/12130
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/a8d3b765
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/a8d3b765
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/a8d3b765

Branch: refs/heads/master
Commit: a8d3b765d88496bd51194cb1aa6edcd9459f68fa
Parents: 049e105
Author: Philip Zeyliger <ph...@cloudera.com>
Authored: Wed Dec 26 14:20:37 2018 -0800
Committer: Impala Public Jenkins <im...@cloudera.com>
Committed: Thu Jan 10 03:11:35 2019 +0000

----------------------------------------------------------------------
 be/src/service/query-options.cc            |  4 ++++
 be/src/service/query-options.h             |  3 ++-
 common/thrift/ImpalaInternalService.thrift |  3 +++
 common/thrift/ImpalaService.thrift         |  5 +++++
 shell/impala_shell.py                      | 14 ++++++++++----
 tests/shell/test_shell_commandline.py      |  6 ++++++
 6 files changed, 30 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/a8d3b765/be/src/service/query-options.cc
----------------------------------------------------------------------
diff --git a/be/src/service/query-options.cc b/be/src/service/query-options.cc
index bb49762..c3cf1e3 100644
--- a/be/src/service/query-options.cc
+++ b/be/src/service/query-options.cc
@@ -720,6 +720,10 @@ Status impala::SetQueryOption(const string& key, const string& value,
         query_options->__set_topn_bytes_limit(topn_bytes_limit);
         break;
       }
+      case TImpalaQueryOptions::CLIENT_IDENTIFIER: {
+        query_options->__set_client_identifier(value);
+        break;
+      }
       default:
         if (IsRemovedQueryOption(key)) {
           LOG(WARNING) << "Ignoring attempt to set removed query option '" << key << "'";

http://git-wip-us.apache.org/repos/asf/impala/blob/a8d3b765/be/src/service/query-options.h
----------------------------------------------------------------------
diff --git a/be/src/service/query-options.h b/be/src/service/query-options.h
index 95263f7..f001ba4 100644
--- a/be/src/service/query-options.h
+++ b/be/src/service/query-options.h
@@ -41,7 +41,7 @@ typedef std::unordered_map<string, beeswax::TQueryOptionLevel::type>
 // the DCHECK.
 #define QUERY_OPTS_TABLE\
   DCHECK_EQ(_TImpalaQueryOptions_VALUES_TO_NAMES.size(),\
-      TImpalaQueryOptions::TOPN_BYTES_LIMIT + 1);\
+      TImpalaQueryOptions::CLIENT_IDENTIFIER + 1);\
   REMOVED_QUERY_OPT_FN(abort_on_default_limit_exceeded, ABORT_ON_DEFAULT_LIMIT_EXCEEDED)\
   QUERY_OPT_FN(abort_on_error, ABORT_ON_ERROR, TQueryOptionLevel::REGULAR)\
   REMOVED_QUERY_OPT_FN(allow_unsupported_formats, ALLOW_UNSUPPORTED_FORMATS)\
@@ -144,6 +144,7 @@ typedef std::unordered_map<string, beeswax::TQueryOptionLevel::type>
       TQueryOptionLevel::ADVANCED)\
   QUERY_OPT_FN(cpu_limit_s, CPU_LIMIT_S, TQueryOptionLevel::DEVELOPMENT)\
   QUERY_OPT_FN(topn_bytes_limit, TOPN_BYTES_LIMIT, TQueryOptionLevel::ADVANCED)\
+  QUERY_OPT_FN(client_identifier, CLIENT_IDENTIFIER, TQueryOptionLevel::ADVANCED)\
   ;
 
 /// Enforce practical limits on some query options to avoid undesired query state.

http://git-wip-us.apache.org/repos/asf/impala/blob/a8d3b765/common/thrift/ImpalaInternalService.thrift
----------------------------------------------------------------------
diff --git a/common/thrift/ImpalaInternalService.thrift b/common/thrift/ImpalaInternalService.thrift
index 6add620..36b883d 100644
--- a/common/thrift/ImpalaInternalService.thrift
+++ b/common/thrift/ImpalaInternalService.thrift
@@ -308,6 +308,9 @@ struct TQueryOptions {
   // See comment in ImpalaService.thrift
   // The default value is set to 512MB based on empirical data
   73: optional i64 topn_bytes_limit = 536870912;
+
+  // See comment in ImpalaService.thrift
+  74: optional string client_identifier;
 }
 
 // Impala currently has two types of sessions: Beeswax and HiveServer2

http://git-wip-us.apache.org/repos/asf/impala/blob/a8d3b765/common/thrift/ImpalaService.thrift
----------------------------------------------------------------------
diff --git a/common/thrift/ImpalaService.thrift b/common/thrift/ImpalaService.thrift
index 2c15b39..2986cd9 100644
--- a/common/thrift/ImpalaService.thrift
+++ b/common/thrift/ImpalaService.thrift
@@ -346,6 +346,11 @@ enum TImpalaQueryOptions {
   // operator which is capable of spilling to disk (unlike the TopN operator which keeps
   // everything in memory). 0 or -1 means this has no effect.
   TOPN_BYTES_LIMIT,
+
+  // An opaque string, not used by Impala itself, that can be used to identify
+  // the client, like a User-Agent in HTTP. Drivers should set this to
+  // their version number. May also be used by tests to help identify queries.
+  CLIENT_IDENTIFIER
 }
 
 // The summary of a DML statement.

http://git-wip-us.apache.org/repos/asf/impala/blob/a8d3b765/shell/impala_shell.py
----------------------------------------------------------------------
diff --git a/shell/impala_shell.py b/shell/impala_shell.py
index 20790b9..7471c2a 100755
--- a/shell/impala_shell.py
+++ b/shell/impala_shell.py
@@ -45,7 +45,7 @@ from shell_output import OverwritingStdErrOutputStream
 from subprocess import call
 
 VERSION_FORMAT = "Impala Shell v%(version)s (%(git_hash)s) built on %(build_date)s"
-VERSION_STRING = "build version not available"
+VERSION_STRING = "impala shell build version not available"
 READLINE_UNAVAILABLE_ERROR = "The readline module was either not found or disabled. " \
                              "Command history will not be collected."
 
@@ -791,12 +791,20 @@ class ImpalaShell(object, cmd.Cmd):
 
     # Use a temporary to avoid changing set_query_options during iteration.
     new_query_options = {}
+    default_query_option_keys = set(self.imp_client.default_query_options)
     for set_option, value in self.set_query_options.iteritems():
-      if set_option not in set(self.imp_client.default_query_options):
+      if set_option not in default_query_option_keys:
         print ('%s is not supported for the impalad being '
                'connected to, ignoring.' % set_option)
       else:
         new_query_options[set_option] = value
+
+    if "CLIENT_IDENTIFIER" not in new_query_options \
+        and "CLIENT_IDENTIFIER" in default_query_option_keys:
+      # Programmatically set default CLIENT_IDENTIFIER to our version string,
+      # if the Impala version supports this option.
+      new_query_options["CLIENT_IDENTIFIER"] = VERSION_STRING
+
     self.set_query_options = new_query_options
 
   def _connect(self):
@@ -1618,8 +1626,6 @@ if __name__ == "__main__":
     print_to_stderr('%s not found.\n' % user_config)
     sys.exit(1)
 
-  query_options = {}
-
   # default shell options loaded in from impala_shell_config_defaults.py
   # options defaults overwritten by those in config file
   try:

http://git-wip-us.apache.org/repos/asf/impala/blob/a8d3b765/tests/shell/test_shell_commandline.py
----------------------------------------------------------------------
diff --git a/tests/shell/test_shell_commandline.py b/tests/shell/test_shell_commandline.py
index 72b2100..66c28e9 100644
--- a/tests/shell/test_shell_commandline.py
+++ b/tests/shell/test_shell_commandline.py
@@ -793,3 +793,9 @@ class TestImpalaShell(ImpalaTestSuite):
       test_port = s.getsockname()[1]
       args = '-q "select foo; select bar;" --ssl -t 2000 -i localhost:%d' % (test_port)
       run_impala_shell_cmd(args, expect_success=False)
+
+  def test_client_identifier(self):
+    """Confirms that a version string is passed along."""
+    args = "--query 'select 0; profile'"
+    result = run_impala_shell_cmd(args)
+    assert 'client_identifier=impala shell' in result.stdout.lower()


[05/10] impala git commit: IMPALA-6533: Add min-max filter for decimal types on kudu tables.

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/workloads/functional-query/queries/QueryTest/min_max_filters.test
----------------------------------------------------------------------
diff --git a/testdata/workloads/functional-query/queries/QueryTest/min_max_filters.test b/testdata/workloads/functional-query/queries/QueryTest/min_max_filters.test
index 5e2ec29..4401537 100644
--- a/testdata/workloads/functional-query/queries/QueryTest/min_max_filters.test
+++ b/testdata/workloads/functional-query/queries/QueryTest/min_max_filters.test
@@ -65,6 +65,256 @@ where a.timestamp_col = b.timestamp_col
 ---- RESULTS
 8
 ====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_0 = b.d5_0
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_1 = b.d5_1
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_3 = b.d5_3
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 105
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_5 = b.d5_5 and b.d5_5 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 310
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d5_5 = b.d5_5 and b.d5_5 = 0
+---- RESULTS
+180
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 180
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_0 = b.d9_0
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_1 = b.d9_1
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_5 = b.d9_5
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 136
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_9 = b.d9_9 and b.d9_9 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 342
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d9_9 = b.d9_9 and b.d9_9 = 0
+---- RESULTS
+306
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 306
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_0 = b.d14_0
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_1 = b.d14_1
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_7 = b.d14_7
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 197
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_14 = b.d14_14 and b.d14_14 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 442
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d14_14 = b.d14_14 and b.d14_14 = 0
+---- RESULTS
+441
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 441
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_0 = b.d28_0
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_1 = b.d28_1
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_14 = b.d28_14
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 386
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_28 = b.d28_28 and b.d28_28 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 619
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d28_28 = b.d28_28 and b.d28_28 = 0
+---- RESULTS
+686
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 686
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_0 = b.d38_0
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 111
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_1 = b.d38_1
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 110
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_19 = b.d38_19
+---- RESULTS
+38
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 491
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_38 = b.d38_38 and b.d38_38 != 0
+---- RESULTS
+37
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 643
+====
+---- QUERY
+SET RUNTIME_FILTER_WAIT_TIME_MS=30000;
+select STRAIGHT_JOIN count(*) from decimal_rtf_tbl a
+join [BROADCAST] decimal_rtf_tiny_tbl b
+where a.d38_38 = b.d38_38 and b.d38_38 = 0
+---- RESULTS
+732
+---- RUNTIME_PROFILE
+aggregation(SUM, ProbeRows): 732
+====
 
 ---- QUERY
 ####################################################

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/tests/common/impala_test_suite.py
----------------------------------------------------------------------
diff --git a/tests/common/impala_test_suite.py b/tests/common/impala_test_suite.py
index 4389ea0..5f93c69 100644
--- a/tests/common/impala_test_suite.py
+++ b/tests/common/impala_test_suite.py
@@ -504,14 +504,20 @@ class ImpalaTestSuite(BaseTestSuite):
         test_section['RESULTS'] = test_section['RESULTS'] \
             .replace(NAMENODE, '$NAMENODE') \
             .replace('$IMPALA_HOME', IMPALA_HOME)
+      rt_profile_info = None
       if 'RUNTIME_PROFILE_%s' % table_format_info.file_format in test_section:
         # If this table format has a RUNTIME_PROFILE section specifically for it, evaluate
         # that section and ignore any general RUNTIME_PROFILE sections.
-        verify_runtime_profile(
-            test_section['RUNTIME_PROFILE_%s' % table_format_info.file_format],
-            result.runtime_profile)
+        rt_profile_info = 'RUNTIME_PROFILE_%s' % table_format_info.file_format
       elif 'RUNTIME_PROFILE' in test_section:
-        verify_runtime_profile(test_section['RUNTIME_PROFILE'], result.runtime_profile)
+        rt_profile_info = 'RUNTIME_PROFILE'
+
+      if rt_profile_info is not None:
+        rt_profile = verify_runtime_profile(test_section[rt_profile_info],
+                               result.runtime_profile,
+                               update_section=pytest.config.option.update_results)
+        if pytest.config.option.update_results:
+          test_section[rt_profile_info] = "".join(rt_profile)
 
       if 'DML_RESULTS' in test_section:
         assert 'ERRORS' not in test_section

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/tests/common/test_result_verifier.py
----------------------------------------------------------------------
diff --git a/tests/common/test_result_verifier.py b/tests/common/test_result_verifier.py
index 4601145..8a17028 100644
--- a/tests/common/test_result_verifier.py
+++ b/tests/common/test_result_verifier.py
@@ -555,7 +555,8 @@ def compute_aggregation(function, field, runtime_profile):
 
   return result
 
-def verify_runtime_profile(expected, actual):
+
+def verify_runtime_profile(expected, actual, update_section=False):
   """
   Check that lines matching all of the expected runtime profile entries are present
   in the actual text runtime profile. The check passes if, for each of the expected
@@ -595,14 +596,21 @@ def verify_runtime_profile(expected, actual):
       "\nEXPECTED LINES:\n%s\n\nACTUAL PROFILE:\n%s" % ('\n'.join(unmatched_lines),
         actual))
 
+  updated_aggregations = []
   # Compute the aggregations and check against values
   for i in xrange(len(expected_aggregations)):
     if (expected_aggregations[i] is None): continue
     function, field, expected_value = expected_aggregations[i]
     actual_value = compute_aggregation(function, field, actual)
-    assert actual_value == expected_value, ("Aggregation of %s over %s did not match "
-        "expected results.\nEXPECTED VALUE:\n%d\n\nACTUAL VALUE:\n%d"
-        "\n\nPROFILE:\n%s\n" % (function, field, expected_value, actual_value, actual))
+    if update_section:
+      updated_aggregations.append("aggregation(%s, %s): %d"
+                                  % (function, field, actual_value))
+    else:
+        assert actual_value == expected_value, ("Aggregation of %s over %s did not match "
+            "expected results.\nEXPECTED VALUE:\n%d\n\nACTUAL VALUE:\n%d"
+            "\n\nPROFILE:\n%s\n"
+            % (function, field, expected_value, actual_value, actual))
+  return updated_aggregations
 
 def get_node_exec_options(profile_string, exec_node_id):
   """ Return a list with all of the ExecOption strings for the given exec node id. """

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/tests/query_test/test_runtime_filters.py
----------------------------------------------------------------------
diff --git a/tests/query_test/test_runtime_filters.py b/tests/query_test/test_runtime_filters.py
index f769224..68db622 100644
--- a/tests/query_test/test_runtime_filters.py
+++ b/tests/query_test/test_runtime_filters.py
@@ -112,6 +112,11 @@ class TestMinMaxFilters(ImpalaTestSuite):
   def test_min_max_filters(self, vector):
     self.run_test_case('QueryTest/min_max_filters', vector)
 
+  def test_decimal_min_max_filters(self, vector):
+    if self.exploration_strategy() != 'exhaustive':
+      pytest.skip("skip decimal min max filter test with various joins")
+    self.run_test_case('QueryTest/decimal_min_max_filters', vector)
+
   def test_large_strings(self, cursor, unique_database):
     """Tests that truncation of large strings by min-max filters still gives correct
     results"""


[03/10] impala git commit: IMPALA-7867 (Part 4): Collection cleanup in catalog

Posted by jo...@apache.org.
IMPALA-7867 (Part 4): Collection cleanup in catalog

Continues the collection clean work to:

* Use collection interfaces for variable and function argument
  declarations,
* Replace generic Guava newArrayList(), etc. calls with the direct use
  of the Java collection classes,
* Clean up unused imports and add override annotations.

This patch focuses on the catalog module and its tests.

Tests: this is purely a code change, no functional change. Reran
existing tests.

Change-Id: Ic83425201c90966aae4c280d94cf1b427b3d71d1
Reviewed-on: http://gerrit.cloudera.org:8080/12131
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/049e1056
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/049e1056
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/049e1056

Branch: refs/heads/master
Commit: 049e1056f8d772c55274a54ff99e2cf44b82fa56
Parents: 43058cb
Author: paul-rogers <pr...@cloudera.com>
Authored: Wed Dec 26 22:56:08 2018 -0800
Committer: Impala Public Jenkins <im...@cloudera.com>
Committed: Wed Jan 9 23:17:25 2019 +0000

----------------------------------------------------------------------
 .../impala/catalog/AggregateFunction.java       |  4 +-
 .../impala/catalog/AuthorizationPolicy.java     | 28 +++----
 .../org/apache/impala/catalog/BuiltinsDb.java   |  2 +-
 .../java/org/apache/impala/catalog/Catalog.java | 14 ++--
 .../impala/catalog/CatalogObjectCache.java      |  4 +-
 .../impala/catalog/CatalogServiceCatalog.java   | 32 ++++----
 .../java/org/apache/impala/catalog/Column.java  | 12 +--
 .../main/java/org/apache/impala/catalog/Db.java | 32 ++++----
 .../org/apache/impala/catalog/DiskIdMapper.java | 14 ++--
 .../apache/impala/catalog/FeCatalogUtils.java   | 22 ++---
 .../org/apache/impala/catalog/FeFsTable.java    | 19 +++--
 .../org/apache/impala/catalog/FeHBaseTable.java | 16 ++--
 .../org/apache/impala/catalog/FeKuduTable.java  |  8 +-
 .../java/org/apache/impala/catalog/FeTable.java |  3 +-
 .../org/apache/impala/catalog/Function.java     |  4 +-
 .../org/apache/impala/catalog/HBaseTable.java   | 14 ++--
 .../apache/impala/catalog/HdfsFileFormat.java   |  5 +-
 .../apache/impala/catalog/HdfsPartition.java    | 20 +++--
 .../impala/catalog/HdfsStorageDescriptor.java   |  4 +-
 .../org/apache/impala/catalog/HdfsTable.java    | 84 ++++++++++----------
 .../catalog/HiveStorageDescriptorFactory.java   |  2 +-
 .../catalog/ImpaladTableUsageTracker.java       | 16 ++--
 .../org/apache/impala/catalog/KuduTable.java    |  8 +-
 .../impala/catalog/PartitionStatsUtil.java      | 24 +++---
 .../apache/impala/catalog/PrimitiveType.java    |  4 +-
 .../apache/impala/catalog/ScalarFunction.java   | 11 ++-
 .../org/apache/impala/catalog/StructType.java   | 16 ++--
 .../java/org/apache/impala/catalog/Table.java   | 17 ++--
 .../apache/impala/catalog/TableLoadingMgr.java  | 12 +--
 .../apache/impala/catalog/TopicUpdateLog.java   |  5 +-
 .../java/org/apache/impala/catalog/Type.java    | 33 ++++----
 .../catalog/local/CatalogdMetaProvider.java     | 10 +--
 .../catalog/local/DirectMetaProvider.java       |  3 +-
 .../impala/catalog/local/LocalCatalog.java      |  8 +-
 .../apache/impala/catalog/local/LocalDb.java    | 11 +--
 .../impala/catalog/local/LocalFsTable.java      | 22 ++---
 .../impala/catalog/local/LocalHbaseTable.java   | 10 +--
 .../impala/catalog/local/LocalKuduTable.java    |  2 +-
 .../apache/impala/catalog/local/LocalTable.java |  6 +-
 .../impala/planner/HdfsPartitionPruner.java     |  6 +-
 .../catalog/CatalogObjectToFromThriftTest.java  |  3 +-
 .../org/apache/impala/catalog/CatalogTest.java  | 17 ++--
 .../impala/catalog/HdfsPartitionTest.java       | 21 ++---
 .../catalog/HdfsStorageDescriptorTest.java      | 32 ++++----
 .../impala/catalog/PartialCatalogInfoTest.java  |  6 +-
 .../apache/impala/catalog/TestSchemaUtils.java  |  3 +-
 46 files changed, 328 insertions(+), 321 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/AggregateFunction.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/AggregateFunction.java b/fe/src/main/java/org/apache/impala/catalog/AggregateFunction.java
index 7228efd..70d45b5 100644
--- a/fe/src/main/java/org/apache/impala/catalog/AggregateFunction.java
+++ b/fe/src/main/java/org/apache/impala/catalog/AggregateFunction.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.impala.analysis.Expr;
@@ -28,7 +29,6 @@ import org.apache.impala.thrift.TFunction;
 import org.apache.impala.thrift.TFunctionBinaryType;
 import org.apache.impala.thrift.TSymbolLookupParams;
 import org.apache.impala.thrift.TSymbolType;
-import org.apache.kudu.shaded.com.google.common.collect.Lists;
 
 import com.google.common.base.Preconditions;
 
@@ -209,7 +209,7 @@ public class AggregateFunction extends Function {
    */
   public static List<Expr> getCanonicalDistinctAggChildren(FunctionCallExpr aggFn) {
     Preconditions.checkState(aggFn.isDistinct());
-    List<Expr> result = Lists.newArrayList();
+    List<Expr> result = new ArrayList<>();
     if (aggFn.getFnName().getFunction().equalsIgnoreCase("group_concat")) {
       result.add(aggFn.getChild(0).ignoreImplicitCast());
     } else {

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/AuthorizationPolicy.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/AuthorizationPolicy.java b/fe/src/main/java/org/apache/impala/catalog/AuthorizationPolicy.java
index 4934505..5e9b11d 100644
--- a/fe/src/main/java/org/apache/impala/catalog/AuthorizationPolicy.java
+++ b/fe/src/main/java/org/apache/impala/catalog/AuthorizationPolicy.java
@@ -17,11 +17,13 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.base.Preconditions;
 import org.apache.commons.net.ntp.TimeStamp;
 import org.apache.impala.common.AnalysisException;
 import org.apache.impala.common.InternalException;
@@ -30,17 +32,15 @@ import org.apache.impala.thrift.TColumn;
 import org.apache.impala.thrift.TPrincipal;
 import org.apache.impala.thrift.TPrincipalType;
 import org.apache.impala.thrift.TPrivilege;
-import org.apache.impala.thrift.TResultRow;
 import org.apache.impala.thrift.TResultSet;
 import org.apache.impala.thrift.TResultSetMetadata;
+import org.apache.impala.util.TResultRowBuilder;
 import org.apache.log4j.Logger;
 import org.apache.sentry.core.common.ActiveRoleSet;
 import org.apache.sentry.provider.cache.PrivilegeCache;
 
-import org.apache.impala.util.TResultRowBuilder;
+import com.google.common.base.Preconditions;
 import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
 /**
@@ -80,12 +80,12 @@ public class AuthorizationPolicy implements PrivilegeCache {
   private final CatalogObjectCache<User> userCache_ = new CatalogObjectCache<>(false);
 
   // Map of principal ID -> user/role name. Used to match privileges to users/roles.
-  private final Map<Integer, String> principalIds_ = Maps.newHashMap();
+  private final Map<Integer, String> principalIds_ = new HashMap<>();
 
   // Map of group name (case sensitive) to set of role names (case insensitive) that
   // have been granted to this group. Kept in sync with roleCache_. Provides efficient
   // lookups of Role by group name.
-  Map<String, Set<String>> groupsToRoles_ = Maps.newHashMap();
+  Map<String, Set<String>> groupsToRoles_ = new HashMap<>();
 
   /**
    * Adds a new principal to the policy. If a principal with the same name already
@@ -125,7 +125,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
     for (String groupName: principal.getGrantGroups()) {
       Set<String> grantedRoles = groupsToRoles_.get(groupName);
       if (grantedRoles == null) {
-        grantedRoles = Sets.newHashSet();
+        grantedRoles = new HashSet<>();
         groupsToRoles_.put(groupName, grantedRoles);
       }
       grantedRoles.add(principal.getName().toLowerCase());
@@ -268,7 +268,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
    * Gets all roles granted to the specified group.
    */
   public synchronized List<Role> getGrantedRoles(String groupName) {
-    List<Role> grantedRoles = Lists.newArrayList();
+    List<Role> grantedRoles = new ArrayList<>();
     Set<String> roleNames = groupsToRoles_.get(groupName);
     if (roleNames != null) {
       for (String roleName: roleNames) {
@@ -379,7 +379,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
     role.addGrantGroup(groupName);
     Set<String> grantedRoles = groupsToRoles_.get(groupName);
     if (grantedRoles == null) {
-      grantedRoles = Sets.newHashSet();
+      grantedRoles = new HashSet<>();
       groupsToRoles_.put(groupName, grantedRoles);
     }
     grantedRoles.add(roleName.toLowerCase());
@@ -409,7 +409,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
   @Override
   public synchronized Set<String> listPrivileges(Set<String> groups,
       ActiveRoleSet roleSet) {
-    Set<String> privileges = Sets.newHashSet();
+    Set<String> privileges = new HashSet<>();
     if (roleSet != ActiveRoleSet.ALL) {
       throw new UnsupportedOperationException("Impala does not support role subsets.");
     }
@@ -473,7 +473,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
     TResultSet result = new TResultSet();
     result.setSchema(new TResultSetMetadata());
     addColumnOutputColumns(result.getSchema());
-    result.setRows(Lists.<TResultRow>newArrayList());
+    result.setRows(new ArrayList<>());
 
     Role role = getRole(principalName);
     if (role != null) {
@@ -550,7 +550,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
     result.getSchema().addToColumns(new TColumn("principal_name",
         Type.STRING.toThrift()));
     addColumnOutputColumns(result.getSchema());
-    result.setRows(Lists.<TResultRow>newArrayList());
+    result.setRows(new ArrayList<>());
 
     // A user should be considered to not exist if they do not have any groups.
     Set<String> groupNames = fe.getAuthzChecker().getUserGroups(
@@ -567,7 +567,7 @@ public class AuthorizationPolicy implements PrivilegeCache {
 
     // Get the groups that user belongs to, get the roles those groups belong to and
     // return those privileges as well.
-    List<Role> roles = Lists.newArrayList();
+    List<Role> roles = new ArrayList<>();
     for (String groupName: groupNames) {
       roles.addAll(fe.getCatalog().getAuthPolicy().getGrantedRoles(groupName));
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/BuiltinsDb.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/BuiltinsDb.java b/fe/src/main/java/org/apache/impala/catalog/BuiltinsDb.java
index 5641fc3..8f831a8 100644
--- a/fe/src/main/java/org/apache/impala/catalog/BuiltinsDb.java
+++ b/fe/src/main/java/org/apache/impala/catalog/BuiltinsDb.java
@@ -804,7 +804,7 @@ public class BuiltinsDb extends Db {
     Db db = this;
     // Count (*)
     db.addBuiltin(AggregateFunction.createBuiltin(db, "count",
-        new ArrayList<Type>(), Type.BIGINT, Type.BIGINT,
+        new ArrayList<>(), Type.BIGINT, Type.BIGINT,
         prefix + "8InitZeroIN10impala_udf9BigIntValEEEvPNS2_15FunctionContextEPT_",
         prefix + "15CountStarUpdateEPN10impala_udf15FunctionContextEPNS1_9BigIntValE",
         prefix + "10CountMergeEPN10impala_udf15FunctionContextERKNS1_9BigIntValEPS4_",

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/Catalog.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Catalog.java b/fe/src/main/java/org/apache/impala/catalog/Catalog.java
index 2a8f5a0..1f46882 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Catalog.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Catalog.java
@@ -17,9 +17,11 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicReference;
 
@@ -36,7 +38,6 @@ import org.apache.impala.util.PatternMatcher;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
 
 /**
  * Thread safe interface for reading and updating metadata stored in the Hive MetaStore.
@@ -72,9 +73,8 @@ public abstract class Catalog {
   // Thread safe cache of database metadata. Uses an AtomicReference so reset()
   // operations can atomically swap dbCache_ references.
   // TODO: Update this to use a CatalogObjectCache?
-  protected AtomicReference<ConcurrentHashMap<String, Db>> dbCache_ =
-      new AtomicReference<ConcurrentHashMap<String, Db>>(
-          new ConcurrentHashMap<String, Db>());
+  protected AtomicReference<Map<String, Db>> dbCache_ =
+      new AtomicReference<>(new ConcurrentHashMap<String, Db>());
 
   // Cache of data sources.
   protected final CatalogObjectCache<DataSource> dataSources_;
@@ -338,7 +338,7 @@ public abstract class Catalog {
   public static List<String> filterStringsByPattern(Iterable<String> candidates,
       PatternMatcher matcher) {
     Preconditions.checkNotNull(matcher);
-    List<String> filtered = Lists.newArrayList();
+    List<String> filtered = new ArrayList<>();
     for (String candidate: candidates) {
       if (matcher.matches(candidate)) filtered.add(candidate);
     }
@@ -363,7 +363,7 @@ public abstract class Catalog {
   public static <T extends HasName> List<T> filterCatalogObjectsByPattern(
       Iterable<? extends T> candidates, PatternMatcher matcher) {
     Preconditions.checkNotNull(matcher);
-    List<T> filtered = Lists.newArrayList();
+    List<T> filtered = new ArrayList<>();
     for (T candidate: candidates) {
       if (matcher.matches(candidate.getName())) filtered.add(candidate);
     }
@@ -373,7 +373,7 @@ public abstract class Catalog {
 
   public HdfsPartition getHdfsPartition(String dbName, String tableName,
       org.apache.hadoop.hive.metastore.api.Partition msPart) throws CatalogException {
-    List<TPartitionKeyValue> partitionSpec = Lists.newArrayList();
+    List<TPartitionKeyValue> partitionSpec = new ArrayList<>();
     Table table = getTable(dbName, tableName);
     if (!(table instanceof HdfsTable)) {
       throw new PartitionNotFoundException(

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/CatalogObjectCache.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/CatalogObjectCache.java b/fe/src/main/java/org/apache/impala/catalog/CatalogObjectCache.java
index e92c070..d613cf9 100644
--- a/fe/src/main/java/org/apache/impala/catalog/CatalogObjectCache.java
+++ b/fe/src/main/java/org/apache/impala/catalog/CatalogObjectCache.java
@@ -19,6 +19,7 @@ package org.apache.impala.catalog;
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -55,8 +56,7 @@ public class CatalogObjectCache<T extends CatalogObject> implements Iterable<T>
   // new entries may require two cache accesses that must be performed atomically.
   // TODO: For simplicity, consider using a (non-concurrent) HashMap and marking
   // all methods as synchronized.
-  private final ConcurrentHashMap<String, T> metadataCache_ =
-      new ConcurrentHashMap<String, T>();
+  private final Map<String, T> metadataCache_ = new ConcurrentHashMap<String, T>();
 
   /**
    * Adds a new catalogObject to the cache. If a catalogObject with the same name already

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/CatalogServiceCatalog.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/CatalogServiceCatalog.java b/fe/src/main/java/org/apache/impala/catalog/CatalogServiceCatalog.java
index 8b4cd8e..d9aa2a9 100644
--- a/fe/src/main/java/org/apache/impala/catalog/CatalogServiceCatalog.java
+++ b/fe/src/main/java/org/apache/impala/catalog/CatalogServiceCatalog.java
@@ -34,7 +34,6 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
 
-import com.google.common.annotations.VisibleForTesting;
 import org.apache.hadoop.fs.RemoteIterator;
 import org.apache.hadoop.hdfs.DistributedFileSystem;
 import org.apache.hadoop.hdfs.protocol.CachePoolEntry;
@@ -62,8 +61,8 @@ import org.apache.impala.thrift.TFunction;
 import org.apache.impala.thrift.TGetCatalogUsageResponse;
 import org.apache.impala.thrift.TGetPartialCatalogObjectRequest;
 import org.apache.impala.thrift.TGetPartialCatalogObjectResponse;
-import org.apache.impala.thrift.TPartialCatalogInfo;
 import org.apache.impala.thrift.TGetPartitionStatsRequest;
+import org.apache.impala.thrift.TPartialCatalogInfo;
 import org.apache.impala.thrift.TPartitionKeyValue;
 import org.apache.impala.thrift.TPartitionStats;
 import org.apache.impala.thrift.TPrincipalType;
@@ -73,8 +72,8 @@ import org.apache.impala.thrift.TTableName;
 import org.apache.impala.thrift.TTableUsage;
 import org.apache.impala.thrift.TTableUsageMetrics;
 import org.apache.impala.thrift.TUniqueId;
-import org.apache.impala.util.FunctionUtils;
 import org.apache.impala.thrift.TUpdateTableUsageRequest;
+import org.apache.impala.util.FunctionUtils;
 import org.apache.impala.util.PatternMatcher;
 import org.apache.impala.util.SentryProxy;
 import org.apache.log4j.Logger;
@@ -83,10 +82,10 @@ import org.apache.thrift.TSerializer;
 import org.apache.thrift.protocol.TBinaryProtocol;
 
 import com.codahale.metrics.Timer;
+import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
 
@@ -339,12 +338,13 @@ public class CatalogServiceCatalog extends Catalog {
       incrementVersions_ = incrementVersions;
     }
 
+    @Override
     public void run() {
       if (LOG.isTraceEnabled()) LOG.trace("Reloading cache pool names from HDFS");
 
       // Map of cache pool name to CachePoolInfo. Stored in a map to allow Set operations
       // to be performed on the keys.
-      Map<String, CachePoolInfo> currentCachePools = Maps.newHashMap();
+      Map<String, CachePoolInfo> currentCachePools = new HashMap<>();
       try {
         DistributedFileSystem dfs = FileSystemUtil.getDistributedFileSystem();
         RemoteIterator<CachePoolEntry> itr = dfs.listCachePools();
@@ -462,7 +462,7 @@ public class CatalogServiceCatalog extends Catalog {
     // Table must be loaded.
     Preconditions.checkState(table.isLoaded());
 
-    Map<String, ByteBuffer> stats = Maps.newHashMap();
+    Map<String, ByteBuffer> stats = new HashMap<>();
     HdfsTable hdfsTable = (HdfsTable) table;
     hdfsTable.getLock().lock();
     try {
@@ -938,8 +938,8 @@ public class CatalogServiceCatalog extends Catalog {
     }
 
     // Contains map of overloaded function names to all functions matching that name.
-    HashMap<String, List<Function>> dbFns = db.getAllFunctions();
-    List<Function> fns = new ArrayList<Function>(dbFns.size());
+    Map<String, List<Function>> dbFns = db.getAllFunctions();
+    List<Function> fns = new ArrayList<>(dbFns.size());
     for (List<Function> fnOverloads: dbFns.values()) {
       for (Function fn: fnOverloads) {
         fns.add(fn);
@@ -1006,7 +1006,7 @@ public class CatalogServiceCatalog extends Catalog {
     Db tmpDb;
     try {
       List<org.apache.hadoop.hive.metastore.api.Function> javaFns =
-          Lists.newArrayList();
+          new ArrayList<>();
       for (String javaFn : msClient.getHiveClient().getFunctions(dbName, "*")) {
         javaFns.add(msClient.getHiveClient().getFunction(dbName, javaFn));
       }
@@ -1068,7 +1068,7 @@ public class CatalogServiceCatalog extends Catalog {
       MetaStoreClient msClient, String dbName, Db existingDb) {
     try {
       List<org.apache.hadoop.hive.metastore.api.Function> javaFns =
-          Lists.newArrayList();
+          new ArrayList<>();
       for (String javaFn: msClient.getHiveClient().getFunctions(dbName, "*")) {
         javaFns.add(msClient.getHiveClient().getFunction(dbName, javaFn));
       }
@@ -1091,7 +1091,7 @@ public class CatalogServiceCatalog extends Catalog {
       loadJavaFunctions(newDb, javaFns);
       newDb.setCatalogVersion(incrementAndGetCatalogVersion());
 
-      List<TTableName> tblsToBackgroundLoad = Lists.newArrayList();
+      List<TTableName> tblsToBackgroundLoad = new ArrayList<>();
       for (String tableName: msClient.getHiveClient().getAllTables(dbName)) {
         Table incompleteTbl = IncompleteTable.createUninitializedTable(newDb, tableName);
         incompleteTbl.setCatalogVersion(incrementAndGetCatalogVersion());
@@ -1184,8 +1184,8 @@ public class CatalogServiceCatalog extends Catalog {
 
       // Build a new DB cache, populate it, and replace the existing cache in one
       // step.
-      ConcurrentHashMap<String, Db> newDbCache = new ConcurrentHashMap<String, Db>();
-      List<TTableName> tblsToBackgroundLoad = Lists.newArrayList();
+      Map<String, Db> newDbCache = new ConcurrentHashMap<String, Db>();
+      List<TTableName> tblsToBackgroundLoad = new ArrayList<>();
       try (MetaStoreClient msClient = getMetaStoreClient()) {
         for (String dbName: msClient.getHiveClient().getAllDatabases()) {
           dbName = dbName.toLowerCase();
@@ -1664,7 +1664,7 @@ public class CatalogServiceCatalog extends Catalog {
    * If a user with the same name already exists it will be overwritten.
    */
   public User addUser(String userName) {
-    Principal user = addPrincipal(userName, Sets.<String>newHashSet(),
+    Principal user = addPrincipal(userName, new HashSet<>(),
         TPrincipalType.USER);
     Preconditions.checkState(user instanceof User);
     return (User) user;
@@ -2073,8 +2073,8 @@ public class CatalogServiceCatalog extends Catalog {
    */
   public TGetCatalogUsageResponse getCatalogUsage() {
     TGetCatalogUsageResponse usage = new TGetCatalogUsageResponse();
-    usage.setLarge_tables(Lists.<TTableUsageMetrics>newArrayList());
-    usage.setFrequently_accessed_tables(Lists.<TTableUsageMetrics>newArrayList());
+    usage.setLarge_tables(new ArrayList<>());
+    usage.setFrequently_accessed_tables(new ArrayList<>());
     for (Table largeTable: CatalogUsageMonitor.INSTANCE.getLargestTables()) {
       TTableUsageMetrics tableUsageMetrics =
           new TTableUsageMetrics(largeTable.getTableName().toThrift());

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/Column.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Column.java b/fe/src/main/java/org/apache/impala/catalog/Column.java
index bec5852..8acbe79 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Column.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Column.java
@@ -22,18 +22,17 @@ import java.util.List;
 
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsData;
 import org.apache.hadoop.hive.metastore.api.FieldSchema;
+import org.apache.impala.common.ImpalaRuntimeException;
+import org.apache.impala.thrift.TColumn;
+import org.apache.impala.thrift.TColumnStats;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.impala.thrift.TColumn;
-import org.apache.impala.thrift.TColumnStats;
 import com.google.common.base.Function;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
-import org.apache.impala.common.ImpalaRuntimeException;
-
 /**
  * Internal representation of column-related metadata.
  * Owned by Catalog instance.
@@ -124,6 +123,7 @@ public class Column {
 
   public static List<FieldSchema> toFieldSchemas(List<Column> columns) {
     return Lists.transform(columns, new Function<Column, FieldSchema>() {
+      @Override
       public FieldSchema apply(Column column) {
         Preconditions.checkNotNull(column.getType());
         return new FieldSchema(column.getName(), column.getType().toSql().toLowerCase(),
@@ -133,7 +133,7 @@ public class Column {
   }
 
   public static List<String> toColumnNames(List<Column> columns) {
-    List<String> colNames = Lists.newArrayList();
+    List<String> colNames = new ArrayList<>();
     for (Column col: columns) colNames.add(col.getName());
     return colNames;
   }
@@ -141,7 +141,7 @@ public class Column {
    * Returns a struct type from the table columns passed in as a parameter.
    */
   public static StructType columnsToStruct(List<Column> columns) {
-    ArrayList<StructField> fields = Lists.newArrayListWithCapacity(columns.size());
+    List<StructField> fields = Lists.newArrayListWithCapacity(columns.size());
     for (Column col: columns) {
       fields.add(new StructField(col.getName(), col.getType(), col.getComment()));
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/Db.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Db.java b/fe/src/main/java/org/apache/impala/catalog/Db.java
index 6bad98c..2e26301 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Db.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Db.java
@@ -17,17 +17,13 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.commons.codec.binary.Base64;
-import org.apache.thrift.TException;
-import org.apache.thrift.TSerializer;
-import org.apache.thrift.protocol.TCompactProtocol;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.apache.impala.analysis.ColumnDef;
 import org.apache.impala.analysis.KuduPartitionParam;
 import org.apache.impala.common.ImpalaException;
@@ -43,11 +39,15 @@ import org.apache.impala.thrift.TGetPartialCatalogObjectResponse;
 import org.apache.impala.thrift.TPartialDbInfo;
 import org.apache.impala.util.FunctionUtils;
 import org.apache.impala.util.PatternMatcher;
+import org.apache.thrift.TException;
+import org.apache.thrift.TSerializer;
+import org.apache.thrift.protocol.TCompactProtocol;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
 
 /**
  * Internal representation of db-related metadata. Owned by Catalog instance.
@@ -84,7 +84,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
   // on this map. When a new Db object is initialized, this list is updated with the
   // UDF/UDAs already persisted, if any, in the metastore DB. Functions are sorted in a
   // canonical order defined by FunctionResolutionOrder.
-  private final HashMap<String, List<Function>> functions_;
+  private final Map<String, List<Function>> functions_;
 
   // If true, this database is an Impala system database.
   // (e.g. can't drop it, can't add tables to it, etc).
@@ -94,7 +94,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
     thriftDb_ = new TDatabase(name.toLowerCase());
     thriftDb_.setMetastore_db(msDb);
     tableCache_ = new CatalogObjectCache<Table>();
-    functions_ = new HashMap<String, List<Function>>();
+    functions_ = new HashMap<>();
   }
 
   public void setIsSystemDb(boolean b) { isSystemDb_ = b; }
@@ -113,7 +113,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
     org.apache.hadoop.hive.metastore.api.Database msDb = thriftDb_.metastore_db;
     Preconditions.checkNotNull(msDb);
     Map<String, String> hmsParams = msDb.getParameters();
-    if (hmsParams == null) hmsParams = Maps.newHashMap();
+    if (hmsParams == null) hmsParams = new HashMap<>();
     hmsParams.put(k,v);
     msDb.setParameters(hmsParams);
   }
@@ -147,6 +147,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
   /**
    * Gets all table names in the table cache.
    */
+  @Override
   public List<String> getAllTableNames() {
     return Lists.newArrayList(tableCache_.keySet());
   }
@@ -281,7 +282,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
       }
       List<Function> fns = functions_.get(fn.functionName());
       if (fns == null) {
-        fns = Lists.newArrayList();
+        fns = new ArrayList<>();
         functions_.put(fn.functionName(), fns);
       }
       if (addToDbParams && !addFunctionToDbParams(fn)) return false;
@@ -366,7 +367,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
    * This is not thread safe so a higher level lock must be taken while iterating
    * over the returned functions.
    */
-  public HashMap<String, List<Function>> getAllFunctions() {
+  public Map<String, List<Function>> getAllFunctions() {
     return functions_;
   }
 
@@ -374,7 +375,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
    * Returns a list of transient functions in this Db.
    */
   protected List<Function> getTransientFunctions() {
-    List<Function> result = Lists.newArrayList();
+    List<Function> result = new ArrayList<>();
     synchronized (functions_) {
       for (String fnKey: functions_.keySet()) {
         for (Function fn: functions_.get(fnKey)) {
@@ -390,10 +391,11 @@ public class Db extends CatalogObjectImpl implements FeDb {
   /**
    * Returns all functions that match the pattern of 'matcher'.
    */
+  @Override
   public List<Function> getFunctions(TFunctionCategory category,
       PatternMatcher matcher) {
     Preconditions.checkNotNull(matcher);
-    List<Function> result = Lists.newArrayList();
+    List<Function> result = new ArrayList<>();
     synchronized (functions_) {
       for (Map.Entry<String, List<Function>> fns: functions_.entrySet()) {
         if (!matcher.matches(fns.getKey())) continue;
@@ -416,7 +418,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
     Preconditions.checkNotNull(name);
     synchronized (functions_) {
       List<Function> candidates = functions_.get(name);
-      if (candidates == null) return Lists.newArrayList();
+      if (candidates == null) return new ArrayList<>();
       return FunctionUtils.getVisibleFunctions(candidates);
     }
   }
@@ -427,7 +429,7 @@ public class Db extends CatalogObjectImpl implements FeDb {
     Preconditions.checkNotNull(name);
     synchronized (functions_) {
       List<Function> candidates = functions_.get(name);
-      if (candidates == null) return Lists.newArrayList();
+      if (candidates == null) return new ArrayList<>();
       return FunctionUtils.getVisibleFunctionsInCategory(candidates, category);
     }
   }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/DiskIdMapper.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/DiskIdMapper.java b/fe/src/main/java/org/apache/impala/catalog/DiskIdMapper.java
index 99dc456..048c3c1 100644
--- a/fe/src/main/java/org/apache/impala/catalog/DiskIdMapper.java
+++ b/fe/src/main/java/org/apache/impala/catalog/DiskIdMapper.java
@@ -17,14 +17,14 @@
 
 package org.apache.impala.catalog;
 
-import com.google.common.collect.Maps;
-import com.google.common.base.Strings;
-import com.google.common.base.Preconditions;
-import com.google.common.primitives.Shorts;
-
 import java.util.HashMap;
+import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.primitives.Shorts;
+
 /**
  * A singleton class that maps HDFS storage-UUIDs to per-host 0-based, sequential disk
  * ids. This mapping is internally implemented as a global static object shared
@@ -44,12 +44,12 @@ public class DiskIdMapper {
     // Maps each storage ID UUID string returned by the BlockLocation API, to a per-node
     // sequential 0-based disk id used by the BE scanners. This assumes that
     // the storage ID of a particular disk is unique across all the nodes in the cluster.
-    private ConcurrentHashMap<String, Short> storageUuidToDiskId_ =
+    private Map<String, Short> storageUuidToDiskId_ =
         new ConcurrentHashMap<String, Short>();
 
     // Per-host ID generator for storage UUID to Short ID mapping. This maps each host
     // to the corresponding latest 0-based ID stored in a short.
-    private final HashMap<String, Short> storageIdGenerator_ = Maps.newHashMap();
+    private final Map<String, Short> storageIdGenerator_ = new HashMap<>();
 
     /**
      * Returns a disk id (0-based) index for storageUuid on host 'host'. Generates a

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/FeCatalogUtils.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/FeCatalogUtils.java b/fe/src/main/java/org/apache/impala/catalog/FeCatalogUtils.java
index c50f406..9840a2c 100644
--- a/fe/src/main/java/org/apache/impala/catalog/FeCatalogUtils.java
+++ b/fe/src/main/java/org/apache/impala/catalog/FeCatalogUtils.java
@@ -17,13 +17,14 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-import com.google.common.cache.CacheStats;
 import org.apache.hadoop.hive.common.FileUtils;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.metastore.api.ColumnStatisticsObj;
@@ -33,9 +34,9 @@ import org.apache.impala.analysis.LiteralExpr;
 import org.apache.impala.analysis.NullLiteral;
 import org.apache.impala.analysis.PartitionKeyValue;
 import org.apache.impala.analysis.ToSqlUtils;
-import org.apache.impala.catalog.local.CatalogdMetaProvider;
 import org.apache.impala.catalog.CatalogObject.ThriftObjectType;
 import org.apache.impala.catalog.HdfsPartition.FileDescriptor;
+import org.apache.impala.catalog.local.CatalogdMetaProvider;
 import org.apache.impala.catalog.local.LocalCatalog;
 import org.apache.impala.catalog.local.MetaProvider;
 import org.apache.impala.service.BackendConfig;
@@ -48,11 +49,10 @@ import org.slf4j.LoggerFactory;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
+import com.google.common.cache.CacheStats;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 
 /**
  * Static utility functions shared between FeCatalog implementations.
@@ -131,7 +131,7 @@ public abstract class FeCatalogUtils {
 
   // TODO(todd): move to a default method in FeTable in Java8
   public static List<TColumnDescriptor> getTColumnDescriptors(FeTable table) {
-    List<TColumnDescriptor> colDescs = Lists.<TColumnDescriptor>newArrayList();
+    List<TColumnDescriptor> colDescs = new ArrayList<>();
     for (Column col: table.getColumns()) {
       colDescs.add(new TColumnDescriptor(col.getName(), col.getType().toThrift()));
     }
@@ -226,7 +226,7 @@ public abstract class FeCatalogUtils {
         "expected %s values but got %s",
         hmsPartitionValues, table.getFullName(),
         table.getNumClusteringCols(), hmsPartitionValues.size());
-    List<LiteralExpr> keyValues = Lists.newArrayList();
+    List<LiteralExpr> keyValues = new ArrayList<>();
     for (String partitionKey: hmsPartitionValues) {
       Type type = table.getColumns().get(keyValues.size()).getType();
       // Deal with Hive's special NULL partition key.
@@ -257,7 +257,7 @@ public abstract class FeCatalogUtils {
    */
   public static String getPartitionName(FeFsPartition partition) {
     FeFsTable table = partition.getTable();
-    List<String> partitionCols = Lists.newArrayList();
+    List<String> partitionCols = new ArrayList<>();
     for (int i = 0; i < table.getNumClusteringCols(); ++i) {
       partitionCols.add(table.getColumns().get(i).getName());
     }
@@ -269,7 +269,7 @@ public abstract class FeCatalogUtils {
   // TODO: this could be a default method in FeFsPartition in Java 8.
   public static List<String> getPartitionValuesAsStrings(
       FeFsPartition partition, boolean mapNullsToHiveKey) {
-    List<String> ret = Lists.newArrayList();
+    List<String> ret = new ArrayList<>();
     for (LiteralExpr partValue: partition.getPartitionValues()) {
       if (mapNullsToHiveKey) {
         ret.add(PartitionKeyValue.getPartitionKeyValueString(
@@ -283,12 +283,12 @@ public abstract class FeCatalogUtils {
 
   // TODO: this could be a default method in FeFsPartition in Java 8.
   public static String getConjunctSqlForPartition(FeFsPartition part) {
-    List<String> partColSql = Lists.newArrayList();
+    List<String> partColSql = new ArrayList<>();
     for (Column partCol: part.getTable().getClusteringColumns()) {
       partColSql.add(ToSqlUtils.getIdentSql(partCol.getName()));
     }
 
-    List<String> conjuncts = Lists.newArrayList();
+    List<String> conjuncts = new ArrayList<>();
     for (int i = 0; i < partColSql.size(); ++i) {
       LiteralExpr partVal = part.getPartitionValues().get(i);
       String partValSql = partVal.toSql();
@@ -306,7 +306,7 @@ public abstract class FeCatalogUtils {
    */
   public static Set<HdfsFileFormat> getFileFormats(
       Iterable<? extends FeFsPartition> partitions) {
-    Set<HdfsFileFormat> fileFormats = Sets.newHashSet();
+    Set<HdfsFileFormat> fileFormats = new HashSet<>();
     for (FeFsPartition partition : partitions) {
       fileFormats.add(partition.getFileFormat());
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/FeFsTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/FeFsTable.java b/fe/src/main/java/org/apache/impala/catalog/FeFsTable.java
index 5c619a2..4b18770 100644
--- a/fe/src/main/java/org/apache/impala/catalog/FeFsTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/FeFsTable.java
@@ -16,8 +16,10 @@
 // under the License.
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -36,7 +38,6 @@ import org.apache.impala.service.BackendConfig;
 import org.apache.impala.thrift.TColumn;
 import org.apache.impala.thrift.TNetworkAddress;
 import org.apache.impala.thrift.TPartitionKeyValue;
-import org.apache.impala.thrift.TResultRow;
 import org.apache.impala.thrift.TResultSet;
 import org.apache.impala.thrift.TResultSetMetadata;
 import org.apache.impala.thrift.TTableStats;
@@ -46,8 +47,6 @@ import org.apache.impala.util.TResultRowBuilder;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
 
 /**
  * Frontend interface for interacting with a filesystem-backed table.
@@ -158,7 +157,7 @@ public interface FeFsTable extends FeTable {
    * @return a map from value to a set of partitions for which column 'col'
    * has that value.
    */
-  TreeMap<LiteralExpr, HashSet<Long>> getPartitionValueMap(int col);
+  TreeMap<LiteralExpr, Set<Long>> getPartitionValueMap(int col);
 
   /**
    * @return the set of partitions which have a null value for column
@@ -242,7 +241,7 @@ public interface FeFsTable extends FeTable {
       resultSchema.addToColumns(new TColumn("Path", Type.STRING.toThrift()));
       resultSchema.addToColumns(new TColumn("Size", Type.STRING.toThrift()));
       resultSchema.addToColumns(new TColumn("Partition", Type.STRING.toThrift()));
-      result.setRows(Lists.<TResultRow>newArrayList());
+      result.setRows(new ArrayList<>());
 
       List<? extends FeFsPartition> orderedPartitions;
       if (partitionSet == null) {
@@ -338,14 +337,14 @@ public interface FeFsTable extends FeTable {
       // selected.
       Random rnd = new Random(randomSeed);
       long selectedBytes = 0;
-      Map<Long, List<FileDescriptor>> result = Maps.newHashMap();
+      Map<Long, List<FileDescriptor>> result = new HashMap<>();
       while (selectedBytes < targetBytes && numFilesRemaining > 0) {
         int selectedIdx = Math.abs(rnd.nextInt()) % numFilesRemaining;
         FeFsPartition part = parts[selectedIdx];
         Long partId = Long.valueOf(part.getId());
         List<FileDescriptor> sampleFileIdxs = result.get(partId);
         if (sampleFileIdxs == null) {
-          sampleFileIdxs = Lists.newArrayList();
+          sampleFileIdxs = new ArrayList<>();
           result.put(partId, sampleFileIdxs);
         }
         FileDescriptor fd = part.getFileDescriptors().get(fileIdxs[selectedIdx]);
@@ -364,7 +363,7 @@ public interface FeFsTable extends FeTable {
      */
     public static List<? extends FeFsPartition> getPartitionsFromPartitionSet(
         FeFsTable table, List<List<TPartitionKeyValue>> partitionSet) {
-      List<Long> partitionIds = Lists.newArrayList();
+      List<Long> partitionIds = new ArrayList<>();
       for (List<TPartitionKeyValue> kv : partitionSet) {
         PrunablePartition partition = getPartitionFromThriftPartitionSpec(table, kv);
         if (partition != null) partitionIds.add(partition.getId());
@@ -381,8 +380,8 @@ public interface FeFsTable extends FeTable {
         List<TPartitionKeyValue> partitionSpec) {
       // First, build a list of the partition values to search for in the same order they
       // are defined in the table.
-      List<String> targetValues = Lists.newArrayList();
-      Set<String> keys = Sets.newHashSet();
+      List<String> targetValues = new ArrayList<>();
+      Set<String> keys = new HashSet<>();
       for (FieldSchema fs: table.getMetaStoreTable().getPartitionKeys()) {
         for (TPartitionKeyValue kv: partitionSpec) {
           if (fs.getName().toLowerCase().equals(kv.getName().toLowerCase())) {

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/FeHBaseTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/FeHBaseTable.java b/fe/src/main/java/org/apache/impala/catalog/FeHBaseTable.java
index e8fd752..8d481a1 100644
--- a/fe/src/main/java/org/apache/impala/catalog/FeHBaseTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/FeHBaseTable.java
@@ -17,8 +17,12 @@
 
 package org.apache.impala.catalog;
 
-import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.ClusterStatus;
@@ -54,11 +58,7 @@ import org.apache.impala.util.StatsHelper;
 import org.apache.impala.util.TResultRowBuilder;
 import org.apache.log4j.Logger;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
+import com.google.common.base.Preconditions;
 
 public interface FeHBaseTable extends FeTable {
   /**
@@ -161,7 +161,7 @@ public interface FeHBaseTable extends FeTable {
 
       // Populate tmp cols in the order they appear in the Hive metastore.
       // We will reorder the cols below.
-      List<HBaseColumn> tmpCols = Lists.newArrayList();
+      List<HBaseColumn> tmpCols = new ArrayList<>();
       // Store the key column separately.
       // TODO: Change this to an ArrayList once we support composite row keys.
       HBaseColumn keyCol = null;

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/FeKuduTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/FeKuduTable.java b/fe/src/main/java/org/apache/impala/catalog/FeKuduTable.java
index dc5f45d..9f04f25 100644
--- a/fe/src/main/java/org/apache/impala/catalog/FeKuduTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/FeKuduTable.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 
@@ -40,7 +41,6 @@ import org.apache.kudu.client.PartitionSchema.RangeSchema;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
 
 /**
  * Frontend interface for interacting with a Kudu-backed table.
@@ -100,13 +100,13 @@ public interface FeKuduTable extends FeTable {
 
     public static List<KuduPartitionParam> loadPartitionByParams(
         org.apache.kudu.client.KuduTable kuduTable) {
-      List<KuduPartitionParam> ret = Lists.newArrayList();
+      List<KuduPartitionParam> ret = new ArrayList<>();
 
       Preconditions.checkNotNull(kuduTable);
       Schema tableSchema = kuduTable.getSchema();
       PartitionSchema partitionSchema = kuduTable.getPartitionSchema();
       for (HashBucketSchema hashBucketSchema: partitionSchema.getHashBucketSchemas()) {
-        List<String> columnNames = Lists.newArrayList();
+        List<String> columnNames = new ArrayList<>();
         for (int colId: hashBucketSchema.getColumnIds()) {
           columnNames.add(getColumnNameById(tableSchema, colId));
         }
@@ -116,7 +116,7 @@ public interface FeKuduTable extends FeTable {
       RangeSchema rangeSchema = partitionSchema.getRangeSchema();
       List<Integer> columnIds = rangeSchema.getColumns();
       if (columnIds.isEmpty()) return ret;
-      List<String> columnNames = Lists.newArrayList();
+      List<String> columnNames = new ArrayList<>();
       for (int colId: columnIds) columnNames.add(getColumnNameById(tableSchema, colId));
       // We don't populate the split values because Kudu's API doesn't currently support
       // retrieving the split values for range partitions.

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/FeTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/FeTable.java b/fe/src/main/java/org/apache/impala/catalog/FeTable.java
index a60b827..d395d48 100644
--- a/fe/src/main/java/org/apache/impala/catalog/FeTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/FeTable.java
@@ -16,7 +16,6 @@
 // under the License.
 package org.apache.impala.catalog;
 
-import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
 
@@ -68,7 +67,7 @@ public interface FeTable {
   /**
    * @return the columns in this table
    */
-  ArrayList<Column> getColumns();
+  List<Column> getColumns();
 
   /**
    * @return an unmodifiable list of all columns, but with partition columns at the end of

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/Function.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/Function.java b/fe/src/main/java/org/apache/impala/catalog/Function.java
index 582733e..a7fe68c 100644
--- a/fe/src/main/java/org/apache/impala/catalog/Function.java
+++ b/fe/src/main/java/org/apache/impala/catalog/Function.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.lang.NotImplementedException;
@@ -39,7 +40,6 @@ import org.apache.impala.thrift.TSymbolType;
 
 import com.google.common.base.Joiner;
 import com.google.common.base.Preconditions;
-import com.google.common.collect.Lists;
 
 
 /**
@@ -333,7 +333,7 @@ public class Function extends CatalogObjectImpl {
     Preconditions.checkArgument(fn.isSetArg_types());
     Preconditions.checkArgument(fn.isSetRet_type());
     Preconditions.checkArgument(fn.isSetHas_var_args());
-    List<Type> argTypes = Lists.newArrayList();
+    List<Type> argTypes = new ArrayList<>();
     for (TColumnType t: fn.getArg_types()) {
       argTypes.add(Type.fromThrift(t));
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/HBaseTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/HBaseTable.java b/fe/src/main/java/org/apache/impala/catalog/HBaseTable.java
index 9550253..0b81b5d 100644
--- a/fe/src/main/java/org/apache/impala/catalog/HBaseTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/HBaseTable.java
@@ -17,8 +17,10 @@
 
 package org.apache.impala.catalog;
 
-import com.codahale.metrics.Timer;
-import com.google.common.base.Preconditions;
+import java.io.IOException;
+import java.util.List;
+import java.util.Set;
+
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hive.metastore.IMetaStoreClient;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
@@ -29,10 +31,8 @@ import org.apache.impala.thrift.TTable;
 import org.apache.impala.thrift.TTableDescriptor;
 import org.apache.impala.thrift.TTableType;
 
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import com.codahale.metrics.Timer;
+import com.google.common.base.Preconditions;
 
 /**
  * Impala representation of HBase table metadata,
@@ -146,7 +146,7 @@ public class HBaseTable extends Table implements FeHBaseTable {
    * Hive returns the columns in order of their declaration for HBase tables.
    */
   @Override
-  public ArrayList<Column> getColumnsInHiveOrder() {
+  public List<Column> getColumnsInHiveOrder() {
     return getColumns();
   }
 

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/HdfsFileFormat.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/HdfsFileFormat.java b/fe/src/main/java/org/apache/impala/catalog/HdfsFileFormat.java
index 8c5b17d..5bffbd5 100644
--- a/fe/src/main/java/org/apache/impala/catalog/HdfsFileFormat.java
+++ b/fe/src/main/java/org/apache/impala/catalog/HdfsFileFormat.java
@@ -17,13 +17,14 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.impala.thrift.THdfsFileFormat;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Lists;
 
 /**
  * Supported HDFS file formats. Every file format specifies:
@@ -234,7 +235,7 @@ public enum HdfsFileFormat {
    * Returns a list with all formats for which isComplexTypesSupported() is true.
    */
   public static List<HdfsFileFormat> complexTypesFormats() {
-    List<HdfsFileFormat> result = Lists.newArrayList();
+    List<HdfsFileFormat> result = new ArrayList<>();
     for (HdfsFileFormat f: values()) {
       if (f.isComplexTypesSupported()) result.add(f);
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/HdfsPartition.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/HdfsPartition.java b/fe/src/main/java/org/apache/impala/catalog/HdfsPartition.java
index e497b86..e87608f 100644
--- a/fe/src/main/java/org/apache/impala/catalog/HdfsPartition.java
+++ b/fe/src/main/java/org/apache/impala/catalog/HdfsPartition.java
@@ -19,8 +19,10 @@ package org.apache.impala.catalog;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -607,6 +609,7 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
   public void setNumRows(long numRows) { numRows_ = numRows; }
   @Override // FeFsPartition
   public long getNumRows() { return numRows_; }
+  @Override
   public boolean isMarkedCached() { return isMarkedCached_; }
   void markCached() { isMarkedCached_ = true; }
 
@@ -641,6 +644,7 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
     return PartitionStatsUtil.getPartStatsOrWarn(this);
   }
 
+  @Override
   public byte[] getPartitionStatsCompressed() {
     return partitionStats_;
   }
@@ -850,7 +854,7 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
           msPartition.getParameters()) != null;
       hmsParameters_ = msPartition.getParameters();
     } else {
-      hmsParameters_ = Maps.newHashMap();
+      hmsParameters_ = new HashMap<>();
     }
     extractAndCompressPartStats();
   }
@@ -871,8 +875,8 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
 
   public static HdfsPartition prototypePartition(
       HdfsTable table, HdfsStorageDescriptor storageDescriptor) {
-    List<LiteralExpr> emptyExprList = Lists.newArrayList();
-    List<FileDescriptor> emptyFileDescriptorList = Lists.newArrayList();
+    List<LiteralExpr> emptyExprList = new ArrayList<>();
+    List<FileDescriptor> emptyFileDescriptorList = new ArrayList<>();
     return new HdfsPartition(table, null, emptyExprList,
         storageDescriptor, emptyFileDescriptorList,
         CatalogObjectsConstants.PROTOTYPE_PARTITION_ID, null,
@@ -900,14 +904,14 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
     HdfsStorageDescriptor storageDesc = HdfsStorageDescriptor.fromThriftPartition(
         thriftPartition, table.getName());
 
-    List<LiteralExpr> literalExpr = Lists.newArrayList();
+    List<LiteralExpr> literalExpr = new ArrayList<>();
     if (id != CatalogObjectsConstants.PROTOTYPE_PARTITION_ID) {
-      List<Column> clusterCols = Lists.newArrayList();
+      List<Column> clusterCols = new ArrayList<>();
       for (int i = 0; i < table.getNumClusteringCols(); ++i) {
         clusterCols.add(table.getColumns().get(i));
       }
 
-      List<TExprNode> exprNodes = Lists.newArrayList();
+      List<TExprNode> exprNodes = new ArrayList<>();
       for (TExpr expr: thriftPartition.getPartitionKeyExprs()) {
         for (TExprNode node: expr.getNodes()) {
           exprNodes.add(node);
@@ -924,7 +928,7 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
       }
     }
 
-    List<HdfsPartition.FileDescriptor> fileDescriptors = Lists.newArrayList();
+    List<HdfsPartition.FileDescriptor> fileDescriptors = new ArrayList<>();
     if (thriftPartition.isSetFile_desc()) {
       for (THdfsFileDesc desc: thriftPartition.getFile_desc()) {
         fileDescriptors.add(HdfsPartition.FileDescriptor.fromThrift(desc));
@@ -949,7 +953,7 @@ public class HdfsPartition implements FeFsPartition, PrunablePartition {
     if (thriftPartition.isSetHms_parameters()) {
       partition.hmsParameters_ = thriftPartition.getHms_parameters();
     } else {
-      partition.hmsParameters_ = Maps.newHashMap();
+      partition.hmsParameters_ = new HashMap<>();
     }
 
     partition.hasIncrementalStats_ = thriftPartition.has_incremental_stats;

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/HdfsStorageDescriptor.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/HdfsStorageDescriptor.java b/fe/src/main/java/org/apache/impala/catalog/HdfsStorageDescriptor.java
index d1c0f9d..f53f3b0 100644
--- a/fe/src/main/java/org/apache/impala/catalog/HdfsStorageDescriptor.java
+++ b/fe/src/main/java/org/apache/impala/catalog/HdfsStorageDescriptor.java
@@ -17,6 +17,7 @@
 
 package org.apache.impala.catalog;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
 
@@ -31,7 +32,6 @@ import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Interner;
 import com.google.common.collect.Interners;
-import com.google.common.collect.Maps;
 import com.google.errorprone.annotations.Immutable;
 
 /**
@@ -100,7 +100,7 @@ public class HdfsStorageDescriptor {
     // which means we need to use a default instead.
     // We tried long and hard to find default values for delimiters in Hive,
     // but could not find them.
-    Map<String, Byte> delimMap = Maps.newHashMap();
+    Map<String, Byte> delimMap = new HashMap<>();
 
     for (String delimKey: DELIMITER_KEYS) {
       String delimValue = serdeInfo.getParameters().get(delimKey);

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/HdfsTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/HdfsTable.java b/fe/src/main/java/org/apache/impala/catalog/HdfsTable.java
index f2fd897..82b8ef3 100644
--- a/fe/src/main/java/org/apache/impala/catalog/HdfsTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/HdfsTable.java
@@ -36,6 +36,7 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
+
 import org.apache.avro.Schema;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.BlockLocation;
@@ -175,21 +176,21 @@ public class HdfsTable extends Table implements FeFsTable {
   // Array of sorted maps storing the association between partition values and
   // partition ids. There is one sorted map per partition key. It is only populated if
   // this table object is stored in ImpaladCatalog.
-  private final ArrayList<TreeMap<LiteralExpr, HashSet<Long>>> partitionValuesMap_ =
-      Lists.newArrayList();
+  private final List<TreeMap<LiteralExpr, Set<Long>>> partitionValuesMap_ =
+      new ArrayList<>();
 
   // Array of partition id sets that correspond to partitions with null values
   // in the partition keys; one set per partition key. It is not populated if the table is
   // stored in the catalog server.
-  private final ArrayList<HashSet<Long>> nullPartitionIds_ = Lists.newArrayList();
+  private final List<Set<Long>> nullPartitionIds_ = new ArrayList<>();
 
   // Map of partition ids to HdfsPartitions.
-  private final HashMap<Long, HdfsPartition> partitionMap_ = Maps.newHashMap();
+  private final Map<Long, HdfsPartition> partitionMap_ = new HashMap<>();
 
   // Map of partition name to HdfsPartition object. Used for speeding up
   // table metadata loading. It is only populated if this table object is stored in
   // catalog server.
-  private final HashMap<String, HdfsPartition> nameToPartitionMap_ = Maps.newHashMap();
+  private final Map<String, HdfsPartition> nameToPartitionMap_ = new HashMap<>();
 
   // The partition used as a prototype when creating new partitions during
   // insertion. New partitions inherit file format and other settings from
@@ -223,7 +224,7 @@ public class HdfsTable extends Table implements FeFsTable {
   // List of FieldSchemas that correspond to the non-partition columns. Used when
   // describing this table and its partitions to the HMS (e.g. as part of an alter table
   // operation), when only non-partition columns are required.
-  private final List<FieldSchema> nonPartFieldSchemas_ = Lists.newArrayList();
+  private final List<FieldSchema> nonPartFieldSchemas_ = new ArrayList<>();
 
   // Flag to check if the table schema has been loaded. Used as a precondition
   // for setAvroSchema().
@@ -448,7 +449,7 @@ public class HdfsTable extends Table implements FeFsTable {
       FileMetadataLoadStats loadStats) throws IOException {
     boolean supportsBlocks = FileSystemUtil.supportsStorageIds(fs);
     Reference<Long> numUnknownDiskIds = new Reference<Long>(Long.valueOf(0));
-    List<FileDescriptor> newFileDescs = Lists.newArrayList();
+    List<FileDescriptor> newFileDescs = new ArrayList<>();
     while (fileStatusIter.hasNext()) {
       LocatedFileStatus fileStatus = fileStatusIter.next();
       if (!FileSystemUtil.isValidDataFile(fileStatus)) {
@@ -501,7 +502,7 @@ public class HdfsTable extends Table implements FeFsTable {
     if (fileStatuses == null) return loadStats;
     boolean supportsBlocks = FileSystemUtil.supportsStorageIds(fs);
     Reference<Long> numUnknownDiskIds = new Reference<Long>(Long.valueOf(0));
-    List<FileDescriptor> newFileDescs = Lists.newArrayList();
+    List<FileDescriptor> newFileDescs = new ArrayList<>();
     // If there is a cached partition mapped to this path, we recompute the block
     // locations even if the underlying files have not changed (hasFileChanged()).
     // This is done to keep the cached block metadata up to date.
@@ -623,7 +624,7 @@ public class HdfsTable extends Table implements FeFsTable {
   }
 
   @Override // FeFsTable
-  public TreeMap<LiteralExpr, HashSet<Long>> getPartitionValueMap(int i) {
+  public TreeMap<LiteralExpr, Set<Long>> getPartitionValueMap(int i) {
     return partitionValuesMap_.get(i);
   }
 
@@ -674,7 +675,7 @@ public class HdfsTable extends Table implements FeFsTable {
 
   public static PrunablePartition getPartition(FeFsTable table,
       List<PartitionKeyValue> partitionSpec) {
-    List<TPartitionKeyValue> partitionKeyValues = Lists.newArrayList();
+    List<TPartitionKeyValue> partitionKeyValues = new ArrayList<>();
     for (PartitionKeyValue kv: partitionSpec) {
       Preconditions.checkArgument(kv.isStatic(), "unexpected dynamic partition: %s",
           kv);
@@ -739,8 +740,8 @@ public class HdfsTable extends Table implements FeFsTable {
       for (int i = 0; i < numClusteringCols_; ++i) {
         getColumns().get(i).getStats().setNumNulls(0);
         getColumns().get(i).getStats().setNumDistinctValues(0);
-        partitionValuesMap_.add(Maps.<LiteralExpr, HashSet<Long>>newTreeMap());
-        nullPartitionIds_.add(Sets.<Long>newHashSet());
+        partitionValuesMap_.add(new TreeMap<>());
+        nullPartitionIds_.add(new HashSet<>());
       }
     }
     fileMetadataStats_.init();
@@ -780,7 +781,7 @@ public class HdfsTable extends Table implements FeFsTable {
     // Map of partition paths to their corresponding HdfsPartition objects. Populated
     // using createPartition() calls. A single partition path can correspond to multiple
     // partitions.
-    HashMap<Path, List<HdfsPartition>> partsByPath = Maps.newHashMap();
+    Map<Path, List<HdfsPartition>> partsByPath = new HashMap<>();
     FsPermissionCache permCache = preloadPermissionsCache(msPartitions);
 
     Path tblLocation = FileSystemUtil.createFullyQualifiedPath(getHdfsBaseDirPath());
@@ -864,7 +865,7 @@ public class HdfsTable extends Table implements FeFsTable {
         threadPoolSize);
     ExecutorService partitionLoadingPool = Executors.newFixedThreadPool(threadPoolSize);
     try {
-      List<Future<FileMetadataLoadStats>> pendingMdLoadTasks = Lists.newArrayList();
+      List<Future<FileMetadataLoadStats>> pendingMdLoadTasks = new ArrayList<>();
       for (Path p: partsByPath.keySet()) {
         FileMetadataLoadRequest blockMdLoadReq =
             new FileMetadataLoadRequest(p, partsByPath.get(p), reuseFileMd);
@@ -961,8 +962,8 @@ public class HdfsTable extends Table implements FeFsTable {
   public List<HdfsPartition> createAndLoadPartitions(
       List<org.apache.hadoop.hive.metastore.api.Partition> msPartitions)
       throws CatalogException {
-    HashMap<Path, List<HdfsPartition>> partsByPath = Maps.newHashMap();
-    List<HdfsPartition> addedParts = Lists.newArrayList();
+    Map<Path, List<HdfsPartition>> partsByPath = new HashMap<>();
+    List<HdfsPartition> addedParts = new ArrayList<>();
     FsPermissionCache permCache = preloadPermissionsCache(msPartitions);
     for (org.apache.hadoop.hive.metastore.api.Partition partition: msPartitions) {
       HdfsPartition hdfsPartition = createPartition(partition.getSd(), partition,
@@ -1063,9 +1064,9 @@ public class HdfsTable extends Table implements FeFsTable {
         nullPartitionIds_.get(i).add(Long.valueOf(partition.getId()));
         continue;
       }
-      HashSet<Long> partitionIds = partitionValuesMap_.get(i).get(literal);
+      Set<Long> partitionIds = partitionValuesMap_.get(i).get(literal);
       if (partitionIds == null) {
-        partitionIds = Sets.newHashSet();
+        partitionIds = new HashSet<>();
         partitionValuesMap_.get(i).put(literal, partitionIds);
         stats.setNumDistinctValues(stats.getNumDistinctValues() + 1);
       }
@@ -1121,7 +1122,7 @@ public class HdfsTable extends Table implements FeFsTable {
         }
         continue;
       }
-      HashSet<Long> partitionIds = partitionValuesMap_.get(i).get(literal);
+      Set<Long> partitionIds = partitionValuesMap_.get(i).get(literal);
       // If there are multiple partition ids corresponding to a literal, remove
       // only this id. Otherwise, remove the <literal, id> pair.
       if (partitionIds.size() > 1) partitionIds.remove(partitionId);
@@ -1144,7 +1145,7 @@ public class HdfsTable extends Table implements FeFsTable {
    */
   public List<HdfsPartition> dropPartitions(List<HdfsPartition> partitions,
       boolean removeCacheDirective) {
-    ArrayList<HdfsPartition> droppedPartitions = Lists.newArrayList();
+    List<HdfsPartition> droppedPartitions = new ArrayList<>();
     for (HdfsPartition partition: partitions) {
       HdfsPartition hdfsPartition = dropPartition(partition, removeCacheDirective);
       if (hdfsPartition != null) droppedPartitions.add(hdfsPartition);
@@ -1320,16 +1321,16 @@ public class HdfsTable extends Table implements FeFsTable {
     // identify the delta between partitions of the local HdfsTable and the table entry
     // in the Hive Metastore. Note: This is a relatively "cheap" operation
     // (~.3 secs for 30K partitions).
-    Set<String> msPartitionNames = Sets.newHashSet();
+    Set<String> msPartitionNames = new HashSet<>();
     msPartitionNames.addAll(client.listPartitionNames(db_.getName(), name_, (short) -1));
     // Names of loaded partitions in this table
-    Set<String> partitionNames = Sets.newHashSet();
+    Set<String> partitionNames = new HashSet<>();
     // Partitions for which file metadata must be loaded, grouped by partition paths.
-    Map<Path, List<HdfsPartition>> partitionsToUpdateFileMdByPath = Maps.newHashMap();
+    Map<Path, List<HdfsPartition>> partitionsToUpdateFileMdByPath = new HashMap<>();
     // Partitions that need to be dropped and recreated from scratch
-    List<HdfsPartition> dirtyPartitions = Lists.newArrayList();
+    List<HdfsPartition> dirtyPartitions = new ArrayList<>();
     // Partitions removed from the Hive Metastore.
-    List<HdfsPartition> removedPartitions = Lists.newArrayList();
+    List<HdfsPartition> removedPartitions = new ArrayList<>();
     // Identify dirty partitions that need to be loaded from the Hive Metastore and
     // partitions that no longer exist in the Hive Metastore.
     for (HdfsPartition partition: partitionMap_.values()) {
@@ -1392,9 +1393,9 @@ public class HdfsTable extends Table implements FeFsTable {
    * Given a set of partition names, returns the corresponding HdfsPartition
    * objects grouped by their base directory path.
    */
-  private HashMap<Path, List<HdfsPartition>> getPartitionsByPath(
+  private Map<Path, List<HdfsPartition>> getPartitionsByPath(
       Collection<String> partitionNames) {
-    HashMap<Path, List<HdfsPartition>> partsByPath = Maps.newHashMap();
+    Map<Path, List<HdfsPartition>> partsByPath = new HashMap<>();
     for (String partitionName: partitionNames) {
       String partName = DEFAULT_PARTITION_NAME;
       if (partitionName.length() > 0) {
@@ -1480,7 +1481,7 @@ public class HdfsTable extends Table implements FeFsTable {
         || hasAvroData_) {
       // Look for Avro schema in TBLPROPERTIES and in SERDEPROPERTIES, with the latter
       // taking precedence.
-      List<Map<String, String>> schemaSearchLocations = Lists.newArrayList();
+      List<Map<String, String>> schemaSearchLocations = new ArrayList<>();
       schemaSearchLocations.add(
           getMetaStoreTable().getSd().getSerdeInfo().getParameters());
       schemaSearchLocations.add(getMetaStoreTable().getParameters());
@@ -1558,7 +1559,7 @@ public class HdfsTable extends Table implements FeFsTable {
       LOG.trace(String.format("Incrementally updating %d/%d partitions.",
           partitions.size(), partitionMap_.size()));
     }
-    Set<String> partitionNames = Sets.newHashSet();
+    Set<String> partitionNames = new HashSet<>();
     for (HdfsPartition part: partitions) {
       partitionNames.add(part.getPartitionName());
     }
@@ -1575,7 +1576,7 @@ public class HdfsTable extends Table implements FeFsTable {
     if (partitionNames.isEmpty()) return;
     // Load partition metadata from Hive Metastore.
     List<org.apache.hadoop.hive.metastore.api.Partition> msPartitions =
-        Lists.newArrayList();
+        new ArrayList<>();
     msPartitions.addAll(MetaStoreUtil.fetchPartitionsByName(client,
         Lists.newArrayList(partitionNames), db_.getName(), name_));
 
@@ -1652,7 +1653,7 @@ public class HdfsTable extends Table implements FeFsTable {
 
   @Override
   protected List<String> getColumnNamesWithHmsStats() {
-    List<String> ret = Lists.newArrayList();
+    List<String> ret = new ArrayList<>();
     // Only non-partition columns have column stats in the HMS.
     for (Column column: getColumns().subList(numClusteringCols_, getColumns().size())) {
       ret.add(column.getName().toLowerCase());
@@ -1812,7 +1813,7 @@ public class HdfsTable extends Table implements FeFsTable {
     memUsageEstimate += numPartitions * PER_PARTITION_MEM_USAGE_BYTES;
     boolean includeIncrementalStats = shouldSendIncrementalStats(numPartitions);
     FileMetadataStats stats = new FileMetadataStats();
-    Map<Long, THdfsPartition> idToPartition = Maps.newHashMap();
+    Map<Long, THdfsPartition> idToPartition = new HashMap<>();
     for (HdfsPartition partition: partitionMap_.values()) {
       long id = partition.getId();
       if (refPartitions == null || refPartitions.contains(id)) {
@@ -1868,6 +1869,7 @@ public class HdfsTable extends Table implements FeFsTable {
   /**
    * Returns the set of file formats that the partitions are stored in.
    */
+  @Override
   public Set<HdfsFileFormat> getFileFormats() {
     // In the case that we have no partitions added to the table yet, it's
     // important to add the "prototype" partition as a fallback.
@@ -1882,18 +1884,18 @@ public class HdfsTable extends Table implements FeFsTable {
    * partition key column.
    */
   public List<List<String>> getPathsWithoutPartitions() throws CatalogException {
-    HashSet<List<LiteralExpr>> existingPartitions = new HashSet<List<LiteralExpr>>();
+    Set<List<LiteralExpr>> existingPartitions = new HashSet<>();
     // Get the list of partition values of existing partitions in Hive Metastore.
     for (HdfsPartition partition: partitionMap_.values()) {
       existingPartitions.add(partition.getPartitionValues());
     }
 
-    List<String> partitionKeys = Lists.newArrayList();
+    List<String> partitionKeys = new ArrayList<>();
     for (int i = 0; i < numClusteringCols_; ++i) {
       partitionKeys.add(getColumns().get(i).getName());
     }
     Path basePath = new Path(hdfsBaseDir_);
-    List<List<String>> partitionsNotInHms = new ArrayList<List<String>>();
+    List<List<String>> partitionsNotInHms = new ArrayList<>();
     try {
       getAllPartitionsNotInHms(basePath, partitionKeys, existingPartitions,
           partitionsNotInHms);
@@ -1909,11 +1911,11 @@ public class HdfsTable extends Table implements FeFsTable {
    * type compatibility check. Also these partitions are not already part of the table.
    */
   private void getAllPartitionsNotInHms(Path path, List<String> partitionKeys,
-      HashSet<List<LiteralExpr>> existingPartitions,
+      Set<List<LiteralExpr>> existingPartitions,
       List<List<String>> partitionsNotInHms) throws IOException {
     FileSystem fs = path.getFileSystem(CONF);
-    List<String> partitionValues = Lists.newArrayList();
-    List<LiteralExpr> partitionExprs = Lists.newArrayList();
+    List<String> partitionValues = new ArrayList<>();
+    List<LiteralExpr> partitionExprs = new ArrayList<>();
     getAllPartitionsNotInHms(path, partitionKeys, 0, fs, partitionValues,
         partitionExprs, existingPartitions, partitionsNotInHms);
   }
@@ -1934,7 +1936,7 @@ public class HdfsTable extends Table implements FeFsTable {
    */
   private void getAllPartitionsNotInHms(Path path, List<String> partitionKeys,
       int depth, FileSystem fs, List<String> partitionValues,
-      List<LiteralExpr> partitionExprs, HashSet<List<LiteralExpr>> existingPartitions,
+      List<LiteralExpr> partitionExprs, Set<List<LiteralExpr>> existingPartitions,
       List<List<String>> partitionsNotInHms) throws IOException {
     if (depth == partitionKeys.size()) {
       if (existingPartitions.contains(partitionExprs)) {
@@ -2139,8 +2141,8 @@ public class HdfsTable extends Table implements FeFsTable {
    * Constructs a partition name from a list of TPartitionKeyValue objects.
    */
   public static String constructPartitionName(List<TPartitionKeyValue> partitionSpec) {
-    List<String> partitionCols = Lists.newArrayList();
-    List<String> partitionVals = Lists.newArrayList();
+    List<String> partitionCols = new ArrayList<>();
+    List<String> partitionVals = new ArrayList<>();
     for (TPartitionKeyValue kv: partitionSpec) {
       partitionCols.add(kv.getName());
       partitionVals.add(kv.getValue());

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/HiveStorageDescriptorFactory.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/HiveStorageDescriptorFactory.java b/fe/src/main/java/org/apache/impala/catalog/HiveStorageDescriptorFactory.java
index b1bd003..c649808 100644
--- a/fe/src/main/java/org/apache/impala/catalog/HiveStorageDescriptorFactory.java
+++ b/fe/src/main/java/org/apache/impala/catalog/HiveStorageDescriptorFactory.java
@@ -39,7 +39,7 @@ public class HiveStorageDescriptorFactory {
 
     StorageDescriptor sd = new StorageDescriptor();
     sd.setSerdeInfo(new org.apache.hadoop.hive.metastore.api.SerDeInfo());
-    sd.getSerdeInfo().setParameters(new HashMap<String, String>());
+    sd.getSerdeInfo().setParameters(new HashMap<>());
     // The compressed flag is not used to determine whether the table is compressed or
     // not. Instead, we use the input format or the filename.
     sd.setCompressed(false);

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/ImpaladTableUsageTracker.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/ImpaladTableUsageTracker.java b/fe/src/main/java/org/apache/impala/catalog/ImpaladTableUsageTracker.java
index 2d6ccda..5db822b 100644
--- a/fe/src/main/java/org/apache/impala/catalog/ImpaladTableUsageTracker.java
+++ b/fe/src/main/java/org/apache/impala/catalog/ImpaladTableUsageTracker.java
@@ -17,8 +17,12 @@
 
 package org.apache.impala.catalog;
 
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
 import org.apache.impala.analysis.TableName;
 import org.apache.impala.common.JniUtil;
 import org.apache.impala.service.BackendConfig;
@@ -32,10 +36,8 @@ import org.apache.log4j.Logger;
 import org.apache.thrift.TSerializer;
 import org.apache.thrift.protocol.TBinaryProtocol;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Random;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
 
 /**
  * Track the names and the number of usages of the recently used tables and report the
@@ -44,7 +46,7 @@ import java.util.Random;
 public class ImpaladTableUsageTracker {
   private static final Logger LOG = Logger.getLogger(ImpaladTableUsageTracker.class);
   private final static long REPORT_INTERVAL_MS = 10000;
-  private HashMap<TTableName, TTableUsage> unreportedUsages;
+  private Map<TTableName, TTableUsage> unreportedUsages;
   private Thread reportThread_;
 
   private ImpaladTableUsageTracker(boolean enabled) {

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/KuduTable.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/KuduTable.java b/fe/src/main/java/org/apache/impala/catalog/KuduTable.java
index 2a64f5d..1b5defd 100644
--- a/fe/src/main/java/org/apache/impala/catalog/KuduTable.java
+++ b/fe/src/main/java/org/apache/impala/catalog/KuduTable.java
@@ -92,7 +92,7 @@ public class KuduTable extends Table implements FeKuduTable {
   private String kuduMasters_;
 
   // Primary key column names, the column names are all in lower case.
-  private final List<String> primaryKeyColumnNames_ = Lists.newArrayList();
+  private final List<String> primaryKeyColumnNames_ = new ArrayList<>();
 
   // Partitioning schemes of this Kudu table. Both range and hash-based partitioning are
   // supported.
@@ -118,7 +118,7 @@ public class KuduTable extends Table implements FeKuduTable {
    * Returns the columns in the order they have been created
    */
   @Override
-  public ArrayList<Column> getColumnsInHiveOrder() { return getColumns(); }
+  public List<Column> getColumnsInHiveOrder() { return getColumns(); }
 
   public static boolean isKuduTable(org.apache.hadoop.hive.metastore.api.Table msTbl) {
     return KUDU_STORAGE_HANDLER.equals(msTbl.getParameters().get(KEY_STORAGE_HANDLER));
@@ -285,7 +285,7 @@ public class KuduTable extends Table implements FeKuduTable {
 
   private static List<KuduPartitionParam> loadPartitionByParamsFromThrift(
       List<TKuduPartitionParam> params) {
-    List<KuduPartitionParam> ret= Lists.newArrayList();
+    List<KuduPartitionParam> ret= new ArrayList<>();
     for (TKuduPartitionParam param: params) {
       if (param.isSetBy_hash_param()) {
         TKuduPartitionByHashParam hashParam = param.getBy_hash_param();
@@ -318,7 +318,7 @@ public class KuduTable extends Table implements FeKuduTable {
     Preconditions.checkNotNull(partitionBy_);
     // IMPALA-5154: partitionBy_ may be empty if Kudu table created outside Impala,
     // partition_by must be explicitly created because the field is required.
-    tbl.partition_by = Lists.newArrayList();
+    tbl.partition_by = new ArrayList<>();
     for (KuduPartitionParam partitionParam: partitionBy_) {
       tbl.addToPartition_by(partitionParam.toThrift());
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/PartitionStatsUtil.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/PartitionStatsUtil.java b/fe/src/main/java/org/apache/impala/catalog/PartitionStatsUtil.java
index c93b245..38d304c 100644
--- a/fe/src/main/java/org/apache/impala/catalog/PartitionStatsUtil.java
+++ b/fe/src/main/java/org/apache/impala/catalog/PartitionStatsUtil.java
@@ -17,25 +17,25 @@
 
 package org.apache.impala.catalog;
 
-import org.apache.impala.common.Reference;
-import org.apache.impala.thrift.TPartitionStats;
-import org.apache.impala.common.JniUtil;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.codec.binary.Base64;
 import org.apache.impala.common.ImpalaException;
 import org.apache.impala.common.ImpalaRuntimeException;
+import org.apache.impala.common.JniUtil;
+import org.apache.impala.common.Reference;
+import org.apache.impala.thrift.TPartitionStats;
 import org.apache.impala.util.CompressionUtil;
 import org.apache.impala.util.MetaStoreUtil;
-
-import java.util.List;
-import java.util.Map;
-import org.apache.commons.codec.binary.Base64;
-import org.apache.thrift.protocol.TCompactProtocol;
-import org.apache.thrift.TSerializer;
 import org.apache.thrift.TException;
-import com.google.common.base.Preconditions;
+import org.apache.thrift.TSerializer;
+import org.apache.thrift.protocol.TCompactProtocol;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Lists;
+import com.google.common.base.Preconditions;
 
 /**
  * Handles serialising and deserialising intermediate statistics from the Hive MetaStore
@@ -188,7 +188,7 @@ public class PartitionStatsUtil {
 
   static private List<String> chunkStringForHms(String data, int chunkLen) {
     int idx = 0;
-    List<String> ret = Lists.newArrayList();
+    List<String> ret = new ArrayList<>();
     while (idx < data.length()) {
       int remaining = data.length() - idx;
       int chunkSize = (chunkLen > remaining) ? remaining : chunkLen;

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/PrimitiveType.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/PrimitiveType.java b/fe/src/main/java/org/apache/impala/catalog/PrimitiveType.java
index 45cfe12..d49be1d 100644
--- a/fe/src/main/java/org/apache/impala/catalog/PrimitiveType.java
+++ b/fe/src/main/java/org/apache/impala/catalog/PrimitiveType.java
@@ -17,10 +17,10 @@
 
 package org.apache.impala.catalog;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.impala.thrift.TPrimitiveType;
-import com.google.common.collect.Lists;
 
 public enum PrimitiveType {
   INVALID_TYPE("INVALID_TYPE", -1, TPrimitiveType.INVALID_TYPE),
@@ -99,7 +99,7 @@ public enum PrimitiveType {
   public TPrimitiveType toThrift() { return thriftType_; }
 
   public static List<TPrimitiveType> toThrift(PrimitiveType[] types) {
-    List<TPrimitiveType> result = Lists.newArrayList();
+    List<TPrimitiveType> result = new ArrayList<>();
     for (PrimitiveType t: types) {
       result.add(t.toThrift());
     }

http://git-wip-us.apache.org/repos/asf/impala/blob/049e1056/fe/src/main/java/org/apache/impala/catalog/ScalarFunction.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/catalog/ScalarFunction.java b/fe/src/main/java/org/apache/impala/catalog/ScalarFunction.java
index 653633a..b64962e 100644
--- a/fe/src/main/java/org/apache/impala/catalog/ScalarFunction.java
+++ b/fe/src/main/java/org/apache/impala/catalog/ScalarFunction.java
@@ -24,7 +24,6 @@ import org.apache.hadoop.hive.metastore.api.FunctionType;
 import org.apache.hadoop.hive.metastore.api.PrincipalType;
 import org.apache.hadoop.hive.metastore.api.ResourceType;
 import org.apache.hadoop.hive.metastore.api.ResourceUri;
-
 import org.apache.impala.analysis.FunctionName;
 import org.apache.impala.analysis.HdfsUri;
 import org.apache.impala.common.AnalysisException;
@@ -128,7 +127,7 @@ public class ScalarFunction extends Function {
     // Currently we only support certain primitive types.
     JavaUdfDataType javaRetType = JavaUdfDataType.getType(fnRetType);
     if (javaRetType == JavaUdfDataType.INVALID_TYPE) return null;
-    List<Type> fnArgsList = Lists.newArrayList();
+    List<Type> fnArgsList = new ArrayList<>();
     for (Class<?> argClass: fnArgs) {
       JavaUdfDataType javaUdfType = JavaUdfDataType.getType(argClass);
       if (javaUdfType == JavaUdfDataType.INVALID_TYPE) return null;
@@ -166,7 +165,7 @@ public class ScalarFunction extends Function {
    * implementations. (gen_functions.py). Is there a better way to coordinate this.
    */
   public static ScalarFunction createBuiltinOperator(String name,
-      ArrayList<Type> argTypes, Type retType) {
+      List<Type> argTypes, Type retType) {
     // Operators have a well defined symbol based on the function name and type.
     // Convert Add(TINYINT, TINYINT) --> Add_TinyIntVal_TinyIntVal
     String beFn = Character.toUpperCase(name.charAt(0)) + name.substring(1);
@@ -219,12 +218,12 @@ public class ScalarFunction extends Function {
   }
 
   public static ScalarFunction createBuiltinOperator(String name, String symbol,
-      ArrayList<Type> argTypes, Type retType) {
+      List<Type> argTypes, Type retType) {
     return createBuiltin(name, symbol, argTypes, false, retType, false);
   }
 
   public static ScalarFunction createBuiltin(String name, String symbol,
-      ArrayList<Type> argTypes, boolean hasVarArgs, Type retType,
+      List<Type> argTypes, boolean hasVarArgs, Type retType,
       boolean userVisible) {
     ScalarFunction fn = new ScalarFunction(
         new FunctionName(BuiltinsDb.NAME, name), argTypes, retType, hasVarArgs);
@@ -249,7 +248,7 @@ public class ScalarFunction extends Function {
    * TFunctionBinaryType.
    */
   public static ScalarFunction createForTesting(String db,
-      String fnName, ArrayList<Type> args, Type retType, String uriPath,
+      String fnName, List<Type> args, Type retType, String uriPath,
       String symbolName, String initFnSymbol, String closeFnSymbol,
       TFunctionBinaryType type) {
     ScalarFunction fn = new ScalarFunction(new FunctionName(db, fnName), args,


[09/10] impala git commit: IMPALA-6533: Add min-max filter for decimal types on kudu tables.

Posted by jo...@apache.org.
IMPALA-6533: Add min-max filter for decimal types on kudu tables.

The code mimics the code written for other min-max filters.  Decimal data
can be stored using 4 bytes, 8 bytes and 16 bytes.  The code respectively
handles these 3 storage configurations.  The column definition states the
precision and the precision determines the storage size.

The minimum and maximum values are stored in a union.  The precision from
the column will come in as an input.  Based on the precision the size will be
found, and depending on the size appropriate variable will be used.

The code in min-max-filter* follows the general convention of the file, hence
uses macros.

The test includes 24 decimal columns (as listed below) with the following joins:
1.  Inner Join with broadcast (2 tables)
  1a. 1 predicate
  1b. 4 predicates - all results in decimal min-max filter
  1c. 4 predicates - 3 results in decimal min=max filter; 1 doesn't
2.  Inner Join with Shuffle (3 tables)
3.  Right outer join (2 tables)
4.  Left Semi join (2 tables)
5.  Right Semi join (2 tables)

Decimal Columns:
4bytes:
(5,0), (5,1), (5,3), (5,5)
(9,0), (9,1), (9,5), (9,9)
8 bytes:
(14,0), (14,1), (14,7), (14,14)
(18,0), (18,1), (18,9), (18,18)
16 bytes:
(28,0), (28,1), (28,14), (28,28)
(38,0), (38,1), (38,19), (38,38)

The test aggregates the count of probe rows.  This shows that the min-max filter
is exercised, because the number of probe rows is less than the total number
of rows in the probe side table.  The count of probe rows is considered to be
deterministic.  But, it will be beneficial to look out for changes in Kudu that can
change the way data is partitioned.  Such a change could change the probe row count
and in that case, the test will have to be updated.

impala_test_suite.py and test_result_verifier.py are enhanced to support saving
of aggregation using update_results.

Change-Id: Ib7e7278e902160d7060f8097290bc172d9031f94
Reviewed-on: http://gerrit.cloudera.org:8080/12113
Reviewed-by: Impala Public Jenkins <im...@cloudera.com>
Tested-by: Impala Public Jenkins <im...@cloudera.com>


Project: http://git-wip-us.apache.org/repos/asf/impala/repo
Commit: http://git-wip-us.apache.org/repos/asf/impala/commit/aacd5c35
Tree: http://git-wip-us.apache.org/repos/asf/impala/tree/aacd5c35
Diff: http://git-wip-us.apache.org/repos/asf/impala/diff/aacd5c35

Branch: refs/heads/master
Commit: aacd5c35d3134870b9a55658011cf08e60275459
Parents: a8d3b76
Author: Janaki Lahorani <ja...@cloudera.com>
Authored: Wed Nov 28 15:40:49 2018 -0800
Committer: Impala Public Jenkins <im...@cloudera.com>
Committed: Thu Jan 10 03:32:25 2019 +0000

----------------------------------------------------------------------
 be/src/codegen/gen_ir_descriptions.py           |    3 +
 be/src/exec/filter-context.cc                   |    2 +-
 be/src/runtime/coordinator.cc                   |    3 +-
 be/src/runtime/decimal-value.h                  |   11 +
 be/src/runtime/decimal-value.inline.h           |    7 +
 be/src/util/min-max-filter-ir.cc                |   30 +
 be/src/util/min-max-filter-test.cc              |  149 +-
 be/src/util/min-max-filter.cc                   |  198 +-
 be/src/util/min-max-filter.h                    |   89 +-
 bin/rat_exclude_files.txt                       |    2 +
 common/thrift/Data.thrift                       |    1 +
 .../impala/planner/RuntimeFilterGenerator.java  |    2 -
 testdata/data/README                            |   11 +
 testdata/data/decimal_rtf_tbl.txt               | 1404 +++++
 testdata/data/decimal_rtf_tiny_tbl.txt          |   40 +
 .../functional/functional_schema_template.sql   |  158 +
 .../datasets/functional/schema_constraints.csv  |   12 +
 .../QueryTest/decimal_min_max_filters.test      | 4937 ++++++++++++++++++
 .../queries/QueryTest/min_max_filters.test      |  250 +
 tests/common/impala_test_suite.py               |   14 +-
 tests/common/test_result_verifier.py            |   16 +-
 tests/query_test/test_runtime_filters.py        |    5 +
 22 files changed, 7321 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/codegen/gen_ir_descriptions.py
----------------------------------------------------------------------
diff --git a/be/src/codegen/gen_ir_descriptions.py b/be/src/codegen/gen_ir_descriptions.py
index 8175b59..57986ed 100755
--- a/be/src/codegen/gen_ir_descriptions.py
+++ b/be/src/codegen/gen_ir_descriptions.py
@@ -220,6 +220,9 @@ ir_functions = [
   ["DOUBLE_MIN_MAX_FILTER_INSERT", "_ZN6impala18DoubleMinMaxFilter6InsertEPv"],
   ["STRING_MIN_MAX_FILTER_INSERT", "_ZN6impala18StringMinMaxFilter6InsertEPv"],
   ["TIMESTAMP_MIN_MAX_FILTER_INSERT", "_ZN6impala21TimestampMinMaxFilter6InsertEPv"],
+  ["DECIMAL_MIN_MAX_FILTER_INSERT4", "_ZN6impala19DecimalMinMaxFilter7Insert4EPv"],
+  ["DECIMAL_MIN_MAX_FILTER_INSERT8", "_ZN6impala19DecimalMinMaxFilter7Insert8EPv"],
+  ["DECIMAL_MIN_MAX_FILTER_INSERT16", "_ZN6impala19DecimalMinMaxFilter8Insert16EPv"],
   ["KRPC_DSS_GET_PART_EXPR_EVAL",
   "_ZN6impala20KrpcDataStreamSender25GetPartitionExprEvaluatorEi"],
   ["KRPC_DSS_HASH_AND_ADD_ROWS",

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/exec/filter-context.cc
----------------------------------------------------------------------
diff --git a/be/src/exec/filter-context.cc b/be/src/exec/filter-context.cc
index 08cd666..4ec39fc 100644
--- a/be/src/exec/filter-context.cc
+++ b/be/src/exec/filter-context.cc
@@ -403,7 +403,7 @@ Status FilterContext::CodegenInsert(LlvmCodeGen* codegen, ScalarExpr* filter_exp
     DCHECK(ctx->filter->is_min_max_filter());
     // The function for inserting into the min-max filter.
     llvm::Function* min_max_insert_fn = codegen->GetFunction(
-        MinMaxFilter::GetInsertIRFunctionType(filter_expr->type().type), false);
+        MinMaxFilter::GetInsertIRFunctionType(filter_expr->type()), false);
     DCHECK(min_max_insert_fn != nullptr);
 
     llvm::Value* insert_filter_args[] = {local_filter_arg, val_ptr_phi};

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/runtime/coordinator.cc
----------------------------------------------------------------------
diff --git a/be/src/runtime/coordinator.cc b/be/src/runtime/coordinator.cc
index 6192a59..e96d673 100644
--- a/be/src/runtime/coordinator.cc
+++ b/be/src/runtime/coordinator.cc
@@ -983,7 +983,8 @@ void Coordinator::FilterState::ApplyUpdate(const TUpdateFilterParams& params,
     } else if (min_max_filter_.always_false) {
       MinMaxFilter::Copy(params.min_max_filter, &min_max_filter_);
     } else {
-      MinMaxFilter::Or(params.min_max_filter, &min_max_filter_);
+      MinMaxFilter::Or(params.min_max_filter, &min_max_filter_,
+          ColumnType::FromThrift(desc_.src_expr.nodes[0].type));
     }
   }
 

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/runtime/decimal-value.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/decimal-value.h b/be/src/runtime/decimal-value.h
index 8509173..b34cde0 100644
--- a/be/src/runtime/decimal-value.h
+++ b/be/src/runtime/decimal-value.h
@@ -21,6 +21,7 @@
 
 #include <ostream>
 
+#include "gen-cpp/Data_types.h"
 #include "runtime/multi-precision.h"
 #include "runtime/types.h"
 
@@ -58,6 +59,9 @@ class DecimalValue {
     return FromDouble(t.precision, t.scale, d, round, overflow);
   }
 
+  /// Returns a new DecimalValue created from the value in 'tvalue'.
+  static inline DecimalValue FromTColumnValue(const TColumnValue& tvalue);
+
   static inline DecimalValue FromDouble(int precision, int scale, double d,
       bool round, bool* overflow);
 
@@ -192,6 +196,13 @@ class DecimalValue {
 
   inline DecimalValue<T> Abs() const;
 
+  /// Store the binary representation of this DecimalValue in 'tvalue'.
+  void ToTColumnValue(TColumnValue* tvalue) const {
+    const uint8_t* data = reinterpret_cast<const uint8_t*>(&value_);
+    tvalue->decimal_val.assign(data, data + sizeof(T));
+    tvalue->__isset.decimal_val = true;
+  }
+
  private:
   T value_;
 

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/runtime/decimal-value.inline.h
----------------------------------------------------------------------
diff --git a/be/src/runtime/decimal-value.inline.h b/be/src/runtime/decimal-value.inline.h
index 29d0159..0a4866e 100644
--- a/be/src/runtime/decimal-value.inline.h
+++ b/be/src/runtime/decimal-value.inline.h
@@ -60,6 +60,13 @@ inline DecimalValue<T> DecimalValue<T>::FromDouble(int precision, int scale, dou
   return DecimalValue(static_cast<T>(d));
 }
 
+template <typename T>
+inline DecimalValue<T> DecimalValue<T>::FromTColumnValue(const TColumnValue& tvalue) {
+  T value = 0;
+  memcpy(&value, tvalue.decimal_val.c_str(), tvalue.decimal_val.length());
+  return DecimalValue<T>(value);
+}
+
 template<typename T>
 inline DecimalValue<T> DecimalValue<T>::FromInt(int precision, int scale, int64_t d,
     bool* overflow) {

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/util/min-max-filter-ir.cc
----------------------------------------------------------------------
diff --git a/be/src/util/min-max-filter-ir.cc b/be/src/util/min-max-filter-ir.cc
index 130d11d..1a6f5e3 100644
--- a/be/src/util/min-max-filter-ir.cc
+++ b/be/src/util/min-max-filter-ir.cc
@@ -73,4 +73,34 @@ void TimestampMinMaxFilter::Insert(void* val) {
   }
 }
 
+#define INSERT_DECIMAL_MINMAX(SIZE)                         \
+  do {                                                      \
+    if (val == nullptr) return;                             \
+    const Decimal##SIZE##Value* value##SIZE##_ =            \
+        reinterpret_cast<const Decimal##SIZE##Value*>(val); \
+    if (always_false_) {                                    \
+      min##SIZE##_ = *value##SIZE##_;                       \
+      max##SIZE##_ = *value##SIZE##_;                       \
+      always_false_ = false;                                \
+    } else {                                                \
+      if (*value##SIZE##_ < min##SIZE##_) {                 \
+        min##SIZE##_ = *value##SIZE##_;                     \
+      } else if (*value##SIZE##_ > max##SIZE##_) {          \
+        max##SIZE##_ = *value##SIZE##_;                     \
+      }                                                     \
+    }                                                       \
+  } while (false)
+
+void DecimalMinMaxFilter::Insert4(void* val) {
+  INSERT_DECIMAL_MINMAX(4);
+}
+
+void DecimalMinMaxFilter::Insert8(void* val) {
+  INSERT_DECIMAL_MINMAX(8);
+}
+
+void DecimalMinMaxFilter::Insert16(void* val) {
+  INSERT_DECIMAL_MINMAX(16);
+}
+
 } // namespace impala

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/util/min-max-filter-test.cc
----------------------------------------------------------------------
diff --git a/be/src/util/min-max-filter-test.cc b/be/src/util/min-max-filter-test.cc
index 37d6f83..c6704fc 100644
--- a/be/src/util/min-max-filter-test.cc
+++ b/be/src/util/min-max-filter-test.cc
@@ -18,6 +18,8 @@
 #include "testutil/gtest-util.h"
 #include "util/min-max-filter.h"
 
+#include "runtime/decimal-value.h"
+#include "runtime/decimal-value.inline.h"
 #include "runtime/string-value.inline.h"
 #include "runtime/test-env.h"
 #include "service/fe-support.h"
@@ -54,7 +56,7 @@ TEST(MinMaxFilterTest, TestBoolMinMaxFilter) {
   TMinMaxFilter tFilter2;
   tFilter2.min.__set_bool_val(false);
   tFilter2.max.__set_bool_val(false);
-  MinMaxFilter::Or(tFilter1, &tFilter2);
+  MinMaxFilter::Or(tFilter1, &tFilter2, ColumnType(PrimitiveType::TYPE_BOOLEAN));
   EXPECT_FALSE(tFilter2.min.bool_val);
   EXPECT_TRUE(tFilter2.max.bool_val);
 
@@ -123,7 +125,7 @@ TEST(MinMaxFilterTest, TestNumericMinMaxFilter) {
   TMinMaxFilter tFilter2;
   tFilter2.min.__set_int_val(2);
   tFilter2.max.__set_int_val(7);
-  MinMaxFilter::Or(tFilter1, &tFilter2);
+  MinMaxFilter::Or(tFilter1, &tFilter2, int_type);
   EXPECT_EQ(tFilter2.min.int_val, 2);
   EXPECT_EQ(tFilter2.max.int_val, 8);
 
@@ -285,7 +287,7 @@ TEST(MinMaxFilterTest, TestStringMinMaxFilter) {
   TMinMaxFilter tFilter2;
   tFilter2.min.__set_string_val("b");
   tFilter2.max.__set_string_val("e");
-  MinMaxFilter::Or(tFilter1, &tFilter2);
+  MinMaxFilter::Or(tFilter1, &tFilter2, string_type);
   EXPECT_EQ(tFilter2.min.string_val, "a");
   EXPECT_EQ(tFilter2.max.string_val, "e");
 
@@ -356,7 +358,7 @@ TEST(MinMaxFilterTest, TestTimestampMinMaxFilter) {
   TMinMaxFilter tFilter2;
   t1.ToTColumnValue(&tFilter2.min);
   t3.ToTColumnValue(&tFilter2.max);
-  MinMaxFilter::Or(tFilter1, &tFilter2);
+  MinMaxFilter::Or(tFilter1, &tFilter2, timestamp_type);
   EXPECT_EQ(TimestampValue::FromTColumnValue(tFilter2.min), t2);
   EXPECT_EQ(TimestampValue::FromTColumnValue(tFilter2.max), t3);
 
@@ -365,6 +367,145 @@ TEST(MinMaxFilterTest, TestTimestampMinMaxFilter) {
   filter2->Close();
 }
 
+#define DECIMAL_CHECK(SIZE)                                                     \
+  do {                                                                          \
+    EXPECT_EQ(*reinterpret_cast<Decimal##SIZE##Value*>(filter->GetMin()), min); \
+    EXPECT_EQ(*reinterpret_cast<Decimal##SIZE##Value*>(filter->GetMax()), max); \
+    EXPECT_FALSE(filter->AlwaysFalse());                                        \
+    EXPECT_FALSE(filter->AlwaysTrue());                                         \
+  } while (false)
+
+void CheckDecimalVals(
+    MinMaxFilter* filter, const Decimal4Value& min, const Decimal4Value& max) {
+  DECIMAL_CHECK(4);
+}
+
+void CheckDecimalVals(
+    MinMaxFilter* filter, const Decimal8Value& min, const Decimal8Value& max) {
+  DECIMAL_CHECK(8);
+}
+
+void CheckDecimalVals(
+    MinMaxFilter* filter, const Decimal16Value& min, const Decimal16Value& max) {
+  DECIMAL_CHECK(16);
+}
+
+void CheckDecimalEmptyFilter(MinMaxFilter* filter, const ColumnType& column_type,
+    TMinMaxFilter* tFilter, ObjectPool* obj_pool, MemTracker* mem_tracker) {
+  EXPECT_TRUE(filter->AlwaysFalse());
+  EXPECT_FALSE(filter->AlwaysTrue());
+  filter->ToThrift(tFilter);
+  EXPECT_TRUE(tFilter->always_false);
+  EXPECT_FALSE(tFilter->always_true);
+  EXPECT_FALSE(tFilter->min.__isset.decimal_val);
+  EXPECT_FALSE(tFilter->max.__isset.decimal_val);
+  MinMaxFilter* empty_filter =
+      MinMaxFilter::Create(*tFilter, column_type, obj_pool, mem_tracker);
+  EXPECT_TRUE(empty_filter->AlwaysFalse());
+  EXPECT_FALSE(empty_filter->AlwaysTrue());
+  empty_filter->Close();
+}
+
+// values are such that VALUE3 < VALUE1 < VALUE2
+// The insert order is VALUE1, VALUE2, VALUE3
+// 1. After VALUE1 insert: both min and max are VALUE1
+// 2. After VALUE2 insert: min=VALUE1; max=VALUE2
+// 3. After VALUE3 insert: min=VALUE3; max=VALUE2
+#define DECIMAL_INSERT_AND_CHECK(SIZE, PRECISION, SCALE, VALUE1, VALUE2, VALUE3)     \
+  do {                                                                               \
+    d1##SIZE =                                                                       \
+        Decimal##SIZE##Value::FromDouble(PRECISION, SCALE, VALUE1, true, &overflow); \
+    filter##SIZE->Insert(&d1##SIZE);                                                 \
+    CheckDecimalVals(filter##SIZE, d1##SIZE, d1##SIZE);                              \
+    d2##SIZE =                                                                       \
+        Decimal##SIZE##Value::FromDouble(PRECISION, SCALE, VALUE2, true, &overflow); \
+    filter##SIZE->Insert(&d2##SIZE);                                                 \
+    CheckDecimalVals(filter##SIZE, d1##SIZE, d2##SIZE);                              \
+    d3##SIZE =                                                                       \
+        Decimal##SIZE##Value::FromDouble(PRECISION, SCALE, VALUE3, true, &overflow); \
+    filter##SIZE->Insert(&d3##SIZE);                                                 \
+    CheckDecimalVals(filter##SIZE, d3##SIZE, d2##SIZE);                              \
+  } while (false)
+
+#define DECIMAL_CHECK_THRIFT(SIZE)                                                  \
+  do {                                                                              \
+    filter##SIZE->ToThrift(&tFilter##SIZE);                                         \
+    EXPECT_FALSE(tFilter##SIZE.always_false);                                       \
+    EXPECT_FALSE(tFilter##SIZE.always_true);                                        \
+    EXPECT_EQ(Decimal##SIZE##Value::FromTColumnValue(tFilter##SIZE.min), d3##SIZE); \
+    EXPECT_EQ(Decimal##SIZE##Value::FromTColumnValue(tFilter##SIZE.max), d2##SIZE); \
+    MinMaxFilter* filter##SIZE##2 = MinMaxFilter::Create(                           \
+        tFilter##SIZE, decimal##SIZE##_type, &obj_pool, &mem_tracker);              \
+    CheckDecimalVals(filter##SIZE##2, d3##SIZE, d2##SIZE);                          \
+    filter##SIZE##2->Close();                                                       \
+  } while (false)
+
+#define DECIMAL_CHECK_OR(SIZE)                                                       \
+  do {                                                                               \
+    TMinMaxFilter tFilter1##SIZE;                                                    \
+    d3##SIZE.ToTColumnValue(&tFilter1##SIZE.min);                                    \
+    d2##SIZE.ToTColumnValue(&tFilter1##SIZE.max);                                    \
+    TMinMaxFilter tFilter2##SIZE;                                                    \
+    d1##SIZE.ToTColumnValue(&tFilter2##SIZE.min);                                    \
+    d1##SIZE.ToTColumnValue(&tFilter2##SIZE.max);                                    \
+    MinMaxFilter::Or(tFilter1##SIZE, &tFilter2##SIZE, decimal##SIZE##_type);         \
+    EXPECT_EQ(Decimal##SIZE##Value::FromTColumnValue(tFilter2##SIZE.min), d3##SIZE); \
+    EXPECT_EQ(Decimal##SIZE##Value::FromTColumnValue(tFilter2##SIZE.max), d2##SIZE); \
+  } while (false)
+
+// Tests that a DecimalMinMaxFilter returns the expected min/max after having values
+// inserted into it, and that MinMaxFilter::Or works for decimal values.
+TEST(MinMaxFilterTest, TestDecimalMinMaxFilter) {
+  ObjectPool obj_pool;
+  MemTracker mem_tracker;
+  bool overflow = false;
+
+  // Create types
+  ColumnType decimal4_type = ColumnType::CreateDecimalType(9, 5);
+  ColumnType decimal8_type = ColumnType::CreateDecimalType(18, 9);
+  ColumnType decimal16_type = ColumnType::CreateDecimalType(38, 19);
+
+  // Decimal Values
+  Decimal4Value d14, d24, d34;
+  Decimal8Value d18, d28, d38;
+  Decimal16Value d116, d216, d316;
+
+  // Create filters
+  MinMaxFilter* filter4 = MinMaxFilter::Create(decimal4_type, &obj_pool, &mem_tracker);
+  MinMaxFilter* filter8 = MinMaxFilter::Create(decimal8_type, &obj_pool, &mem_tracker);
+  MinMaxFilter* filter16 = MinMaxFilter::Create(decimal16_type, &obj_pool, &mem_tracker);
+
+  // Create thrift minmax filters
+  TMinMaxFilter tFilter4, tFilter8, tFilter16;
+
+  // Test the behavior of an empty filter.
+  CheckDecimalEmptyFilter(filter4, decimal4_type, &tFilter4, &obj_pool, &mem_tracker);
+  CheckDecimalEmptyFilter(filter8, decimal8_type, &tFilter8, &obj_pool, &mem_tracker);
+  CheckDecimalEmptyFilter(filter16, decimal16_type, &tFilter16, &obj_pool, &mem_tracker);
+
+  // Insert and check
+  DECIMAL_INSERT_AND_CHECK(4, 9, 5, 2345.67891, 3456.78912, 1234.56789);
+  DECIMAL_INSERT_AND_CHECK(
+      8, 18, 9, 234567891.234567891, 345678912.345678912, 123456789.123456789);
+  DECIMAL_INSERT_AND_CHECK(16, 38, 19, 2345678912345678912.2345678912345678912,
+      3456789123456789123.3456789123456789123, 1234567891234567891.1234567891234567891);
+
+  // Thrift check
+  DECIMAL_CHECK_THRIFT(4);
+  DECIMAL_CHECK_THRIFT(8);
+  DECIMAL_CHECK_THRIFT(16);
+
+  // Check the behavior of Or.
+  DECIMAL_CHECK_OR(4);
+  DECIMAL_CHECK_OR(8);
+  DECIMAL_CHECK_OR(16);
+
+  // Close all filters
+  filter4->Close();
+  filter8->Close();
+  filter16->Close();
+}
+
 int main(int argc, char** argv) {
   ::testing::InitGoogleTest(&argc, argv);
   InitCommonRuntime(argc, argv, true, TestInfo::BE_TEST);

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/util/min-max-filter.cc
----------------------------------------------------------------------
diff --git a/be/src/util/min-max-filter.cc b/be/src/util/min-max-filter.cc
index 5a8bfc7..c6da060 100644
--- a/be/src/util/min-max-filter.cc
+++ b/be/src/util/min-max-filter.cc
@@ -21,6 +21,7 @@
 #include <unordered_map>
 
 #include "common/object-pool.h"
+#include "runtime/decimal-value.inline.h"
 #include "runtime/raw-value.h"
 #include "runtime/string-value.inline.h"
 #include "runtime/timestamp-value.inline.h"
@@ -39,7 +40,8 @@ static std::unordered_map<int, string> MIN_MAX_FILTER_LLVM_CLASS_NAMES = {
     {PrimitiveType::TYPE_FLOAT, FloatMinMaxFilter::LLVM_CLASS_NAME},
     {PrimitiveType::TYPE_DOUBLE, DoubleMinMaxFilter::LLVM_CLASS_NAME},
     {PrimitiveType::TYPE_STRING, StringMinMaxFilter::LLVM_CLASS_NAME},
-    {PrimitiveType::TYPE_TIMESTAMP, TimestampMinMaxFilter::LLVM_CLASS_NAME}};
+    {PrimitiveType::TYPE_TIMESTAMP, TimestampMinMaxFilter::LLVM_CLASS_NAME},
+    {PrimitiveType::TYPE_DECIMAL, DecimalMinMaxFilter::LLVM_CLASS_NAME}};
 
 static std::unordered_map<int, IRFunction::Type> MIN_MAX_FILTER_IR_FUNCTION_TYPES = {
     {PrimitiveType::TYPE_BOOLEAN, IRFunction::BOOL_MIN_MAX_FILTER_INSERT},
@@ -52,12 +54,32 @@ static std::unordered_map<int, IRFunction::Type> MIN_MAX_FILTER_IR_FUNCTION_TYPE
     {PrimitiveType::TYPE_STRING, IRFunction::STRING_MIN_MAX_FILTER_INSERT},
     {PrimitiveType::TYPE_TIMESTAMP, IRFunction::TIMESTAMP_MIN_MAX_FILTER_INSERT}};
 
+static std::unordered_map<int, IRFunction::Type>
+    DECIMAL_MIN_MAX_FILTER_IR_FUNCTION_TYPES = {
+        {DECIMAL_SIZE_4BYTE, IRFunction::DECIMAL_MIN_MAX_FILTER_INSERT4},
+        {DECIMAL_SIZE_8BYTE, IRFunction::DECIMAL_MIN_MAX_FILTER_INSERT8},
+        {DECIMAL_SIZE_16BYTE, IRFunction::DECIMAL_MIN_MAX_FILTER_INSERT16}};
+
 string MinMaxFilter::GetLlvmClassName(PrimitiveType type) {
-  return MIN_MAX_FILTER_LLVM_CLASS_NAMES[type];
+  auto llvm_class = MIN_MAX_FILTER_LLVM_CLASS_NAMES.find(type);
+  DCHECK(llvm_class != MIN_MAX_FILTER_LLVM_CLASS_NAMES.end())
+      << "Not a valid type: " << type;
+  return llvm_class->second;
 }
 
-IRFunction::Type MinMaxFilter::GetInsertIRFunctionType(PrimitiveType type) {
-  return MIN_MAX_FILTER_IR_FUNCTION_TYPES[type];
+IRFunction::Type MinMaxFilter::GetInsertIRFunctionType(ColumnType column_type) {
+  if (column_type.type != PrimitiveType::TYPE_DECIMAL) {
+    auto ir_function_type = MIN_MAX_FILTER_IR_FUNCTION_TYPES.find(column_type.type);
+    DCHECK(ir_function_type != MIN_MAX_FILTER_IR_FUNCTION_TYPES.end())
+        << "Not a valid type: " << column_type.type;
+    return ir_function_type->second;
+  } else {
+    auto ir_function_type = DECIMAL_MIN_MAX_FILTER_IR_FUNCTION_TYPES.find(
+        ColumnType::GetDecimalByteSize(column_type.precision));
+    DCHECK(ir_function_type != DECIMAL_MIN_MAX_FILTER_IR_FUNCTION_TYPES.end())
+        << "Not a valid precision: " << column_type.precision;
+    return ir_function_type->second;
+  }
 }
 
 #define NUMERIC_MIN_MAX_FILTER_FUNCS(NAME, TYPE, THRIFT_TYPE, PRIMITIVE_TYPE)  \
@@ -383,6 +405,159 @@ void TimestampMinMaxFilter::Copy(const TMinMaxFilter& in, TMinMaxFilter* out) {
   out->__isset.max = true;
 }
 
+// DECIMAL
+const char* DecimalMinMaxFilter::LLVM_CLASS_NAME = "class.impala::DecimalMinMaxFilter";
+#define DECIMAL_SET_MINMAX(SIZE)                                       \
+  do {                                                                 \
+    DCHECK(thrift.min.__isset.decimal_val);                            \
+    DCHECK(thrift.max.__isset.decimal_val);                            \
+    min##SIZE##_ = Decimal##SIZE##Value::FromTColumnValue(thrift.min); \
+    max##SIZE##_ = Decimal##SIZE##Value::FromTColumnValue(thrift.max); \
+  } while (false)
+
+// Construct the Decimal min-max filter when the min-max filter information
+// comes in through thrift.  This can get called in coordinator, after the filter
+// is sent by executor
+DecimalMinMaxFilter::DecimalMinMaxFilter(const TMinMaxFilter& thrift, int precision)
+  : size_(ColumnType::GetDecimalByteSize(precision)), always_false_(thrift.always_false) {
+  if (!always_false_) {
+    switch (size_) {
+      case DECIMAL_SIZE_4BYTE:
+        DECIMAL_SET_MINMAX(4);
+        break;
+      case DECIMAL_SIZE_8BYTE:
+        DECIMAL_SET_MINMAX(8);
+        break;
+      case DECIMAL_SIZE_16BYTE:
+        DECIMAL_SET_MINMAX(16);
+        break;
+      default:
+        DCHECK(false) << "DecimalMinMaxFilter: Unknown decimal byte size: " << size_;
+    }
+  }
+}
+
+PrimitiveType DecimalMinMaxFilter::type() {
+  return PrimitiveType::TYPE_DECIMAL;
+}
+
+#define DECIMAL_TO_THRIFT(SIZE)                \
+  do {                                         \
+    min##SIZE##_.ToTColumnValue(&thrift->min); \
+    max##SIZE##_.ToTColumnValue(&thrift->max); \
+  } while (false)
+
+// Construct a thrift min-max filter.  Will be called by the executor
+// to be sent to the coordinator
+void DecimalMinMaxFilter::ToThrift(TMinMaxFilter* thrift) const {
+  if (!always_false_) {
+    switch (size_) {
+      case DECIMAL_SIZE_4BYTE:
+        DECIMAL_TO_THRIFT(4);
+        break;
+      case DECIMAL_SIZE_8BYTE:
+        DECIMAL_TO_THRIFT(8);
+        break;
+      case DECIMAL_SIZE_16BYTE:
+        DECIMAL_TO_THRIFT(16);
+        break;
+      default:
+        DCHECK(false) << "DecimalMinMaxFilter: Unknown decimal byte size: " << size_;
+    }
+    thrift->__isset.min = true;
+    thrift->__isset.max = true;
+  }
+  thrift->__set_always_false(always_false_);
+  thrift->__set_always_true(false);
+}
+
+void DecimalMinMaxFilter::Insert(void* val) {
+  if (val == nullptr) return;
+  switch (size_) {
+    case 4:
+      Insert4(val);
+      break;
+    case 8:
+      Insert8(val);
+      break;
+    case 16:
+      Insert16(val);
+      break;
+    default:
+      DCHECK(false) << "Unknown decimal size: " << size_;
+  }
+}
+
+#define DECIMAL_DEBUG_STRING(SIZE)                                                \
+  do {                                                                            \
+    out << "DecimalMinMaxFilter(min=" << min##SIZE##_ << ", max=" << max##SIZE##_ \
+        << " always_false=" << (always_false_ ? "true" : "false") << ")";         \
+  } while (false)
+
+string DecimalMinMaxFilter::DebugString() const {
+  stringstream out;
+
+  switch (size_) {
+    case DECIMAL_SIZE_4BYTE:
+      DECIMAL_DEBUG_STRING(4);
+      break;
+    case DECIMAL_SIZE_8BYTE:
+      DECIMAL_DEBUG_STRING(8);
+      break;
+    case DECIMAL_SIZE_16BYTE:
+      DECIMAL_DEBUG_STRING(16);
+      break;
+    default:
+      DCHECK(false) << "DecimalMinMaxFilter: Unknown decimal byte size: " << size_;
+  }
+
+  return out.str();
+}
+
+#define DECIMAL_OR(SIZE)                                    \
+  do {                                                      \
+    if (Decimal##SIZE##Value::FromTColumnValue(in.min)      \
+        < Decimal##SIZE##Value::FromTColumnValue(out->min)) \
+      out->min.__set_decimal_val(in.min.decimal_val);       \
+    if (Decimal##SIZE##Value::FromTColumnValue(in.max)      \
+        > Decimal##SIZE##Value::FromTColumnValue(out->max)) \
+      out->max.__set_decimal_val(in.max.decimal_val);       \
+  } while (false)
+
+void DecimalMinMaxFilter::Or(const TMinMaxFilter& in, TMinMaxFilter* out, int precision) {
+  if (in.always_false) {
+    return;
+  } else if (out->always_false) {
+    out->min.__set_decimal_val(in.min.decimal_val);
+    out->__isset.min = true;
+    out->max.__set_decimal_val(in.max.decimal_val);
+    out->__isset.max = true;
+    out->__set_always_false(false);
+  } else {
+    int size = ColumnType::GetDecimalByteSize(precision);
+    switch (size) {
+      case DECIMAL_SIZE_4BYTE:
+        DECIMAL_OR(4);
+        break;
+      case DECIMAL_SIZE_8BYTE:
+        DECIMAL_OR(8);
+        break;
+      case DECIMAL_SIZE_16BYTE:
+        DECIMAL_OR(16);
+        break;
+      default:
+        DCHECK(false) << "Unknown decimal size: " << size;
+    }
+  }
+}
+
+void DecimalMinMaxFilter::Copy(const TMinMaxFilter& in, TMinMaxFilter* out) {
+  out->min.__set_decimal_val(in.min.decimal_val);
+  out->__isset.min = true;
+  out->max.__set_decimal_val(in.max.decimal_val);
+  out->__isset.max = true;
+}
+
 // MinMaxFilter
 bool MinMaxFilter::GetCastIntMinMax(
     const ColumnType& type, int64_t* out_min, int64_t* out_max) {
@@ -412,6 +587,8 @@ MinMaxFilter* MinMaxFilter::Create(
       return pool->Add(new StringMinMaxFilter(mem_tracker));
     case PrimitiveType::TYPE_TIMESTAMP:
       return pool->Add(new TimestampMinMaxFilter());
+    case PrimitiveType::TYPE_DECIMAL:
+      return pool->Add(new DecimalMinMaxFilter(type.precision));
     default:
       DCHECK(false) << "Unsupported MinMaxFilter type: " << type;
   }
@@ -439,13 +616,16 @@ MinMaxFilter* MinMaxFilter::Create(const TMinMaxFilter& thrift, ColumnType type,
       return pool->Add(new StringMinMaxFilter(thrift, mem_tracker));
     case PrimitiveType::TYPE_TIMESTAMP:
       return pool->Add(new TimestampMinMaxFilter(thrift));
+    case PrimitiveType::TYPE_DECIMAL:
+      return pool->Add(new DecimalMinMaxFilter(thrift, type.precision));
     default:
       DCHECK(false) << "Unsupported MinMaxFilter type: " << type;
   }
   return nullptr;
 }
 
-void MinMaxFilter::Or(const TMinMaxFilter& in, TMinMaxFilter* out) {
+void MinMaxFilter::Or(
+    const TMinMaxFilter& in, TMinMaxFilter* out, const ColumnType& columnType) {
   if (in.always_false || out->always_true) return;
   if (in.always_true) {
     out->__set_always_true(true);
@@ -484,6 +664,10 @@ void MinMaxFilter::Or(const TMinMaxFilter& in, TMinMaxFilter* out) {
     DCHECK(out->min.__isset.timestamp_val);
     TimestampMinMaxFilter::Or(in, out);
     return;
+  } else if (in.min.__isset.decimal_val) {
+    DCHECK(out->min.__isset.decimal_val);
+    DecimalMinMaxFilter::Or(in, out, columnType.precision);
+    return;
   }
   DCHECK(false) << "Unsupported MinMaxFilter type.";
 }
@@ -526,6 +710,10 @@ void MinMaxFilter::Copy(const TMinMaxFilter& in, TMinMaxFilter* out) {
     DCHECK(!out->min.__isset.timestamp_val);
     TimestampMinMaxFilter::Copy(in, out);
     return;
+  } else if (in.min.__isset.decimal_val) {
+    DCHECK(!out->min.__isset.decimal_val);
+    DecimalMinMaxFilter::Copy(in, out);
+    return;
   }
   DCHECK(false) << "Unsupported MinMaxFilter type.";
 }

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/be/src/util/min-max-filter.h
----------------------------------------------------------------------
diff --git a/be/src/util/min-max-filter.h b/be/src/util/min-max-filter.h
index 7982500..82cf54c 100644
--- a/be/src/util/min-max-filter.h
+++ b/be/src/util/min-max-filter.h
@@ -20,6 +20,7 @@
 
 #include "gen-cpp/ImpalaInternalService_types.h"
 #include "impala-ir/impala-ir-functions.h"
+#include "runtime/decimal-value.h"
 #include "runtime/string-buffer.h"
 #include "runtime/string-value.h"
 #include "runtime/timestamp-value.h"
@@ -87,7 +88,8 @@ class MinMaxFilter {
       ObjectPool* pool, MemTracker* mem_tracker);
 
   /// Computes the logical OR of 'in' with 'out' and stores the result in 'out'.
-  static void Or(const TMinMaxFilter& in, TMinMaxFilter* out);
+  static void Or(
+      const TMinMaxFilter& in, TMinMaxFilter* out, const ColumnType& columnType);
 
   /// Copies the contents of 'in' into 'out'.
   static void Copy(const TMinMaxFilter& in, TMinMaxFilter* out);
@@ -96,7 +98,7 @@ class MinMaxFilter {
   static std::string GetLlvmClassName(PrimitiveType type);
 
   /// Returns the IRFunction::Type for Insert() for the given type.
-  static IRFunction::Type GetInsertIRFunctionType(PrimitiveType type);
+  static IRFunction::Type GetInsertIRFunctionType(ColumnType col_type);
 };
 
 #define NUMERIC_MIN_MAX_FILTER(NAME, TYPE)                                    \
@@ -232,6 +234,89 @@ class TimestampMinMaxFilter : public MinMaxFilter {
   /// True if no rows have been inserted.
   bool always_false_;
 };
+
+#define DECIMAL_SIZE_4BYTE 4
+#define DECIMAL_SIZE_8BYTE 8
+#define DECIMAL_SIZE_16BYTE 16
+
+// body of GetMin and GetMax defined below
+#pragma push_macro("GET_MINMAX")
+#define GET_MINMAX(MIN_OR_MAX)                              \
+  do {                                                      \
+    switch (size_) {                                        \
+      case DECIMAL_SIZE_4BYTE:                              \
+        return &(MIN_OR_MAX##4_);                           \
+        break;                                              \
+      case DECIMAL_SIZE_8BYTE:                              \
+        return &(MIN_OR_MAX##8_);                           \
+        break;                                              \
+      case DECIMAL_SIZE_16BYTE:                             \
+        return &(MIN_OR_MAX##16_);                          \
+        break;                                              \
+      default:                                              \
+        DCHECK(false) << "Unknown decimal size: " << size_; \
+    }                                                       \
+  } while (false)
+
+// Decimal data can be stored using 4 bytes, 8 bytes or 16 bytes.  The filter
+// is for a particular column, and the size needed is fixed based on the
+// column specification.  So, a union is used to store the min and max value.
+// The precision comes in as input.  Based on the precision the size is found and
+// the respective variable will be used to store the value.  The code is
+// macro-ized to handle different sized decimals.
+class DecimalMinMaxFilter : public MinMaxFilter {
+ public:
+  DecimalMinMaxFilter(int precision)
+    : size_(ColumnType::GetDecimalByteSize(precision)), always_false_(true) {}
+
+  DecimalMinMaxFilter(const TMinMaxFilter& thrift, int precision);
+  virtual ~DecimalMinMaxFilter() {}
+
+  virtual void* GetMin() override {
+    GET_MINMAX(min);
+    return nullptr;
+  }
+
+  virtual void* GetMax() override {
+    GET_MINMAX(max);
+    return nullptr;
+  }
+
+  virtual void Insert(void* val) override;
+  virtual PrimitiveType type() override;
+  virtual bool AlwaysTrue() const override { return false; }
+  virtual bool AlwaysFalse() const override { return always_false_; }
+  virtual void ToThrift(TMinMaxFilter* thrift) const override;
+  virtual std::string DebugString() const override;
+
+  static void Or(const TMinMaxFilter& in, TMinMaxFilter* out, int precision);
+  static void Copy(const TMinMaxFilter& in, TMinMaxFilter* out);
+
+  void Insert4(void* val);
+  void Insert8(void* val);
+  void Insert16(void* val);
+
+  /// Struct name in LLVM IR.
+  static const char* LLVM_CLASS_NAME;
+
+ private:
+  const int size_;
+  union {
+    Decimal16Value min16_;
+    Decimal8Value min8_;
+    Decimal4Value min4_;
+  };
+
+  union {
+    Decimal16Value max16_;
+    Decimal8Value max8_;
+    Decimal4Value max4_;
+  };
+
+  /// True if no rows have been inserted.
+  bool always_false_;
+};
+#pragma pop_macro("GET_MINMAX")
 }
 
 #endif

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/bin/rat_exclude_files.txt
----------------------------------------------------------------------
diff --git a/bin/rat_exclude_files.txt b/bin/rat_exclude_files.txt
index 6b5acc6..bbc95bf 100644
--- a/bin/rat_exclude_files.txt
+++ b/bin/rat_exclude_files.txt
@@ -112,6 +112,8 @@ testdata/data/chars-formats.txt
 testdata/data/chars-tiny.txt
 testdata/data/decimal-tiny.txt
 testdata/data/decimal_tbl.txt
+testdata/data/decimal_rtf_tiny_tbl.txt
+testdata/data/decimal_rtf_tbl.txt
 testdata/data/overflow.txt
 testdata/data/text-comma-backslash-newline.txt
 testdata/data/text-dollar-hash-pipe.txt

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/common/thrift/Data.thrift
----------------------------------------------------------------------
diff --git a/common/thrift/Data.thrift b/common/thrift/Data.thrift
index 6361e7e..861fd16 100644
--- a/common/thrift/Data.thrift
+++ b/common/thrift/Data.thrift
@@ -29,6 +29,7 @@ struct TColumnValue {
   5: optional string string_val
   8: optional binary binary_val
   9: optional binary timestamp_val
+ 10: optional binary decimal_val
 }
 
 struct TResultRow {

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
----------------------------------------------------------------------
diff --git a/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java b/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
index d2d0269..73fd624 100644
--- a/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
+++ b/fe/src/main/java/org/apache/impala/planner/RuntimeFilterGenerator.java
@@ -702,8 +702,6 @@ public final class RuntimeFilterGenerator {
         continue;
       } else if (scanNode instanceof KuduScanNode) {
         if (filter.getType() != TRuntimeFilterType.MIN_MAX) continue;
-        // TODO: IMPALA-6533: Support Kudu Decimal Min/Max Filters
-        if (targetExpr.getType().isDecimal()) continue;
         SlotRef slotRef = targetExpr.unwrapSlotRef(true);
         // Kudu only supports targeting a single column, not general exprs, so the target
         // must be a SlotRef pointing to a column. We can allow implicit integer casts

http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/data/README
----------------------------------------------------------------------
diff --git a/testdata/data/README b/testdata/data/README
index 78c1b11..156a51f 100644
--- a/testdata/data/README
+++ b/testdata/data/README
@@ -287,3 +287,14 @@ select id,
   end timestamp_col
 from functional.alltypes
 sort by id
+
+decimal_rtf_tbl.txt
+This was generated using formulas in Google Sheets.  The goal was to create various
+decimal values that covers the 3 storage formats with various precision and scale.
+This is a reasonably large table that is used for testing min-max filters
+with decimal types on Kudu.
+
+decimal_rtf_tiny_tbl.txt
+Small table with specific decimal values picked from decimal_rtf_tbl.txt so that
+min-max filter based pruning can be tested with decimal types on Kudu.
+


[08/10] impala git commit: IMPALA-6533: Add min-max filter for decimal types on kudu tables.

Posted by jo...@apache.org.
http://git-wip-us.apache.org/repos/asf/impala/blob/aacd5c35/testdata/data/decimal_rtf_tbl.txt
----------------------------------------------------------------------
diff --git a/testdata/data/decimal_rtf_tbl.txt b/testdata/data/decimal_rtf_tbl.txt
new file mode 100644
index 0000000..566c84a
--- /dev/null
+++ b/testdata/data/decimal_rtf_tbl.txt
@@ -0,0 +1,1404 @@
+1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0,1,1,1,0
+12,12,12,0,12,12,12,0,12,12,12,0,12,12,12,0,12,12,12,0,12,12,12,0
+123,123,0,0,123,123,123,0,123,123,123,0,123,123,123,0,123,123,123,0,123,123,123,0
+1234,1234,0,0,1234,1234,1234,0,1234,1234,1234,0,1234,1234,1234,0,1234,1234,1234,0,1234,1234,1234,0
+12345,0,0,0,12345,12345,0,0,12345,12345,12345,0,12345,12345,12345,0,12345,12345,12345,0,12345,12345,12345,0
+23451,0,0,0,123456,123456,0,0,123456,123456,123456,0,123456,123456,123456,0,123456,123456,123456,0,123456,123456,123456,0
+34512,0,0,0,1234567,1234567,0,0,1234567,1234567,1234567,0,1234567,1234567,1234567,0,1234567,1234567,1234567,0,1234567,1234567,1234567,0
+45123,0,0,0,12345678,12345678,0,0,12345678,12345678,0,0,12345678,12345678,12345678,0,12345678,12345678,12345678,0,12345678,12345678,12345678,0
+51234,0,0,0,123456789,0,0,0,123456789,123456789,0,0,123456789,123456789,123456789,0,123456789,123456789,123456789,0,123456789,123456789,123456789,0
+13524,0,0,0,135792468,0,0,0,1123456789,1123456789,0,0,1123456789,1123456789,0,0,1123456789,1123456789,1123456789,0,1123456789,1123456789,1123456789,0
+35241,0,0,0,357924681,0,0,0,11223456789,11223456789,0,0,11223456789,11223456789,0,0,11223456789,11223456789,11223456789,0,11223456789,11223456789,11223456789,0
+52413,0,0,0,579246813,0,0,0,112233456789,112233456789,0,0,112233456789,112233456789,0,0,112233456789,112233456789,112233456789,0,112233456789,112233456789,112233456789,0
+24135,0,0,0,792468135,0,0,0,1122334456789,1122334456789,0,0,1122334456789,1122334456789,0,0,1122334456789,1122334456789,1122334456789,0,1122334456789,1122334456789,1122334456789,0
+41352,0,0,0,924681357,0,0,0,11223344556789,0,0,0,11223344556789,11223344556789,0,0,11223344556789,11223344556789,11223344556789,0,11223344556789,11223344556789,11223344556789,0
+14253,0,0,0,246813579,0,0,0,12233445567891,0,0,0,112233445566789,112233445566789,0,0,112233445566789,112233445566789,0,0,112233445566789,112233445566789,112233445566789,0
+42531,0,0,0,468135792,0,0,0,22334455678911,0,0,0,1122334455667789,1122334455667789,0,0,1122334455667789,1122334455667789,0,0,1122334455667789,1122334455667789,1122334455667789,0
+25314,0,0,0,681357924,0,0,0,23344556789112,0,0,0,11223344556677889,11223344556677889,0,0,11223344556677889,11223344556677889,0,0,11223344556677889,11223344556677889,11223344556677889,0
+53142,0,0,0,813579246,0,0,0,33445567891122,0,0,0,112233445566778899,0,0,0,112233445566778899,112233445566778899,0,0,112233445566778899,112233445566778899,112233445566778899,0
+31425,0,0,0,147258369,0,0,0,34455678911223,0,0,0,122334455667788991,0,0,0,1112233445566778899,1112233445566778899,0,0,1112233445566778899,1112233445566778899,1112233445566778899,0
+15234,0,0,0,472583691,0,0,0,44556789112233,0,0,0,223344556677889911,0,0,0,11122233445566778899,11122233445566778899,0,0,11122233445566778899,11122233445566778899,0,0
+52341,0,0,0,725836914,0,0,0,45567891122334,0,0,0,233445566778899112,0,0,0,111222333445566778899,111222333445566778899,0,0,111222333445566778899,111222333445566778899,0,0
+23415,0,0,0,258369147,0,0,0,55678911223344,0,0,0,334455667788991122,0,0,0,1112223334445566778899,1112223334445566778899,0,0,1112223334445566778899,1112223334445566778899,0,0
+34152,0,0,0,583691472,0,0,0,56789112233445,0,0,0,344556677889911223,0,0,0,11122233344455566778899,11122233344455566778899,0,0,11122233344455566778899,11122233344455566778899,0,0
+41523,0,0,0,836914725,0,0,0,67891122334455,0,0,0,445566778899112233,0,0,0,111222333444555666778899,111222333444555666778899,0,0,111222333444555666778899,111222333444555666778899,0,0
+12354,0,0,0,369147258,0,0,0,78911223344556,0,0,0,455667788991122334,0,0,0,1112223334445556667778899,1112223334445556667778899,0,0,1112223334445556667778899,1112223334445556667778899,0,0
+23541,0,0,0,691472583,0,0,0,89112233445567,0,0,0,556677889911223344,0,0,0,11122233344455566677788899,11122233344455566677788899,0,0,11122233344455566677788899,11122233344455566677788899,0,0
+35412,0,0,0,914725836,0,0,0,91122334455678,0,0,0,566778899112233445,0,0,0,111222333444555666777888999,111222333444555666777888999,0,0,111222333444555666777888999,111222333444555666777888999,0,0
+54123,0,0,0,159263748,0,0,0,12345681234579,0,0,0,667788991122334455,0,0,0,1111222333444555666777888999,0,0,0,1111222333444555666777888999,1111222333444555666777888999,0,0
+41235,0,0,0,592637481,0,0,0,23456812345791,0,0,0,677889911223344556,0,0,0,1112223334445556667778889991,0,0,0,11112222333444555666777888999,11112222333444555666777888999,0,0
+12435,0,0,0,926374815,0,0,0,34568123457912,0,0,0,778899112233445566,0,0,0,1122233344455566677788899911,0,0,0,111122223333444555666777888999,111122223333444555666777888999,0,0
+24351,0,0,0,263748159,0,0,0,45681234579123,0,0,0,788991122334455667,0,0,0,1222333444555666777888999111,0,0,0,1111222233334444555666777888999,1111222233334444555666777888999,0,0
+43512,0,0,0,637481592,0,0,0,56812345791234,0,0,0,889911223344556677,0,0,0,2223334445556667778889991111,0,0,0,11112222333344445555666777888999,11112222333344445555666777888999,0,0
+35124,0,0,0,374815926,0,0,0,68123457912345,0,0,0,899112233445566778,0,0,0,2233344455566677788899911112,0,0,0,111122223333444455556666777888999,111122223333444455556666777888999,0,0
+51243,0,0,0,748159263,0,0,0,81234579123456,0,0,0,991122334455667788,0,0,0,2333444555666777888999111122,0,0,0,1111222233334444555566667777888999,1111222233334444555566667777888999,0,0
+13245,0,0,0,481592637,0,0,0,12345791234568,0,0,0,911223344556677889,0,0,0,3334445556667778889991111222,0,0,0,11112222333344445555666677778888999,11112222333344445555666677778888999,0,0
+32451,0,0,0,815926374,0,0,0,23457912345681,0,0,0,123456789123456789,0,0,0,3344455566677788899911112223,0,0,0,111122223333444455556666777788889999,111122223333444455556666777788889999,0,0
+24513,0,0,0,162738495,0,0,0,34579123456812,0,0,0,234567891234567891,0,0,0,3444555666777888999111122233,0,0,0,1111122223333444455556666777788889999,1111122223333444455556666777788889999,0,0
+45132,0,0,0,627384951,0,0,0,45791234568123,0,0,0,345678912345678912,0,0,0,4445556667778889991111222333,0,0,0,11111222223333444455556666777788889999,0,0,0
+2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2,2,0.2,0.2,0.2
+23,2.3,2.3,0,23,2.3,2.3,0,23,2.3,2.3,0,23,2.3,2.3,0,23,2.3,2.3,0,23,2.3,2.3,0
+234,23.4,23.4,0,234,23.4,23.4,0,234,23.4,23.4,0,234,23.4,23.4,0,234,23.4,23.4,0,234,23.4,23.4,0
+2345,234.5,0,0,2345,234.5,234.5,0,2345,234.5,234.5,0,2345,234.5,234.5,0,2345,234.5,234.5,0,2345,234.5,234.5,0
+23456,2345.6,0,0,23456,2345.6,2345.6,0,23456,2345.6,2345.6,0,23456,2345.6,2345.6,0,23456,2345.6,2345.6,0,23456,2345.6,2345.6,0
+34562,3456.2,0,0,234567,23456.7,0,0,234567,23456.7,23456.7,0,234567,23456.7,23456.7,0,234567,23456.7,23456.7,0,234567,23456.7,23456.7,0
+45623,4562.3,0,0,2345678,234567.8,0,0,2345678,234567.8,234567.8,0,2345678,234567.8,234567.8,0,2345678,234567.8,234567.8,0,2345678,234567.8,234567.8,0
+56234,5623.4,0,0,23456789,2345678.9,0,0,23456789,2345678.9,2345678.9,0,23456789,2345678.9,2345678.9,0,23456789,2345678.9,2345678.9,0,23456789,2345678.9,2345678.9,0
+62345,6234.5,0,0,234567891,23456789.1,0,0,234567891,23456789.1,0,0,234567891,23456789.1,23456789.1,0,234567891,23456789.1,23456789.1,0,234567891,23456789.1,23456789.1,0
+24635,2463.5,0,0,246813579,24681357.9,0,0,2234567891,223456789.1,0,0,2234567891,223456789.1,223456789.1,0,2234567891,223456789.1,223456789.1,0,2234567891,223456789.1,223456789.1,0
+46352,4635.2,0,0,468135792,46813579.2,0,0,22334567891,2233456789.1,0,0,22334567891,2233456789.1,0,0,22334567891,2233456789.1,2233456789.1,0,22334567891,2233456789.1,2233456789.1,0
+63524,6352.4,0,0,681357924,68135792.4,0,0,223344567891,22334456789.1,0,0,223344567891,22334456789.1,0,0,223344567891,22334456789.1,22334456789.1,0,223344567891,22334456789.1,22334456789.1,0
+24635,2463.5,0,0,813579246,81357924.6,0,0,2233445567891,223344556789.1,0,0,2233445567891,223344556789.1,0,0,2233445567891,223344556789.1,223344556789.1,0,2233445567891,223344556789.1,223344556789.1,0
+46352,4635.2,0,0,135792468,13579246.8,0,0,22334455667891,2233445566789.1,0,0,22334455667891,2233445566789.1,0,0,22334455667891,2233445566789.1,2233445566789.1,0,22334455667891,2233445566789.1,2233445566789.1,0
+25364,2536.4,0,0,357924681,35792468.1,0,0,23344556678912,2334455667891.2,0,0,223344556677891,22334455667789.1,0,0,223344556677891,22334455667789.1,22334455667789.1,0,223344556677891,22334455667789.1,22334455667789.1,0
+53642,5364.2,0,0,579246813,57924681.3,0,0,33445566789122,3344556678912.2,0,0,2233445566778891,223344556677889.1,0,0,2233445566778891,223344556677889.1,0,0,2233445566778891,223344556677889.1,223344556677889.1,0
+36425,3642.5,0,0,792468135,79246813.5,0,0,34455667891223,3445566789122.3,0,0,22334455667788991,2233445566778899.1,0,0,22334455667788991,2233445566778899.1,0,0,22334455667788991,2233445566778899.1,2233445566778899.1,0
+64253,6425.3,0,0,924681357,92468135.7,0,0,44556678912233,4455667891223.3,0,0,223344556677889911,22334455667788991.1,0,0,223344556677889911,22334455667788991.1,0,0,223344556677889911,22334455667788991.1,22334455667788991.1,0
+42536,4253.6,0,0,258369471,25836947.1,0,0,45566789122334,4556678912233.4,0,0,233445566778899112,23344556677889911.2,0,0,2223344556677889911,222334455667788991.1,0,0,2223344556677889911,222334455667788991.1,222334455667788991.1,0
+26345,2634.5,0,0,583694712,58369471.2,0,0,55667891223344,5566789122334.4,0,0,334455667788991122,33445566778899112.2,0,0,22233344556677889911,2223334455667788991.1,0,0,22233344556677889911,2223334455667788991.1,2223334455667788991.1,0
+63452,6345.2,0,0,836947125,83694712.5,0,0,56678912233445,5667891223344.5,0,0,344556677889911223,34455667788991122.3,0,0,222333444556677889911,22233344455667788991.1,0,0,222333444556677889911,22233344455667788991.1,0,0
+34526,3452.6,0,0,369471258,36947125.8,0,0,66789122334455,6678912233445.5,0,0,445566778899112233,44556677889911223.3,0,0,2223334445556677889911,222333444555667788991.1,0,0,2223334445556677889911,222333444555667788991.1,0,0
+45263,4526.3,0,0,694712583,69471258.3,0,0,67891223344556,6789122334455.6,0,0,455667788991122334,45566778899112233.4,0,0,22233344455566677889911,2223334445556667788991.1,0,0,22233344455566677889911,2223334445556667788991.1,0,0
+52634,5263.4,0,0,947125836,94712583.6,0,0,78912233445566,7891223344556.6,0,0,556677889911223344,55667788991122334.4,0,0,222333444555666777889911,22233344455566677788991.1,0,0,222333444555666777889911,22233344455566677788991.1,0,0
+23465,2346.5,0,0,471258369,47125836.9,0,0,89122334455667,8912233445566.7,0,0,566778899112233445,56677889911223344.5,0,0,2223334445556667778889911,222333444555666777888991.1,0,0,2223334445556667778889911,222333444555666777888991.1,0,0
+34652,3465.2,0,0,712583694,71258369.4,0,0,91223344556678,9122334455667.8,0,0,667788991122334455,66778899112233445.5,0,0,22233344455566677788899911,2223334445556667778889991.1,0,0,22233344455566677788899911,2223334445556667778889991.1,0,0
+46523,4652.3,0,0,125836947,12583694.7,0,0,12233445566789,1223344556678.9,0,0,677889911223344556,67788991122334455.6,0,0,222333444555666777888999111,22233344455566677788899911.1,0,0,222333444555666777888999111,22233344455566677788899911.1,0,0
+65234,6523.4,0,0,261273849,26127384.9,0,0,23456792345681,2345679234568.1,0,0,778899112233445566,77889911223344556.6,0,0,2222333444555666777888999111,222233344455566677788899911.1,0,0,2222333444555666777888999111,222233344455566677788899911.1,0,0
+52346,5234.6,0,0,612738492,61273849.2,0,0,34567923456812,3456792345681.2,0,0,788991122334455667,78899112233445566.7,0,0,2223334445556667778889991112,222333444555666777888999111.2,0,0,22223333444555666777888999111,2222333344455566677788899911.1,0,0
+23546,2354.6,0,0,127384926,12738492.6,0,0,45679234568123,4567923456812.3,0,0,889911223344556677,88991122334455667.7,0,0,2233344455566677788899911122,223334445556667778889991112.2,0,0,222233334444555666777888999111,22223333444455566677788899911.1,0,0
+35462,3546.2,0,0,273849261,27384926.1,0,0,56792345681234,5679234568123.4,0,0,899112233445566778,89911223344556677.8,0,0,2333444555666777888999111222,233344455566677788899911122.2,0,0,2222333344445555666777888999111,222233334444555566677788899911.1,0,0
+54623,5462.3,0,0,738492612,73849261.2,0,0,67923456812345,6792345681234.5,0,0,991122334455667788,99112233445566778.8,0,0,3334445556667778889991112222,333444555666777888999111222.2,0,0,22223333444455556666777888999111,2222333344445555666677788899911.1,0,0
+46235,4623.5,0,0,384926127,38492612.7,0,0,79234568123456,7923456812345.6,0,0,911223344556677889,91122334455667788.9,0,0,3344455566677788899911122223,334445556667778889991112222.3,0,0,222233334444555566667777888999111,22223333444455556666777788899911.1,0,0
+62354,6235.4,0,0,849261273,84926127.3,0,0,92345681234567,9234568123456.7,0,0,112233445566778899,11223344556677889.9,0,0,3444555666777888999111222233,344455566677788899911122223.3,0,0,2222333344445555666677778888999111,222233334444555566667777888899911.1,0,0
+24356,2435.6,0,0,492612738,49261273.8,0,0,23456812345679,2345681234567.9,0,0,122334455667788991,12233445566778899.1,0,0,4445556667778889991112222333,444555666777888999111222233.3,0,0,22223333444455556666777788889999111,2222333344445555666677778888999911.1,0,0
+43562,4356.2,0,0,926127384,92612738.4,0,0,34568123456792,3456812345679.2,0,0,234567891234567891,23456789123456789.1,0,0,4455566677788899911122223334,445556667778889991112222333.4,0,0,222233334444555566667777888899991111,22223333444455556666777788889999111.1,0,0
+35624,3562.4,0,0,273849516,27384951.6,0,0,45681234567923,4568123456792.3,0,0,345678912345678912,34567891234567891.2,0,0,4555666777888999111222233344,455566677788899911122223334.4,0,0,2222233334444555566667777888899991111,222223333444455556666777788889999111.1,0,0
+56243,5624.3,0,0,738495162,73849516.2,0,0,56812345679234,5681234567923.4,0,0,456789123456789123,45678912345678912.3,0,0,5556667778889991112222333444,555666777888999111222233344.4,0,0,22222333334444555566667777888899991111,2222233333444455556666777788889999111.1,0,0
+3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03,3,0.3,0.03,0.03
+34,3.4,0.34,0.34,34,3.4,0.34,0.34,34,3.4,0.34,0.34,34,3.4,0.34,0.34,34,3.4,0.34,0.34,34,3.4,0.34,0.34
+345,34.5,3.45,0,345,34.5,3.45,0,345,34.5,3.45,0,345,34.5,3.45,0,345,34.5,3.45,0,345,34.5,3.45,0
+3456,345.6,34.56,0,3456,345.6,34.56,0,3456,345.6,34.56,0,3456,345.6,34.56,0,3456,345.6,34.56,0,3456,345.6,34.56,0
+34567,3456.7,0,0,34567,3456.7,345.67,0,34567,3456.7,345.67,0,34567,3456.7,345.67,0,34567,3456.7,345.67,0,34567,3456.7,345.67,0
+45673,4567.3,0,0,345678,34567.8,3456.78,0,345678,34567.8,3456.78,0,345678,34567.8,3456.78,0,345678,34567.8,3456.78,0,345678,34567.8,3456.78,0
+56734,5673.4,0,0,3456789,345678.9,0,0,3456789,345678.9,34567.89,0,3456789,345678.9,34567.89,0,3456789,345678.9,34567.89,0,3456789,345678.9,34567.89,0
+67345,6734.5,0,0,34567891,3456789.1,0,0,34567891,3456789.1,345678.91,0,34567891,3456789.1,345678.91,0,34567891,3456789.1,345678.91,0,34567891,3456789.1,345678.91,0
+73456,7345.6,0,0,345678912,34567891.2,0,0,345678912,34567891.2,3456789.12,0,345678912,34567891.2,3456789.12,0,345678912,34567891.2,3456789.12,0,345678912,34567891.2,3456789.12,0
+35746,3574.6,0,0,357924681,35792468.1,0,0,3345678912,334567891.2,0,0,3345678912,334567891.2,33456789.12,0,3345678912,334567891.2,33456789.12,0,3345678912,334567891.2,33456789.12,0
+57463,5746.3,0,0,579246813,57924681.3,0,0,33445678912,3344567891.2,0,0,33445678912,3344567891.2,334456789.12,0,33445678912,3344567891.2,334456789.12,0,33445678912,3344567891.2,334456789.12,0
+74635,7463.5,0,0,792468135,79246813.5,0,0,334455678912,33445567891.2,0,0,334455678912,33445567891.2,0,0,334455678912,33445567891.2,3344556789.12,0,334455678912,33445567891.2,3344556789.12,0
+46357,4635.7,0,0,924681357,92468135.7,0,0,3344556678912,334455667891.2,0,0,3344556678912,334455667891.2,0,0,3344556678912,334455667891.2,33445566789.12,0,3344556678912,334455667891.2,33445566789.12,0
+63574,6357.4,0,0,246813579,24681357.9,0,0,33445566778912,3344556677891.2,0,0,33445566778912,3344556677891.2,0,0,33445566778912,3344556677891.2,334455667789.12,0,33445566778912,3344556677891.2,334455667789.12,0
+35475,3547.5,0,0,468135792,46813579.2,0,0,34455667789123,3445566778912.3,0,0,334455667788912,33445566778891.2,0,0,334455667788912,33445566778891.2,3344556677889.12,0,334455667788912,33445566778891.2,3344556677889.12,0
+54753,5475.3,0,0,681357924,68135792.4,0,0,44556677891233,4455667789123.3,0,0,3344556677889912,334455667788991.2,0,0,3344556677889912,334455667788991.2,33445566778899.12,0,3344556677889912,334455667788991.2,33445566778899.12,0
+47535,4753.5,0,0,813579246,81357924.6,0,0,45566778912334,4556677891233.4,0,0,33445566778899112,3344556677889911.2,0,0,33445566778899112,3344556677889911.2,0,0,33445566778899112,3344556677889911.2,334455667788991.12,0
+75354,7535.4,0,0,135792468,13579246.8,0,0,55667789123344,5566778912334.4,0,0,334455667788991122,33445566778899112.2,0,0,334455667788991122,33445566778899112.2,0,0,334455667788991122,33445566778899112.2,3344556677889911.22,0
+53547,5354.7,0,0,369471582,36947158.2,0,0,56677891233445,5667789123344.5,0,0,344556677889911223,34455667788991122.3,0,0,3334455667788991122,333445566778899112.2,0,0,3334455667788991122,333445566778899112.2,33344556677889911.22,0
+37456,3745.6,0,0,694715823,69471582.3,0,0,66778912334455,6677891233445.5,0,0,445566778899112233,44556677889911223.3,0,0,33344455667788991122,3334445566778899112.2,0,0,33344455667788991122,3334445566778899112.2,333444556677889911.22,0
+74563,7456.3,0,0,947158236,94715823.6,0,0,67789123344556,6778912334455.6,0,0,455667788991122334,45566778899112233.4,0,0,333444555667788991122,33344455566778899112.2,0,0,333444555667788991122,33344455566778899112.2,3334445556677889911.22,0
+45637,4563.7,0,0,471582369,47158236.9,0,0,77891233445566,7789123344556.6,0,0,556677889911223344,55667788991122334.4,0,0,3334445556667788991122,333444555666778899112.2,0,0,3334445556667788991122,333444555666778899112.2,0,0
+56374,5637.4,0,0,715823694,71582369.4,0,0,78912334455667,7891233445566.7,0,0,566778899112233445,56677889911223344.5,0,0,33344455566677788991122,3334445556667778899112.2,0,0,33344455566677788991122,3334445556667778899112.2,0,0
+63745,6374.5,0,0,158236947,15823694.7,0,0,89123344556677,8912334455667.7,0,0,667788991122334455,66778899112233445.5,0,0,333444555666777888991122,33344455566677788899112.2,0,0,333444555666777888991122,33344455566677788899112.2,0,0
+34576,3457.6,0,0,582369471,58236947.1,0,0,91233445566778,9123344556677.8,0,0,677889911223344556,67788991122334455.6,0,0,3334445556667778889991122,333444555666777888999112.2,0,0,3334445556667778889991122,333444555666777888999112.2,0,0
+45763,4576.3,0,0,823694715,82369471.5,0,0,12334455667789,1233445566778.9,0,0,778899112233445566,77889911223344556.6,0,0,33344455566677788899911122,3334445556667778889991112.2,0,0,33344455566677788899911122,3334445556667778889991112.2,0,0
+57634,5763.4,0,0,236947158,23694715.8,0,0,23344556677891,2334455667789.1,0,0,788991122334455667,78899112233445566.7,0,0,333444555666777888999111222,33344455566677788899911122.2,0,0,333444555666777888999111222,33344455566677788899911122.2,0,0
+76345,7634.5,0,0,372485961,37248596.1,0,0,34567813456792,3456781345679.2,0,0,889911223344556677,88991122334455667.7,0,0,3333444555666777888999111222,333344455566677788899911122.2,0,0,3333444555666777888999111222,333344455566677788899911122.2,0,0
+63457,6345.7,0,0,724859613,72485961.3,0,0,45678134567923,4567813456792.3,0,0,899112233445566778,89911223344556677.8,0,0,3334445556667778889991112223,333444555666777888999111222.3,0,0,33334444555666777888999111222,3333444455566677788899911122.2,0,0
+34657,3465.7,0,0,248596137,24859613.7,0,0,56781345679234,5678134567923.4,0,0,991122334455667788,99112233445566778.8,0,0,3344455566677788899911122233,334445556667778889991112223.3,0,0,333344445555666777888999111222,33334444555566677788899911122.2,0,0
+46573,4657.3,0,0,485961372,48596137.2,0,0,67813456792345,6781345679234.5,0,0,911223344556677889,91122334455667788.9,0,0,3444555666777888999111222333,344455566677788899911122233.3,0,0,3333444455556666777888999111222,333344445555666677788899911122.2,0,0
+65734,6573.4,0,0,859613724,85961372.4,0,0,78134567923456,7813456792345.6,0,0,112233445566778899,11223344556677889.9,0,0,4445556667778889991112223333,444555666777888999111222333.3,0,0,33334444555566667777888999111222,3333444455556666777788899911122.2,0,0
+57346,5734.6,0,0,596137248,59613724.8,0,0,81345679234567,8134567923456.7,0,0,122334455667788991,12233445566778899.1,0,0,4455566677788899911122233334,445556667778889991112223333.4,0,0,333344445555666677778888999111222,33334444555566667777888899911122.2,0,0
+73465,7346.5,0,0,961372485,96137248.5,0,0,13456792345678,1345679234567.8,0,0,223344556677889911,22334455667788991.1,0,0,4555666777888999111222333344,455566677788899911122233334.4,0,0,3333444455556666777788889999111222,333344445555666677778888999911122.2,0,0
+35467,3546.7,0,0,613724859,61372485.9,0,0,34567923456781,3456792345678.1,0,0,233445566778899112,23344556677889911.2,0,0,5556667778889991112223333444,555666777888999111222333344.4,0,0,33334444555566667777888899991111222,3333444455556666777788889999111122.2,0,0
+54673,5467.3,0,0,137248596,13724859.6,0,0,45679234567813,4567923456781.3,0,0,345678912345678912,34567891234567891.2,0,0,5566677788899911122233334445,556667778889991112223333444.5,0,0,333344445555666677778888999911112221,33334444555566667777888899991111222.1,0,0
+46735,4673.5,0,0,384951627,38495162.7,0,0,56792345678134,5679234567813.4,0,0,456789123456789123,45678912345678912.3,0,0,5666777888999111222333344455,566677788899911122233334445.5,0,0,3333344445555666677778888999911112221,333334444555566667777888899991111222.1,0,0
+67354,6735.4,0,0,849516273,84951627.3,0,0,67923456781345,6792345678134.5,0,0,567891234567891234,56789123456789123.4,0,0,6667778889991112223333444555,666777888999111222333344455.5,0,0,33333444445555666677778888999911112221,3333344444555566667777888899991111222.1,0,0
+4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004,4,0.4,0.004,0.004
+45,4.5,0.045,0.045,45,4.5,0.045,0.045,45,4.5,0.045,0.045,45,4.5,0.045,0.045,45,4.5,0.045,0.045,45,4.5,0.045,0.045
+456,45.6,0.456,0.456,456,45.6,0.456,0.456,456,45.6,0.456,0.456,456,45.6,0.456,0.456,456,45.6,0.456,0.456,456,45.6,0.456,0.456
+4567,456.7,4.567,0,4567,456.7,4.567,0,4567,456.7,4.567,0,4567,456.7,4.567,0,4567,456.7,4.567,0,4567,456.7,4.567,0
+45678,4567.8,45.678,0,45678,4567.8,45.678,0,45678,4567.8,45.678,0,45678,4567.8,45.678,0,45678,4567.8,45.678,0,45678,4567.8,45.678,0
+56784,5678.4,56.784,0,456789,45678.9,456.789,0,456789,45678.9,456.789,0,456789,45678.9,456.789,0,456789,45678.9,456.789,0,456789,45678.9,456.789,0
+67845,6784.5,67.845,0,4567891,456789.1,4567.891,0,4567891,456789.1,4567.891,0,4567891,456789.1,4567.891,0,4567891,456789.1,4567.891,0,4567891,456789.1,4567.891,0
+78456,7845.6,78.456,0,45678912,4567891.2,0,0,45678912,4567891.2,45678.912,0,45678912,4567891.2,45678.912,0,45678912,4567891.2,45678.912,0,45678912,4567891.2,45678.912,0
+84567,8456.7,84.567,0,456789123,45678912.3,0,0,456789123,45678912.3,456789.123,0,456789123,45678912.3,456789.123,0,456789123,45678912.3,456789.123,0,456789123,45678912.3,456789.123,0
+46857,4685.7,46.857,0,468135792,46813579.2,0,0,4456789123,445678912.3,4456789.123,0,4456789123,445678912.3,4456789.123,0,4456789123,445678912.3,4456789.123,0,4456789123,445678912.3,4456789.123,0
+68574,6857.4,68.574,0,681357924,68135792.4,0,0,44556789123,4455678912.3,0,0,44556789123,4455678912.3,44556789.123,0,44556789123,4455678912.3,44556789.123,0,44556789123,4455678912.3,44556789.123,0
+85746,8574.6,85.746,0,813579246,81357924.6,0,0,445566789123,44556678912.3,0,0,445566789123,44556678912.3,445566789.123,0,445566789123,44556678912.3,445566789.123,0,445566789123,44556678912.3,445566789.123,0
+57468,5746.8,57.468,0,135792468,13579246.8,0,0,4455667789123,445566778912.3,0,0,4455667789123,445566778912.3,0,0,4455667789123,445566778912.3,4455667789.123,0,4455667789123,445566778912.3,4455667789.123,0
+74685,7468.5,74.685,0,357924681,35792468.1,0,0,44556677889123,4455667788912.3,0,0,44556677889123,4455667788912.3,0,0,44556677889123,4455667788912.3,44556677889.123,0,44556677889123,4455667788912.3,44556677889.123,0
+47586,4758.6,47.586,0,579246813,57924681.3,0,0,45566778891234,4556677889123.4,0,0,445566778899123,44556677889912.3,0,0,445566778899123,44556677889912.3,445566778899.123,0,445566778899123,44556677889912.3,445566778899.123,0
+75864,7586.4,75.864,0,792468135,79246813.5,0,0,55667788912344,5566778891234.4,0,0,4455667788991123,445566778899112.3,0,0,4455667788991123,445566778899112.3,4455667788991.123,0,4455667788991123,445566778899112.3,4455667788991.123,0
+58647,5864.7,58.647,0,924681357,92468135.7,0,0,56677889123445,5667788912344.5,0,0,44556677889911223,4455667788991122.3,0,0,44556677889911223,4455667788991122.3,44556677889911.223,0,44556677889911223,4455667788991122.3,44556677889911.223,0
+86475,8647.5,86.475,0,246813579,24681357.9,0,0,66778891234455,6677889123445.5,0,0,445566778899112233,44556677889911223.3,0,0,445566778899112233,44556677889911223.3,0,0,445566778899112233,44556677889911223.3,445566778899112.233,0
+64758,6475.8,64.758,0,471582693,47158269.3,0,0,67788912344556,6778891234455.6,0,0,455667788991122334,45566778899112233.4,0,0,4445566778899112233,444556677889911223.3,0,0,4445566778899112233,444556677889911223.3,4445566778899112.233,0
+47586,4758.6,47.586,0,715826934,71582693.4,0,0,77889123445566,7788912344556.6,0,0,556677889911223344,55667788991122334.4,0,0,44455566778899112233,4445556677889911223.3,0,0,44455566778899112233,4445556677889911223.3,44455566778899112.233,0
+75864,7586.4,75.864,0,158269347,15826934.7,0,0,78891234455667,7889123445566.7,0,0,566778899112233445,56677889911223344.5,0,0,444555666778899112233,44455566677889911223.3,0,0,444555666778899112233,44455566677889911223.3,444555666778899112.233,0
+58647,5864.7,58.647,0,582693471,58269347.1,0,0,88912344556677,8891234455667.7,0,0,667788991122334455,66778899112233445.5,0,0,4445556667778899112233,444555666777889911223.3,0,0,4445556667778899112233,444555666777889911223.3,4445556667778899112.233,0
+86475,8647.5,86.475,0,826934715,82693471.5,0,0,89123445566778,8912344556677.8,0,0,677889911223344556,67788991122334455.6,0,0,44455566677788899112233,4445556667778889911223.3,0,0,44455566677788899112233,4445556667778889911223.3,0,0
+64758,6475.8,64.758,0,269347158,26934715.8,0,0,91234455667788,9123445566778.8,0,0,778899112233445566,77889911223344556.6,0,0,444555666777888999112233,44455566677788899911223.3,0,0,444555666777888999112233,44455566677788899911223.3,0,0
+45687,4568.7,45.687,0,693471582,69347158.2,0,0,12344556677889,1234455667788.9,0,0,788991122334455667,78899112233445566.7,0,0,4445556667778889991112233,444555666777888999111223.3,0,0,4445556667778889991112233,444555666777888999111223.3,0,0
+56874,5687.4,56.874,0,934715826,93471582.6,0,0,23445566778891,2344556677889.1,0,0,889911223344556677,88991122334455667.7,0,0,44455566677788899911122233,4445556667778889991112223.3,0,0,44455566677788899911122233,4445556667778889991112223.3,0,0
+68745,6874.5,68.745,0,347158269,34715826.9,0,0,34455667788912,3445566778891.2,0,0,899112233445566778,89911223344556677.8,0,0,444555666777888999111222333,44455566677788899911122233.3,0,0,444555666777888999111222333,44455566677788899911122233.3,0,0
+87456,8745.6,87.456,0,483596172,48359617.2,0,0,45678924567813,4567892456781.3,0,0,991122334455667788,99112233445566778.8,0,0,4444555666777888999111222333,444455566677788899911122233.3,0,0,4444555666777888999111222333,444455566677788899911122233.3,0,0
+74568,7456.8,74.568,0,835961724,83596172.4,0,0,56789245678134,5678924567813.4,0,0,911223344556677889,91122334455667788.9,0,0,4445556667778889991112223334,444555666777888999111222333.4,0,0,44445555666777888999111222333,4444555566677788899911122233.3,0,0
+45768,4576.8,45.768,0,359617248,35961724.8,0,0,67892456781345,6789245678134.5,0,0,112233445566778899,11223344556677889.9,0,0,4455566677788899911122233344,445556667778889991112223334.4,0,0,444455556666777888999111222333,44445555666677788899911122233.3,0,0
+57684,5768.4,57.684,0,596172483,59617248.3,0,0,78924567813456,7892456781345.6,0,0,122334455667788991,12233445566778899.1,0,0,4555666777888999111222333444,455566677788899911122233344.4,0,0,4444555566667777888999111222333,444455556666777788899911122233.3,0,0
+76845,7684.5,76.845,0,961724835,96172483.5,0,0,89245678134567,8924567813456.7,0,0,223344556677889911,22334455667788991.1,0,0,5556667778889991112223334444,555666777888999111222333444.4,0,0,44445555666677778888999111222333,4444555566667777888899911122233.3,0,0
+68457,6845.7,68.457,0,617248359,61724835.9,0,0,92456781345678,9245678134567.8,0,0,233445566778899112,23344556677889911.2,0,0,5566677788899911122233344445,556667778889991112223334444.5,0,0,444455556666777788889999111222333,44445555666677778888999911122233.3,0,0
+84576,8457.6,84.576,0,172483596,17248359.6,0,0,24567813456789,2456781345678.9,0,0,334455667788991122,33445566778899112.2,0,0,5666777888999111222333444455,566677788899911122233344445.5,0,0,4444555566667777888899991111222333,444455556666777788889999111122233.3,0,0
+46578,4657.8,46.578,0,724835961,72483596.1,0,0,45678134567892,4567813456789.2,0,0,344556677889911223,34455667788991122.3,0,0,6667778889991112223334444555,666777888999111222333444455.5,0,0,44445555666677778888999911112222333,4444555566667777888899991111222233.3,0,0
+65784,6578.4,65.784,0,248359617,24835961.7,0,0,56781345678924,5678134567892.4,0,0,456789123456789123,45678912345678912.3,0,0,6677788899911122233344445556,667778889991112223334444555.6,0,0,444455556666777788889999111122223331,44445555666677778888999911112222333.1,0,0
+57846,5784.6,57.846,0,495162738,49516273.8,0,0,67813456789245,6781345678924.5,0,0,567891234567891234,56789123456789123.4,0,0,6777888999111222333444455566,677788899911122233344445556.6,0,0,4444455556666777788889999111122223331,444445555666677778888999911112222333.1,0,0
+78465,7846.5,78.465,0,951627384,95162738.4,0,0,78134567892456,7813456789245.6,0,0,678912345678912345,67891234567891234.5,0,0,7778889991112223334444555666,777888999111222333444455566.6,0,0,44444555556666777788889999111122223331,4444455555666677778888999911112222333.1,0,0
+5,0.5,0.005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005,5,0.5,0.0005,0.0005
+56,5.6,0.056,0.0056,56,5.6,0.0056,0.0056,56,5.6,0.0056,0.0056,56,5.6,0.0056,0.0056,56,5.6,0.0056,0.0056,56,5.6,0.0056,0.0056
+567,56.7,0.567,0.0567,567,56.7,0.0567,0.0567,567,56.7,0.0567,0.0567,567,56.7,0.0567,0.0567,567,56.7,0.0567,0.0567,567,56.7,0.0567,0.0567
+5678,567.8,5.678,0.5678,5678,567.8,0.5678,0.5678,5678,567.8,0.5678,0.5678,5678,567.8,0.5678,0.5678,5678,567.8,0.5678,0.5678,5678,567.8,0.5678,0.5678
+56789,5678.9,56.789,0,56789,5678.9,5.6789,0,56789,5678.9,5.6789,0,56789,5678.9,5.6789,0,56789,5678.9,5.6789,0,56789,5678.9,5.6789,0
+67895,6789.5,67.895,0,567891,56789.1,56.7891,0,567891,56789.1,56.7891,0,567891,56789.1,56.7891,0,567891,56789.1,56.7891,0,567891,56789.1,56.7891,0
+78956,7895.6,78.956,0,5678912,567891.2,567.8912,0,5678912,567891.2,567.8912,0,5678912,567891.2,567.8912,0,5678912,567891.2,567.8912,0,5678912,567891.2,567.8912,0
+89567,8956.7,89.567,0,56789123,5678912.3,5678.9123,0,56789123,5678912.3,5678.9123,0,56789123,5678912.3,5678.9123,0,56789123,5678912.3,5678.9123,0,56789123,5678912.3,5678.9123,0
+95678,9567.8,95.678,0,567891234,56789123.4,0,0,567891234,56789123.4,56789.1234,0,567891234,56789123.4,56789.1234,0,567891234,56789123.4,56789.1234,0,567891234,56789123.4,56789.1234,0
+57968,5796.8,57.968,0,579246813,57924681.3,0,0,5567891234,556789123.4,556789.1234,0,5567891234,556789123.4,556789.1234,0,5567891234,556789123.4,556789.1234,0,5567891234,556789123.4,556789.1234,0
+79685,7968.5,79.685,0,792468135,79246813.5,0,0,55667891234,5566789123.4,5566789.1234,0,55667891234,5566789123.4,5566789.1234,0,55667891234,5566789123.4,5566789.1234,0,55667891234,5566789123.4,5566789.1234,0
+96857,9685.7,96.857,0,924681357,92468135.7,0,0,556677891234,55667789123.4,0,0,556677891234,55667789123.4,55667789.1234,0,556677891234,55667789123.4,55667789.1234,0,556677891234,55667789123.4,55667789.1234,0
+68579,6857.9,68.579,0,246813579,24681357.9,0,0,5566778891234,556677889123.4,0,0,5566778891234,556677889123.4,556677889.1234,0,5566778891234,556677889123.4,556677889.1234,0,5566778891234,556677889123.4,556677889.1234,0
+85796,8579.6,85.796,0,468135792,46813579.2,0,0,55667788991234,5566778899123.4,0,0,55667788991234,5566778899123.4,0,0,55667788991234,5566778899123.4,5566778899.1234,0,55667788991234,5566778899123.4,5566778899.1234,0
+58697,5869.7,58.697,0,681357924,68135792.4,0,0,56677889912345,5667788991234.5,0,0,556677889911234,55667788991123.4,0,0,556677889911234,55667788991123.4,55667788991.1234,0,556677889911234,55667788991123.4,55667788991.1234,0
+86975,8697.5,86.975,0,813579246,81357924.6,0,0,66778899123455,6677889912345.5,0,0,5566778899112234,556677889911223.4,0,0,5566778899112234,556677889911223.4,556677889911.2234,0,5566778899112234,556677889911223.4,556677889911.2234,0
+69758,6975.8,69.758,0,135792468,13579246.8,0,0,67788991234556,6778899123455.6,0,0,55667788991122334,5566778899112233.4,0,0,55667788991122334,5566778899112233.4,5566778899112.2334,0,55667788991122334,5566778899112233.4,5566778899112.2334,0
+97586,9758.6,97.586,0,357924681,35792468.1,0,0,77889912345566,7788991234556.6,0,0,556677889911223344,55667788991122334.4,0,0,556677889911223344,55667788991122334.4,55667788991122.3344,0,556677889911223344,55667788991122334.4,55667788991122.3344,0
+75869,7586.9,75.869,0,582693714,58269371.4,0,0,78899123455667,7889912345566.7,0,0,566778899112233445,56677889911223344.5,0,0,5556677889911223344,555667788991122334.4,0,0,5556677889911223344,555667788991122334.4,555667788991122.3344,0
+59678,5967.8,59.678,0,826937145,82693714.5,0,0,88991234556677,8899123455667.7,0,0,667788991122334455,66778899112233445.5,0,0,55566677889911223344,5556667788991122334.4,0,0,55566677889911223344,5556667788991122334.4,5556667788991122.3344,0
+96785,9678.5,96.785,0,269371458,26937145.8,0,0,89912345566778,8991234556677.8,0,0,677889911223344556,67788991122334455.6,0,0,555666777889911223344,55566677788991122334.4,0,0,555666777889911223344,55566677788991122334.4,55566677788991122.3344,0
+67859,6785.9,67.859,0,693714582,69371458.2,0,0,99123455667788,9912345566778.8,0,0,778899112233445566,77889911223344556.6,0,0,5556667778889911223344,555666777888991122334.4,0,0,5556667778889911223344,555666777888991122334.4,555666777888991122.3344,0
+78596,7859.6,78.596,0,937145826,93714582.6,0,0,91234556677889,9123455667788.9,0,0,788991122334455667,78899112233445566.7,0,0,55566677788899911223344,5556667778889991122334.4,0,0,55566677788899911223344,5556667778889991122334.4,5556667778889991122.3344,0
+85967,8596.7,85.967,0,371458269,37145826.9,0,0,12345566778899,1234556677889.9,0,0,889911223344556677,88991122334455667.7,0,0,555666777888999111223344,55566677788899911122334.4,0,0,555666777888999111223344,55566677788899911122334.4,0,0
+56798,5679.8,56.798,0,714582693,71458269.3,0,0,23455667788991,2345566778899.1,0,0,899112233445566778,89911223344556677.8,0,0,5556667778889991112223344,555666777888999111222334.4,0,0,5556667778889991112223344,555666777888999111222334.4,0,0
+67985,6798.5,67.985,0,145826937,14582693.7,0,0,34556677889912,3455667788991.2,0,0,991122334455667788,99112233445566778.8,0,0,55566677788899911122233344,5556667778889991112223334.4,0,0,55566677788899911122233344,5556667778889991112223334.4,0,0
+79856,7985.6,79.856,0,458269371,45826937.1,0,0,45566778899123,4556677889912.3,0,0,911223344556677889,91122334455667788.9,0,0,555666777888999111222333444,55566677788899911122233344.4,0,0,555666777888999111222333444,55566677788899911122233344.4,0,0
+98567,9856.7,98.567,0,594617283,59461728.3,0,0,56789135678924,5678913567892.4,0,0,112233445566778899,11223344556677889.9,0,0,5555666777888999111222333444,555566677788899911122233344.4,0,0,5555666777888999111222333444,555566677788899911122233344.4,0,0
+85679,8567.9,85.679,0,946172835,94617283.5,0,0,67891356789245,6789135678924.5,0,0,122334455667788991,12233445566778899.1,0,0,5556667778889991112223334445,555666777888999111222333444.5,0,0,55556666777888999111222333444,5555666677788899911122233344.4,0,0
+56879,5687.9,56.879,0,461728359,46172835.9,0,0,78913567892456,7891356789245.6,0,0,223344556677889911,22334455667788991.1,0,0,5566677788899911122233344455,556667778889991112223334445.5,0,0,555566667777888999111222333444,55556666777788899911122233344.4,0,0
+68795,6879.5,68.795,0,617283594,61728359.4,0,0,89135678924567,8913567892456.7,0,0,233445566778899112,23344556677889911.2,0,0,5666777888999111222333444555,566677788899911122233344455.5,0,0,5555666677778888999111222333444,555566667777888899911122233344.4,0,0
+87956,8795.6,87.956,0,172835946,17283594.6,0,0,91356789245678,9135678924567.8,0,0,334455667788991122,33445566778899112.2,0,0,6667778889991112223334445555,666777888999111222333444555.5,0,0,55556666777788889999111222333444,5555666677778888999911122233344.4,0,0
+79568,7956.8,79.568,0,728359461,72835946.1,0,0,13567892456789,1356789245678.9,0,0,344556677889911223,34455667788991122.3,0,0,6677788899911122233344455556,667778889991112223334445555.6,0,0,555566667777888899991111222333444,55556666777788889999111122233344.4,0,0
+95687,9568.7,95.687,0,283594617,28359461.7,0,0,35678924567891,3567892456789.1,0,0,445566778899112233,44556677889911223.3,0,0,6777888999111222333444555566,677788899911122233344455556.6,0,0,5555666677778888999911112222333444,555566667777888899991111222233344.4,0,0
+57689,5768.9,57.689,0,835946172,83594617.2,0,0,56789245678913,5678924567891.3,0,0,455667788991122334,45566778899112233.4,0,0,7778889991112223334445555666,777888999111222333444555566.6,0,0,55556666777788889999111122223333444,5555666677778888999911112222333344.4,0,0
+76895,7689.5,76.895,0,359461728,35946172.8,0,0,67892456789135,6789245678913.5,0,0,567891234567891234,56789123456789123.4,0,0,7788899911122233344455556667,778889991112223334445555666.7,0,0,555566667777888899991111222233334441,55556666777788889999111122223333444.1,0,0
+68957,6895.7,68.957,0,516273849,51627384.9,0,0,78924567891356,7892456789135.6,0,0,678912345678912345,67891234567891234.5,0,0,7888999111222333444555566677,788899911122233344455556667.7,0,0,5555566667777888899991111222233334441,555556666777788889999111122223333444.1,0,0
+89576,8957.6,89.576,0,162738495,16273849.5,0,0,89245678913567,8924567891356.7,0,0,789123456789123456,78912345678912345.6,0,0,8889991112223334445555666777,888999111222333444555566677.7,0,0,55555666667777888899991111222233334441,5555566666777788889999111122223333444.1,0,0
+6,0.6,0.006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006,6,0.6,0.00006,0.00006
+67,6.7,0.067,0.00067,67,6.7,0.00067,0.00067,67,6.7,0.00067,0.00067,67,6.7,0.00067,0.00067,67,6.7,0.00067,0.00067,67,6.7,0.00067,0.00067
+678,67.8,0.678,0.00678,678,67.8,0.00678,0.00678,678,67.8,0.00678,0.00678,678,67.8,0.00678,0.00678,678,67.8,0.00678,0.00678,678,67.8,0.00678,0.00678
+6789,678.9,6.789,0.06789,6789,678.9,0.06789,0.06789,6789,678.9,0.06789,0.06789,6789,678.9,0.06789,0.06789,6789,678.9,0.06789,0.06789,6789,678.9,0.06789,0.06789
+67891,6789.1,67.891,0.67891,67891,6789.1,0.67891,0.67891,67891,6789.1,0.67891,0.67891,67891,6789.1,0.67891,0.67891,67891,6789.1,0.67891,0.67891,67891,6789.1,0.67891,0.67891
+78916,7891.6,78.916,0.78916,678912,67891.2,6.78912,0,678912,67891.2,6.78912,0,678912,67891.2,6.78912,0,678912,67891.2,6.78912,0,678912,67891.2,6.78912,0
+89167,8916.7,89.167,0.89167,6789123,678912.3,67.89123,0,6789123,678912.3,67.89123,0,6789123,678912.3,67.89123,0,6789123,678912.3,67.89123,0,6789123,678912.3,67.89123,0
+91678,9167.8,91.678,0.91678,67891234,6789123.4,678.91234,0,67891234,6789123.4,678.91234,0,67891234,6789123.4,678.91234,0,67891234,6789123.4,678.91234,0,67891234,6789123.4,678.91234,0
+16789,1678.9,16.789,0.16789,678912345,67891234.5,6789.12345,0,678912345,67891234.5,6789.12345,0,678912345,67891234.5,6789.12345,0,678912345,67891234.5,6789.12345,0,678912345,67891234.5,6789.12345,0
+68179,6817.9,68.179,0.68179,681357924,68135792.4,6813.57924,0,6678912345,667891234.5,66789.12345,0,6678912345,667891234.5,66789.12345,0,6678912345,667891234.5,66789.12345,0,6678912345,667891234.5,66789.12345,0
+81796,8179.6,81.796,0.81796,813579246,81357924.6,8135.79246,0,66778912345,6677891234.5,667789.12345,0,66778912345,6677891234.5,667789.12345,0,66778912345,6677891234.5,667789.12345,0,66778912345,6677891234.5,667789.12345,0
+17968,1796.8,17.968,0.17968,135792468,13579246.8,1357.92468,0,667788912345,66778891234.5,6677889.12345,0,667788912345,66778891234.5,6677889.12345,0,667788912345,66778891234.5,6677889.12345,0,667788912345,66778891234.5,6677889.12345,0
+79681,7968.1,79.681,0.79681,357924681,35792468.1,3579.24681,0,6677889912345,667788991234.5,0,0,6677889912345,667788991234.5,66778899.12345,0,6677889912345,667788991234.5,66778899.12345,0,6677889912345,667788991234.5,66778899.12345,0
+96817,9681.7,96.817,0.96817,579246813,57924681.3,5792.46813,0,66778899112345,6677889911234.5,0,0,66778899112345,6677889911234.5,667788991.12345,0,66778899112345,6677889911234.5,667788991.12345,0,66778899112345,6677889911234.5,667788991.12345,0
+69718,6971.8,69.718,0.69718,792468135,79246813.5,7924.68135,0,67788991123456,6778899112345.6,0,0,667788991122345,66778899112234.5,0,0,667788991122345,66778899112234.5,6677889911.22345,0,667788991122345,66778899112234.5,6677889911.22345,0
+97186,9718.6,97.186,0.97186,924681357,92468135.7,9246.81357,0,77889911234566,7788991123456.6,0,0,6677889911223345,667788991122334.5,0,0,6677889911223345,667788991122334.5,66778899112.23345,0,6677889911223345,667788991122334.5,66778899112.23345,0
+71869,7186.9,71.869,0.71869,246813579,24681357.9,2468.13579,0,78899112345667,7889911234566.7,0,0,66778899112233445,6677889911223344.5,0,0,66778899112233445,6677889911223344.5,667788991122.33445,0,66778899112233445,6677889911223344.5,667788991122.33445,0
+18697,1869.7,18.697,0.18697,468135792,46813579.2,4681.35792,0,88991123456677,8899112345667.7,0,0,667788991122334455,66778899112233445.5,0,0,667788991122334455,66778899112233445.5,6677889911223.34455,0,667788991122334455,66778899112233445.5,6677889911223.34455,0
+86971,8697.1,86.971,0.86971,693714825,69371482.5,6937.14825,0,89911234566778,8991123456677.8,0,0,677889911223344556,67788991122334455.6,0,0,6667788991122334455,666778899112233445.5,66677889911223.34455,0,6667788991122334455,666778899112233445.5,66677889911223.34455,0
+69178,6917.8,69.178,0.69178,937148256,93714825.6,9371.48256,0,99112345667788,9911234566778.8,0,0,778899112233445566,77889911223344556.6,0,0,66677788991122334455,6667778899112233445.5,0,0,66677788991122334455,6667778899112233445.5,666777889911223.34455,0
+91786,9178.6,91.786,0.91786,371482569,37148256.9,3714.82569,0,91123456677889,9112345667788.9,0,0,788991122334455667,78899112233445566.7,0,0,666777888991122334455,66677788899112233445.5,0,0,666777888991122334455,66677788899112233445.5,6667778889911223.34455,0
+17869,1786.9,17.869,0.17869,714825693,71482569.3,7148.25693,0,11234566778899,1123456677889.9,0,0,889911223344556677,88991122334455667.7,0,0,6667778889991122334455,666777888999112233445.5,0,0,6667778889991122334455,666777888999112233445.5,66677788899911223.34455,0
+78691,7869.1,78.691,0.78691,148256937,14825693.7,1482.56937,0,12345667788991,1234566778899.1,0,0,899112233445566778,89911223344556677.8,0,0,66677788899911122334455,6667778889991112233445.5,0,0,66677788899911122334455,6667778889991112233445.5,666777888999111223.34455,0
+86917,8691.7,86.917,0.86917,482569371,48256937.1,4825.69371,0,23456677889911,2345667788991.1,0,0,991122334455667788,99112233445566778.8,0,0,666777888999111222334455,66677788899911122233445.5,0,0,666777888999111222334455,66677788899911122233445.5,6667778889991112223.34455,0
+67819,6781.9,67.819,0.67819,825693714,82569371.4,8256.93714,0,34566778899112,3456677889911.2,0,0,911223344556677889,91122334455667788.9,0,0,6667778889991112223334455,666777888999111222333445.5,0,0,6667778889991112223334455,666777888999111222333445.5,0,0
+78196,7819.6,78.196,0.78196,256937148,25693714.8,2569.37148,0,45667788991123,4566778899112.3,0,0,112233445566778899,11223344556677889.9,0,0,66677788899911122233344455,6667778889991112223334445.5,0,0,66677788899911122233344455,6667778889991112223334445.5,0,0
+81967,8196.7,81.967,0.81967,569371482,56937148.2,5693.71482,0,56677889911234,5667788991123.4,0,0,122334455667788991,12233445566778899.1,0,0,666777888999111222333444555,66677788899911122233344455.5,0,0,666777888999111222333444555,66677788899911122233344455.5,0,0
+19678,1967.8,19.678,0.19678,615728394,61572839.4,6157.28394,0,67891246789135,6789124678913.5,0,0,223344556677889911,22334455667788991.1,0,0,6666777888999111222333444555,666677788899911122233344455.5,0,0,6666777888999111222333444555,666677788899911122233344455.5,0,0
+96781,9678.1,96.781,0.96781,157283946,15728394.6,1572.83946,0,78912467891356,7891246789135.6,0,0,233445566778899112,23344556677889911.2,0,0,6667778889991112223334445556,666777888999111222333444555.6,0,0,66667777888999111222333444555,6666777788899911122233344455.5,0,0
+67981,6798.1,67.981,0.67981,572839461,57283946.1,5728.39461,0,89124678913567,8912467891356.7,0,0,334455667788991122,33445566778899112.2,0,0,6677788899911122233344455566,667778889991112223334445556.6,0,0,666677778888999111222333444555,66667777888899911122233344455.5,0,0
+79816,7981.6,79.816,0.79816,728394615,72839461.5,7283.94615,0,91246789135678,9124678913567.8,0,0,344556677889911223,34455667788991122.3,0,0,6777888999111222333444555666,677788899911122233344455566.6,0,0,6666777788889999111222333444555,666677778888999911122233344455.5,0,0
+98167,9816.7,98.167,0.98167,283946157,28394615.7,2839.46157,0,12467891356789,1246789135678.9,0,0,445566778899112233,44556677889911223.3,0,0,7778889991112223334445556666,777888999111222333444555666.6,0,0,66667777888899991111222333444555,6666777788889999111122233344455.5,0,0
+81679,8167.9,81.679,0.81679,839461572,83946157.2,8394.61572,0,24678913567891,2467891356789.1,0,0,455667788991122334,45566778899112233.4,0,0,7788899911122233344455566667,778889991112223334445556666.7,0,0,666677778888999911112222333444555,66667777888899991111222233344455.5,0,0
+16798,1679.8,16.798,0.16798,394615728,39461572.8,3946.15728,0,46789135678912,4678913567891.2,0,0,556677889911223344,55667788991122334.4,0,0,7888999111222333444555666677,788899911122233344455566667.7,0,0,6666777788889999111122223333444555,666677778888999911112222333344455.5,0,0
+68791,6879.1,68.791,0.68791,946157283,94615728.3,9461.57283,0,67891356789124,6789135678912.4,0,0,566778899112233445,56677889911223344.5,0,0,8889991112223334445556666777,888999111222333444555666677.7,0,0,66667777888899991111222233334444555,6666777788889999111122223333444455.5,0,0
+87916,8791.6,87.916,0.87916,461572839,46157283.9,4615.72839,0,78913567891246,7891356789124.6,0,0,678912345678912345,67891234567891234.5,0,0,8899911122233344455566667778,889991112223334445556666777.8,0,0,666677778888999911112222333344445555,66667777888899991111222233334444555.5,0,0
+79168,7916.8,79.168,0.79168,627384951,62738495.1,6273.84951,0,89135678912467,8913567891246.7,0,0,789123456789123456,78912345678912345.6,0,0,8999111222333444555666677788,899911122233344455566667778.8,0,0,6666677778888999911112222333344445555,666667777888899991111222233334444555.5,0,0
+91687,9168.7,91.687,0.91687,273849516,27384951.6,2738.49516,0,91356789124678,9135678912467.8,0,0,891234567891234567,89123456789123456.7,0,0,9991112223334445556666777888,999111222333444555666677788.8,0,0,66666777778888999911112222333344445555,6666677777888899991111222233334444555.5,0,0
+7,0.7,0.007,0.00007,7,0.7,0.00007,0.000007,7,0.7,0.000007,0.000007,7,0.7,0.000007,0.000007,7,0.7,0.000007,0.000007,7,0.7,0.000007,0.000007
+78,7.8,0.078,0.00078,78,7.8,0.00078,0.000078,78,7.8,0.000078,0.000078,78,7.8,0.000078,0.000078,78,7.8,0.000078,0.000078,78,7.8,0.000078,0.000078
+789,78.9,0.789,0.00789,789,78.9,0.00789,0.000789,789,78.9,0.000789,0.000789,789,78.9,0.000789,0.000789,789,78.9,0.000789,0.000789,789,78.9,0.000789,0.000789
+7891,789.1,7.891,0.07891,7891,789.1,0.07891,0.007891,7891,789.1,0.007891,0.007891,7891,789.1,0.007891,0.007891,7891,789.1,0.007891,0.007891,7891,789.1,0.007891,0.007891
+78912,7891.2,78.912,0.78912,78912,7891.2,0.78912,0.078912,78912,7891.2,0.078912,0.078912,78912,7891.2,0.078912,0.078912,78912,7891.2,0.078912,0.078912,78912,7891.2,0.078912,0.078912
+89127,8912.7,89.127,0.89127,789123,78912.3,7.89123,0.789123,789123,78912.3,0.789123,0.789123,789123,78912.3,0.789123,0.789123,789123,78912.3,0.789123,0.789123,789123,78912.3,0.789123,0.789123
+91278,9127.8,91.278,0.91278,7891234,789123.4,78.91234,0,7891234,789123.4,7.891234,0,7891234,789123.4,7.891234,0,7891234,789123.4,7.891234,0,7891234,789123.4,7.891234,0
+12789,1278.9,12.789,0.12789,78912345,7891234.5,789.12345,0,78912345,7891234.5,78.912345,0,78912345,7891234.5,78.912345,0,78912345,7891234.5,78.912345,0,78912345,7891234.5,78.912345,0
+27891,2789.1,27.891,0.27891,789123456,78912345.6,7891.23456,0,789123456,78912345.6,789.123456,0,789123456,78912345.6,789.123456,0,789123456,78912345.6,789.123456,0,789123456,78912345.6,789.123456,0
+79281,7928.1,79.281,0.79281,792468135,79246813.5,7924.68135,0,7789123456,778912345.6,7789.123456,0,7789123456,778912345.6,7789.123456,0,7789123456,778912345.6,7789.123456,0,7789123456,778912345.6,7789.123456,0
+92817,9281.7,92.817,0.92817,924681357,92468135.7,9246.81357,0,77889123456,7788912345.6,77889.123456,0,77889123456,7788912345.6,77889.123456,0,77889123456,7788912345.6,77889.123456,0,77889123456,7788912345.6,77889.123456,0
+28179,2817.9,28.179,0.28179,246813579,24681357.9,2468.13579,0,778899123456,77889912345.6,778899.123456,0,778899123456,77889912345.6,778899.123456,0,778899123456,77889912345.6,778899.123456,0,778899123456,77889912345.6,778899.123456,0
+81792,8179.2,81.792,0.81792,468135792,46813579.2,4681.35792,0,7788991123456,778899112345.6,7788991.123456,0,7788991123456,778899112345.6,7788991.123456,0,7788991123456,778899112345.6,7788991.123456,0,7788991123456,778899112345.6,7788991.123456,0
+17928,1792.8,17.928,0.17928,681357924,68135792.4,6813.57924,0,77889911223456,7788991122345.6,0,0,77889911223456,7788991122345.6,77889911.223456,0,77889911223456,7788991122345.6,77889911.223456,0,77889911223456,7788991122345.6,77889911.223456,0
+71829,7182.9,71.829,0.71829,813579246,81357924.6,8135.79246,0,78899112234567,7889911223456.7,0,0,778899112233456,77889911223345.6,778899112.233456,0,778899112233456,77889911223345.6,778899112.233456,0,778899112233456,77889911223345.6,778899112.233456,0
+18297,1829.7,18.297,0.18297,135792468,13579246.8,1357.92468,0,88991122345677,8899112234567.7,0,0,7788991122334456,778899112233445.6,0,0,7788991122334456,778899112233445.6,7788991122.334456,0,7788991122334456,778899112233445.6,7788991122.334456,0
+82971,8297.1,82.971,0.82971,357924681,35792468.1,3579.24681,0,89911223456778,8991122345677.8,0,0,77889911223344556,7788991122334455.6,0,0,77889911223344556,7788991122334455.6,77889911223.344556,0,77889911223344556,7788991122334455.6,77889911223.344556,0
+29718,2971.8,29.718,0.29718,579246813,57924681.3,5792.46813,0,99112234567788,9911223456778.8,0,0,778899112233445566,77889911223344556.6,0,0,778899112233445566,77889911223344556.6,778899112233.445566,0,778899112233445566,77889911223344556.6,778899112233.445566,0
+97182,9718.2,97.182,0.97182,714825936,71482593.6,7148.25936,0,91122345677889,9112234567788.9,0,0,788991122334455667,78899112233445566.7,0,0,7778899112233445566,777889911223344556.6,7778899112233.445566,0,7778899112233445566,777889911223344556.6,7778899112233.445566,0
+72891,7289.1,72.891,0.72891,148259367,14825936.7,1482.59367,0,11223456778899,1122345677889.9,0,0,889911223344556677,88991122334455667.7,0,0,77788899112233445566,7778889911223344556.6,77788899112233.445566,0,77788899112233445566,7778889911223344556.6,77788899112233.445566,0
+28917,2891.7,28.917,0.28917,482593671,48259367.1,4825.93671,0,12234567788991,1223456778899.1,0,0,899112233445566778,89911223344556677.8,0,0,777888999112233445566,77788899911223344556.6,0,0,777888999112233445566,77788899911223344556.6,777888999112233.445566,0
+89172,8917.2,89.172,0.89172,825936714,82593671.4,8259.36714,0,22345677889911,2234567788991.1,0,0,991122334455667788,99112233445566778.8,0,0,7778889991112233445566,777888999111223344556.6,0,0,7778889991112233445566,777888999111223344556.6,7778889991112233.445566,0
+91728,9172.8,91.728,0.91728,259367148,25936714.8,2593.67148,0,23456778899112,2345677889911.2,0,0,911223344556677889,91122334455667788.9,0,0,77788899911122233445566,7778889991112223344556.6,0,0,77788899911122233445566,7778889991112223344556.6,77788899911122233.445566,0
+17289,1728.9,17.289,0.17289,593671482,59367148.2,5936.71482,0,34567788991122,3456778899112.2,0,0,112233445566778899,11223344556677889.9,0,0,777888999111222333445566,77788899911122233344556.6,0,0,777888999111222333445566,77788899911122233344556.6,777888999111222333.445566,0
+72891,7289.1,72.891,0.72891,936714825,93671482.5,9367.14825,0,45677889911223,4567788991122.3,0,0,122334455667788991,12233445566778899.1,0,0,7778889991112223334445566,777888999111222333444556.6,0,0,7778889991112223334445566,777888999111222333444556.6,7778889991112223334.445566,0
+28917,2891.7,28.917,0.28917,367148259,36714825.9,3671.48259,0,56778899112234,5677889911223.4,0,0,223344556677889911,22334455667788991.1,0,0,77788899911122233344455566,7778889991112223334445556.6,0,0,77788899911122233344455566,7778889991112223334445556.6,0,0
+89172,8917.2,89.172,0.89172,671482593,67148259.3,6714.82593,0,67788991122345,6778899112234.5,0,0,233445566778899112,23344556677889911.2,0,0,777888999111222333444555666,77788899911122233344455566.6,0,0,777888999111222333444555666,77788899911122233344455566.6,0,0
+91728,9172.8,91.728,0.91728,726839415,72683941.5,7268.39415,0,78912357891246,7891235789124.6,0,0,334455667788991122,33445566778899112.2,0,0,7777888999111222333444555666,777788899911122233344455566.6,0,0,7777888999111222333444555666,777788899911122233344455566.6,0,0
+17289,1728.9,17.289,0.17289,268394157,26839415.7,2683.94157,0,89123578912467,8912357891246.7,0,0,344556677889911223,34455667788991122.3,0,0,7778889991112223334445556667,777888999111222333444555666.7,0,0,77778888999111222333444555666,7777888899911122233344455566.6,0,0
+78192,7819.2,78.192,0.78192,683941572,68394157.2,6839.41572,0,91235789124678,9123578912467.8,0,0,445566778899112233,44556677889911223.3,0,0,7788899911122233344455566677,778889991112223334445556667.7,0,0,777788889999111222333444555666,77778888999911122233344455566.6,0,0
+81927,8192.7,81.927,0.81927,839415726,83941572.6,8394.15726,0,12357891246789,1235789124678.9,0,0,455667788991122334,45566778899112233.4,0,0,7888999111222333444555666777,788899911122233344455566677.7,0,0,7777888899991111222333444555666,777788889999111122233344455566.6,0,0
+19278,1927.8,19.278,0.19278,394157268,39415726.8,3941.57268,0,23578912467891,2357891246789.1,0,0,556677889911223344,55667788991122334.4,0,0,8889991112223334445556667777,888999111222333444555666777.7,0,0,77778888999911112222333444555666,7777888899991111222233344455566.6,0,0
+92781,9278.1,92.781,0.92781,941572683,94157268.3,9415.72683,0,35789124678912,3578912467891.2,0,0,566778899112233445,56677889911223344.5,0,0,8899911122233344455566677778,889991112223334445556667777.8,0,0,777788889999111122223333444555666,77778888999911112222333344455566.6,0,0
+27819,2781.9,27.819,0.27819,415726839,41572683.9,4157.26839,0,57891246789123,5789124678912.3,0,0,667788991122334455,66778899112233445.5,0,0,8999111222333444555666777788,899911122233344455566677778.8,0,0,7777888899991111222233334444555666,777788889999111122223333444455566.6,0,0
+79812,7981.2,79.812,0.79812,157268394,15726839.4,1572.68394,0,78912467891235,7891246789123.5,0,0,677889911223344556,67788991122334455.6,0,0,9991112223334445556667777888,999111222333444555666777788.8,0,0,77778888999911112222333344445555666,7777888899991111222233334444555566.6,0,0
+98127,9812.7,98.127,0.98127,572683941,57268394.1,5726.83941,0,89124678912357,8912467891235.7,0,0,789123456789123456,78912345678912345.6,0,0,9911122233344455566677778889,991112223334445556667777888.9,0,0,777788889999111122223333444455556666,77778888999911112222333344445555666.6,0,0
+81279,8127.9,81.279,0.81279,738495172,73849517.2,7384.95172,0,91246789123578,9124678912357.8,0,0,891234567891234567,89123456789123456.7,0,0,9111222333444555666777788899,911122233344455566677778889.9,0,0,7777788889999111122223333444455556666,777778888999911112222333344445555666.6,0,0
+12798,1279.8,12.798,0.12798,384951727,38495172.7,3849.51727,0,12467891235789,1246789123578.9,0,0,912345678912345678,91234567891234567.8,0,0,1112223334445556667777888999,111222333444555666777788899.9,0,0,77777888889999111122223333444455556666,7777788888999911112222333344445555666.6,0,0
+8,0.8,0.008,0.00008,8,0.8,0.00008,0.0000008,8,0.8,0.0000008,0.0000008,8,0.8,0.0000008,0.0000008,8,0.8,0.0000008,0.0000008,8,0.8,0.0000008,0.0000008
+89,8.9,0.089,0.00089,89,8.9,0.00089,0.0000089,89,8.9,0.0000089,0.0000089,89,8.9,0.0000089,0.0000089,89,8.9,0.0000089,0.0000089,89,8.9,0.0000089,0.0000089
+891,89.1,0.891,0.00891,891,89.1,0.00891,0.0000891,891,89.1,0.0000891,0.0000891,891,89.1,0.0000891,0.0000891,891,89.1,0.0000891,0.0000891,891,89.1,0.0000891,0.0000891
+8912,891.2,8.912,0.08912,8912,891.2,0.08912,0.0008912,8912,891.2,0.0008912,0.0008912,8912,891.2,0.0008912,0.0008912,8912,891.2,0.0008912,0.0008912,8912,891.2,0.0008912,0.0008912
+89123,8912.3,89.123,0.89123,89123,8912.3,0.89123,0.0089123,89123,8912.3,0.0089123,0.0089123,89123,8912.3,0.0089123,0.0089123,89123,8912.3,0.0089123,0.0089123,89123,8912.3,0.0089123,0.0089123
+91238,9123.8,91.238,0.91238,891234,89123.4,8.91234,0.0891234,891234,89123.4,0.0891234,0.0891234,891234,89123.4,0.0891234,0.0891234,891234,89123.4,0.0891234,0.0891234,891234,89123.4,0.0891234,0.0891234
+12389,1238.9,12.389,0.12389,8912345,891234.5,89.12345,0.8912345,8912345,891234.5,0.8912345,0.8912345,8912345,891234.5,0.8912345,0.8912345,8912345,891234.5,0.8912345,0.8912345,8912345,891234.5,0.8912345,0.8912345
+23891,2389.1,23.891,0.23891,89123456,8912345.6,891.23456,0,89123456,8912345.6,8.9123456,0,89123456,8912345.6,8.9123456,0,89123456,8912345.6,8.9123456,0,89123456,8912345.6,8.9123456,0
+38912,3891.2,38.912,0.38912,891234567,89123456.7,8912.34567,0,891234567,89123456.7,89.1234567,0,891234567,89123456.7,89.1234567,0,891234567,89123456.7,89.1234567,0,891234567,89123456.7,89.1234567,0
+81392,8139.2,81.392,0.81392,813579246,81357924.6,8135.79246,0,8891234567,889123456.7,889.1234567,0,8891234567,889123456.7,889.1234567,0,8891234567,889123456.7,889.1234567,0,8891234567,889123456.7,889.1234567,0
+13928,1392.8,13.928,0.13928,135792468,13579246.8,1357.92468,0,88991234567,8899123456.7,8899.1234567,0,88991234567,8899123456.7,8899.1234567,0,88991234567,8899123456.7,8899.1234567,0,88991234567,8899123456.7,8899.1234567,0
+39281,3928.1,39.281,0.39281,357924681,35792468.1,3579.24681,0,889911234567,88991123456.7,88991.1234567,0,889911234567,88991123456.7,88991.1234567,0,889911234567,88991123456.7,88991.1234567,0,889911234567,88991123456.7,88991.1234567,0
+92813,9281.3,92.813,0.92813,579246813,57924681.3,5792.46813,0,8899112234567,889911223456.7,889911.2234567,0,8899112234567,889911223456.7,889911.2234567,0,8899112234567,889911223456.7,889911.2234567,0,8899112234567,889911223456.7,889911.2234567,0
+28139,2813.9,28.139,0.28139,792468135,79246813.5,7924.68135,0,88991122334567,8899112233456.7,8899112.2334567,0,88991122334567,8899112233456.7,8899112.2334567,0,88991122334567,8899112233456.7,8899112.2334567,0,88991122334567,8899112233456.7,8899112.2334567,0
+82931,8293.1,82.931,0.82931,924681357,92468135.7,9246.81357,0,89911223345678,8991122334567.8,8991122.3345678,0,889911223344567,88991122334456.7,88991122.3344567,0,889911223344567,88991122334456.7,88991122.3344567,0,889911223344567,88991122334456.7,88991122.3344567,0
+29318,2931.8,29.318,0.29318,246813579,24681357.9,2468.13579,0,99112233456788,9911223345678.8,9911223.3456788,0,8899112233445567,889911223344556.7,889911223.3445560,0,8899112233445567,889911223344556.7,889911223.3445560,0,8899112233445567,889911223344556.7,889911223.3445560,0
+93182,9318.2,93.182,0.93182,468135792,46813579.2,4681.35792,0,91122334567889,9112233456788.9,9112233.4567889,0,88991122334455667,8899112233445566.7,0,0,88991122334455667,8899112233445566.7,8899112233.4455667,0,88991122334455667,8899112233445566.7,8899112233.4455667,0
+31829,3182.9,31.829,0.31829,681357924,68135792.4,6813.57924,0,11223345678899,1122334567889.9,1122334.5678899,0,889911223344556677,88991122334455667.7,0,0,889911223344556677,88991122334455667.7,88991122334.4556677,0,889911223344556677,88991122334455667.7,88991122334.4556677,0
+18293,1829.3,18.293,0.18293,825936147,82593614.7,8259.36147,0,12233456788991,1223345678899.1,1223345.6788991,0,899112233445566778,89911223344556677.8,0,0,8889911223344556677,888991122334455667.7,888991122334.4556677,0,8889911223344556677,888991122334455667.7,888991122334.4556677,0
+83912,8391.2,83.912,0.83912,259361478,25936147.8,2593.61478,0,22334567889911,2233456788991.1,2233456.7889911,0,991122334455667788,99112233445566778.8,0,0,88899911223344556677,8889991122334455667.7,8889991122334.4556677,0,88899911223344556677,8889991122334455667.7,8889991122334.4556677,0
+39128,3912.8,39.128,0.39128,593614782,59361478.2,5936.14782,0,23345678899112,2334567889911.2,2334567.8899112,0,911223344556677889,91122334455667788.9,0,0,888999111223344556677,88899911122334455667.7,88899911122334.4556677,0,888999111223344556677,88899911122334455667.7,88899911122334.4556677,0
+91283,9128.3,91.283,0.91283,936147825,93614782.5,9361.47825,0,33456788991122,3345678899112.2,3345678.8991122,0,112233445566778899,11223344556677889.9,0,0,8889991112223344556677,888999111222334455667.7,0,0,8889991112223344556677,888999111222334455667.7,888999111222334.4556677,0
+12839,1283.9,12.839,0.12839,361478259,36147825.9,3614.78259,0,34567889911223,3456788991122.3,3456788.9911223,0,122334455667788991,12233445566778899.1,0,0,88899911122233344556677,8889991112223334455667.7,0,0,88899911122233344556677,8889991112223334455667.7,8889991112223334.4556677,0
+28391,2839.1,28.391,0.28391,614782593,61478259.3,6147.82593,0,45678899112233,4567889911223.3,4567889.9112233,0,223344556677889911,22334455667788991.1,0,0,888999111222333444556677,88899911122233344455667.7,0,0,888999111222333444556677,88899911122233344455667.7,88899911122233344.4556677,0
+72891,7289.1,72.891,0.72891,147825936,14782593.6,1478.25936,0,56788991122334,5678899112233.4,5678899.1122334,0,233445566778899112,23344556677889911.2,0,0,8889991112223334445556677,888999111222333444555667.7,0,0,8889991112223334445556677,888999111222333444555667.7,888999111222333444.5556677,0
+28917,2891.7,28.917,0.28917,478259361,47825936.1,4782.59361,0,67889911223345,6788991122334.5,6788991.1223345,0,334455667788991122,33445566778899112.2,0,0,88899911122233344455566677,8889991112223334445556667.7,0,0,88899911122233344455566677,8889991112223334445556667.7,8889991112223334445.5566677,0
+89172,8917.2,89.172,0.89172,782593614,78259361.4,7825.93614,0,78899112233456,7889911223345.6,7889911.2233456,0,344556677889911223,34455667788991122.3,0,0,888999111222333444555666777,88899911122233344455566677.7,0,0,888999111222333444555666777,88899911122233344455566677.7,0,0
+91728,9172.8,91.728,0.91728,837941526,83794152.6,8379.41526,0,89123468912357,8912346891235.7,8912346.8912357,0,445566778899112233,44556677889911223.3,0,0,8888999111222333444555666777,888899911122233344455566677.7,0,0,8888999111222333444555666777,888899911122233344455566677.7,0,0
+17289,1728.9,17.289,0.17289,379415268,37941526.8,3794.15268,0,91234689123578,9123468912357.8,9123468.9123578,0,455667788991122334,45566778899112233.4,0,0,8889991112223334445556667778,888999111222333444555666777.8,0,0,88889999111222333444555666777,8888999911122233344455566677.7,0,0
+89213,8921.3,89.213,0.89213,794152683,79415268.3,7941.52683,0,12346891235789,1234689123578.9,1234689.1235789,0,556677889911223344,55667788991122334.4,0,0,8899911122233344455566677788,889991112223334445556667778.8,0,0,888899991111222333444555666777,88889999111122233344455566677.7,0,0
+92138,9213.8,92.138,0.92138,941526837,94152683.7,9415.26837,0,23468912357891,2346891235789.1,2346891.2357891,0,566778899112233445,56677889911223344.5,0,0,8999111222333444555666777888,899911122233344455566677788.8,0,0,8888999911112222333444555666777,888899991111222233344455566677.7,0,0
+21389,2138.9,21.389,0.21389,415268379,41526837.9,4152.68379,0,34689123578912,3468912357891.2,3468912.3578912,0,667788991122334455,66778899112233445.5,0,0,9991112223334445556667778888,999111222333444555666777888.8,0,0,88889999111122223333444555666777,8888999911112222333344455566677.7,0,0
+13892,1389.2,13.892,0.13892,152683794,15268379.4,1526.83794,0,46891235789123,4689123578912.3,4689123.5789123,0,677889911223344556,67788991122334455.6,0,0,9911122233344455566677788889,991112223334445556667778888.9,0,0,888899991111222233334444555666777,88889999111122223333444455566677.7,0,0
+38921,3892.1,38.921,0.38921,526837941,52683794.1,5268.37941,0,68912357891234,6891235789123.4,6891235.7891234,0,778899112233445566,77889911223344556.6,0,0,9111222333444555666777888899,911122233344455566677788889.9,0,0,8888999911112222333344445555666777,888899991111222233334444555566677.7,0,0
+81923,8192.3,81.923,0.81923,268379415,26837941.5,2683.79415,0,89123578912346,8912357891234.6,8912357.8912346,0,788991122334455667,78899112233445566.7,0,0,1112223334445556667778888999,111222333444555666777888899.9,0,0,88889999111122223333444455556666777,8888999911112222333344445555666677.7,0,0
+19238,1923.8,19.238,0.19238,683794152,68379415.2,6837.94152,0,91235789123468,9123578912346.8,9123578.9123468,0,891234567891234567,89123456789123456.7,0,0,1122233344455566677788889991,112223334445556667778888999.1,0,0,888899991111222233334444555566667777,88889999111122223333444455556666777.7,0,0
+92381,9238.1,92.381,0.92381,849516273,84951627.3,8495.16273,0,12357891234689,1235789123468.9,1235789.1234689,0,912345678912345678,91234567891234567.8,0,0,1222333444555666777888899911,122233344455566677788889991.1,0,0,8888899991111222233334444555566667777,888889999111122223333444455556666777.7,0,0
+23819,2381.9,23.819,0.23819,495162738,49516273.8,4951.62738,0,23578912346891,2357891234689.1,2357891.2346891,0,123456789123456789,12345678912345678.9,0,0,2223334445556667778888999111,222333444555666777888899911.1,0,0,88888999991111222233334444555566667777,8888899999111122223333444455556666777.7,0,0
+9,0.9,0.009,0.00009,9,0.9,0.00009,0.00000009,9,0.9,0.0000009,0.00000009,9,0.9,0.00000009,0.00000009,9,0.9,0.00000009,0.00000009,9,0.9,0.00000009,0.00000009
+91,9.1,0.091,0.00091,91,9.1,0.00091,0.00000091,91,9.1,0.0000091,0.00000091,91,9.1,0.00000091,0.00000091,91,9.1,0.00000091,0.00000091,91,9.1,0.00000091,0.00000091
+912,91.2,0.912,0.00912,912,91.2,0.00912,0.00000912,912,91.2,0.0000912,0.00000912,912,91.2,0.00000912,0.00000912,912,91.2,0.00000912,0.00000912,912,91.2,0.00000912,0.00000912
+9123,912.3,9.123,0.09123,9123,912.3,0.09123,0.00009123,9123,912.3,0.0009123,0.00009123,9123,912.3,0.00009123,0.00009123,9123,912.3,0.00009123,0.00009123,9123,912.3,0.00009123,0.00009123
+91234,9123.4,91.234,0.91234,91234,9123.4,0.91234,0.00091234,91234,9123.4,0.0091234,0.00091234,91234,9123.4,0.00091234,0.00091234,91234,9123.4,0.00091234,0.00091234,91234,9123.4,0.00091234,0.00091234
+12349,1234.9,12.349,0.12349,912345,91234.5,9.12345,0.00912345,912345,91234.5,0.0912345,0.00912345,912345,91234.5,0.00912345,0.00912345,912345,91234.5,0.00912345,0.00912345,912345,91234.5,0.00912345,0.00912345
+23491,2349.1,23.491,0.23491,9123456,912345.6,91.23456,0.09123456,9123456,912345.6,0.9123456,0.09123456,9123456,912345.6,0.09123456,0.09123456,9123456,912345.6,0.09123456,0.09123456,9123456,912345.6,0.09123456,0.09123456
+34912,3491.2,34.912,0.34912,91234567,9123456.7,912.34567,0.91234567,91234567,9123456.7,9.1234567,0.91234567,91234567,9123456.7,0.91234567,0.91234567,91234567,9123456.7,0.91234567,0.91234567,91234567,9123456.7,0.91234567,0.91234567
+49123,4912.3,49.123,0.49123,912345678,91234567.8,9123.45678,0,912345678,91234567.8,91.2345678,0,912345678,91234567.8,9.12345678,0,912345678,91234567.8,9.12345678,0,912345678,91234567.8,9.12345678,0
+92413,9241.3,92.413,0.92413,924681357,92468135.7,9246.81357,0,9912345678,991234567.8,991.2345678,0,9912345678,991234567.8,99.12345678,0,9912345678,991234567.8,99.12345678,0,9912345678,991234567.8,99.12345678,0
+24139,2413.9,24.139,0.24139,246813579,24681357.9,2468.13579,0,99112345678,9911234567.8,9911.2345678,0,99112345678,9911234567.8,991.12345678,0,99112345678,9911234567.8,991.12345678,0,99112345678,9911234567.8,991.12345678,0
+41392,4139.2,41.392,0.41392,468135792,46813579.2,4681.35792,0,991122345678,99112234567.8,99112.2345678,0,991122345678,99112234567.8,9911.22345678,0,991122345678,99112234567.8,9911.22345678,0,991122345678,99112234567.8,9911.22345678,0
+13924,1392.4,13.924,0.13924,681357924,68135792.4,6813.57924,0,9911223345678,991122334567.8,991122.3345678,0,9911223345678,991122334567.8,99112.23345678,0,9911223345678,991122334567.8,99112.23345678,0,9911223345678,991122334567.8,99112.23345678,0
+39241,3924.1,39.241,0.39241,813579246,81357924.6,8135.79246,0,99112233445678,9911223344567.8,9911223.3445678,0,99112233445678,9911223344567.8,991122.33445678,0,99112233445678,9911223344567.8,991122.33445678,0,99112233445678,9911223344567.8,991122.33445678,0
+93142,9314.2,93.142,0.93142,135792468,13579246.8,1357.92468,0,91122334456789,9112233445678.9,9112233.4456789,0,991122334455678,99112233445567.8,9911223.34455678,0,991122334455678,99112233445567.8,9911223.34455678,0,991122334455678,99112233445567.8,9911223.34455678,0
+31429,3142.9,31.429,0.31429,357924681,35792468.1,3579.24681,0,11223344567899,1122334456789.9,1122334.4567899,0,9911223344556678,991122334455667.8,99112233.44556670,0,9911223344556678,991122334455667.8,99112233.44556678,0,9911223344556678,991122334455667.8,99112233.44556678,0
+14293,1429.3,14.293,0.14293,579246813,57924681.3,5792.46813,0,12233445678991,1223344567899.1,1223344.5678991,0,99112233445566778,9911223344556677.8,991122334.45566700,0,99112233445566778,9911223344556677.8,991122334.45566778,0,99112233445566778,9911223344556677.8,991122334.45566778,0
+42931,4293.1,42.931,0.42931,792468135,79246813.5,7924.68135,0,22334456789911,2233445678991.1,2233445.6789911,0,991122334455667788,99112233445566778.8,0,0,991122334455667788,99112233445566778.8,9911223344.55667788,0,991122334455667788,99112233445566778.8,9911223344.55667788,0
+29314,2931.4,29.314,0.29314,936147258,93614725.8,9361.47258,0,23344567899112,2334456789911.2,2334456.7899112,0,911223344556677889,91122334455667788.9,0,0,9991122334455667788,999112233445566778.8,99911223344.55667788,0,9991122334455667788,999112233445566778.8,99911223344.55667788,0
+94123,9412.3,94.123,0.94123,361472589,36147258.9,3614.72589,0,33445678991122,3344567899112.2,3344567.8991122,0,112233445566778899,11223344556677889.9,0,0,99911122334455667788,9991112233445566778.8,999111223344.55667788,0,99911122334455667788,9991112233445566778.8,999111223344.55667788,0
+41239,4123.9,41.239,0.41239,614725893,61472589.3,6147.25893,0,34456789911223,3445678991122.3,3445678.9911223,0,122334455667788991,12233445566778899.1,0,0,999111222334455667788,99911122233445566778.8,9991112223344.55667788,0,999111222334455667788,99911122233445566778.8,9991112223344.55667788,0
+12394,1239.4,12.394,0.12394,147258936,14725893.6,1472.58936,0,44567899112233,4456789911223.3,4456789.9112233,0,223344556677889911,22334455667788991.1,0,0,9991112223334455667788,999111222333445566778.8,99911122233344.55667788,0,9991112223334455667788,999111222333445566778.8,99911122233344.55667788,0
+23941,2394.1,23.941,0.23941,472589361,47258936.1,4725.89361,0,45678991122334,4567899112233.4,4567899.1122334,0,233445566778899112,23344556677889911.2,0,0,99911122233344455667788,9991112223334445566778.8,0,0,99911122233344455667788,9991112223334445566778.8,999111222333444.55667788,0
+39412,3941.2,39.412,0.39412,725893614,72589361.4,7258.93614,0,56789911223344,5678991122334.4,5678991.1223344,0,334455667788991122,33445566778899112.2,0,0,999111222333444555667788,99911122233344455566778.8,0,0,999111222333444555667788,99911122233344455566778.8,9991112223334445.55667788,0
+91243,9124.3,91.243,0.91243,258936147,25893614.7,2589.36147,0,67899112233445,6789911223344.5,6789911.2233445,0,344556677889911223,34455667788991122.3,0,0,9991112223334445556667788,999111222333444555666778.8,0,0,9991112223334445556667788,999111222333444555666778.8,99911122233344455.56667788,0
+12439,1243.9,12.439,0.12439,589361472,58936147.2,5893.61472,0,78991122334456,7899112233445.6,7899112.2334456,0,445566778899112233,44556677889911223.3,0,0,99911122233344455566677788,9991112223334445556667778.8,0,0,99911122233344455566677788,9991112223334445556667778.8,999111222333444555.66677788,0
+24391,2439.1,24.391,0.24391,893614725,89361472.5,8936.14725,0,89911223344567,8991122334456.7,8991122.3344567,0,455667788991122334,45566778899112233.4,0,0,999111222333444555666777888,99911122233344455566677788.8,0,0,999111222333444555666777888,99911122233344455566677788.8,9991112223334445556.66777888,0
+43912,4391.2,43.912,0.43912,948152637,94815263.7,9481.52637,0,91234579123468,9123457912346.8,9123457.9123468,0,556677889911223344,55667788991122334.4,0,0,9999111222333444555666777888,999911122233344455566677788.8,0,0,9999111222333444555666777888,999911122233344455566677788.8,0,0
+39124,3912.4,39.124,0.39124,481526379,48152637.9,4815.26379,0,12345791234689,1234579123468.9,1234579.1234689,0,566778899112233445,56677889911223344.5,0,0,9991112223334445556667778889,999111222333444555666777888.9,0,0,99991111222333444555666777888,9999111122233344455566677788.8,0,0
+91324,9132.4,91.324,0.91324,815263794,81526379.4,8152.63794,0,23457912346891,2345791234689.1,2345791.2346891,0,667788991122334455,66778899112233445.5,0,0,9911122233344455566677788899,991112223334445556667778889.9,0,0,999911112222333444555666777888,99991111222233344455566677788.8,0,0
+13249,1324.9,13.249,0.13249,152637948,15263794.8,1526.37948,0,34579123468912,3457912346891.2,3457912.3468912,0,677889911223344556,67788991122334455.6,0,0,9111222333444555666777888999,911122233344455566677788899.9,0,0,9999111122223333444555666777888,999911112222333344455566677788.8,0,0
+32491,3249.1,32.491,0.32491,526379481,52637948.1,5263.79481,0,45791234689123,4579123468912.3,4579123.4689123,0,778899112233445566,77889911223344556.6,0,0,1112223334445556667778889999,111222333444555666777888999.9,0,0,99991111222233334444555666777888,9999111122223333444455566677788.8,0,0
+24913,2491.3,24.913,0.24913,263794815,26379481.5,2637.94815,0,57912346891234,5791234689123.4,5791234.6891234,0,788991122334455667,78899112233445566.7,0,0,1122233344455566677788899991,112223334445556667778889999.1,0,0,999911112222333344445555666777888,99991111222233334444555566677788.8,0,0
+49132,4913.2,49.132,0.49132,637948152,63794815.2,6379.48152,0,79123468912345,7912346891234.5,7912346.8912345,0,889911223344556677,88991122334455667.7,0,0,1222333444555666777888999911,122233344455566677788899991.1,0,0,9999111122223333444455556666777888,999911112222333344445555666677788.8,0,0
+92134,9213.4,92.134,0.92134,379481526,37948152.6,3794.81526,0,91234689123457,9123468912345.7,9123468.9123457,0,899112233445566778,89911223344556677.8,0,0,2223334445556667778889999111,222333444555666777888999911.1,0,0,99991111222233334444555566667777888,9999111122223333444455556666777788.8,0,0
+21349,2134.9,21.349,0.21349,794815263,79481526.3,7948.15263,0,12346891234579,1234689123457.9,1234689.1234579,0,912345678912345678,91234567891234567.8,0,0,2233344455566677788899991112,223334445556667778889999111.2,0,0,999911112222333344445555666677778888,99991111222233334444555566667777888.8,0,0
+13492,1349.2,13.492,0.13492,951627384,95162738.4,9516.27384,0,23468912345791,2346891234579.1,2346891.2345791,0,123456789123456789,12345678912345678.9,0,0,2333444555666777888999911122,233344455566677788899991112.2,0,0,9999911112222333344445555666677778888,999991111222233334444555566667777888.8,0,0
+34921,3492.1,34.921,0.34921,516273849,51627384.9,5162.73849,0,34689123457912,3468912345791.2,3468912.3457912,0,234567891234567891,23456789123456789.1,0,0,3334445556667778889999111222,333444555666777888999911122.2,0,0,99999111112222333344445555666677778888,9999911111222233334444555566667777888.8,0,0
+11,1.1,0.011,0.00011,11,1.1,0.00011,0.000000011,11,1.1,0.0000011,0.000000011,11,1.1,0.000000011,0.000000011,11,1.1,0.000000011,0.000000011,11,1.1,0.000000011,0.000000011
+112,11.2,0.112,0.00112,112,11.2,0.00112,0.000000112,112,11.2,0.0000112,0.000000112,112,11.2,0.000000112,0.000000112,112,11.2,0.000000112,0.000000112,112,11.2,0.000000112,0.000000112
+1123,112.3,1.123,0.01123,1123,112.3,0.01123,0.000001123,1123,112.3,0.0001123,0.000001123,1123,112.3,0.000001123,0.000001123,1123,112.3,0.000001123,0.000001123,1123,112.3,0.000001123,0.000001123
+11234,1123.4,11.234,0.11234,11234,1123.4,0.11234,0.000011234,11234,1123.4,0.0011234,0.000011234,11234,1123.4,0.000011234,0.000011234,11234,1123.4,0.000011234,0.000011234,11234,1123.4,0.000011234,0.000011234
+12341,1234.1,12.341,0.12341,112345,11234.5,1.12345,0.000112345,112345,11234.5,0.0112345,0.000112345,112345,11234.5,0.000112345,0.000112345,112345,11234.5,0.000112345,0.000112345,112345,11234.5,0.000112345,0.000112345
+23411,2341.1,23.411,0.23411,1123456,112345.6,11.23456,0.001123456,1123456,112345.6,0.1123456,0.001123456,1123456,112345.6,0.001123456,0.001123456,1123456,112345.6,0.001123456,0.001123456,1123456,112345.6,0.001123456,0.001123456
+34112,3411.2,34.112,0.34112,11234567,1123456.7,112.34567,0.011234567,11234567,1123456.7,1.1234567,0.011234567,11234567,1123456.7,0.011234567,0.011234567,11234567,1123456.7,0.011234567,0.011234567,11234567,1123456.7,0.011234567,0.011234567
+41123,4112.3,41.123,0.41123,112345678,11234567.8,1123.45678,0.112345678,112345678,11234567.8,11.2345678,0.112345678,112345678,11234567.8,0.112345678,0.112345678,112345678,11234567.8,0.112345678,0.112345678,112345678,11234567.8,0.112345678,0.112345678
+41312,4131.2,41.312,0.41312,124681357,12468135.7,1246.81357,0.124681357,1123456789,112345678.9,112.3456789,0,1123456789,112345678.9,1.123456789,0,1123456789,112345678.9,1.123456789,0,1123456789,112345678.9,1.123456789,0
+13124,1312.4,13.124,0.13124,246813571,24681357.1,2468.13571,0.246813571,11123456789,1112345678.9,1112.3456789,0,11123456789,1112345678.9,11.123456789,0,11123456789,1112345678.9,11.123456789,0,11123456789,1112345678.9,11.123456789,0
+31241,3124.1,31.241,0.31241,468135712,46813571.2,4681.35712,0.468135712,111223456789,11122345678.9,11122.3456789,0,111223456789,11122345678.9,111.223456789,0,111223456789,11122345678.9,111.223456789,0,111223456789,11122345678.9,111.223456789,0
+12413,1241.3,12.413,0.12413,681357124,68135712.4,6813.57124,0.681357124,1112233456789,111223345678.9,111223.3456789,0,1112233456789,111223345678.9,1112.233456789,0,1112233456789,111223345678.9,1112.233456789,0,1112233456789,111223345678.9,1112.233456789,0
+24131,2413.1,24.131,0.24131,813571246,81357124.6,8135.71246,0.813571246,11122334456789,1112233445678.9,1112233.4456789,0,11122334456789,1112233445678.9,11122.334456789,0,11122334456789,1112233445678.9,11122.334456789,0,11122334456789,1112233445678.9,11122.334456789,0
+13142,1314.2,13.142,0.13142,135712468,13571246.8,1357.12468,0.135712468,11223344567891,1122334456789.1,1122334.4567891,0,111223344556678,11122334455667.8,111223.344556678,0,111223344556678,11122334455667.8,111223.344556678,0,111223344556678,11122334455667.8,111223.344556678,0
+31421,3142.1,31.421,0.31421,357124681,35712468.1,3571.24681,0.357124681,12233445678911,1223344567891.1,1223344.5678911,0,1112233445566778,111223344556677.8,1112233.445566778,0,1112233445566778,111223344556677.8,1112233.445566778,0,1112233445566778,111223344556677.8,1112233.445566778,0
+14213,1421.3,14.213,0.14213,571246813,57124681.3,5712.46813,0.571246813,22334456789111,2233445678911.1,2233445.6789111,0,11122334455667788,1112233445566778.8,11122334.455667788,0,11122334455667788,1112233445566778.8,11122334.455667788,0,11122334455667788,1112233445566778.8,11122334.455667788,0
+42131,4213.1,42.131,0.42131,712468135,71246813.5,7124.68135,0.712468135,23344567891112,2334456789111.2,2334456.7891112,0,111223344556677889,11122334455667788.9,111223344.556677889,0,111223344556677889,11122334455667788.9,111223344.556677889,0,111223344556677889,11122334455667788.9,111223344.556677889,0
+21314,2131.4,21.314,0.21314,136147258,13614725.8,1361.47258,0.136147258,33445678911122,3344567891112.2,3344567.8911122,0,112233445566778891,11223344556677889.1,112233445.566778891,0,1111223344556677889,111122334455667788.9,1111223344.556677889,0,1111223344556677889,111122334455667788.9,1111223344.556677889,0
+14123,1412.3,14.123,0.14123,361472581,36147258.1,3614.72581,0.361472581,34456789111223,3445678911122.3,3445678.9111223,0,122334455667788911,12233445566778891.1,122334455.667788911,0,11112223344556677889,1111222334455667788.9,11112223344.556677889,0,11112223344556677889,1111222334455667788.9,11112223344.556677889,0
+41231,4123.1,41.231,0.41231,614725813,61472581.3,6147.25813,0.614725813,44567891112233,4456789111223.3,4456789.1112233,0,223344556677889111,22334455667788911.1,223344556.677889111,0,111122233344556677889,11112223334455667788.9,111122233344.556677889,0,111122233344556677889,11112223334455667788.9,111122233344.556677889,0
+12314,1231.4,12.314,0.12314,147258136,14725813.6,1472.58136,0.147258136,45678911122334,4567891112233.4,4567891.1122334,0,233445566778891112,23344556677889111.2,233445566.778891112,0,1111222333444556677889,111122233344455667788.9,1111222333444.556677889,0,1111222333444556677889,111122233344455667788.9,1111222333444.556677889,0
+23141,2314.1,23.141,0.23141,472581361,47258136.1,4725.81361,0.472581361,56789111223344,5678911122334.4,5678911.1223344,0,334455667788911122,33445566778891112.2,334455667.788911122,0,11112223334445556677889,1111222333444555667788.9,11112223334445.556677889,0,11112223334445556677889,1111222333444555667788.9,11112223334445.556677889,0
+31412,3141.2,31.412,0.31412,725813614,72581361.4,7258.13614,0.725813614,67891112233445,6789111223344.5,6789111.2233445,0,344556677889111223,34455667788911122.3,344556677.889111223,0,111122233344455566677889,11112223334445556667788.9,0,0,111122233344455566677889,11112223334445556667788.9,111122233344455.566677889,0
+11243,1124.3,11.243,0.11243,258136147,25813614.7,2581.36147,0.258136147,78911122334456,7891112233445.6,7891112.2334456,0,445566778891112233,44556677889111223.3,445566778.891112233,0,1111222333444555666777889,111122233344455566677788.9,0,0,1111222333444555666777889,111122233344455566677788.9,1111222333444555.666777889,0
+12431,1243.1,12.431,0.12431,581361472,58136147.2,5813.61472,0.581361472,89111223344567,8911122334456.7,8911122.3344567,0,455667788911122334,45566778891112233.4,455667788.911122334,0,11112223334445556667778889,1111222333444555666777888.9,0,0,11112223334445556667778889,1111222333444555666777888.9,11112223334445556.667778889,0
+24311,2431.1,24.311,0.24311,813614725,81361472.5,8136.14725,0.813614725,91112233445678,9111223344567.8,9111223.3445678,0,556677889111223344,55667788911122334.4,556677889.111223344,0,111122233344455566677788899,11112223334445556667778889.9,0,0,111122233344455566677788899,11112223334445556667778889.9,111122233344455566.677788899,0
+43112,4311.2,43.112,0.43112,148152637,14815263.7,1481.52637,0.148152637,91234579123468,9123457912346.8,9123457.9123468,0,566778891112233445,56677889111223344.5,566778891.112233445,0,1111122233344455566677788899,111112223334445556667778889.9,0,0,1111122233344455566677788899,111112223334445556667778889.9,1111122233344455566.677788899,0
+31124,3112.4,31.124,0.31124,481526371,48152637.1,4815.26371,0.481526371,12345791234689,1234579123468.9,1234579.1234689,0,667788911122334455,66778891112233445.5,667788911.122334455,0,1111222333444555666777888991,111122233344455566677788899.1,0,0,11111222233344455566677788899,1111122223334445556667778889.9,0,0
+11324,1132.4,11.324,0.11324,815263714,81526371.4,8152.63714,0.815263714,23457912346891,2345791234689.1,2345791.2346891,0,677889111223344556,67788911122334455.6,677889111.223344556,0,1112223334445556667778889911,111222333444555666777888991.1,0,0,111112222333344455566677788899,11111222233334445556667778889.9,0,0
+13241,1324.1,13.241,0.13241,152637148,15263714.8,1526.37148,0.152637148,34579123468912,3457912346891.2,3457912.3468912,0,778891112233445566,77889111223344556.6,778891112.233445566,0,1122233344455566677788899111,112223334445556667778889911.1,0,0,1111122223333444455566677788899,111112222333344445556667778889.9,0,0
+32411,3241.1,32.411,0.32411,526371481,52637148.1,5263.71481,0.526371481,45791234689123,4579123468912.3,4579123.4689123,0,788911122334455667,78891112233445566.7,788911122.334455667,0,1222333444555666777888991111,122233344455566677788899111.1,0,0,11111222233334444555566677788899,1111122223333444455556667778889.9,0,0
+24113,2411.3,24.113,0.24113,263714815,26371481.5,2637.14815,0.263714815,57912346891234,5791234689123.4,5791234.6891234,0,889111223344556677,88911122334455667.7,889111223.344556677,0,2223334445556667778889911111,222333444555666777888991111.1,0,0,111112222333344445555666677788899,11111222233334444555566667778889.9,0,0
+41132,4113.2,41.132,0.41132,637148152,63714815.2,6371.48152,0.637148152,79123468912345,7912346891234.5,7912346.8912345,0,891112233445566778,89111223344556677.8,891112233.445566778,0,2233344455566677788899111112,223334445556667778889911111.2,0,0,1111122223333444455556666777788899,111112222333344445555666677778889.9,0,0
+12134,1213.4,12.134,0.12134,371481526,37148152.6,3714.81526,0.371481526,91234689123457,9123468912345.7,9123468.9123457,0,911122334455667788,91112233445566778.8,911122334.455667788,0,2333444555666777888991111122,233344455566677788899111112.2,0,0,11111222233334444555566667777888899,1111122223333444455556666777788889.9,0,0
+21341,2134.1,21.341,0.21341,714815263,71481526.3,7148.15263,0.714815263,12346891234579,1234689123457.9,1234689.1234579,0,112345678123456789,11234567812345678.9,112345678.123456789,0,3334445556667778889911111222,333444555666777888991111122.2,0,0,111112222333344445555666677778888999,11111222233334444555566667777888899.9,0,0
+13412,1341.2,13.412,0.13412,151627384,15162738.4,1516.27384,0.151627384,23468912345791,2346891234579.1,2346891.2345791,0,123456781234567891,12345678123456789.1,123456781.234567891,0,3344455566677788899111112223,334445556667778889911111222.3,0,0,1111112222333344445555666677778888999,111111222233334444555566667777888899.9,0,0
+34121,3412.1,34.121,0.34121,516273841,51627384.1,5162.73841,0.516273841,34689123457912,3468912345791.2,3468912.3457912,0,234567812345678911,23456781234567891.1,234567812.345678911,0,3444555666777888991111122233,344455566677788899111112223.3,0,0,11111122222333344445555666677778888999,1111112222233334444555566667777888899.9,0,0
+22,2.2,0.022,0.00022,22,2.2,0.00022,0.000000022,22,2.2,0.0000022,0.0000000022,22,2.2,0.000000022,0.0000000022,22,2.2,0.0000000022,0.0000000022,22,2.2,0.0000000022,0.0000000022
+223,22.3,0.223,0.00223,223,22.3,0.00223,0.000000223,223,22.3,0.0000223,0.0000000223,223,22.3,0.000000223,0.0000000223,223,22.3,0.0000000223,0.0000000223,223,22.3,0.0000000223,0.0000000223
+2234,223.4,2.234,0.02234,2234,223.4,0.02234,0.000002234,2234,223.4,0.0002234,0.0000002234,2234,223.4,0.000002234,0.0000002234,2234,223.4,0.0000002234,0.0000002234,2234,223.4,0.0000002234,0.0000002234
+22345,2234.5,22.345,0.22345,22345,2234.5,0.22345,0.000022345,22345,2234.5,0.0022345,0.0000022345,22345,2234.5,0.000022345,0.0000022345,22345,2234.5,0.0000022345,0.0000022345,22345,2234.5,0.0000022345,0.0000022345
+23452,2345.2,23.452,0.23452,223456,22345.6,2.23456,0.000223456,223456,22345.6,0.0223456,0.0000223456,223456,22345.6,0.000223456,0.0000223456,223456,22345.6,0.0000223456,0.0000223456,223456,22345.6,0.0000223456,0.0000223456
+34522,3452.2,34.522,0.34522,2234567,223456.7,22.34567,0.002234567,2234567,223456.7,0.2234567,0.0002234567,2234567,223456.7,0.002234567,0.0002234567,2234567,223456.7,0.0002234567,0.0002234567,2234567,223456.7,0.0002234567,0.0002234567
+45223,4522.3,45.223,0.45223,22345678,2234567.8,223.45678,0.022345678,22345678,2234567.8,2.2345678,0.0022345678,22345678,2234567.8,0.022345678,0.0022345678,22345678,2234567.8,0.0022345678,0.0022345678,22345678,2234567.8,0.0022345678,0.0022345678
+52234,5223.4,52.234,0.52234,223456789,22345678.9,2234.56789,0.223456789,223456789,22345678.9,22.3456789,0.0223456789,223456789,22345678.9,0.223456789,0.0223456789,223456789,22345678.9,0.0223456789,0.0223456789,223456789,22345678.9,0.0223456789,0.0223456789
+23524,2352.4,23.524,0.23524,235792468,23579246.8,2357.9

<TRUNCATED>