[Commits] 99e762c7faf: MDEV-26519: Improved histograms
revision-id: 99e762c7fafea895fcd2dbdd4fcf6cba75d80e5e (mariadb-10.6.1-324-g99e762c7faf) parent(s): 154e9c29bdebba50d693da353695d7f877f9092b author: Sergei Petrunia committer: Sergei Petrunia timestamp: 2021-12-03 18:08:10 +0300 message: MDEV-26519: Improved histograms Save extra information in the histogram: "target_histogram_size": nnn, "collected_at": "(date and time)", "collected_by": "(server version)", --- mysql-test/include/histogram_replaces.inc | 1 + mysql-test/include/json_hb_histogram.inc | 3 + mysql-test/main/statistics.result | 16 +- mysql-test/main/statistics.test | 22 +- mysql-test/main/statistics_json.result | 457 +++++++++++++++++++++++++++++- mysql-test/main/statistics_json.test | 9 +- sql/opt_histogram_json.cc | 114 ++++++-- sql/opt_histogram_json.h | 5 + 8 files changed, 576 insertions(+), 51 deletions(-) diff --git a/mysql-test/include/histogram_replaces.inc b/mysql-test/include/histogram_replaces.inc new file mode 100644 index 00000000000..4cea1b05709 --- /dev/null +++ b/mysql-test/include/histogram_replaces.inc @@ -0,0 +1 @@ +--source include/json_hb_histogram.inc diff --git a/mysql-test/include/json_hb_histogram.inc b/mysql-test/include/json_hb_histogram.inc new file mode 100644 index 00000000000..0805a7f0e53 --- /dev/null +++ b/mysql-test/include/json_hb_histogram.inc @@ -0,0 +1,3 @@ +# The time on ANALYSE FORMAT=JSON is rather variable + +--replace_regex /("(collected_at|collected_by)": )"[^"]*"/\1"REPLACED"/ diff --git a/mysql-test/main/statistics.result b/mysql-test/main/statistics.result index 313e9b843b3..43b28f464e1 100644 --- a/mysql-test/main/statistics.result +++ b/mysql-test/main/statistics.result @@ -1487,7 +1487,7 @@ set histogram_size=254; set histogram_type=@DOUBLE_PREC_TYPE; ANALYZE TABLE City; FLUSH TABLES; -select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE';; +select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE';; UPPER(db_name) WORLD UPPER(table_name) COUNTRYLANGUAGE UPPER(column_name) PERCENTAGE @@ -1498,9 +1498,8 @@ avg_length 4.0000 avg_frequency 2.7640 hist_size 100 hist_type SINGLE_PREC_HB -hex(histogram) 0000000000000000000000000101010101010101010202020303030304040404050505050606070707080809090A0A0B0C0D0D0E0E0F10111213131415161718191B1C1E202224292A2E33373B4850575F6A76818C9AA7B9C4CFDADFE5EBF0F4F8FAFCFF decode_histogram(hist_type,histogram) 0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.000,0.004,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.000,0.000,0.004,0.000,0.004,0.000,0.000,0.004,0.000,0.004,0.000,0.004,0.000,0.004,0.004,0.004,0.000,0.004,0.000,0.004,0.004,0.004,0.004,0.004,0.000,0.004,0.004,0.004,0.004,0.004,0.004,0.008,0.004,0.008,0.008,0.008,0.008,0.020,0.004,0.016,0.020,0.016,0.016,0.051,0.031,0.027,0.031,0.043,0.047,0.043,0.043,0.055,0.051,0.071,0.043,0.043,0.043,0.020,0.024,0.024,0.020,0.016,0.016,0.008,0.008,0.012,0.000 -select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION';; +select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION';; UPPER(db_name) WORLD UPPER(table_name) CITY UPPER(column_name) POPULATION @@ -1511,7 +1510,6 @@ avg_length 4.0000 avg_frequency 1.0467 hist_size 254 hist_type DOUBLE_PREC_HB -hex(histogram) 1F00A1002B023002350238023F02430249024E02520258025D02630268026E02720276027B02800285028C02920297029D02A102A802AC02B402BC02C402CC02D302DA02E302EA02F102F802010305030C03120319031F03290333033D0343034F03590363036D037803840390039A03A603B303C303D103E003F203020412042404330440045304600472047F049104A204B804C804DE04F2040A0526053F0558056F058E05B305D905F4051306380667068406AB06DA06020731075C079407C507F8072E085E08A508DF0824096909CC092E0A760AD50A400BA90B150CAD0C310D240E130F0E103B11B9126B14F0166B192F1CB71FFF240630483FC567 decode_histogram(hist_type,histogram) 0.00047,0.00198,0.00601,0.00008,0.00008,0.00005,0.00011,0.00006,0.00009,0.00008,0.00006,0.00009,0.00008,0.00009,0.00008,0.00009,0.00006,0.00006,0.00008,0.00008,0.00008,0.00011,0.00009,0.00008,0.00009,0.00006,0.00011,0.00006,0.00012,0.00012,0.00012,0.00012,0.00011,0.00011,0.00014,0.00011,0.00011,0.00011,0.00014,0.00006,0.00011,0.00009,0.00011,0.00009,0.00015,0.00015,0.00015,0.00009,0.00018,0.00015,0.00015,0.00015,0.00017,0.00018,0.00018,0.00015,0.00018,0.00020,0.00024,0.00021,0.00023,0.00027,0.00024,0.00024,0.00027,0.00023,0.00020,0.00029,0.00020,0.00027,0.00020,0.00027,0.00026,0.00034,0.00024,0.00034,0.00031,0.00037,0.00043,0.00038,0.00038,0.00035,0.00047,0.00056,0.00058,0.00041,0.00047,0.00056,0.00072,0.00044,0.00060,0.00072,0.00061,0.00072,0.00066,0.00085,0.00075,0.00078,0.00082,0.00073,0.00108,0.00089,0.00105,0.00105,0.00151,0.00150,0.00110,0.00145,0.00163,0.00160,0.00165,0.00232,0.00201,0.00371,0.00365,0.00383,0.00459,0.00583,0.00662,0.00984 ,0.00969,0.01080,0.01379,0.02063,0.04308,0.05960,0.15816,0.59464 set histogram_type=@SINGLE_PREC_TYPE; set histogram_size=0; @@ -1648,10 +1646,10 @@ test.t2 analyze status OK select db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, -hist_size, hist_type, HEX(histogram) +hist_size, hist_type, decode_histogram(hist_type,histogram) FROM mysql.column_stats; -db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type HEX(histogram) -test t2 id 1 1024 0.0000 8.0000 63 SINGLE_PREC_HB 03070B0F13171B1F23272B2F33373B3F43474B4F53575B5F63676B6F73777B7F83878B8F93979B9FA3A7ABAFB3B7BBBFC3C7CBCFD3D7DBDFE3E7EBEFF3F7FB +db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) +test t2 id 1 1024 0.0000 8.0000 63 SINGLE_PREC_HB 0.012,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016,0.016 set histogram_size=0; drop table t1, t2; set use_stat_tables=@save_use_stat_tables; @@ -1669,9 +1667,9 @@ Level Code Message select db_name, table_name, column_name, HEX(min_value), HEX(max_value), nulls_ratio, avg_frequency, -hist_size, hist_type, HEX(histogram) +hist_size, hist_type, decode_histogram(hist_type,histogram) FROM mysql.column_stats; -db_name table_name column_name HEX(min_value) HEX(max_value) nulls_ratio avg_frequency hist_size hist_type HEX(histogram) +db_name table_name column_name HEX(min_value) HEX(max_value) nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) test t1 a D879626AF872675F73E662F8 D879626AF872675F73E662F8 0.0000 1.0000 0 NULL NULL drop table t1; # diff --git a/mysql-test/main/statistics.test b/mysql-test/main/statistics.test index 5fde72cdbfa..1d431237e82 100644 --- a/mysql-test/main/statistics.test +++ b/mysql-test/main/statistics.test @@ -91,6 +91,7 @@ SELECT * FROM mysql.index_stats; SELECT COUNT(*) FROM t1; + SELECT * FROM mysql.column_stats WHERE db_name='test' AND table_name='t1' AND column_name='a'; SELECT MIN(t1.a), MAX(t1.a), @@ -187,6 +188,7 @@ DELETE FROM mysql.column_stats; set histogram_size=4; ANALYZE TABLE t1; +--source include/histogram_replaces.inc SELECT db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, @@ -200,6 +202,7 @@ set histogram_size=8; set histogram_type=@DOUBLE_PREC_TYPE; ANALYZE TABLE t1; +--source include/histogram_replaces.inc SELECT db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, @@ -668,8 +671,10 @@ ANALYZE TABLE City; FLUSH TABLES; --enable_result_log ---query_vertical select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE'; ---query_vertical select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION'; +--source include/histogram_replaces.inc +--query_vertical select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE'; +--source include/histogram_replaces.inc +--query_vertical select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION'; set histogram_type=@SINGLE_PREC_TYPE; set histogram_size=0; @@ -715,6 +720,7 @@ set histogram_size=10; analyze table t1 persistent for all; +--source include/histogram_replaces.inc select db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, @@ -741,6 +747,7 @@ show variables like 'histogram%'; analyze table t1 persistent for all; +--source include/histogram_replaces.inc select db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, @@ -786,10 +793,11 @@ set histogram_size=63; analyze table t2 persistent for all; +--source include/histogram_replaces.inc select db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, - hist_size, hist_type, HEX(histogram) + hist_size, hist_type, decode_histogram(hist_type,histogram) FROM mysql.column_stats; set histogram_size=0; @@ -807,10 +815,11 @@ insert into t1 values(unhex('D879626AF872675F73E662F8')); analyze table t1 persistent for all; show warnings; +--source include/histogram_replaces.inc select db_name, table_name, column_name, HEX(min_value), HEX(max_value), nulls_ratio, avg_frequency, - hist_size, hist_type, HEX(histogram) + hist_size, hist_type, decode_histogram(hist_type,histogram) FROM mysql.column_stats; drop table t1; @@ -974,6 +983,7 @@ INSERT INTO t1 SELECT id+9192 FROM t1; --echo # This query will should show a full table scan analysis. --echo # ANALYZE TABLE t1; +--source include/histogram_replaces.inc select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency, DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; @@ -984,6 +994,7 @@ set analyze_sample_percentage=0.1; --echo # This query will show an innacurate avg_frequency value. --echo # ANALYZE TABLE t1; +--source include/histogram_replaces.inc select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency, DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; @@ -993,6 +1004,7 @@ from mysql.column_stats; --echo # set analyze_sample_percentage=25; ANALYZE TABLE t1; +--source include/histogram_replaces.inc select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency, DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; @@ -1003,6 +1015,7 @@ set analyze_sample_percentage=0; --echo # Test self adjusting sampling level. --echo # ANALYZE TABLE t1; +--source include/histogram_replaces.inc select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency, DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; @@ -1014,6 +1027,7 @@ explain select * from t1; set analyze_sample_percentage=100; ANALYZE TABLE t1; +--source include/histogram_replaces.inc select table_name, column_name, min_value, max_value, nulls_ratio, avg_length, avg_frequency, DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; diff --git a/mysql-test/main/statistics_json.result b/mysql-test/main/statistics_json.result index 7ad6827711b..127ac6feb4b 100644 --- a/mysql-test/main/statistics_json.result +++ b/mysql-test/main/statistics_json.result @@ -234,6 +234,9 @@ FROM mysql.column_stats ORDER BY db_name, table_name, column_name; db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) test t1 a 0 49 0.0000 1.0000 4 JSON_HB { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0", @@ -259,6 +262,9 @@ test t1 a 0 49 0.0000 1.0000 4 JSON_HB { ] } test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 4 JSON_HB { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "vvvvvvvvvvvvv", @@ -284,6 +290,9 @@ test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 4 JSON_HB { ] } test t1 c aaaa dddddddd 0.1250 7.0000 4 JSON_HB { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "aaaa", @@ -309,6 +318,9 @@ test t1 c aaaa dddddddd 0.1250 7.0000 4 JSON_HB { ] } test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 3 JSON_HB { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1989-03-12", @@ -329,6 +341,9 @@ test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 3 JSON_HB { ] } test t1 e 0.01 0.112 0.2250 6.2000 4 JSON_HB { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0.01", @@ -354,6 +369,9 @@ test t1 e 0.01 0.112 0.2250 6.2000 4 JSON_HB { ] } test t1 f 1 5 0.2000 6.4000 4 JSON_HB { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "\u0001", @@ -393,6 +411,9 @@ FROM mysql.column_stats ORDER BY db_name, table_name, column_name; db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) test t1 a 0 49 0.0000 1.0000 7 JSON_HB { + "target_histogram_size": 8, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0", @@ -433,6 +454,9 @@ test t1 a 0 49 0.0000 1.0000 7 JSON_HB { ] } test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 5 JSON_HB { + "target_histogram_size": 8, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "vvvvvvvvvvvvv", @@ -463,6 +487,9 @@ test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 5 JSON_HB { ] } test t1 c aaaa dddddddd 0.1250 7.0000 5 JSON_HB { + "target_histogram_size": 8, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "aaaa", @@ -493,6 +520,9 @@ test t1 c aaaa dddddddd 0.1250 7.0000 5 JSON_HB { ] } test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 4 JSON_HB { + "target_histogram_size": 8, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1989-03-12", @@ -518,6 +548,9 @@ test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 4 JSON_HB { ] } test t1 e 0.01 0.112 0.2250 6.2000 5 JSON_HB { + "target_histogram_size": 8, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0.01", @@ -548,6 +581,9 @@ test t1 e 0.01 0.112 0.2250 6.2000 5 JSON_HB { ] } test t1 f 1 5 0.2000 6.4000 5 JSON_HB { + "target_histogram_size": 8, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "\u0001", @@ -1811,7 +1847,7 @@ set histogram_size=254; set histogram_type=@DOUBLE_PREC_TYPE; ANALYZE TABLE City; FLUSH TABLES; -select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE';; +select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='COUNTRYLANGUAGE' and UPPER(column_name) = 'PERCENTAGE';; UPPER(db_name) WORLD UPPER(table_name) COUNTRYLANGUAGE UPPER(column_name) PERCENTAGE @@ -1822,8 +1858,10 @@ avg_length 4.0000 avg_frequency 2.7640 hist_size 85 hist_type JSON_HB -hex(histogram) 7B0A202022686973746F6772616D5F6862223A205B0A202020207B0A202020202020227374617274223A2022302E30222C0A2020202020202273697A65223A20302E3036363035363931312C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E31222C0A2020202020202273697A65223A20302E3032303332353230332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E32222C0A2020202020202273697A65223A20302E3032323335373732342C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E33222C0A2020202020202273697A65223A20302E3031373237363432332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E34222C0A2020202020202273697A65223A20302E3032353430363530342C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E35222C0A2020202020202273697A65223A20302E3032303332353230332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A20 2020202020227374617274223A2022302E36222C0A2020202020202273697A65223A20302E3032303332353230332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E37222C0A2020202020202273697A65223A20302E3031373237363432332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022312E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022312E33222C0A2020202020202273697A65223A20302 E3031323139353132322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E34222C0A2020202020202273697A65223A20302E3031353234333930322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E35222C0A2020202020202273697A65223A20302E3030353038313330312C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E36222C0A2020202020202273697A65223A20302E3031353234333930322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022312E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020 207B0A202020202020227374617274223A2022322E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022322E32222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E33222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E34222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E35222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E38222C0A2020202020202273697A652 23A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022332E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E32222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E33222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022332E35222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022332E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C 0A202020207B0A202020202020227374617274223A2022342E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022342E34222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022342E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022342E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A2022352E33222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022352E35222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022352E37222C0A202020202020227 3697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022362E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A2022362E34222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022362E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A2022372E32222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022372E34222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022372E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A2020 20207D2C0A202020207B0A202020202020227374617274223A2022382E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022382E35222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022382E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022392E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022392E35222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A202231302E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231302E38222C0A202 0202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231312E34222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202231322E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231322E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202231332E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231342E36222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202231362E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A2020202020 20226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202231372E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202231392E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202232302E33222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202232322E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202232332E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202232392E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227 374617274223A202233322E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202233342E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202233392E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202234342E36222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A202234392E31222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202235322E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202235382E34222C0A2020202020202273697A65223A20 302E3031303136323630322C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A202236342E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202236392E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A202237362E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202238302E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202238352E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202238372E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20390A2 02020207D2C0A202020207B0A202020202020227374617274223A202238392E35222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202239322E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239332E36222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202239352E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239362E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239382E30222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A20223939 2E30222C0A2020202020202273697A65223A20302E3030363039373536312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A202239392E39222C0A20202020202022656E64223A202239392E39222C0A2020202020202273697A65223A20302E3031353234333930322C0A202020202020226E6476223A20310A202020207D0A20205D0A7D decode_histogram(hist_type,histogram) { + "target_histogram_size": 100, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0.0", @@ -2253,7 +2291,7 @@ decode_histogram(hist_type,histogram) { } ] } -select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,hex(histogram),decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION';; +select UPPER(db_name),UPPER(table_name),UPPER(column_name),min_value,max_value,nulls_ratio,avg_length,avg_frequency,hist_size,hist_type,decode_histogram(hist_type,histogram) from mysql.column_stats where UPPER(db_name)='WORLD' and UPPER(table_name)='CITY' and UPPER(column_name) = 'POPULATION';; UPPER(db_name) WORLD UPPER(table_name) CITY UPPER(column_name) POPULATION @@ -2264,8 +2302,10 @@ avg_length 4.0000 avg_frequency 1.0467 hist_size 240 hist_type JSON_HB -hex(histogram) 7B0A202022686973746F6772616D5F6862223A205B0A202020207B0A202020202020227374617274223A20223432222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231363336222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202235383038222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223136323433222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223239303334222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223731303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A20 2020207D2C0A202020207B0A202020202020227374617274223A20223839323030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223839343437222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A20223930303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031310A202020207D2C0A202020207B0A202020202020227374617274223A20223930353030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223930383134222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223931313030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A2020202020202 27374617274223A20223931373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223932303434222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223932353734222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223932393838222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223933333432222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223933393030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223934323030222C0A20 20202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223934373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223935303532222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223935353231222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223936313030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223936363236222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223936393338222C0A2020202020202273697A65223A20302E3030343 136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223937333030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223937393239222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223938323933222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223938363430222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223939333030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223939373831222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E647622 3A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313030313138222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313030343930222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313030393234222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031320A202020207D2C0A202020207B0A202020202020227374617274223A2022313031323935222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313031363630222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313032313231222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A2 02020207B0A202020202020227374617274223A2022313032333739222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313032383230222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313033333030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313033363533222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313034343030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313035303830222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A20202020202022 7374617274223A2022313035353330222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313036303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313036343030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313036393936222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313037333239222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313037373730222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223130383 23534222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313038363030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313039323235222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313039363030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313130303334222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313130373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313131343534222C0A20202020202022 73697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031320A202020207D2C0A202020207B0A202020202020227374617274223A2022313132303037222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313132363733222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313133343934222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313134303635222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313134383135222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313135343833222C0A2020202020202273697A65223A20302E3030343 136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313136313332222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313136363935222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313137323538222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313138303830222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313138383135222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313139333931222C0A2020202020202273697A65223A20302E3030343136373638382C0A2020202020 20226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313139393930222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313230373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313231313937222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313231383432222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313232343030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313233323733222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202 020207D2C0A202020207B0A202020202020227374617274223A2022313233373736222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313234303732222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313234363030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313235323336222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313235373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313236323832222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A20 2020202020227374617274223A2022313236383732222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313237333530222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313237383938222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313238363531222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313239363838222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313330323135222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223 A2022313331313439222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313332313237222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313332383230222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313333343433222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313333393336222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313334383335222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313336303632222C0A20 20202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313337303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313337373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313338343138222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313339333537222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313430313639222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313431313332222C0A2020202020202273697A65223A2 0302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313432313730222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313432393930222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313434313236222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313435313530222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313436313035222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313437313234222C0A2020202020202273697A65223A20302E3030343136373638382C 0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313437393339222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313438383637222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313439393030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313531303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313532313934222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313533333434222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223 A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313534393830222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313535393431222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313537333538222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313538373230222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313630333539222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313631353030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A20 2020207B0A202020202020227374617274223A2022313633313030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313634333637222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313635353833222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313637313833222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313638393533222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313730313233222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227 374617274223A2022313731333633222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313732363438222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313733383738222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313734393834222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313736353736222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313738323030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231373932 3538222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313830343030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313832313438222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313833323631222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313834353030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313835393531222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313837353537222C0A202020202020227 3697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313839303336222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313930323535222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313932353039222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313934313030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313935343638222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313937303030222C0A2020202020202273697A65223A20302E30303431 36373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313939303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323030393031222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323032343531222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323034393030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323036333338222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323038303534222C0A2020202020202273697A65223A20302E3030343136373638382C0A20202020202 0226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323131303638222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323133323731222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323135333733222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323137343939222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323139373631222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323232303330222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A2020 20207D2C0A202020207B0A202020202020227374617274223A2022323234303434222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323236353733222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323239323132222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323332383131222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323335373630222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323339313234222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202 020202020227374617274223A2022323431373639222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323433383235222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323436353335222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323439323030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323533353837222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323535363137222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A 2022323539353337222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323632393437222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323635323131222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323639333933222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323732303538222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323735393930222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323738383239222C0A202 0202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323832313937222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323836383438222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323931303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022323934313235222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323939313138222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333031353034222C0A2020202020202273697A65223A20 302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333035363939222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333131323030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333135303833222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333139333733222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333234363632222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333238373131222C0A2020202020202273697A65223A20302E3030343136373638382C0 A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333332383030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333337393636222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333432323030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333438313030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333533343030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333538363633222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A 2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333632343730222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333636373132222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333735303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333831373235222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333836323336222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333935343032222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202 020207B0A202020202020227374617274223A2022343033313531222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343131353432222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343139303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343235353739222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343333313830222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343431363439222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A2020202020202273 74617274223A2022343530313830222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343539383834222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343639353333222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343736363638222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343833313535222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343935353430222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353130303 030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353230303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022353330393635222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353534363336222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353638383535222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022353837323131222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363036393332222C0A2020202020202273 697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363234323639222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363530313030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363639313831222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373031383237222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373238303630222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373632303030222C0A2020202020202273697A65223A20302E303034313 6373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373934323436222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022383330303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022383739303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393437343833222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231303032323339222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231303630323537222C0A2020202020202273697A65223A20302E3030343136373638382C0A20202020 2020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231313139313137222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231313836393236222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231323438373030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231333436313736222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231343538343833222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231363135333639222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E64762 23A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231383631323635222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202232313137353030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202232353030303030222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202232383936303136222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202234303137373333222C0A2020202020202273697A65223A20302E3030343136373638382C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202236373538383435222C0A20202020202022656E64223A20223130353030303030222C0A2020202020202273697A65223A20302E303033 39323235332C0A202020202020226E6476223A2031360A202020207D0A20205D0A7D decode_histogram(hist_type,histogram) { + "target_histogram_size": 254, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "42", @@ -3542,6 +3582,9 @@ FROM mysql.column_stats ORDER BY db_name, table_name, column_name; db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) test t1 a 1 3 0.0000 1.0000 3 JSON_HB { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -3587,6 +3630,9 @@ FROM mysql.column_stats ORDER BY db_name, table_name, column_name; db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) test t1 a 1 5 0.0000 1.0000 5 JSON_HB { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -3653,10 +3699,332 @@ test.t2 analyze status OK select db_name, table_name, column_name, min_value, max_value, nulls_ratio, avg_frequency, -hist_size, hist_type, HEX(histogram) +hist_size, hist_type, decode_histogram(hist_type,histogram) FROM mysql.column_stats; -db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type HEX(histogram) -test t2 id 1 1024 0.0000 8.0000 63 JSON_HB 7B0A202022686973746F6772616D5F6862223A205B0A202020207B0A202020202020227374617274223A202231222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223137222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223333222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A20223530222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223636222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223832222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A20 2020207D2C0A202020207B0A202020202020227374617274223A20223939222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313135222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313332222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313438222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313634222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022313831222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223139372 22C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323133222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022323330222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323436222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323633222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323739222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323935222C0A2020202020202273697A65223A20302E3031353939313231312C0A20 2020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022333132222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333238222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333434222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022333631222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333737222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333934222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A20202 0202020227374617274223A2022343130222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343236222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022343433222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343539222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343735222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022343932222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353038222C0A2020202020202273697A65 223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353235222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353431222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353537222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022353734222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353930222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363036222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A20313 80A202020207D2C0A202020207B0A202020202020227374617274223A2022363233222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363339222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363536222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363732222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363838222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022373035222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022 373231222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373337222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022373534222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373730222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373837222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383033222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383139222C0A2020202020202273697A65223A20302E30313539393132313 12C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022383336222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383532222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383638222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022383835222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393031222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393138222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B 0A202020202020227374617274223A2022393334222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393530222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A2022393637222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393833222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393939222C0A2020202020202273697A65223A20302E3031353939313231312C0A202020202020226E6476223A2031380A202020207D2C0A202020207B0A202020202020227374617274223A202231303136222C0A20202020202022656E64223A202231303234222C0A2020202020202273697A65223A20302E3030383534343932322C0A202020202020226E6476223A20390A202020207D0A20205D0A7D +db_name table_name column_name min_value max_value nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) +test t2 id 1 1024 0.0000 8.0000 63 JSON_HB { + "target_histogram_size": 63, + "collected_at": "REPLACED", + "collected_by": "REPLACED", + "histogram_hb": [ + { + "start": "1", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "17", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "33", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "50", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "66", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "82", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "99", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "115", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "132", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "148", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "164", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "181", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "197", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "213", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "230", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "246", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "263", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "279", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "295", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "312", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "328", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "344", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "361", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "377", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "394", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "410", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "426", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "443", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "459", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "475", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "492", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "508", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "525", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "541", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "557", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "574", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "590", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "606", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "623", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "639", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "656", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "672", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "688", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "705", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "721", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "737", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "754", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "770", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "787", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "803", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "819", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "836", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "852", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "868", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "885", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "901", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "918", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "934", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "950", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "967", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "983", + "size": 0.015991211, + "ndv": 17 + }, + { + "start": "999", + "size": 0.015991211, + "ndv": 18 + }, + { + "start": "1016", + "end": "1024", + "size": 0.008544922, + "ndv": 9 + } + ] +} set histogram_size=0; drop table t1, t2; set use_stat_tables=@save_use_stat_tables; @@ -3674,9 +4042,9 @@ Level Code Message select db_name, table_name, column_name, HEX(min_value), HEX(max_value), nulls_ratio, avg_frequency, -hist_size, hist_type, HEX(histogram) +hist_size, hist_type, decode_histogram(hist_type,histogram) FROM mysql.column_stats; -db_name table_name column_name HEX(min_value) HEX(max_value) nulls_ratio avg_frequency hist_size hist_type HEX(histogram) +db_name table_name column_name HEX(min_value) HEX(max_value) nulls_ratio avg_frequency hist_size hist_type decode_histogram(hist_type,histogram) test t1 a D879626AF872675F73E662F8 D879626AF872675F73E662F8 0.0000 1.0000 0 NULL NULL drop table t1; # @@ -3817,6 +4185,9 @@ DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram) t1 id 1 17384 0.0000 4.0000 14.0000 { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -3884,6 +4255,9 @@ DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram) t1 id 111 17026 0.0000 4.0000 10.4739 { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "111", @@ -3951,6 +4325,9 @@ DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram) t1 id 1 17384 0.0000 4.0000 14.0401 { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -4018,6 +4395,9 @@ DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram) t1 id 1 17384 0.0000 4.0000 13.9812 { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -4091,6 +4471,9 @@ DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; table_name column_name min_value max_value nulls_ratio avg_length avg_frequency DECODE_HISTOGRAM(hist_type, histogram) t1 id 1 17384 0.0000 4.0000 14.0000 { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -4189,6 +4572,9 @@ test.t1_json analyze status OK select * from mysql.column_stats where table_name='t1_json'; db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram test t1_json a a-0 a-9 0.0000 3.0000 1.0000 10 JSON_HB { + "target_histogram_size": 100, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "a-0", @@ -4336,7 +4722,7 @@ explain select * from t1_json limit 1; id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 Warnings: -Warning 4186 Failed to parse histogram for table test.t1_json: Histogram must have at least one bucket at offset 18. +Warning 4186 Failed to parse histogram for table test.t1_json: Histogram must have at least one bucket at offset 19. create table t2 ( city varchar(100) ); @@ -4381,6 +4767,9 @@ ANALYZE TABLE Country, City, CountryLanguage persistent for all; SELECT column_name, min_value, max_value, hist_size, hist_type, histogram FROM mysql.column_stats; column_name min_value max_value hist_size hist_type histogram Code ABW ZWE 48 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "ABW", @@ -4626,6 +5015,9 @@ Code ABW ZWE 48 JSON_HB { ] } Country ABW ZWE 39 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "ABW", @@ -4826,6 +5218,9 @@ Country ABW ZWE 39 JSON_HB { ] } Name Afghanistan Zimbabwe 48 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "Afghanistan", @@ -5071,6 +5466,9 @@ Name Afghanistan Zimbabwe 48 JSON_HB { ] } SurfaceArea 0.40 17075400.00 48 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0.40", @@ -5316,6 +5714,9 @@ SurfaceArea 0.40 17075400.00 48 JSON_HB { ] } Population 0 1277558000 48 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0", @@ -5561,6 +5962,9 @@ Population 0 1277558000 48 JSON_HB { ] } Capital 1 4074 47 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -5801,6 +6205,9 @@ Capital 1 4074 47 JSON_HB { ] } ID 1 4079 50 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -6056,6 +6463,9 @@ ID 1 4079 50 JSON_HB { ] } Name A Coruña (La Coruña) Ürgenc 50 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "A Coruña (La Coruña)", @@ -6311,6 +6721,9 @@ Name A Coruña (La Coruña) Ürgenc 50 JSON_HB { ] } Population 42 10500000 50 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "42", @@ -6566,6 +6979,9 @@ Population 42 10500000 50 JSON_HB { ] } Country ABW ZWE 50 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "ABW", @@ -6821,6 +7237,9 @@ Country ABW ZWE 50 JSON_HB { ] } Language Abhyasi [South]Mande 48 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "Abhyasi", @@ -7066,6 +7485,9 @@ Language Abhyasi [South]Mande 48 JSON_HB { ] } Percentage 0.0 99.9 47 JSON_HB { + "target_histogram_size": 50, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0.0", @@ -7342,6 +7764,9 @@ select histogram from mysql.column_stats where table_name='t10' and db_name=database(); histogram { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "Berlin", @@ -7391,6 +7816,9 @@ SELECT DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; DECODE_HISTOGRAM(hist_type, histogram) NULL { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -7450,6 +7878,9 @@ from mysql.column_stats where db_name=database() and table_name='t1'; decode_histogram(hist_type, histogram) { + "target_histogram_size": 10, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "Ñ", @@ -7512,6 +7943,9 @@ test.t1 analyze status OK select histogram from mysql.column_stats where table_name = 't1'; histogram { + "target_histogram_size": 4, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "1", @@ -7584,6 +8018,9 @@ test.t1 analyze status OK select * from mysql.column_stats where table_name='t1'; db_name table_name column_name min_value max_value nulls_ratio avg_length avg_frequency hist_size hist_type histogram test t1 a 0 900 0.0000 4.0000 100.0000 10 JSON_HB { + "target_histogram_size": 254, + "collected_at": "REPLACED", + "collected_by": "REPLACED", "histogram_hb": [ { "start": "0", diff --git a/mysql-test/main/statistics_json.test b/mysql-test/main/statistics_json.test index 21d8ebc3829..2b2a93f5465 100644 --- a/mysql-test/main/statistics_json.test +++ b/mysql-test/main/statistics_json.test @@ -8,7 +8,6 @@ let $histogram_type_override='JSON_HB'; --source include/have_innodb.inc --source include/have_stat_tables.inc --source include/have_sequence.inc ---source include/analyze-format.inc --disable_warnings drop table if exists t1; --enable_warnings @@ -33,6 +32,7 @@ set histogram_type=json_hb; create table t1_json (a varchar(255)); insert into t1_json select concat('a-', a) from ten; analyze table t1_json persistent for all; +--source include/json_hb_histogram.inc select * from mysql.column_stats where table_name='t1_json'; explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz'; analyze select * from t1_json where a between 'a-3a' and 'zzzzzzzzz'; @@ -134,6 +134,7 @@ set histogram_size=50; ANALYZE TABLE Country, City, CountryLanguage persistent for all; --enable_result_log +--source include/histogram_replaces.inc SELECT column_name, min_value, max_value, hist_size, hist_type, histogram FROM mysql.column_stats; analyze select * from Country use index () where Code between 'BBC' and 'GGG'; analyze select * from Country use index () where Code < 'BBC'; @@ -161,6 +162,7 @@ from mysql.column_stats where table_name='t10' and db_name=database(); insert into t10 values ('Berlin'),('Paris'),('Rome'); set histogram_size=10, histogram_type='json_hb'; analyze table t10 persistent for all; +--source include/histogram_replaces.inc select histogram from mysql.column_stats where table_name='t10' and db_name=database(); drop table t10; @@ -184,6 +186,7 @@ CREATE TABLE t1 (a INT, b INT); INSERT INTO t1 VALUES (NULL,1), (NULL,2); SET histogram_type = JSON_HB; ANALYZE TABLE t1 PERSISTENT FOR ALL; +--source include/histogram_replaces.inc SELECT DECODE_HISTOGRAM(hist_type, histogram) from mysql.column_stats; drop table t1; @@ -214,6 +217,7 @@ select hex(a) from t1; set histogram_type='json_hb'; analyze table t1 persistent for all; +--source include/histogram_replaces.inc select decode_histogram(hist_type, histogram) from mysql.column_stats where db_name=database() and table_name='t1'; @@ -228,6 +232,7 @@ create table t1 ( a varchar(100) character set cp1251); insert into t1 values ( _cp1251 x'88'),( _cp1251 x'98'); analyze table t1 persistent for all; +--source include/histogram_replaces.inc select hist_type, histogram from mysql.column_stats where db_name=database() and table_name='t1'; @@ -265,6 +270,7 @@ insert into t1 select 6 from seq_1_to_25; set histogram_size=4, histogram_type=JSON_HB; analyze table t1 persistent for all; +--source include/json_hb_histogram.inc select histogram from mysql.column_stats where table_name = 't1'; drop table t1; @@ -299,6 +305,7 @@ insert into t1 select 100*A.a from t0 A, t0 B, t0 C; select a, count(*) from t1 group by a order by a; set histogram_type=json_hb, histogram_size=default; analyze table t1 persistent for all; +--source include/json_hb_histogram.inc select * from mysql.column_stats where table_name='t1'; analyze select * from t1 where a=0; analyze select * from t1 where a=50; diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc index faf5ec314ab..572a65bc2ed 100644 --- a/sql/opt_histogram_json.cc +++ b/sql/opt_histogram_json.cc @@ -22,7 +22,13 @@ /* - Un-escape a JSON string and save it into *out. + @brief + Un-escape a JSON string and save it into *out. + + @detail + There's no way to tell how much space is needed for the output. + Start with a small string and increase its size until json_unescape() + succeeds. */ static bool json_unescape_to_string(const char *val, int val_len, String* out) @@ -55,7 +61,13 @@ static bool json_unescape_to_string(const char *val, int val_len, String* out) /* - Escape a JSON string and save it into *out. + @brief + Escape a JSON string and save it into *out. + + @detail + There's no way to tell how much space is needed for the output. + Start with a small string and increase its size until json_escape() + succeeds. */ static bool json_escape_to_string(const String *str, String* out) @@ -145,6 +157,8 @@ class Histogram_json_builder : public Histogram_builder bucket.size= 0; writer.start_object(); + append_histogram_params(); + writer.add_member(Histogram_json_hb::JSON_NAME).start_array(); } @@ -153,6 +167,27 @@ class Histogram_json_builder : public Histogram_builder private: bool bucket_is_empty() { return bucket.ndv == 0; } + void append_histogram_params() + { + char buf[128]; + + time_t cur_time_t= my_time(0); + struct tm curtime; + localtime_r(&cur_time_t, &curtime); + + my_snprintf(buf, sizeof(buf), "%d-%02d-%02d %2d:%02d:%02d %s", + curtime.tm_year + 1900, + curtime.tm_mon+1, + curtime.tm_mday, + curtime.tm_hour, + curtime.tm_min, + curtime.tm_sec, + curtime.tm_zone); + + writer.add_member("target_histogram_size").add_ull(hist_width); + writer.add_member("collected_at").add_str(buf); + writer.add_member("collected_by").add_str(server_version); + } /* Flush the current bucket out (to JSON output), and set it to be empty. */ @@ -423,6 +458,15 @@ class Json_saved_parser_state }; +/* + @brief + Read a constant from JSON document and save it in *out. + + @detail + The JSON document stores constant in text form, we need to save it in + KeyTupleFormat. String constants in JSON may be escaped. +*/ + bool read_bucket_endpoint(json_engine_t *je, Field *field, String *out, const char **err) { @@ -508,8 +552,9 @@ int Histogram_json_hb::parse_bucket(json_engine_t *je, Field *field, double size_d; longlong ndv_ll; StringBuffer<128> value_buf; + int rc; - while (!json_scan_next(je) && je->state != JST_OBJ_END) + while (!(rc= json_scan_next(je)) && je->state != JST_OBJ_END) { Json_saved_parser_state save1(je); Json_string start_str("start"); @@ -579,6 +624,9 @@ int Histogram_json_hb::parse_bucket(json_engine_t *je, Field *field, return 1; } + if (rc) + return 1; + if (!have_start) { *err= "\"start\" element not present"; @@ -625,13 +673,12 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, const char *db_name, json_engine_t je; int rc; const char *err= "JSON parse error"; - double total_size= 0.0; - int end_element= -1; + double total_size; + int end_element; bool end_assigned; DBUG_ENTER("Histogram_json_hb::parse"); DBUG_ASSERT(type_arg == JSON_HB); - Json_string hist_key_name(JSON_NAME); json_scan_start(&je, &my_charset_utf8mb4_bin, (const uchar*)hist_data, (const uchar*)hist_data+hist_data_len); @@ -645,32 +692,45 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, const char *db_name, goto err; } - if (json_scan_next(&je)) - goto err; - - if (je.state != JST_KEY || !json_key_matches(&je, hist_key_name.get())) + while (1) { - err= "Root element must be histogram_hb"; - goto err; - } + if (json_scan_next(&je)) + goto err; + if (je.state == JST_OBJ_END) + break; // End of object - if (json_scan_next(&je)) - goto err; + if (je.state != JST_KEY) + goto err; // Can' really have this: JSON object has keys in it - if (je.state != JST_ARRAY_START) - { - err= "histogram_hb must contain an array"; - goto err; - } + Json_string hist_key_name(JSON_NAME); + if (json_key_matches(&je, hist_key_name.get())) + { + total_size= 0.0; + end_element= -1; + if (json_scan_next(&je)) + goto err; - while (!(rc= parse_bucket(&je, field, &total_size, &end_assigned, &err))) - { - if (end_assigned && end_element != -1) - end_element= (int)buckets.size(); - } + if (je.state != JST_ARRAY_START) + { + err= "histogram_hb must contain an array"; + goto err; + } - if (rc > 0) // Got error other than EOF - goto err; + while (!(rc= parse_bucket(&je, field, &total_size, &end_assigned, &err))) + { + if (end_assigned && end_element != -1) + end_element= (int)buckets.size(); + } + if (rc > 0) // Got error other than EOF + goto err; + } + else + { + // Some unknown member. Skip it. + if (json_skip_key(&je)) + return 1; + } + } if (buckets.size() < 1) { diff --git a/sql/opt_histogram_json.h b/sql/opt_histogram_json.h index 347abcdf3bb..a2f8bdd37a5 100644 --- a/sql/opt_histogram_json.h +++ b/sql/opt_histogram_json.h @@ -24,6 +24,11 @@ Histogram format in JSON: { + // The next three are saved but not currently analyzed: + "target_histogram_size": nnn, + "collected_at": "(date and time)", + "collected_by": "(server version)", + "histogram_hb": [ { "start": "value", "size":nnn.nn, "ndv": nnn }, ...
participants (1)
-
psergey