diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/higherOrderFunctions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/higherOrderFunctions.scala index 7635690a4605d..7c9ce35db8ba2 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/higherOrderFunctions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/higherOrderFunctions.scala @@ -1124,23 +1124,40 @@ case class MapZipWith(left: Expression, right: Expression, function: Expression) private def getKeysWithIndexesFast(keys1: ArrayData, keys2: ArrayData) = { val hashMap = new mutable.LinkedHashMap[Any, Array[Option[Int]]] + val NaNTracker = Array[Option[Int]](None, None) for ((z, array) <- Array((0, keys1), (1, keys2))) { var i = 0 while (i < array.numElements()) { val key = array.get(i, keyType) - hashMap.get(key) match { - case Some(indexes) => - if (indexes(z).isEmpty) { - indexes(z) = Some(i) + keyType match { + case FloatType if key.asInstanceOf[Float].isNaN => + NaNTracker(z) = Some(i) + case DoubleType if key.asInstanceOf[Double].isNaN => + NaNTracker(z) = Some(i) + case _ => + hashMap.get(key) match { + case Some(indexes) => + if (indexes(z).isEmpty) { + indexes(z) = Some(i) + } + case None => + val indexes = Array[Option[Int]](None, None) + indexes(z) = Some(i) + hashMap.put(key, indexes) } - case None => - val indexes = Array[Option[Int]](None, None) - indexes(z) = Some(i) - hashMap.put(key, indexes) } i += 1 } } + if (NaNTracker(0).isDefined || NaNTracker(1).isDefined) { + keyType match { + case FloatType => + hashMap.put(Float.NaN, NaNTracker) + case DoubleType => + hashMap.put(Double.NaN, NaNTracker) + case _ => + } + } hashMap } diff --git a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out index 13cca708b8cbc..a54ff050e46e8 100644 --- a/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out +++ b/sql/core/src/test/resources/sql-tests/analyzer-results/typeCoercion/native/mapZipWith.sql.out @@ -17,7 +17,11 @@ CREATE TEMPORARY VIEW various_maps AS SELECT * FROM VALUES ( map('2016-11-15 20:54:00.000', '2016-11-12 20:54:00.000'), map('922337203685477897945456575809789456', 'text'), map(array(1L, 2L), array(1L, 2L)), map(array(1, 2), array(1, 2)), - map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)) + map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)), + map(float('NaN'), 1), + map(float('NaN'), 2), + map(float('Infinity'), 1), + map(float('Infinity'), 2) ) AS various_maps( boolean_map, tinyint_map, @@ -31,7 +35,9 @@ CREATE TEMPORARY VIEW various_maps AS SELECT * FROM VALUES ( timestamp_map, string_map1, string_map2, string_map3, string_map4, array_map1, array_map2, - struct_map1, struct_map2 + struct_map1, struct_map2, + float_nan_map1, float_nan_map2, + float_infinity_map1, float_infinity_map2 ) -- !query analysis CreateViewCommand `various_maps`, SELECT * FROM VALUES ( @@ -51,7 +57,11 @@ CreateViewCommand `various_maps`, SELECT * FROM VALUES ( map('2016-11-15 20:54:00.000', '2016-11-12 20:54:00.000'), map('922337203685477897945456575809789456', 'text'), map(array(1L, 2L), array(1L, 2L)), map(array(1, 2), array(1, 2)), - map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)) + map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)), + map(float('NaN'), 1), + map(float('NaN'), 2), + map(float('Infinity'), 1), + map(float('Infinity'), 2) ) AS various_maps( boolean_map, tinyint_map, @@ -65,11 +75,13 @@ CreateViewCommand `various_maps`, SELECT * FROM VALUES ( timestamp_map, string_map1, string_map2, string_map3, string_map4, array_map1, array_map2, - struct_map1, struct_map2 + struct_map1, struct_map2, + float_nan_map1, float_nan_map2, + float_infinity_map1, float_infinity_map2 ), false, false, LocalTempView, UNSUPPORTED, true - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -78,11 +90,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(tinyint_map#x as map), smallint_map#x, lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -91,11 +103,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(smallint_map#x as map), int_map#x, lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -104,11 +116,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(int_map#x as map), bigint_map#x, lambdafunction(struct(k, lambda k#xL, v1, lambda v1#x, v2, lambda v2#xL), lambda k#xL, lambda v1#x, lambda v2#xL, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -117,11 +129,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(double_map#x, cast(float_map#x as map), lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -130,11 +142,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(decimal_map1#x as map), cast(decimal_map2#x as map), lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -143,11 +155,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(decimal_map1#x, cast(int_map#x as map), lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -156,11 +168,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(decimal_map1#x as map), double_map#x, lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -169,11 +181,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(decimal_map2#x as map), cast(int_map#x as map), lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -182,11 +194,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(decimal_map2#x as map), double_map#x, lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -291,11 +303,11 @@ FROM various_maps -- !query analysis Project [map_zip_with(array_map1#x, cast(array_map2#x as map,array>), lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] -- !query @@ -304,8 +316,34 @@ FROM various_maps -- !query analysis Project [map_zip_with(cast(struct_map1#x as map,struct>), cast(struct_map2#x as map,struct>), lambdafunction(struct(k, lambda k#x, v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] +- SubqueryAlias various_maps - +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x]) - +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x] - +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] +- SubqueryAlias various_maps - +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x] + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] + + +-- !query +SELECT map_zip_with(float_nan_map1, float_nan_map2, (k, v1, v2) -> (v1, v2)) m +FROM various_maps +-- !query analysis +Project [map_zip_with(float_nan_map1#x, float_nan_map2#x, lambdafunction(named_struct(v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] ++- SubqueryAlias various_maps + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] + +- SubqueryAlias various_maps + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] + + +-- !query +SELECT map_zip_with(float_infinity_map1, float_infinity_map2, (k, v1, v2) -> (v1, v2)) m +FROM various_maps +-- !query analysis +Project [map_zip_with(float_infinity_map1#x, float_infinity_map2#x, lambdafunction(named_struct(v1, lambda v1#x, v2, lambda v2#x), lambda k#x, lambda v1#x, lambda v2#x, false)) AS m#x] ++- SubqueryAlias various_maps + +- View (`various_maps`, [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x]) + +- Project [cast(boolean_map#x as map) AS boolean_map#x, cast(tinyint_map#x as map) AS tinyint_map#x, cast(smallint_map#x as map) AS smallint_map#x, cast(int_map#x as map) AS int_map#x, cast(bigint_map#x as map) AS bigint_map#x, cast(decimal_map1#x as map) AS decimal_map1#x, cast(decimal_map2#x as map) AS decimal_map2#x, cast(double_map#x as map) AS double_map#x, cast(float_map#x as map) AS float_map#x, cast(date_map#x as map) AS date_map#x, cast(timestamp_map#x as map) AS timestamp_map#x, cast(string_map1#x as map) AS string_map1#x, cast(string_map2#x as map) AS string_map2#x, cast(string_map3#x as map) AS string_map3#x, cast(string_map4#x as map) AS string_map4#x, cast(array_map1#x as map,array>) AS array_map1#x, cast(array_map2#x as map,array>) AS array_map2#x, cast(struct_map1#x as map,struct>) AS struct_map1#x, cast(struct_map2#x as map,struct>) AS struct_map2#x, cast(float_nan_map1#x as map) AS float_nan_map1#x, cast(float_nan_map2#x as map) AS float_nan_map2#x, cast(float_infinity_map1#x as map) AS float_infinity_map1#x, cast(float_infinity_map2#x as map) AS float_infinity_map2#x] + +- Project [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] + +- SubqueryAlias various_maps + +- LocalRelation [boolean_map#x, tinyint_map#x, smallint_map#x, int_map#x, bigint_map#x, decimal_map1#x, decimal_map2#x, double_map#x, float_map#x, date_map#x, timestamp_map#x, string_map1#x, string_map2#x, string_map3#x, string_map4#x, array_map1#x, array_map2#x, struct_map1#x, struct_map2#x, float_nan_map1#x, float_nan_map2#x, float_infinity_map1#x, float_infinity_map2#x] diff --git a/sql/core/src/test/resources/sql-tests/inputs/typeCoercion/native/mapZipWith.sql b/sql/core/src/test/resources/sql-tests/inputs/typeCoercion/native/mapZipWith.sql index 1727ee725db2e..a0c0e10606f94 100644 --- a/sql/core/src/test/resources/sql-tests/inputs/typeCoercion/native/mapZipWith.sql +++ b/sql/core/src/test/resources/sql-tests/inputs/typeCoercion/native/mapZipWith.sql @@ -15,7 +15,11 @@ CREATE TEMPORARY VIEW various_maps AS SELECT * FROM VALUES ( map('2016-11-15 20:54:00.000', '2016-11-12 20:54:00.000'), map('922337203685477897945456575809789456', 'text'), map(array(1L, 2L), array(1L, 2L)), map(array(1, 2), array(1, 2)), - map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)) + map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)), + map(float('NaN'), 1), + map(float('NaN'), 2), + map(float('Infinity'), 1), + map(float('Infinity'), 2) ) AS various_maps( boolean_map, tinyint_map, @@ -29,7 +33,9 @@ CREATE TEMPORARY VIEW various_maps AS SELECT * FROM VALUES ( timestamp_map, string_map1, string_map2, string_map3, string_map4, array_map1, array_map2, - struct_map1, struct_map2 + struct_map1, struct_map2, + float_nan_map1, float_nan_map2, + float_infinity_map1, float_infinity_map2 ); SELECT map_zip_with(tinyint_map, smallint_map, (k, v1, v2) -> struct(k, v1, v2)) m @@ -76,3 +82,9 @@ FROM various_maps; SELECT map_zip_with(struct_map1, struct_map2, (k, v1, v2) -> struct(k, v1, v2)) m FROM various_maps; + +SELECT map_zip_with(float_nan_map1, float_nan_map2, (k, v1, v2) -> (v1, v2)) m +FROM various_maps; + +SELECT map_zip_with(float_infinity_map1, float_infinity_map2, (k, v1, v2) -> (v1, v2)) m +FROM various_maps; diff --git a/sql/core/src/test/resources/sql-tests/results/typeCoercion/native/mapZipWith.sql.out b/sql/core/src/test/resources/sql-tests/results/typeCoercion/native/mapZipWith.sql.out index a0bd111f6ba64..4359853e6f5c1 100644 --- a/sql/core/src/test/resources/sql-tests/results/typeCoercion/native/mapZipWith.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/typeCoercion/native/mapZipWith.sql.out @@ -17,7 +17,11 @@ CREATE TEMPORARY VIEW various_maps AS SELECT * FROM VALUES ( map('2016-11-15 20:54:00.000', '2016-11-12 20:54:00.000'), map('922337203685477897945456575809789456', 'text'), map(array(1L, 2L), array(1L, 2L)), map(array(1, 2), array(1, 2)), - map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)) + map(struct(1S, 2L), struct(1S, 2L)), map(struct(1, 2), struct(1, 2)), + map(float('NaN'), 1), + map(float('NaN'), 2), + map(float('Infinity'), 1), + map(float('Infinity'), 2) ) AS various_maps( boolean_map, tinyint_map, @@ -31,7 +35,9 @@ CREATE TEMPORARY VIEW various_maps AS SELECT * FROM VALUES ( timestamp_map, string_map1, string_map2, string_map3, string_map4, array_map1, array_map2, - struct_map1, struct_map2 + struct_map1, struct_map2, + float_nan_map1, float_nan_map2, + float_infinity_map1, float_infinity_map2 ) -- !query schema struct<> @@ -240,3 +246,21 @@ FROM various_maps struct,struct,v1:struct,v2:struct>>> -- !query output {{"col1":1,"col2":2}:{"k":{"col1":1,"col2":2},"v1":{"col1":1,"col2":2},"v2":{"col1":1,"col2":2}}} + + +-- !query +SELECT map_zip_with(float_nan_map1, float_nan_map2, (k, v1, v2) -> (v1, v2)) m +FROM various_maps +-- !query schema +struct>> +-- !query output +{NaN:{"v1":1,"v2":2}} + + +-- !query +SELECT map_zip_with(float_infinity_map1, float_infinity_map2, (k, v1, v2) -> (v1, v2)) m +FROM various_maps +-- !query schema +struct>> +-- !query output +{Infinity:{"v1":1,"v2":2}}