HIVE-11696: Exception when table-level serde is Parquet while partition-level serde is JSON (Aihua Xu, reviewed by Chao Sun)
Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/d94c0f65 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/d94c0f65 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/d94c0f65 Branch: refs/heads/spark Commit: d94c0f65d85d1a0c6b31a75ecf1d1b805d823a32 Parents: d51c62a Author: Chao Sun <sunc...@apache.org> Authored: Wed Sep 9 12:56:24 2015 -0700 Committer: Chao Sun <sunc...@apache.org> Committed: Wed Sep 9 12:56:45 2015 -0700 ---------------------------------------------------------------------- .../serde/ParquetHiveArrayInspector.java | 12 + .../parquet_mixed_partition_formats.q | 42 +++ .../parquet_mixed_partition_formats.q.out | 303 +++++++++++++++++++ 3 files changed, 357 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/d94c0f65/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java index bde0dcb..05e92b5 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/parquet/serde/ParquetHiveArrayInspector.java @@ -68,6 +68,10 @@ public class ParquetHiveArrayInspector implements SettableListObjectInspector { } } + if (data instanceof List) { + return ((List)data).get(index); + } + throw new UnsupportedOperationException("Cannot inspect " + data.getClass().getCanonicalName()); } @@ -86,6 +90,10 @@ public class ParquetHiveArrayInspector implements SettableListObjectInspector { return array.length; } + if (data instanceof List) { + return ((List)data).size(); + } + throw new UnsupportedOperationException("Cannot inspect " + data.getClass().getCanonicalName()); } @@ -109,6 +117,10 @@ public class ParquetHiveArrayInspector implements SettableListObjectInspector { return list; } + if (data instanceof List) { + return (List<?>)data; + } + throw new UnsupportedOperationException("Cannot inspect " + data.getClass().getCanonicalName()); } http://git-wip-us.apache.org/repos/asf/hive/blob/d94c0f65/ql/src/test/queries/clientpositive/parquet_mixed_partition_formats.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/parquet_mixed_partition_formats.q b/ql/src/test/queries/clientpositive/parquet_mixed_partition_formats.q new file mode 100644 index 0000000..4d7d088 --- /dev/null +++ b/ql/src/test/queries/clientpositive/parquet_mixed_partition_formats.q @@ -0,0 +1,42 @@ +DROP TABLE if exists parquet_mixed_partition_formats; + +CREATE TABLE parquet_mixed_partition_formats ( + cint int, + ctinyint tinyint, + csmallint smallint, + cfloat float, + cdouble double, + cstring1 string, + t timestamp, + cchar char(5), + cvarchar varchar(10), + cbinary string, + m1 map<string, varchar(3)>, + l1 array<int>, + st1 struct<c1:int, c2:char(1)>, + d date) +PARTITIONED BY (dateint int) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '|' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':'; + +---- partition dateint=20140330 is stored as TEXTFILE +LOAD DATA LOCAL INPATH '../../data/files/parquet_types.txt' OVERWRITE INTO TABLE parquet_mixed_partition_formats PARTITION (dateint=20140330); + +SELECT * FROM parquet_mixed_partition_formats; + +DESCRIBE FORMATTED parquet_mixed_partition_formats PARTITION (dateint=20140330); + +---change table serde and file format to PARQUET---- + +ALTER TABLE parquet_mixed_partition_formats + SET FILEFORMAT + INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' + OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' + SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'; + +DESCRIBE FORMATTED parquet_mixed_partition_formats; +DESCRIBE FORMATTED parquet_mixed_partition_formats PARTITION (dateint=20140330); + +SELECT * FROM parquet_mixed_partition_formats; http://git-wip-us.apache.org/repos/asf/hive/blob/d94c0f65/ql/src/test/results/clientpositive/parquet_mixed_partition_formats.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/parquet_mixed_partition_formats.q.out b/ql/src/test/results/clientpositive/parquet_mixed_partition_formats.q.out new file mode 100644 index 0000000..a412350 --- /dev/null +++ b/ql/src/test/results/clientpositive/parquet_mixed_partition_formats.q.out @@ -0,0 +1,303 @@ +PREHOOK: query: DROP TABLE if exists parquet_mixed_partition_formats +PREHOOK: type: DROPTABLE +POSTHOOK: query: DROP TABLE if exists parquet_mixed_partition_formats +POSTHOOK: type: DROPTABLE +PREHOOK: query: CREATE TABLE parquet_mixed_partition_formats ( + cint int, + ctinyint tinyint, + csmallint smallint, + cfloat float, + cdouble double, + cstring1 string, + t timestamp, + cchar char(5), + cvarchar varchar(10), + cbinary string, + m1 map<string, varchar(3)>, + l1 array<int>, + st1 struct<c1:int, c2:char(1)>, + d date) +PARTITIONED BY (dateint int) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '|' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@parquet_mixed_partition_formats +POSTHOOK: query: CREATE TABLE parquet_mixed_partition_formats ( + cint int, + ctinyint tinyint, + csmallint smallint, + cfloat float, + cdouble double, + cstring1 string, + t timestamp, + cchar char(5), + cvarchar varchar(10), + cbinary string, + m1 map<string, varchar(3)>, + l1 array<int>, + st1 struct<c1:int, c2:char(1)>, + d date) +PARTITIONED BY (dateint int) +ROW FORMAT DELIMITED +FIELDS TERMINATED BY '|' +COLLECTION ITEMS TERMINATED BY ',' +MAP KEYS TERMINATED BY ':' +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@parquet_mixed_partition_formats +PREHOOK: query: ---- partition dateint=20140330 is stored as TEXTFILE +LOAD DATA LOCAL INPATH '../../data/files/parquet_types.txt' OVERWRITE INTO TABLE parquet_mixed_partition_formats PARTITION (dateint=20140330) +PREHOOK: type: LOAD +#### A masked pattern was here #### +PREHOOK: Output: default@parquet_mixed_partition_formats +POSTHOOK: query: ---- partition dateint=20140330 is stored as TEXTFILE +LOAD DATA LOCAL INPATH '../../data/files/parquet_types.txt' OVERWRITE INTO TABLE parquet_mixed_partition_formats PARTITION (dateint=20140330) +POSTHOOK: type: LOAD +#### A masked pattern was here #### +POSTHOOK: Output: default@parquet_mixed_partition_formats +POSTHOOK: Output: default@parquet_mixed_partition_formats@dateint=20140330 +PREHOOK: query: SELECT * FROM parquet_mixed_partition_formats +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_mixed_partition_formats +PREHOOK: Input: default@parquet_mixed_partition_formats@dateint=20140330 +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM parquet_mixed_partition_formats +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_mixed_partition_formats +POSTHOOK: Input: default@parquet_mixed_partition_formats@dateint=20140330 +#### A masked pattern was here #### +100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111 a a B4F3CAFDBEDD {"k1":"v1"} [101,200] {"c1":10,"c2":"a"} 2011-01-01 20140330 +101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222 ab ab 68692CCAC0BDE7 {"k2":"v2"} [102,200] {"c1":10,"c2":"d"} 2012-02-02 20140330 +102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333 abc abc B4F3CAFDBEDD {"k3":"v3"} [103,200] {"c1":10,"c2":"g"} 2013-03-03 20140330 +103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444 abcd abcd 68692CCAC0BDE7 {"k4":"v4"} [104,200] {"c1":10,"c2":"j"} 2014-04-04 20140330 +104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555 abcde abcde B4F3CAFDBEDD {"k5":"v5"} [105,200] {"c1":10,"c2":"m"} 2015-05-05 20140330 +105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666 abcde abcdef 68692CCAC0BDE7 {"k6":"v6"} [106,200] {"c1":10,"c2":"p"} 2016-06-06 20140330 +106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777 abcde abcdefg B4F3CAFDBEDD {"k7":"v7"} [107,200] {"c1":10,"c2":"s"} 2017-07-07 20140330 +107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888 bcdef abcdefgh 68692CCAC0BDE7 {"k8":"v8"} [108,200] {"c1":10,"c2":"v"} 2018-08-08 20140330 +108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999 cdefg B4F3CAFDBE 68656C6C6F {"k9":"v9"} [109,200] {"c1":10,"c2":"y"} 2019-09-09 20140330 +109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101 klmno abcdedef 68692CCAC0BDE7 {"k10":"v10"} [110,200] {"c1":10,"c2":"b"} 2020-10-10 20140330 +110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111 pqrst abcdede B4F3CAFDBEDD {"k11":"v11"} [111,200] {"c1":10,"c2":"e"} 2021-11-11 20140330 +111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121 nopqr abcded 68692CCAC0BDE7 {"k12":"v12"} [112,200] {"c1":10,"c2":"h"} 2022-12-12 20140330 +112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131 opqrs abcdd B4F3CAFDBEDD {"k13":"v13"} [113,200] {"c1":10,"c2":"k"} 2023-01-02 20140330 +113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141 pqrst abc 68692CCAC0BDE7 {"k14":"v14"} [114,200] {"c1":10,"c2":"n"} 2024-02-02 20140330 +114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151 qrstu b B4F3CAFDBEDD {"k15":"v15"} [115,200] {"c1":10,"c2":"q"} 2025-03-03 20140330 +115 1 1 1.0 4.5 qrs 2026-04-04 16:16:16.161616161 rstuv abcded 68692CCAC0BDE7 {"k16":"v16"} [116,200] {"c1":10,"c2":"q"} 2026-04-04 20140330 +116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171 stuvw abcded B4F3CAFDBEDD {"k17":"v17"} [117,200] {"c1":10,"c2":"w"} 2027-05-05 20140330 +117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181 tuvwx abcded 68692CCAC0BDE7 {"k18":"v18"} [118,200] {"c1":10,"c2":"z"} 2028-06-06 20140330 +118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191 uvwzy abcdede B4F3CAFDBEDD {"k19":"v19"} [119,200] {"c1":10,"c2":"c"} 2029-07-07 20140330 +119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202 vwxyz abcdede 68692CCAC0BDE7 {"k20":"v20"} [120,200] {"c1":10,"c2":"f"} 2030-08-08 20140330 +120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212 wxyza abcde B4F3CAFDBEDD {"k21":"v21"} [121,200] {"c1":10,"c2":"i"} 2031-09-09 20140330 +121 1 2 1.1 6.3 lmn 2032-10-10 22:22:22.222222222 bcdef abcde {"k22":"v22"} [122,200] {"c1":10,"c2":"l"} 2032-10-10 20140330 +PREHOOK: query: DESCRIBE FORMATTED parquet_mixed_partition_formats PARTITION (dateint=20140330) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@parquet_mixed_partition_formats +POSTHOOK: query: DESCRIBE FORMATTED parquet_mixed_partition_formats PARTITION (dateint=20140330) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@parquet_mixed_partition_formats +# col_name data_type comment + +cint int +ctinyint tinyint +csmallint smallint +cfloat float +cdouble double +cstring1 string +t timestamp +cchar char(5) +cvarchar varchar(10) +cbinary string +m1 map<string,varchar(3)> +l1 array<int> +st1 struct<c1:int,c2:char(1)> +d date + +# Partition Information +# col_name data_type comment + +dateint int + +# Detailed Partition Information +Partition Value: [20140330] +Database: default +Table: parquet_mixed_partition_formats +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE true + numFiles 1 + numRows 0 + rawDataSize 0 + totalSize 2521 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + colelction.delim , + field.delim | + mapkey.delim : + serialization.format | +PREHOOK: query: ---change table serde and file format to PARQUET---- + +ALTER TABLE parquet_mixed_partition_formats + SET FILEFORMAT + INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' + OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' + SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +PREHOOK: type: ALTERTABLE_FILEFORMAT +PREHOOK: Input: default@parquet_mixed_partition_formats +PREHOOK: Output: default@parquet_mixed_partition_formats +POSTHOOK: query: ---change table serde and file format to PARQUET---- + +ALTER TABLE parquet_mixed_partition_formats + SET FILEFORMAT + INPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' + OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat' + SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' +POSTHOOK: type: ALTERTABLE_FILEFORMAT +POSTHOOK: Input: default@parquet_mixed_partition_formats +POSTHOOK: Output: default@parquet_mixed_partition_formats +PREHOOK: query: DESCRIBE FORMATTED parquet_mixed_partition_formats +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@parquet_mixed_partition_formats +POSTHOOK: query: DESCRIBE FORMATTED parquet_mixed_partition_formats +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@parquet_mixed_partition_formats +# col_name data_type comment + +cint int +ctinyint tinyint +csmallint smallint +cfloat float +cdouble double +cstring1 string +t timestamp +cchar char(5) +cvarchar varchar(10) +cbinary string +m1 map<string,varchar(3)> +l1 array<int> +st1 struct<c1:int,c2:char(1)> +d date + +# Partition Information +# col_name data_type comment + +dateint int + +# Detailed Table Information +Database: default +#### A masked pattern was here #### +Retention: 0 +#### A masked pattern was here #### +Table Type: MANAGED_TABLE +Table Parameters: +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe +InputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + colelction.delim , + field.delim | + mapkey.delim : + serialization.format | +PREHOOK: query: DESCRIBE FORMATTED parquet_mixed_partition_formats PARTITION (dateint=20140330) +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@parquet_mixed_partition_formats +POSTHOOK: query: DESCRIBE FORMATTED parquet_mixed_partition_formats PARTITION (dateint=20140330) +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@parquet_mixed_partition_formats +# col_name data_type comment + +cint int +ctinyint tinyint +csmallint smallint +cfloat float +cdouble double +cstring1 string +t timestamp +cchar char(5) +cvarchar varchar(10) +cbinary string +m1 map<string,varchar(3)> +l1 array<int> +st1 struct<c1:int,c2:char(1)> +d date + +# Partition Information +# col_name data_type comment + +dateint int + +# Detailed Partition Information +Partition Value: [20140330] +Database: default +Table: parquet_mixed_partition_formats +#### A masked pattern was here #### +Partition Parameters: + COLUMN_STATS_ACCURATE true + numFiles 1 + numRows 0 + rawDataSize 0 + totalSize 2521 +#### A masked pattern was here #### + +# Storage Information +SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe +InputFormat: org.apache.hadoop.mapred.TextInputFormat +OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat +Compressed: No +Num Buckets: -1 +Bucket Columns: [] +Sort Columns: [] +Storage Desc Params: + colelction.delim , + field.delim | + mapkey.delim : + serialization.format | +PREHOOK: query: SELECT * FROM parquet_mixed_partition_formats +PREHOOK: type: QUERY +PREHOOK: Input: default@parquet_mixed_partition_formats +PREHOOK: Input: default@parquet_mixed_partition_formats@dateint=20140330 +#### A masked pattern was here #### +POSTHOOK: query: SELECT * FROM parquet_mixed_partition_formats +POSTHOOK: type: QUERY +POSTHOOK: Input: default@parquet_mixed_partition_formats +POSTHOOK: Input: default@parquet_mixed_partition_formats@dateint=20140330 +#### A masked pattern was here #### +100 1 1 1.0 0.0 abc 2011-01-01 01:01:01.111111111 a a B4F3CAFDBEDD {"k1":"v1"} [101,200] {"c1":10,"c2":"a"} 2011-01-01 20140330 +101 2 2 1.1 0.3 def 2012-02-02 02:02:02.222222222 ab ab 68692CCAC0BDE7 {"k2":"v2"} [102,200] {"c1":10,"c2":"d"} 2012-02-02 20140330 +102 3 3 1.2 0.6 ghi 2013-03-03 03:03:03.333333333 abc abc B4F3CAFDBEDD {"k3":"v3"} [103,200] {"c1":10,"c2":"g"} 2013-03-03 20140330 +103 1 4 1.3 0.9 jkl 2014-04-04 04:04:04.444444444 abcd abcd 68692CCAC0BDE7 {"k4":"v4"} [104,200] {"c1":10,"c2":"j"} 2014-04-04 20140330 +104 2 5 1.4 1.2 mno 2015-05-05 05:05:05.555555555 abcde abcde B4F3CAFDBEDD {"k5":"v5"} [105,200] {"c1":10,"c2":"m"} 2015-05-05 20140330 +105 3 1 1.0 1.5 pqr 2016-06-06 06:06:06.666666666 abcde abcdef 68692CCAC0BDE7 {"k6":"v6"} [106,200] {"c1":10,"c2":"p"} 2016-06-06 20140330 +106 1 2 1.1 1.8 stu 2017-07-07 07:07:07.777777777 abcde abcdefg B4F3CAFDBEDD {"k7":"v7"} [107,200] {"c1":10,"c2":"s"} 2017-07-07 20140330 +107 2 3 1.2 2.1 vwx 2018-08-08 08:08:08.888888888 bcdef abcdefgh 68692CCAC0BDE7 {"k8":"v8"} [108,200] {"c1":10,"c2":"v"} 2018-08-08 20140330 +108 3 4 1.3 2.4 yza 2019-09-09 09:09:09.999999999 cdefg B4F3CAFDBE 68656C6C6F {"k9":"v9"} [109,200] {"c1":10,"c2":"y"} 2019-09-09 20140330 +109 1 5 1.4 2.7 bcd 2020-10-10 10:10:10.101010101 klmno abcdedef 68692CCAC0BDE7 {"k10":"v10"} [110,200] {"c1":10,"c2":"b"} 2020-10-10 20140330 +110 2 1 1.0 3.0 efg 2021-11-11 11:11:11.111111111 pqrst abcdede B4F3CAFDBEDD {"k11":"v11"} [111,200] {"c1":10,"c2":"e"} 2021-11-11 20140330 +111 3 2 1.1 3.3 hij 2022-12-12 12:12:12.121212121 nopqr abcded 68692CCAC0BDE7 {"k12":"v12"} [112,200] {"c1":10,"c2":"h"} 2022-12-12 20140330 +112 1 3 1.2 3.6 klm 2023-01-02 13:13:13.131313131 opqrs abcdd B4F3CAFDBEDD {"k13":"v13"} [113,200] {"c1":10,"c2":"k"} 2023-01-02 20140330 +113 2 4 1.3 3.9 nop 2024-02-02 14:14:14.141414141 pqrst abc 68692CCAC0BDE7 {"k14":"v14"} [114,200] {"c1":10,"c2":"n"} 2024-02-02 20140330 +114 3 5 1.4 4.2 qrs 2025-03-03 15:15:15.151515151 qrstu b B4F3CAFDBEDD {"k15":"v15"} [115,200] {"c1":10,"c2":"q"} 2025-03-03 20140330 +115 1 1 1.0 4.5 qrs 2026-04-04 16:16:16.161616161 rstuv abcded 68692CCAC0BDE7 {"k16":"v16"} [116,200] {"c1":10,"c2":"q"} 2026-04-04 20140330 +116 2 2 1.1 4.8 wxy 2027-05-05 17:17:17.171717171 stuvw abcded B4F3CAFDBEDD {"k17":"v17"} [117,200] {"c1":10,"c2":"w"} 2027-05-05 20140330 +117 3 3 1.2 5.1 zab 2028-06-06 18:18:18.181818181 tuvwx abcded 68692CCAC0BDE7 {"k18":"v18"} [118,200] {"c1":10,"c2":"z"} 2028-06-06 20140330 +118 1 4 1.3 5.4 cde 2029-07-07 19:19:19.191919191 uvwzy abcdede B4F3CAFDBEDD {"k19":"v19"} [119,200] {"c1":10,"c2":"c"} 2029-07-07 20140330 +119 2 5 1.4 5.7 fgh 2030-08-08 20:20:20.202020202 vwxyz abcdede 68692CCAC0BDE7 {"k20":"v20"} [120,200] {"c1":10,"c2":"f"} 2030-08-08 20140330 +120 3 1 1.0 6.0 ijk 2031-09-09 21:21:21.212121212 wxyza abcde B4F3CAFDBEDD {"k21":"v21"} [121,200] {"c1":10,"c2":"i"} 2031-09-09 20140330 +121 1 2 1.1 6.3 lmn 2032-10-10 22:22:22.222222222 bcdef abcde {"k22":"v22"} [122,200] {"c1":10,"c2":"l"} 2032-10-10 20140330