[Commits] 8e804c24b79: MDEV-26590: Stack smashing/buffer overflow in Histogram_json_hb::parse
by psergey 13 Sep '21
by psergey 13 Sep '21
13 Sep '21
revision-id: 8e804c24b79d2e31138dcc6d9dc4ae3ea98bd948 (mariadb-10.6.1-130-g8e804c24b79)
parent(s): 0fe2cfd45e616e93d47aa9e224db468f32dd391a
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-13 14:55:10 +0300
message:
MDEV-26590: Stack smashing/buffer overflow in Histogram_json_hb::parse
Provide buffer of sufficent size.
---
mysql-test/main/statistics_json.test | 13 ++++++++++++-
sql/opt_histogram_json.cc | 13 ++++++++-----
2 files changed, 20 insertions(+), 6 deletions(-)
diff --git a/mysql-test/main/statistics_json.test b/mysql-test/main/statistics_json.test
index f279296b7d5..ecaeddbb3e6 100644
--- a/mysql-test/main/statistics_json.test
+++ b/mysql-test/main/statistics_json.test
@@ -170,5 +170,16 @@ set histogram_size=10, histogram_type='json_hb';
analyze table t10 persistent for all;
select histogram
from mysql.column_stats where table_name='t10' and db_name=database();
-
drop table t10;
+
+--echo #
+--echo # MDEV-26590: Stack smashing/buffer overflow in Histogram_json_hb::parse upon UPDATE on table with long VARCHAR
+--echo #
+
+CREATE TABLE t1 (b INT, a VARCHAR(3176));
+INSERT INTO t1 VALUES (1,'foo'),(2,'bar');
+SET histogram_type= JSON_HB;
+ANALYZE TABLE t1 PERSISTENT FOR ALL;
+SELECT * FROM t1;
+drop table t1;
+
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 979fca22a40..d4db1b95e53 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -272,6 +272,7 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
int obj1_len;
double cumulative_size= 0.0;
size_t end_member_index= (size_t)-1;
+ StringBuffer<128> value_buf;
if (JSV_OBJECT != json_type(hist_data, hist_data + hist_data_len,
&obj1, &obj1_len))
@@ -371,12 +372,13 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
}
- uchar buf[MAX_KEY_LENGTH];
+ //uchar buf[MAX_KEY_LENGTH];
uint len_to_copy= field->key_length();
field->store_text(val, val_len, &my_charset_bin);
- uint bytes= field->get_key_image(buf, len_to_copy, Field::itRAW);
+ value_buf.alloc(field->pack_length());
+ uint bytes= field->get_key_image((uchar*)value_buf.ptr(), len_to_copy, Field::itRAW);
- buckets.push_back({std::string((char*)buf, bytes), cumulative_size,
+ buckets.push_back({std::string(value_buf.ptr(), bytes), cumulative_size,
ndv_ll});
// Read the "end" field
@@ -393,8 +395,9 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
if (ret != JSV_NOTHING)
{
field->store_text(end_val, end_val_len, &my_charset_bin);
- uint bytes= field->get_key_image(buf, len_to_copy, Field::itRAW);
- last_bucket_end_endp.assign((char*)buf, bytes);
+ value_buf.alloc(field->pack_length());
+ uint bytes= field->get_key_image((uchar*)value_buf.ptr(), len_to_copy, Field::itRAW);
+ last_bucket_end_endp.assign(value_buf.ptr(), bytes);
if (end_member_index == (size_t)-1)
end_member_index= buckets.size();
}
1
0
revision-id: 0fe2cfd45e616e93d47aa9e224db468f32dd391a (mariadb-10.6.1-129-g0fe2cfd45e6)
parent(s): 5cbab7b371bd4a10eb6f8fd3e7d90339cc5653e3
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-11 19:43:08 +0300
message:
Address review input
---
mysql-test/main/statistics_json.result | 48 ++++++++++++++++++++++++++++++++++
mysql-test/main/statistics_json.test | 23 ++++++++++++++++
sql/opt_histogram_json.cc | 5 +++-
sql/opt_histogram_json.h | 6 ++---
4 files changed, 78 insertions(+), 4 deletions(-)
diff --git a/mysql-test/main/statistics_json.result b/mysql-test/main/statistics_json.result
index 05b9020d62f..067c2d47204 100644
--- a/mysql-test/main/statistics_json.result
+++ b/mysql-test/main/statistics_json.result
@@ -7397,3 +7397,51 @@ id select_type table type possible_keys key key_len ref rows r_rows filtered r_f
set histogram_type=@save_histogram_type;
set histogram_size=@save_histogram_size;
DROP SCHEMA world;
+use test;
+create table t10 (
+a varchar(10)
+);
+#
+# Histograms are not collected for empty tables:
+#
+analyze table t10 persistent for all;
+Table Op Msg_type Msg_text
+test.t10 analyze status Engine-independent statistics collected
+test.t10 analyze status Table is already up to date
+select histogram
+from mysql.column_stats where table_name='t10' and db_name=database();
+histogram
+NULL
+#
+# Try with n_buckets > n_rows
+#
+insert into t10 values ('Berlin'),('Paris'),('Rome');
+set histogram_size=10, histogram_type='json_hb';
+analyze table t10 persistent for all;
+Table Op Msg_type Msg_text
+test.t10 analyze status Engine-independent statistics collected
+test.t10 analyze status OK
+select histogram
+from mysql.column_stats where table_name='t10' and db_name=database();
+histogram
+{
+ "histogram_hb_v2": [
+ {
+ "start": "Berlin",
+ "size": 0.333333333,
+ "ndv": 1
+ },
+ {
+ "start": "Paris",
+ "size": 0.333333333,
+ "ndv": 1
+ },
+ {
+ "start": "Rome",
+ "end": "Rome",
+ "size": 0.333333333,
+ "ndv": 1
+ }
+ ]
+}
+drop table t10;
diff --git a/mysql-test/main/statistics_json.test b/mysql-test/main/statistics_json.test
index edb26219bcd..f279296b7d5 100644
--- a/mysql-test/main/statistics_json.test
+++ b/mysql-test/main/statistics_json.test
@@ -149,3 +149,26 @@ set histogram_type=@save_histogram_type;
set histogram_size=@save_histogram_size;
DROP SCHEMA world;
+use test;
+
+create table t10 (
+ a varchar(10)
+);
+
+--echo #
+--echo # Histograms are not collected for empty tables:
+--echo #
+analyze table t10 persistent for all;
+select histogram
+from mysql.column_stats where table_name='t10' and db_name=database();
+
+--echo #
+--echo # Try with n_buckets > n_rows
+--echo #
+insert into t10 values ('Berlin'),('Paris'),('Rome');
+set histogram_size=10, histogram_type='json_hb';
+analyze table t10 persistent for all;
+select histogram
+from mysql.column_stats where table_name='t10' and db_name=database();
+
+drop table t10;
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 3cfb8ae6b88..979fca22a40 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -59,6 +59,8 @@ class Histogram_json_builder : public Histogram_builder
: Histogram_builder(col, col_len, rows), histogram(hist)
{
bucket_capacity= records / histogram->get_width();
+ if (bucket_capacity == 0)
+ bucket_capacity= 1;
hist_width= histogram->get_width();
n_buckets_collected= 0;
bucket.ndv= 0;
@@ -227,7 +229,8 @@ class Histogram_json_builder : public Histogram_builder
writer.end_object();
Binary_string *json_string= (Binary_string *) writer.output.get_string();
histogram->set_json_text(n_buckets_collected,
- (uchar *) json_string->c_ptr());
+ json_string->c_ptr(),
+ (size_t)json_string->length());
}
};
diff --git a/sql/opt_histogram_json.h b/sql/opt_histogram_json.h
index 83f107c13ac..b673bcc6b95 100644
--- a/sql/opt_histogram_json.h
+++ b/sql/opt_histogram_json.h
@@ -113,11 +113,11 @@ class Histogram_json_hb : public Histogram_base
double range_selectivity(Field *field, key_range *min_endp,
key_range *max_endp) override;
- void set_json_text(ulonglong sz, uchar *json_text_arg)
+ void set_json_text(ulonglong sz, const char *json_text_arg,
+ size_t json_text_len)
{
size= (size_t) sz;
- json_text.assign((const char*)json_text_arg,
- strlen((const char*)json_text_arg));
+ json_text.assign(json_text_arg, json_text_len);
}
private:
1
0
[Commits] 5cbab7b371b: Fix the previous cset: next() should have element_count as parameter
by psergey 10 Sep '21
by psergey 10 Sep '21
10 Sep '21
revision-id: 5cbab7b371bd4a10eb6f8fd3e7d90339cc5653e3 (mariadb-10.6.1-128-g5cbab7b371b)
parent(s): 9cd4d76577a917c06a797ba2b758520a097f3355
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-10 20:02:46 +0300
message:
Fix the previous cset: next() should have element_count as parameter
---
sql/opt_histogram_json.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 2f4174ecf51..3cfb8ae6b88 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -141,7 +141,7 @@ class Histogram_json_builder : public Histogram_builder
@return
0 - OK
*/
- int next(void *elem, longlong elem_cnt) override
+ int next(void *elem, element_count elem_cnt) override
{
counters.next(elem, elem_cnt);
ulonglong count= counters.get_count();
1
0
revision-id: 9cd4d76577a917c06a797ba2b758520a097f3355 (mariadb-10.6.1-127-g9cd4d76577a)
parent(s): f46830e5b8ebebd907df170e80481487b713bb61
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-10 19:49:33 +0300
message:
Fix compile warnings/error on Windows
---
sql/opt_histogram_json.cc | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index db75c8e09bd..2f4174ecf51 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -104,7 +104,7 @@ class Histogram_json_builder : public Histogram_builder
@param elem The value we are writing
@param cnt The number of such values.
*/
- void start_bucket(void *elem, element_count cnt)
+ void start_bucket(void *elem, longlong cnt)
{
DBUG_ASSERT(bucket.size == 0);
column->store_field_value((uchar*) elem, col_length);
@@ -121,7 +121,7 @@ class Histogram_json_builder : public Histogram_builder
/*
Append a value group of cnt values.
*/
- void append_to_bucket(element_count cnt)
+ void append_to_bucket(longlong cnt)
{
bucket.ndv++;
bucket.size += cnt;
@@ -141,7 +141,7 @@ class Histogram_json_builder : public Histogram_builder
@return
0 - OK
*/
- int next(void *elem, element_count elem_cnt) override
+ int next(void *elem, longlong elem_cnt) override
{
counters.next(elem, elem_cnt);
ulonglong count= counters.get_count();
1
0
10 Sep '21
revision-id: f46830e5b8ebebd907df170e80481487b713bb61 (mariadb-10.6.1-126-gf46830e5b8e)
parent(s): 0984224d3ac33836f126464a46ff744bba3c786a
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-10 17:49:32 +0300
message:
Fixes in opt_histogram_json.cc in the last commits
Aslo add more test coverage
---
mysql-test/main/statistics_json.result | 54 ++++++++++++++++++++++--
mysql-test/main/statistics_json.test | 63 ++++++++++++++++++++++++++--
sql/opt_histogram_json.cc | 77 ++++++++++++++++++++++++----------
3 files changed, 167 insertions(+), 27 deletions(-)
diff --git a/mysql-test/main/statistics_json.result b/mysql-test/main/statistics_json.result
index 3b701b89a0c..05b9020d62f 100644
--- a/mysql-test/main/statistics_json.result
+++ b/mysql-test/main/statistics_json.result
@@ -4028,10 +4028,58 @@ analyze select * from t1_json where a > 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 10.00 0.00 Using where
drop table ten;
-UPDATE mysql.column_stats SET histogram='["a-1", "a-2", {"a": "b"}, "a-3"]' WHERE table_name='t1_json';
+UPDATE mysql.column_stats
+SET histogram='["not-what-you-expect"]' WHERE table_name='t1_json';
FLUSH TABLES;
-explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
-ERROR HY000: Failed to parse histogram: Root JSON element must be a JSON object at offset 12345.
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: Root JSON element must be a JSON object at offset 0.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":"not-histogram"}' WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: A JSON array expected at offset 0.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":["not-a-bucket"]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: Object expected at offset 19.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"no-expected-members":1}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: .start member must be present and be a scalar at offset 20.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":{}}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: .start member must be present and be a scalar at offset 20.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":"aaa", "size":"not-an-integer"}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: .size member must be present and be a scalar at offset 20.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":"aaa", "size":0.25}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: .ndv member must be present and be a scalar at offset 20.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":"aaa", "size":0.25, "ndv":1}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: .end must be present in the last bucket and only there at offset 0.
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+explain select * from t1_json limit 1;
+ERROR HY000: Failed to parse histogram: .end must be present in the last bucket and only there at offset 0.
create table t2 (
city varchar(100)
);
diff --git a/mysql-test/main/statistics_json.test b/mysql-test/main/statistics_json.test
index be223f5e4a4..edb26219bcd 100644
--- a/mysql-test/main/statistics_json.test
+++ b/mysql-test/main/statistics_json.test
@@ -39,12 +39,69 @@ analyze select * from t1_json where a > 'zzzzzzzzz';
drop table ten;
-# test different valid JSON strings that are invalid histograms.
-UPDATE mysql.column_stats SET histogram='["a-1", "a-2", {"a": "b"}, "a-3"]' WHERE table_name='t1_json';
+#
+# Test different valid JSON strings that are invalid histograms.
+#
+UPDATE mysql.column_stats
+SET histogram='["not-what-you-expect"]' WHERE table_name='t1_json';
FLUSH TABLES;
--error ER_JSON_HISTOGRAM_PARSE_FAILED
-explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":"not-histogram"}' WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":["not-a-bucket"]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"no-expected-members":1}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":{}}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":"aaa", "size":"not-an-integer"}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":"aaa", "size":0.25}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[{"start":"aaa", "size":0.25, "ndv":1}]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
+UPDATE mysql.column_stats
+SET histogram='{"histogram_hb_v2":[]}'
+WHERE table_name='t1_json';
+FLUSH TABLES;
+--error ER_JSON_HISTOGRAM_PARSE_FAILED
+explain select * from t1_json limit 1;
--source include/have_sequence.inc
create table t2 (
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 51007044814..db75c8e09bd 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -94,8 +94,8 @@ class Histogram_json_builder : public Histogram_builder
{
column->store_field_value((uchar*) elem, col_length);
StringBuffer<MAX_FIELD_WIDTH> val;
- column->val_str(&val);
- writer.add_member("end").add_str(val.c_ptr());
+ String *str= column->val_str(&val);
+ writer.add_member("end").add_str(str->c_ptr_safe());
finalize_bucket();
}
@@ -109,10 +109,10 @@ class Histogram_json_builder : public Histogram_builder
DBUG_ASSERT(bucket.size == 0);
column->store_field_value((uchar*) elem, col_length);
StringBuffer<MAX_FIELD_WIDTH> val;
- column->val_str(&val);
+ String *str= column->val_str(&val);
writer.start_object();
- writer.add_member("start").add_str(val.c_ptr());
+ writer.add_member("start").add_str(str->c_ptr_safe());
bucket.ndv= 1;
bucket.size= cnt;
@@ -264,14 +264,17 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
const char *err;
DBUG_ENTER("Histogram_json_hb::parse");
DBUG_ASSERT(type_arg == JSON_HB);
+ const char *err_pos= hist_data;
const char *obj1;
int obj1_len;
double cumulative_size= 0.0;
+ size_t end_member_index= (size_t)-1;
if (JSV_OBJECT != json_type(hist_data, hist_data + hist_data_len,
&obj1, &obj1_len))
{
err= "Root JSON element must be a JSON object";
+ err_pos= hist_data;
goto error;
}
@@ -281,6 +284,7 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
"histogram_hb_v2", &hist_array,
&hist_array_len))
{
+ err_pos= obj1;
err= "A JSON array expected";
goto error;
}
@@ -296,11 +300,13 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
break;
if (ret == JSV_BAD_JSON)
{
+ err_pos= hist_array;
err= "JSON parse error";
goto error;
}
if (ret != JSV_OBJECT)
{
+ err_pos= hist_array;
err= "Object expected";
goto error;
}
@@ -313,6 +319,7 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
"start", &val, &val_len);
if (ret != JSV_STRING && ret != JSV_NUMBER)
{
+ err_pos= bucket_info;
err= ".start member must be present and be a scalar";
goto error;
}
@@ -324,6 +331,7 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
"size", &size, &size_len);
if (ret != JSV_NUMBER)
{
+ err_pos= bucket_info;
err= ".size member must be present and be a scalar";
goto error;
}
@@ -333,6 +341,7 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
double size_d= my_strtod(size, &size_end, &conv_err);
if (conv_err)
{
+ err_pos= size;
err= ".size member must be a floating-point value";
goto error;
}
@@ -345,6 +354,7 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
"ndv", &ndv, &ndv_len);
if (ret != JSV_NUMBER)
{
+ err_pos= bucket_info;
err= ".ndv member must be present and be a scalar";
goto error;
}
@@ -352,41 +362,58 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
longlong ndv_ll= my_strtoll10(ndv, &ndv_end, &conv_err);
if (conv_err)
{
+ err_pos= ndv;
err= ".ndv member must be an integer value";
goto error;
}
+
+ uchar buf[MAX_KEY_LENGTH];
+ uint len_to_copy= field->key_length();
+ field->store_text(val, val_len, &my_charset_bin);
+ uint bytes= field->get_key_image(buf, len_to_copy, Field::itRAW);
+
+ buckets.push_back({std::string((char*)buf, bytes), cumulative_size,
+ ndv_ll});
+
+ // Read the "end" field
const char *end_val;
int end_val_len;
ret= json_get_object_key(bucket_info, bucket_info+bucket_info_len,
"end", &end_val, &end_val_len);
if (ret != JSV_NOTHING && ret != JSV_STRING && ret !=JSV_NUMBER)
{
+ err_pos= bucket_info;
err= ".end member must be a scalar";
goto error;
}
if (ret != JSV_NOTHING)
- last_bucket_end_endp.assign(end_val, end_val_len);
-
- buckets.push_back({std::string(val, val_len), NULL, cumulative_size,
- ndv_ll});
-
- if (buckets.size())
{
- auto& prev_bucket= buckets[buckets.size()-1];
- if (prev_bucket.ndv == 1)
- prev_bucket.end_value= &prev_bucket.start_value;
- else
- prev_bucket.end_value= &buckets.back().start_value;
+ field->store_text(end_val, end_val_len, &my_charset_bin);
+ uint bytes= field->get_key_image(buf, len_to_copy, Field::itRAW);
+ last_bucket_end_endp.assign((char*)buf, bytes);
+ if (end_member_index == (size_t)-1)
+ end_member_index= buckets.size();
}
}
- buckets.back().end_value= &last_bucket_end_endp;
size= buckets.size();
+ if (end_member_index != buckets.size())
+ {
+ err= ".end must be present in the last bucket and only there";
+ err_pos= hist_data;
+ goto error;
+ }
+ if (!buckets.size())
+ {
+ err= ".end member is allowed only in last bucket";
+ err_pos= hist_data;
+ goto error;
+ }
+
DBUG_RETURN(false);
error:
- my_error(ER_JSON_HISTOGRAM_PARSE_FAILED, MYF(0), err,
- 12345);
+ my_error(ER_JSON_HISTOGRAM_PARSE_FAILED, MYF(0), err, err_pos - hist_data);
DBUG_RETURN(true);
}
@@ -469,7 +496,7 @@ double Histogram_json_hb::point_selectivity(Field *field, key_range *endpoint,
* The bucket has one value and this is the value we are looking for.
* The bucket has multiple values. Then, assume
*/
- sel= (get_left_fract(idx) - buckets[idx].cum_fract) / buckets[idx].ndv;
+ sel= (buckets[idx].cum_fract - get_left_fract(idx)) / buckets[idx].ndv;
}
return sel;
}
@@ -483,6 +510,14 @@ double Histogram_json_hb::get_left_fract(int idx)
return buckets[idx-1].cum_fract;
}
+std::string& Histogram_json_hb::get_end_value(int idx)
+{
+ if (idx == (int)buckets.size()-1)
+ return last_bucket_end_endp;
+ else
+ return buckets[idx+1].start_value;
+}
+
/*
@param field The table field histogram is for. We don't care about the
field's current value, we only need its virtual functions to
@@ -514,7 +549,7 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
double left_fract= get_left_fract(idx);
double sel= position_in_interval(field, min_key, min_key_len,
buckets[idx].start_value,
- *buckets[idx].end_value);
+ get_end_value(idx));
min= left_fract + sel * (buckets[idx].cum_fract - left_fract);
}
@@ -538,7 +573,7 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
double left_fract= get_left_fract(idx);
double sel= position_in_interval(field, max_key, max_key_len,
buckets[idx].start_value,
- *buckets[idx].end_value);
+ get_end_value(idx));
max= left_fract + sel * (buckets[idx].cum_fract - left_fract);
}
else
1
0
10 Sep '21
revision-id: 0984224d3ac33836f126464a46ff744bba3c786a (mariadb-10.6.1-125-g0984224d3ac)
parent(s): 2dccb706369b4e523c8fb2dcef95ac83fbd71e0a
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-10 17:16:43 +0300
message:
Valgrind fixes, poor .result fixes, code cleanups
- Use String::c_ptr_safe() instead of String::c_ptr
- Do proper datatype conversions in Histogram_json_hb::parse
- Remove Histogram_json_hb::Bucket::end_value. Introduce
get_end_value() instead.
---
mysql-test/main/statistics_json.result | 8 ++++----
sql/opt_histogram_json.h | 4 +---
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/mysql-test/main/statistics_json.result b/mysql-test/main/statistics_json.result
index 75ba065f89b..3b701b89a0c 100644
--- a/mysql-test/main/statistics_json.result
+++ b/mysql-test/main/statistics_json.result
@@ -4013,12 +4013,12 @@ test t1_json a a-0 a-9 0.0000 3.0000 1.0000 10 JSON_HB {
}
explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 50.00 Using where
Warnings:
Note 1003 select `test`.`t1_json`.`a` AS `a` from `test`.`t1_json` where `test`.`t1_json`.`a` between 'a-3a' and 'zzzzzzzzz'
analyze select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 10.00 60.00 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 50.00 60.00 Using where
explain extended select * from t1_json where a < 'b-1a';
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 90.00 Using where
@@ -4053,12 +4053,12 @@ id select_type table type possible_keys key key_len ref rows r_rows filtered r_f
1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 50.00 98.02 Using where
explain extended select * from t2 where city = 'Helsinki';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t2 ALL NULL NULL NULL NULL 101 50.00 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 101 1.98 Using where
Warnings:
Note 1003 select `test`.`t2`.`city` AS `city` from `test`.`t2` where `test`.`t2`.`city` = 'Helsinki'
analyze select * from t2 where city = 'helsinki';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 50.00 1.98 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 1.98 1.98 Using where
explain extended select * from t2 where city < 'Lagos';
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 101 50.00 Using where
diff --git a/sql/opt_histogram_json.h b/sql/opt_histogram_json.h
index ed48d951a7f..83f107c13ac 100644
--- a/sql/opt_histogram_json.h
+++ b/sql/opt_histogram_json.h
@@ -61,9 +61,6 @@ class Histogram_json_hb : public Histogram_base
// value is in this bucket.
std::string start_value;
- // The right endpoint. It is non-inclusive, except for the last bucket.
- std::string *end_value;
-
// Cumulative fraction: The fraction of table rows that fall into this
// and preceding buckets.
double cum_fract;
@@ -125,6 +122,7 @@ class Histogram_json_hb : public Histogram_base
private:
double get_left_fract(int idx);
+ std::string& get_end_value(int idx);
int find_bucket(Field *field, const uchar *lookup_val, bool equal_is_less);
};
1
0
revision-id: 2dccb706369b4e523c8fb2dcef95ac83fbd71e0a (mariadb-10.6.1-124-g2dccb706369)
parent(s): e92d464e51f869144d683e19368762e74f5c7e98
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-10 14:59:32 +0300
message:
Fix compile error on windows
---
sql/opt_histogram_json.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 9461bd03dbf..51007044814 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -58,7 +58,7 @@ class Histogram_json_builder : public Histogram_builder
ha_rows rows)
: Histogram_builder(col, col_len, rows), histogram(hist)
{
- bucket_capacity= (double)records / histogram->get_width();
+ bucket_capacity= records / histogram->get_width();
hist_width= histogram->get_width();
n_buckets_collected= 0;
bucket.ndv= 0;
1
0
[Commits] e92d464e51f: MDEV-26519: JSON Histograms: improve histogram collection
by psergey 10 Sep '21
by psergey 10 Sep '21
10 Sep '21
revision-id: e92d464e51f869144d683e19368762e74f5c7e98 (mariadb-10.6.1-123-ge92d464e51f)
parent(s): bfdc2ee636901e6f4c86a94e082092e5edc931a1
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-10 10:45:04 +0300
message:
MDEV-26519: JSON Histograms: improve histogram collection
Basic ideas:
1. Store "popular" values in their own buckets.
2. Also store ndv (Number of Distinct Values) in each bucket.
Because of #1, the buckets are now variable-size, so store the size in
each bucket.
Adjust selectivity estimation functions accordingly.
---
mysql-test/main/statistics_json.result | 6538 ++++++++++++++++++++++++++------
sql/opt_histogram_json.cc | 453 ++-
sql/opt_histogram_json.h | 51 +-
3 files changed, 5723 insertions(+), 1319 deletions(-)
diff --git a/mysql-test/main/statistics_json.result b/mysql-test/main/statistics_json.result
index 102fcfff194..75ba065f89b 100644
--- a/mysql-test/main/statistics_json.result
+++ b/mysql-test/main/statistics_json.result
@@ -232,12 +232,12 @@ nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(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 t1 a 0 49 0.0000 1.0000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2230222C20223131222C20223234222C20223338222C20223439225D0A7D
-test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B0A202020202276767676767676767676767676222C0A202020202277777777777777777777777777777777777777777777777777777777222C0A20202020227878787878787878787878787878787878787878787878787878222C0A2020202022797979222C0A20202020227A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A220A20205D0A7D
-test t1 c aaaa dddddddd 0.1250 7.0000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2261616161222C202261616161222C2022636363636363636363222C20226464646464646464222C20226464646464646464225D0A7D
-test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B0A2020202022313938392D30332D3132222C0A2020202022313938392D30332D3132222C0A2020202022313939302D30352D3135222C0A2020202022313939382D30382D3238222C0A2020202022313939392D30372D3233220A20205D0A7D
-test t1 e 0.01 0.112 0.2250 6.2000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B22302E3031222C2022302E3031222C2022302E3035222C2022302E31222C2022302E313132225D0A7D
-test t1 f 1 5 0.2000 6.4000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2201222C202202222C202203222C202204222C202205225D0A7D
+test t1 a 0 49 0.0000 1.0000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202230222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A20223131222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A20223234222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A2031300A202020207D2C0A202020207B0A202020202020227374617274223A20223338222C0A20202020202022656E64223A20223439222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A2031300A202020207D0A20205D0A7D
+test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202276767676767676767676767676222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202277777777777777777777777777777777777777777777777777777777222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A20227878787878787878787878787878787878787878787878787878222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022797979222C0A20202020202022656E64223A20227A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D0A20205D0A7D
+test t1 c aaaa dddddddd 0.1250 7.0000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202261616161222C0A2020202020202273697A65223A20302E3235373134323835372C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022626262222C0A2020202020202273697A65223A20302E3232383537313432392C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022636363636363636363222C0A2020202020202273697A65223A20302E3232383537313432392C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A20226464646464646464222C0A20202020202022656E64223A20226464646464646464222C0A2020202020202273697A65223A20302E3238353731343238362C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A2022313938392D30332D3132222C0A2020202020202273697A65223A20302E3332333532393431322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022313939302D30352D3135222C0A2020202020202273697A65223A20302E3431313736343730362C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022313939382D30382D3238222C0A2020202020202273697A65223A20302E3233353239343131382C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022313939392D30372D3233222C0A20202020202022656E64223A2022313939392D30372D3233222C0A2020202020202273697A65223A20302E3032393431313736352C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 e 0.01 0.112 0.2250 6.2000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A2022302E3031222C0A2020202020202273697A65223A20302E3338373039363737342C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E303132222C0A2020202020202273697A65223A20302E3232353830363435322C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022302E31222C0A2020202020202273697A65223A20302E3235383036343531362C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E313132222C0A20202020202022656E64223A2022302E313132222C0A2020202020202273697A65223A20302E3132393033323235382C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 f 1 5 0.2000 6.4000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202201222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A202202222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A202203222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A202204222C0A20202020202022656E64223A202205222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20320A202020207D0A20205D0A7D
DELETE FROM mysql.column_stats;
set histogram_size=8;
set histogram_type=@DOUBLE_PREC_TYPE;
@@ -251,12 +251,12 @@ nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(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 t1 a 0 49 0.0000 1.0000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2230222C202235222C20223131222C20223138222C20223234222C20223332222C20223338222C20223433222C20223439225D0A7D
-test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B0A202020202276767676767676767676767676222C0A202020202276767676767676767676767676222C0A202020202277777777777777777777777777777777777777777777777777777777222C0A202020202277777777777777777777777777777777777777777777777777777777222C0A20202020227878787878787878787878787878787878787878787878787878222C0A2020202022797979222C0A2020202022797979222C0A20202020227A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A222C0A20202020227A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A220A20205D0A7D
-test t1 c aaaa dddddddd 0.1250 7.0000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B0A202020202261616161222C0A202020202261616161222C0A202020202261616161222C0A2020202022626262626262222C0A2020202022636363636363636363222C0A2020202022636363636363636363222C0A20202020226464646464646464222C0A20202020226464646464646464222C0A20202020226464646464646464220A20205D0A7D
-test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B0A2020202022313938392D30332D3132222C0A2020202022313938392D30332D3132222C0A2020202022313938392D30332D3132222C0A2020202022313939302D30352D3135222C0A2020202022313939302D30352D3135222C0A2020202022313939302D30352D3135222C0A2020202022313939382D30382D3238222C0A2020202022313939392D30372D3233222C0A2020202022313939392D30372D3233220A20205D0A7D
-test t1 e 0.01 0.112 0.2250 6.2000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B0A2020202022302E3031222C0A2020202022302E3031222C0A2020202022302E3031222C0A2020202022302E3031222C0A2020202022302E3035222C0A2020202022302E31222C0A2020202022302E31222C0A2020202022302E313132222C0A2020202022302E313132220A20205D0A7D
-test t1 f 1 5 0.2000 6.4000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2201222C202202222C202202222C202203222C202203222C202204222C202204222C202205222C202205225D0A7D
+test t1 a 0 49 0.0000 1.0000 8 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202230222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A202235222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A20223131222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A20223138222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A20223234222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A20223332222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A20223338222C0A202020202020227369
7A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A20223433222C0A20202020202022656E64223A20223439222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20350A202020207D0A20205D0A7D
+test t1 b vvvvvvvvvvvvv zzzzzzzzzzzzzzzzzz 0.2000 6.4000 5 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202276767676767676767676767676222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202277777777777777777777777777777777777777777777777777777777222C0A2020202020202273697A65223A20302E32313837352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A20227878787878787878787878787878787878787878787878787878222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022797979222C0A2020202020202273697A65223A20302E313837352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A20227A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A222C0A20202020202022656E64223A20227A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A7A222C0A2020202020202273697A65223A20302E3231
3837352C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 c aaaa dddddddd 0.1250 7.0000 5 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202261616161222C0A2020202020202273697A65223A20302E3235373134323835372C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022626262222C0A2020202020202273697A65223A20302E3032383537313432392C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022626262626262222C0A2020202020202273697A65223A20302E322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022636363636363636363222C0A2020202020202273697A65223A20302E3232383537313432392C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A20226464646464646464222C0A20202020202022656E64223A20226464646464646464222C0A2020202020202273697A65223A20302E3238353731343238362C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 d 1989-03-12 1999-07-23 0.1500 8.5000 4 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A2022313938392D30332D3132222C0A2020202020202273697A65223A20302E3332333532393431322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022313939302D30352D3135222C0A2020202020202273697A65223A20302E3431313736343730362C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022313939382D30382D3238222C0A2020202020202273697A65223A20302E3032393431313736352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022313939392D30372D3233222C0A20202020202022656E64223A2022313939392D30372D3233222C0A2020202020202273697A65223A20302E3233353239343131382C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 e 0.01 0.112 0.2250 6.2000 5 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A2022302E3031222C0A2020202020202273697A65223A20302E3338373039363737342C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E303132222C0A2020202020202273697A65223A20302E3036343531363132392C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E3035222C0A2020202020202273697A65223A20302E3136313239303332332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E31222C0A2020202020202273697A65223A20302E3235383036343531362C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E313132222C0A20202020202022656E64223A2022302E313132222C0A2020202020202273697A65223A20302E3132393033323235382C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
+test t1 f 1 5 0.2000 6.4000 5 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202201222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202202222C0A2020202020202273697A65223A20302E32352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202203222C0A2020202020202273697A65223A20302E313837352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202204222C0A2020202020202273697A65223A20302E333132352C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202205222C0A20202020202022656E64223A202205222C0A2020202020202273697A65223A20302E3132352C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
DELETE FROM mysql.column_stats;
set histogram_size= 0;
set histogram_type=@SINGLE_PREC_TYPE;
@@ -1500,112 +1500,477 @@ max_value 99.9
nulls_ratio 0.0000
avg_length 4.0000
avg_frequency 2.7640
-hist_size 100
+hist_size 93
hist_type JSON_HB
-hex(histogram) 7B0A202022686973746F6772616D5F68625F7631223A205B0A2020202022302E30222C0A2020202022302E30222C0A2020202022302E30222C0A2020202022302E30222C0A2020202022302E30222C0A2020202022302E30222C0A2020202022302E30222C0A2020202022302E31222C0A2020202022302E31222C0A2020202022302E32222C0A2020202022302E32222C0A2020202022302E33222C0A2020202022302E33222C0A2020202022302E34222C0A2020202022302E34222C0A2020202022302E34222C0A2020202022302E35222C0A2020202022302E35222C0A2020202022302E36222C0A2020202022302E36222C0A2020202022302E37222C0A2020202022302E38222C0A2020202022302E39222C0A2020202022312E30222C0A2020202022312E31222C0A2020202022312E33222C0A2020202022312E33222C0A2020202022312E34222C0A2020202022312E35222C0A2020202022312E36222C0A2020202022312E37222C0A2020202022312E38222C0A2020202022312E39222C0A2020202022322E30222C0A2020202022322E32222C0A2020202022322E33222C0A2020202022322E34222C0A2020202022322E35222C0A2020202022322E37222C0A2020202022322E38222C0A2020202022332E30222C0A2020202022332E32222C0A20202020
22332E33222C0A2020202022332E35222C0A2020202022332E37222C0A2020202022332E38222C0A2020202022342E31222C0A2020202022342E33222C0A2020202022342E37222C0A2020202022342E39222C0A2020202022352E33222C0A2020202022352E35222C0A2020202022352E37222C0A2020202022352E39222C0A2020202022362E34222C0A2020202022362E37222C0A2020202022372E30222C0A2020202022372E34222C0A2020202022372E36222C0A2020202022372E38222C0A2020202022382E32222C0A2020202022382E37222C0A2020202022392E30222C0A2020202022392E33222C0A2020202022392E37222C0A202020202231302E35222C0A202020202231312E30222C0A202020202231312E38222C0A202020202231322E34222C0A202020202231332E32222C0A202020202231342E30222C0A202020202231352E38222C0A202020202231362E35222C0A202020202231382E30222C0A202020202231392E37222C0A202020202232312E32222C0A202020202232332E32222C0A202020202232372E38222C0A202020202233312E30222C0A202020202233322E39222C0A202020202233362E34222C0A202020202234312E36222C0A202020202234352E37222C0A202020202235302E32222C0A202020202235322E36222C0A202020202236302E332
22C0A202020202236352E33222C0A202020202237322E31222C0A202020202237362E37222C0A202020202238312E32222C0A202020202238352E36222C0A202020202238372E36222C0A202020202238392E37222C0A202020202239322E31222C0A202020202239342E31222C0A202020202239352E38222C0A202020202239372E32222C0A202020202239382E31222C0A202020202239392E30222C0A202020202239392E39222C0A202020202239392E39220A20205D0A7D
+hex(histogram) 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A2022302E30222C0A2020202020202273697A65223A20302E3036363035363931312C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E31222C0A2020202020202273697A65223A20302E3032303332353230332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E32222C0A2020202020202273697A65223A20302E3032323335373732342C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E33222C0A2020202020202273697A65223A20302E3031373237363432332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E34222C0A2020202020202273697A65223A20302E3032353430363530342C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E35222C0A2020202020202273697A65223A20302E3032303332353230332C0A202020202020226E6476223A20310A202020207D2C0A20202020
7B0A202020202020227374617274223A2022302E36222C0A2020202020202273697A65223A20302E3032303332353230332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E37222C0A2020202020202273697A65223A20302E3031373237363432332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E38222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022302E39222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022312E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022312E32222C0A2020202020202273697A65223
A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022312E33222C0A2020202020202273697A65223A20302E3030353038313330312C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E34222C0A2020202020202273697A65223A20302E3031353234333930322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E35222C0A2020202020202273697A65223A20302E3030353038313330312C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E36222C0A2020202020202273697A65223A20302E3031353234333930322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E37222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022312E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A
202020207B0A202020202020227374617274223A2022312E39222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E32222C0A2020202020202273697A65223A20302E3031313137383836322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022322E33222C0A2020202020202273697A65223A20302E3031303136323630322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022322E34222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A2022322E35222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E36222C0A20202020202022736
97A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022322E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022322E39222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E32222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E33222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022332E35222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020
207D2C0A202020207B0A202020202020227374617274223A2022332E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022332E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022342E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022342E33222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022342E36222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022342E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022352E30222C0A202020202
0202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A2022352E34222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022352E36222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022352E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022362E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022362E34222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20320A202020207D2C0A202020207B0A202020202020227374617274223A2022362E36222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A2034
0A202020207D2C0A202020207B0A202020202020227374617274223A2022362E39222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A2022372E33222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022372E35222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022372E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022382E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022382E35222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20330A202020207D2C0A202020207B0A202020202020227374617274223A2022382E37222C0A2
020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022392E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022392E34222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A2022392E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231302E35222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231312E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231312E36222C0A2020202020202273697A65223A20302E3030393134363334312C0A20202020202022
6E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202231322E33222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231322E39222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202231332E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202231342E36222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202231362E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20350A202020207D2C0A202020207B0A202020202020227374617274223A202231362E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A2020202020202273746
17274223A202231382E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202231392E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202232312E32222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202232332E32222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202232372E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202233302E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202233322E33222C0A2020202020202273697A65223A20302E30
30393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202233342E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202233392E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202234332E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202234372E35222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202235302E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202235352E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2
C0A202020207B0A202020202020227374617274223A202236302E34222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20380A202020207D2C0A202020207B0A202020202020227374617274223A202236352E33222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202237312E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202237362E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202238302E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202238342E38222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202238362E36222C0A
2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20390A202020207D2C0A202020207B0A202020202020227374617274223A202238382E39222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239302E37222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239332E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239352E30222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202239352E39222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20370A202020207D2C0A202020207B0A202020202020227374617274223A202239372E33222C0A2020202020202273697A65223A20302E3030393134363334312C0A2020202
02020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202239382E31222C0A2020202020202273697A65223A20302E3030393134363334312C0A202020202020226E6476223A20360A202020207D2C0A202020207B0A202020202020227374617274223A202239392E30222C0A2020202020202273697A65223A20302E3030363039373536312C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A202239392E39222C0A20202020202022656E64223A202239392E39222C0A2020202020202273697A65223A20302E3031353234333930322C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
decode_histogram(hist_type,histogram) {
- "histogram_hb_v1": [
- "0.0",
- "0.0",
- "0.0",
- "0.0",
- "0.0",
- "0.0",
- "0.0",
- "0.1",
- "0.1",
- "0.2",
- "0.2",
- "0.3",
- "0.3",
- "0.4",
- "0.4",
- "0.4",
- "0.5",
- "0.5",
- "0.6",
- "0.6",
- "0.7",
- "0.8",
- "0.9",
- "1.0",
- "1.1",
- "1.3",
- "1.3",
- "1.4",
- "1.5",
- "1.6",
- "1.7",
- "1.8",
- "1.9",
- "2.0",
- "2.2",
- "2.3",
- "2.4",
- "2.5",
- "2.7",
- "2.8",
- "3.0",
- "3.2",
- "3.3",
- "3.5",
- "3.7",
- "3.8",
- "4.1",
- "4.3",
- "4.7",
- "4.9",
- "5.3",
- "5.5",
- "5.7",
- "5.9",
- "6.4",
- "6.7",
- "7.0",
- "7.4",
- "7.6",
- "7.8",
- "8.2",
- "8.7",
- "9.0",
- "9.3",
- "9.7",
- "10.5",
- "11.0",
- "11.8",
- "12.4",
- "13.2",
- "14.0",
- "15.8",
- "16.5",
- "18.0",
- "19.7",
- "21.2",
- "23.2",
- "27.8",
- "31.0",
- "32.9",
- "36.4",
- "41.6",
- "45.7",
- "50.2",
- "52.6",
- "60.3",
- "65.3",
- "72.1",
- "76.7",
- "81.2",
- "85.6",
- "87.6",
- "89.7",
- "92.1",
- "94.1",
- "95.8",
- "97.2",
- "98.1",
- "99.0",
- "99.9",
- "99.9"
+ "histogram_hb_v2": [
+ {
+ "start": "0.0",
+ "size": 0.066056911,
+ "ndv": 1
+ },
+ {
+ "start": "0.1",
+ "size": 0.020325203,
+ "ndv": 1
+ },
+ {
+ "start": "0.2",
+ "size": 0.022357724,
+ "ndv": 1
+ },
+ {
+ "start": "0.3",
+ "size": 0.017276423,
+ "ndv": 1
+ },
+ {
+ "start": "0.4",
+ "size": 0.025406504,
+ "ndv": 1
+ },
+ {
+ "start": "0.5",
+ "size": 0.020325203,
+ "ndv": 1
+ },
+ {
+ "start": "0.6",
+ "size": 0.020325203,
+ "ndv": 1
+ },
+ {
+ "start": "0.7",
+ "size": 0.017276423,
+ "ndv": 1
+ },
+ {
+ "start": "0.8",
+ "size": 0.010162602,
+ "ndv": 1
+ },
+ {
+ "start": "0.9",
+ "size": 0.010162602,
+ "ndv": 1
+ },
+ {
+ "start": "1.0",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "1.1",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "1.2",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "1.3",
+ "size": 0.005081301,
+ "ndv": 1
+ },
+ {
+ "start": "1.4",
+ "size": 0.015243902,
+ "ndv": 1
+ },
+ {
+ "start": "1.5",
+ "size": 0.005081301,
+ "ndv": 1
+ },
+ {
+ "start": "1.6",
+ "size": 0.015243902,
+ "ndv": 1
+ },
+ {
+ "start": "1.7",
+ "size": 0.010162602,
+ "ndv": 1
+ },
+ {
+ "start": "1.8",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "1.9",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "2.0",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "2.2",
+ "size": 0.011178862,
+ "ndv": 1
+ },
+ {
+ "start": "2.3",
+ "size": 0.010162602,
+ "ndv": 1
+ },
+ {
+ "start": "2.4",
+ "size": 0.009146341,
+ "ndv": 1
+ },
+ {
+ "start": "2.5",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "2.6",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "2.7",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "2.9",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "3.1",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "3.2",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "3.3",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "3.5",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "3.7",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "3.8",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "4.1",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "4.3",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "4.6",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "4.8",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "5.0",
+ "size": 0.009146341,
+ "ndv": 5
+ },
+ {
+ "start": "5.4",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "5.6",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "5.7",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "6.0",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "6.4",
+ "size": 0.009146341,
+ "ndv": 2
+ },
+ {
+ "start": "6.6",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "6.9",
+ "size": 0.009146341,
+ "ndv": 5
+ },
+ {
+ "start": "7.3",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "7.5",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "7.8",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "8.1",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "8.5",
+ "size": 0.009146341,
+ "ndv": 3
+ },
+ {
+ "start": "8.7",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "9.0",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "9.4",
+ "size": 0.009146341,
+ "ndv": 4
+ },
+ {
+ "start": "9.7",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "10.5",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "11.0",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "11.6",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "12.3",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "12.9",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "13.8",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "14.6",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "16.1",
+ "size": 0.009146341,
+ "ndv": 5
+ },
+ {
+ "start": "16.8",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "18.1",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "19.7",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "21.2",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "23.2",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "27.7",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "30.0",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "32.3",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "34.8",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "39.8",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "43.7",
+ "size": 0.009146341,
+ "ndv": 9
+ },
+ {
+ "start": "47.5",
+ "size": 0.009146341,
+ "ndv": 9
+ },
+ {
+ "start": "50.8",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "55.1",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "60.4",
+ "size": 0.009146341,
+ "ndv": 8
+ },
+ {
+ "start": "65.3",
+ "size": 0.009146341,
+ "ndv": 9
+ },
+ {
+ "start": "71.7",
+ "size": 0.009146341,
+ "ndv": 9
+ },
+ {
+ "start": "76.7",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "80.0",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "84.8",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "86.6",
+ "size": 0.009146341,
+ "ndv": 9
+ },
+ {
+ "start": "88.9",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "90.7",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "93.0",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "95.0",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "95.9",
+ "size": 0.009146341,
+ "ndv": 7
+ },
+ {
+ "start": "97.3",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "98.1",
+ "size": 0.009146341,
+ "ndv": 6
+ },
+ {
+ "start": "99.0",
+ "size": 0.006097561,
+ "ndv": 4
+ },
+ {
+ "start": "99.9",
+ "end": "99.9",
+ "size": 0.015243902,
+ "ndv": 1
+ }
]
}
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';;
@@ -1617,266 +1982,1287 @@ max_value 10500000
nulls_ratio 0.0000
avg_length 4.0000
avg_frequency 1.0467
-hist_size 254
+hist_size 255
hist_type JSON_HB
-hex(histogram) 7B0A202022686973746F6772616D5F68625F7631223A205B0A20202020223432222C0A202020202231353030222C0A202020202235323030222C0A20202020223133313534222C0A20202020223237303235222C0A20202020223531393639222C0A20202020223839303633222C0A20202020223839343030222C0A20202020223839393030222C0A20202020223930323030222C0A20202020223930363033222C0A20202020223930393539222C0A20202020223931323033222C0A20202020223931373739222C0A20202020223932323339222C0A20202020223932353833222C0A20202020223933303030222C0A20202020223933333436222C0A20202020223933393030222C0A20202020223934313933222C0A20202020223934363835222C0A20202020223935303030222C0A20202020223935343438222C0A20202020223936303030222C0A20202020223936333232222C0A20202020223936383030222C0A20202020223937313638222C0A20202020223937363030222C0A20202020223938313233222C0A20202020223938333939222C0A20202020223938393030222C0A20202020223939343030222C0A20202020223939383931222C0A2020202022313030313439222C0A2020202022313030353435222C0A2020202022313030393430222C0A
2020202022313031323935222C0A2020202022313031363536222C0A2020202022313032303532222C0A2020202022313032333631222C0A2020202022313032373136222C0A2020202022313033323737222C0A2020202022313033353739222C0A2020202022313034313436222C0A2020202022313034373635222C0A2020202022313035313939222C0A2020202022313035373030222C0A2020202022313036303738222C0A2020202022313036363030222C0A2020202022313037303036222C0A2020202022313037343030222C0A2020202022313037373939222C0A2020202022313038323737222C0A2020202022313038373234222C0A2020202022313039323235222C0A2020202022313039353736222C0A2020202022313130303136222C0A2020202022313130353331222C0A2020202022313131323538222C0A2020202022313131383832222C0A2020202022313132343530222C0A2020202022313133313335222C0A2020202022313133393538222C0A2020202022313134333935222C0A2020202022313134393830222C0A2020202022313135363938222C0A2020202022313136323536222C0A2020202022313136393239222C0A2020202022313137353339222C0A2020202022313138323030222C0A2020202022313138383538222C0A20202020223131393
43030222C0A2020202022313139393930222C0A2020202022313230363435222C0A2020202022313231303937222C0A2020202022313231373038222C0A2020202022313232313036222C0A2020202022313233313030222C0A2020202022313233343030222C0A2020202022313233393538222C0A2020202022313234323739222C0A2020202022313234393433222C0A2020202022313235343037222C0A2020202022313235393937222C0A2020202022313236333436222C0A2020202022313237303030222C0A2020202022313237343834222C0A2020202022313237393639222C0A2020202022313238373330222C0A2020202022313239373030222C0A2020202022313330323135222C0A2020202022313331313338222C0A2020202022313331383631222C0A2020202022313332373434222C0A2020202022313333333030222C0A2020202022313333383539222C0A2020202022313334343139222C0A2020202022313335363033222C0A2020202022313336363937222C0A2020202022313337323635222C0A2020202022313337393934222C0A2020202022313338393033222C0A2020202022313339363732222C0A2020202022313430343539222C0A2020202022313431343638222C0A2020202022313432333032222C0A2020202022313433303732222C0A202020
2022313434313538222C0A2020202022313435313530222C0A2020202022313436303836222C0A2020202022313437303030222C0A2020202022313437373434222C0A2020202022313438353833222C0A2020202022313439373032222C0A2020202022313530363234222C0A2020202022313531373538222C0A2020202022313532393833222C0A2020202022313534323937222C0A2020202022313535323434222C0A2020202022313536343638222C0A2020202022313538303030222C0A2020202022313539313033222C0A2020202022313630363339222C0A2020202022313631393130222C0A2020202022313633333531222C0A2020202022313634343633222C0A2020202022313635353833222C0A2020202022313637303531222C0A2020202022313638373032222C0A2020202022313639393330222C0A2020202022313731303536222C0A2020202022313732333537222C0A2020202022313733363030222C0A2020202022313734353030222C0A2020202022313735363631222C0A2020202022313737353232222C0A2020202022313738373438222C0A2020202022313739383138222C0A2020202022313831333339222C0A2020202022313832363339222C0A2020202022313833353030222C0A2020202022313834383539222C0A20202020223138363030302
22C0A2020202022313837363931222C0A2020202022313839303336222C0A2020202022313930313233222C0A2020202022313932323437222C0A2020202022313934303030222C0A2020202022313935333436222C0A2020202022313936353139222C0A2020202022313938313833222C0A2020202022323030313731222C0A2020202022323031353638222C0A2020202022323033323936222C0A2020202022323035353630222C0A2020202022323037313030222C0A2020202022323039303338222C0A2020202022323131373030222C0A2020202022323134323934222C0A2020202022323135353837222C0A2020202022323137383034222C0A2020202022323139373733222C0A2020202022323232303330222C0A2020202022323233383931222C0A2020202022323236353039222C0A2020202022323239303630222C0A2020202022323331373234222C0A2020202022323335303733222C0A2020202022323337373133222C0A2020202022323430393030222C0A2020202022323432383230222C0A2020202022323434393734222C0A2020202022323437343532222C0A2020202022323531333438222C0A2020202022323534333530222C0A2020202022323536343030222C0A2020202022323630353132222C0A2020202022323633323437222C0A202020202232
3635343530222C0A2020202022323639363030222C0A2020202022323732303538222C0A2020202022323735383037222C0A2020202022323738333137222C0A2020202022323832303730222C0A2020202022323836303030222C0A2020202022323839333736222C0A2020202022323933313035222C0A2020202022323937303030222C0A2020202022333030353030222C0A2020202022333033343437222C0A2020202022333038353731222C0A2020202022333132393237222C0A2020202022333136343338222C0A2020202022333230303935222C0A2020202022333235303030222C0A2020202022333239383530222C0A2020202022333333323030222C0A2020202022333337393737222C0A2020202022333432323030222C0A2020202022333438303730222C0A2020202022333533303436222C0A2020202022333537353532222C0A2020202022333631393538222C0A2020202022333635333832222C0A2020202022333731363031222C0A2020202022333739353230222C0A2020202022333834303030222C0A2020202022333931313730222C0A2020202022333939313735222C0A2020202022343037303138222C0A2020202022343136323839222C0A2020202022343230303030222C0A2020202022343237363532222C0A2020202022343334333734222C0A2
020202022343431393638222C0A2020202022343530323838222C0A2020202022343539383834222C0A2020202022343639303030222C0A2020202022343735363537222C0A2020202022343832333030222C0A2020202022343930353234222C0A2020202022353038303030222C0A2020202022353138323832222C0A2020202022353239303933222C0A2020202022353430333330222C0A2020202022353633323130222C0A2020202022353737333532222C0A2020202022353933333231222C0A2020202022363130303030222C0A2020202022363334303635222C0A2020202022363536353632222C0A2020202022363734313030222C0A2020202022373033303030222C0A2020202022373330303030222C0A2020202022373632303030222C0A2020202022373932383538222C0A2020202022383233333031222C0A2020202022383734303030222C0A2020202022393335333631222C0A2020202022393839393735222C0A202020202231303430303030222C0A202020202231303936383239222C0A202020202231313531323734222C0A202020202231323137333539222C0A202020202231323937353236222C0A202020202231333738303837222C0A202020202231353033343531222C0A202020202231363734303030222C0A202020202231393638343030222C0A
202020202232313339313235222C0A202020202232353539343234222C0A202020202232393430363233222C0A202020202234303137373333222C0A202020202236343634363933222C0A20202020223130353030303030220A20205D0A7D
+hex(histogram) 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A20223432222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231353030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202235323030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223133313534222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223237303235222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223531393639222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A20202020
7D2C0A202020207B0A202020202020227374617274223A20223839303633222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223839343030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223839393030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A20340A202020207D2C0A202020207B0A202020202020227374617274223A20223930323030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223930363033222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223930393539222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223
931323033222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223931373739222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031320A202020207D2C0A202020207B0A202020202020227374617274223A20223932323339222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223932353833222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223933303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223933333432222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223933383937222C0A2020202020202273697A65223A20302E30
303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223934313030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223934363531222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223934393437222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223935343131222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223936303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223936333135222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360
A202020207D2C0A202020207B0A202020202020227374617274223A20223936383030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223937313638222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A20223937353037222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A20223938313030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223938333834222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223938383138222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A2020202020202273746172
74223A20223939333837222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A20223939383632222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313030313331222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313030343930222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313030393136222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031310A202020207D2C0A202020207B0A202020202020227374617274223A2022313031323436222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313031353738222C0A2020202020202
273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313032303139222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313032333034222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313032373032222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313033323131222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031310A202020207D2C0A202020207B0A202020202020227374617274223A2022313033353536222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313034303133222C0A2020202020202273697A65223A20302E30303339323235332C
0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313034373233222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313035313636222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313035363932222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031320A202020207D2C0A202020207B0A202020202020227374617274223A2022313036303034222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313036353233222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313037303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202
020207D2C0A202020207B0A202020202020227374617274223A2022313037333534222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313037373730222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313038313231222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313038353738222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313039313834222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313039353030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A20202020202022
7374617274223A2022313039393735222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313130343230222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313131323030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313131373632222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031320A202020207D2C0A202020207B0A202020202020227374617274223A2022313132343139222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313133303930222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313133383636222C0A2
020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313134323336222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313134393030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313135353438222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313136313838222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313136373630222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313137323538222C0A2020202020202273697A65223A20302E303033
39323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313138303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313138373531222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313139323837222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313139383030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313230333738222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313231303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223
A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313231363030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313231393637222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313232373335222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313233333636222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313233383735222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313234323135222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A20
2020202020227374617274223A2022313234373735222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313235333030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313235383132222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313236333033222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313236383732222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313237323834222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A20223132373
83135222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313238333538222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313239343534222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031320A202020207D2C0A202020207B0A202020202020227374617274223A2022313330303331222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313331303131222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313331373139222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313332353030222C0A2020202020202273697A65223A
20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313333313638222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313333363735222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313334303531222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313335303234222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313336333936222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313337303631222C0A2020202020202273697A65223A20302E30303339323235332C0A20202020202
0226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313337383030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313338343639222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313339333537222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313430303432222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313431303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313432303438222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A20
2020207B0A202020202020227374617274223A2022313432363930222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313433373236222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313434373631222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313435383233222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313436353134222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313437353237222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223
A2022313438313130222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313439323232222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313530313132222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022313531303639222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313532343633222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313533333833222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313535303030222C0A20202020202022
73697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313535393431222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313537333332222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313538333436222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313539363635222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313631313931222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313632343732222C0A2020202020202273697A65223A20302E30303339323235332C0
A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313633393030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313634383531222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313636353132222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313637363631222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313639333033222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313730353030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A2020
20207D2C0A202020207B0A202020202020227374617274223A2022313731363537222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313732373130222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313733393737222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313735303631222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313736353831222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313738323030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227
374617274223A2022313739323039222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313830323733222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313831393030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313833313333222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313834313635222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313835363333222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313836393339222C0A20
20202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313838343433222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313839353934222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313931313634222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313933313536222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031330A202020207D2C0A202020207B0A202020202020227374617274223A2022313934333031222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313935363239222C0A2020202020202273697A65223A20302E3030333
9323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022313937323736222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022313939313834222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323031303733222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323032343531222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323034383939222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022323036323239222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A
2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323037383434222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323130333638222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323132393737222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323134393537222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323136393033222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323138353030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202
020202020227374617274223A2022323231303437222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323232373030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323234383937222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323237373030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323239373030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323333343030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A202232333630
3030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323339363030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323431373639222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323433373731222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323436323036222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323438343733222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323533303030222C0A2020202020202273697A65223A2
0302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323534383637222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323537383632222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323632303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323634313135222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323636353639222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022323730333234222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020
226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323733303630222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323736393136222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323739393830222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323833303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022323837303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022323931313137222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202
020207B0A202020202020227374617274223A2022323934313235222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022323939303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022333031323937222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333034393532222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333039393030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022333133363139222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A
2022333138353632222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333232363835222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333236373736222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333330333132222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333335303738222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333339313934222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333433333030222C0A202020202020227
3697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333439353831222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333534313339222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333539343030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022333632373733222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333636373132222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333734393435222C0A2020202020202273697A65223A20302E30303339323235332C0A
202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333830383436222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333835323031222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022333933303330222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343031323831222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343039363332222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343137353137222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A20202
0207D2C0A202020207B0A202020202020227374617274223A2022343232353432222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343239303736222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343336393030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343434323939222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343533383133222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022343631313236222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A2020202020202273
74617274223A2022343730373831222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343738313535222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343834363734222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022343935353430222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022353039353130222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022353139383733222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031340A202020207D2C0A202020207B0A202020202020227374617274223A2022353330303030222C0A202
0202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022353431313632222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022353634353839222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022353830313030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022353936393734222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022363138343737222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022363339303030222C0A2020202020202273697A65223A20302E30303339
323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022363538363330222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022363833373934222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022373036373730222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022373338313530222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022373638303832222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022373938343330222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2
031350A202020207D2C0A202020207B0A202020202020227374617274223A2022383337353838222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A2022383739303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022393430393638222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A2022393937303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A202231303530303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A202231313031303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A
202020202020227374617274223A202231313537353037222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A202231323232373634222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231333034373736222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231333938383030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031350A202020207D2C0A202020207B0A202020202020227374617274223A202231353138303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202231363931363030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A2020202020202273746172742
23A202231393735323934222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202232313638303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202232353936303030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202232393832313436222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202234323635323030222C0A2020202020202273697A65223A20302E30303339323235332C0A202020202020226E6476223A2031360A202020207D2C0A202020207B0A202020202020227374617274223A202236373839343739222C0A20202020202022656E64223A20223130353030303030222C0A2020202020202273697A65223A20302E3030333637373337322C0A202020202020226E6476223A2031350A202020207D0A20205D0A7D
decode_histogram(hist_type,histogram) {
- "histogram_hb_v1": [
- "42",
- "1500",
- "5200",
- "13154",
- "27025",
- "51969",
- "89063",
- "89400",
- "89900",
- "90200",
- "90603",
- "90959",
- "91203",
- "91779",
- "92239",
- "92583",
- "93000",
- "93346",
- "93900",
- "94193",
- "94685",
- "95000",
- "95448",
- "96000",
- "96322",
- "96800",
- "97168",
- "97600",
- "98123",
- "98399",
- "98900",
- "99400",
- "99891",
- "100149",
- "100545",
- "100940",
- "101295",
- "101656",
- "102052",
- "102361",
- "102716",
- "103277",
- "103579",
- "104146",
- "104765",
- "105199",
- "105700",
- "106078",
- "106600",
- "107006",
- "107400",
- "107799",
- "108277",
- "108724",
- "109225",
- "109576",
- "110016",
- "110531",
- "111258",
- "111882",
- "112450",
- "113135",
- "113958",
- "114395",
- "114980",
- "115698",
- "116256",
- "116929",
- "117539",
- "118200",
- "118858",
- "119400",
- "119990",
- "120645",
- "121097",
- "121708",
- "122106",
- "123100",
- "123400",
- "123958",
- "124279",
- "124943",
- "125407",
- "125997",
- "126346",
- "127000",
- "127484",
- "127969",
- "128730",
- "129700",
- "130215",
- "131138",
- "131861",
- "132744",
- "133300",
- "133859",
- "134419",
- "135603",
- "136697",
- "137265",
- "137994",
- "138903",
- "139672",
- "140459",
- "141468",
- "142302",
- "143072",
- "144158",
- "145150",
- "146086",
- "147000",
- "147744",
- "148583",
- "149702",
- "150624",
- "151758",
- "152983",
- "154297",
- "155244",
- "156468",
- "158000",
- "159103",
- "160639",
- "161910",
- "163351",
- "164463",
- "165583",
- "167051",
- "168702",
- "169930",
- "171056",
- "172357",
- "173600",
- "174500",
- "175661",
- "177522",
- "178748",
- "179818",
- "181339",
- "182639",
- "183500",
- "184859",
- "186000",
- "187691",
- "189036",
- "190123",
- "192247",
- "194000",
- "195346",
- "196519",
- "198183",
- "200171",
- "201568",
- "203296",
- "205560",
- "207100",
- "209038",
- "211700",
- "214294",
- "215587",
- "217804",
- "219773",
- "222030",
- "223891",
- "226509",
- "229060",
- "231724",
- "235073",
- "237713",
- "240900",
- "242820",
- "244974",
- "247452",
- "251348",
- "254350",
- "256400",
- "260512",
- "263247",
- "265450",
- "269600",
- "272058",
- "275807",
- "278317",
- "282070",
- "286000",
- "289376",
- "293105",
- "297000",
- "300500",
- "303447",
- "308571",
- "312927",
- "316438",
- "320095",
- "325000",
- "329850",
- "333200",
- "337977",
- "342200",
- "348070",
- "353046",
- "357552",
- "361958",
- "365382",
- "371601",
- "379520",
- "384000",
- "391170",
- "399175",
- "407018",
- "416289",
- "420000",
- "427652",
- "434374",
- "441968",
- "450288",
- "459884",
- "469000",
- "475657",
- "482300",
- "490524",
- "508000",
- "518282",
- "529093",
- "540330",
- "563210",
- "577352",
- "593321",
- "610000",
- "634065",
- "656562",
- "674100",
- "703000",
- "730000",
- "762000",
- "792858",
- "823301",
- "874000",
- "935361",
- "989975",
- "1040000",
- "1096829",
- "1151274",
- "1217359",
- "1297526",
- "1378087",
- "1503451",
- "1674000",
- "1968400",
- "2139125",
- "2559424",
- "2940623",
- "4017733",
- "6464693",
- "10500000"
+ "histogram_hb_v2": [
+ {
+ "start": "42",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "1500",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "5200",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "13154",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "27025",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "51969",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "89063",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "89400",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "89900",
+ "size": 0.00392253,
+ "ndv": 4
+ },
+ {
+ "start": "90200",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "90603",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "90959",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "91203",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "91779",
+ "size": 0.00392253,
+ "ndv": 12
+ },
+ {
+ "start": "92239",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "92583",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "93000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "93342",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "93897",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "94100",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "94651",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "94947",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "95411",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "96000",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "96315",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "96800",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "97168",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "97507",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "98100",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "98384",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "98818",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "99387",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "99862",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "100131",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "100490",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "100916",
+ "size": 0.00392253,
+ "ndv": 11
+ },
+ {
+ "start": "101246",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "101578",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "102019",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "102304",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "102702",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "103211",
+ "size": 0.00392253,
+ "ndv": 11
+ },
+ {
+ "start": "103556",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "104013",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "104723",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "105166",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "105692",
+ "size": 0.00392253,
+ "ndv": 12
+ },
+ {
+ "start": "106004",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "106523",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "107000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "107354",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "107770",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "108121",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "108578",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "109184",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "109500",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "109975",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "110420",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "111200",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "111762",
+ "size": 0.00392253,
+ "ndv": 12
+ },
+ {
+ "start": "112419",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "113090",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "113866",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "114236",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "114900",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "115548",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "116188",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "116760",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "117258",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "118000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "118751",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "119287",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "119800",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "120378",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "121000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "121600",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "121967",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "122735",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "123366",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "123875",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "124215",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "124775",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "125300",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "125812",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "126303",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "126872",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "127284",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "127815",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "128358",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "129454",
+ "size": 0.00392253,
+ "ndv": 12
+ },
+ {
+ "start": "130031",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "131011",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "131719",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "132500",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "133168",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "133675",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "134051",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "135024",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "136396",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "137061",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "137800",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "138469",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "139357",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "140042",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "141000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "142048",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "142690",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "143726",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "144761",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "145823",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "146514",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "147527",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "148110",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "149222",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "150112",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "151069",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "152463",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "153383",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "155000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "155941",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "157332",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "158346",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "159665",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "161191",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "162472",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "163900",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "164851",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "166512",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "167661",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "169303",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "170500",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "171657",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "172710",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "173977",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "175061",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "176581",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "178200",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "179209",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "180273",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "181900",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "183133",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "184165",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "185633",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "186939",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "188443",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "189594",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "191164",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "193156",
+ "size": 0.00392253,
+ "ndv": 13
+ },
+ {
+ "start": "194301",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "195629",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "197276",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "199184",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "201073",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "202451",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "204899",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "206229",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "207844",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "210368",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "212977",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "214957",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "216903",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "218500",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "221047",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "222700",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "224897",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "227700",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "229700",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "233400",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "236000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "239600",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "241769",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "243771",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "246206",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "248473",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "253000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "254867",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "257862",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "262000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "264115",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "266569",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "270324",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "273060",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "276916",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "279980",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "283000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "287000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "291117",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "294125",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "299000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "301297",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "304952",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "309900",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "313619",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "318562",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "322685",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "326776",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "330312",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "335078",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "339194",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "343300",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "349581",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "354139",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "359400",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "362773",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "366712",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "374945",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "380846",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "385201",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "393030",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "401281",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "409632",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "417517",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "422542",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "429076",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "436900",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "444299",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "453813",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "461126",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "470781",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "478155",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "484674",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "495540",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "509510",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "519873",
+ "size": 0.00392253,
+ "ndv": 14
+ },
+ {
+ "start": "530000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "541162",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "564589",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "580100",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "596974",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "618477",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "639000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "658630",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "683794",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "706770",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "738150",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "768082",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "798430",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "837588",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "879000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "940968",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "997000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "1050000",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "1101000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "1157507",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "1222764",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "1304776",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "1398800",
+ "size": 0.00392253,
+ "ndv": 15
+ },
+ {
+ "start": "1518000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "1691600",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "1975294",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "2168000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "2596000",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "2982146",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "4265200",
+ "size": 0.00392253,
+ "ndv": 16
+ },
+ {
+ "start": "6789479",
+ "end": "10500000",
+ "size": 0.003677372,
+ "ndv": 15
+ }
]
}
set histogram_type=@SINGLE_PREC_TYPE;
@@ -1949,7 +3335,7 @@ nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(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 t1 a 1 3 0.0000 1.0000 10 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2231222C202231222C202231222C202231222C202232222C202232222C202232222C202233222C202233222C202233222C202233225D0A7D
+test t1 a 1 3 0.0000 1.0000 3 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202231222C0A2020202020202273697A65223A20302E3333333333333333332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202232222C0A2020202020202273697A65223A20302E3333333333333333332C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202233222C0A20202020202022656E64223A202233222C0A2020202020202273697A65223A20302E3333333333333333332C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
set histogram_size=default;
drop table t1;
#
@@ -1974,7 +3360,7 @@ nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(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 t1 a 1 5 0.0000 1.0000 10 JSON_HB 7B0A202022686973746F6772616D5F68625F7631223A205B2231222C202231222C202232222C202232222C202233222C202233222C202234222C202234222C202235222C202235222C202235225D0A7D
+test t1 a 1 5 0.0000 1.0000 5 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202231222C0A2020202020202273697A65223A20302E322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202232222C0A2020202020202273697A65223A20302E322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202233222C0A2020202020202273697A65223A20302E322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202234222C0A2020202020202273697A65223A20302E322C0A202020202020226E6476223A20310A202020207D2C0A202020207B0A202020202020227374617274223A202235222C0A20202020202022656E64223A202235222C0A2020202020202273697A65223A20302E322C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
set histogram_size=0;
set histogram_type=@SINGLE_PREC_TYPE;
drop table t1;
@@ -2015,7 +3401,7 @@ nulls_ratio, avg_frequency,
hist_size, hist_type, HEX(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 7B0A202022686973746F6772616D5F68625F7631223A205B0A202020202231222C0A20202020223137222C0A20202020223333222C0A20202020223439222C0A20202020223636222C0A20202020223832222C0A20202020223938222C0A2020202022313134222C0A2020202022313331222C0A2020202022313437222C0A2020202022313633222C0A2020202022313739222C0A2020202022313936222C0A2020202022323132222C0A2020202022323238222C0A2020202022323434222C0A2020202022323631222C0A2020202022323737222C0A2020202022323933222C0A2020202022333039222C0A2020202022333236222C0A2020202022333432222C0A2020202022333538222C0A2020202022333734222C0A2020202022333931222C0A2020202022343037222C0A2020202022343233222C0A2020202022343339222C0A2020202022343536222C0A2020202022343732222C0A2020202022343838222C0A2020202022353034222C0A2020202022353231222C0A2020202022353337222C0A2020202022353533222C0A2020202022353639222C0A2020202022353836222C0A2020202022363032222C0A2020202022363138222C0A2020202022363334222C0A2020202022363531222C0A202020202236363722
2C0A2020202022363833222C0A2020202022363939222C0A2020202022373136222C0A2020202022373332222C0A2020202022373438222C0A2020202022373634222C0A2020202022373831222C0A2020202022373937222C0A2020202022383133222C0A2020202022383239222C0A2020202022383436222C0A2020202022383632222C0A2020202022383738222C0A2020202022383934222C0A2020202022393131222C0A2020202022393237222C0A2020202022393433222C0A2020202022393539222C0A2020202022393736222C0A2020202022393932222C0A202020202231303038222C0A202020202231303234220A20205D0A7D
+test t2 id 1 1024 0.0000 8.0000 64 JSON_HB 7B0A202022686973746F6772616D5F68625F7632223A205B0A202020207B0A202020202020227374617274223A202231222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223137222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223333222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223439222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223636222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223832222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031
370A202020207D2C0A202020207B0A202020202020227374617274223A20223938222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313134222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313331222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313437222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313633222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022313739222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A20223
13936222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323132222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323238222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323434222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323631222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323737222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022323933222C0A2020202020202273697A65223A20302E303135383639313431
2C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333039222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333236222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333432222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333538222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333734222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022333931222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0
A202020202020227374617274223A2022343037222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343233222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343339222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343536222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343732222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022343838222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353034222C0A2020202020202273
697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353231222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353337222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353533222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353639222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022353836222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363032222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223
A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363138222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363334222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363531222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363637222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363833222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022363939222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A20202020202022737461727422
3A2022373136222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373332222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373438222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373634222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373831222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022373937222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383133222C0A2020202020202273697A65223A20302E30313538363
93134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383239222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383436222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383632222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383738222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022383934222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393131222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A2020
20207B0A202020202020227374617274223A2022393237222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393433222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393539222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393736222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A2022393932222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231303038222C0A2020202020202273697A65223A20302E3031353836393134312C0A202020202020226E6476223A2031370A202020207D2C0A202020207B0A202020202020227374617274223A202231303234222C0A20202
020202022656E64223A202231303234222C0A2020202020202273697A65223A20322E343431343036652D342C0A202020202020226E6476223A20310A202020207D0A20205D0A7D
set histogram_size=0;
drop table t1, t2;
set use_stat_tables=@save_use_stat_tables;
@@ -2176,18 +3562,63 @@ 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 {
- "histogram_hb_v1": [
- "1",
- "1639",
- "3277",
- "4916",
- "6554",
- "9193",
- "10831",
- "12469",
- "14108",
- "15746",
- "17384"
+ "histogram_hb_v2": [
+ {
+ "start": "1",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "1639",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "3277",
+ "size": 0.099997384,
+ "ndv": 1640
+ },
+ {
+ "start": "4916",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "6554",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "8192",
+ "size": 0.099997384,
+ "ndv": 1640
+ },
+ {
+ "start": "10831",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "12469",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "14107",
+ "size": 0.099997384,
+ "ndv": 1640
+ },
+ {
+ "start": "15746",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "17384",
+ "end": "17384",
+ "size": 2.615792e-5,
+ "ndv": 1
+ }
]
}
set analyze_sample_percentage=0.1;
@@ -2203,18 +3634,63 @@ 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 {
- "histogram_hb_v1": [
- "111",
- "988",
- "2490",
- "4088",
- "5743",
- "7806",
- "10217",
- "12072",
- "14178",
- "15144",
- "17026"
+ "histogram_hb_v2": [
+ {
+ "start": "111",
+ "size": 0.099056604,
+ "ndv": 20
+ },
+ {
+ "start": "988",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "2490",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "4088",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "5743",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "7772",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "10164",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "12022",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "14092",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "15122",
+ "size": 0.099056604,
+ "ndv": 21
+ },
+ {
+ "start": "16975",
+ "end": "17026",
+ "size": 0.009433962,
+ "ndv": 2
+ }
]
}
#
@@ -2230,18 +3706,63 @@ 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 {
- "histogram_hb_v1": [
- "1",
- "1623",
- "3252",
- "4868",
- "6483",
- "8151",
- "10789",
- "12433",
- "14077",
- "15724",
- "17384"
+ "histogram_hb_v2": [
+ {
+ "start": "1",
+ "size": 0.09999826,
+ "ndv": 1591
+ },
+ {
+ "start": "1623",
+ "size": 0.09999826,
+ "ndv": 1600
+ },
+ {
+ "start": "3252",
+ "size": 0.09999826,
+ "ndv": 1587
+ },
+ {
+ "start": "4868",
+ "size": 0.09999826,
+ "ndv": 1593
+ },
+ {
+ "start": "6483",
+ "size": 0.09999826,
+ "ndv": 1630
+ },
+ {
+ "start": "8151",
+ "size": 0.09999826,
+ "ndv": 1608
+ },
+ {
+ "start": "10789",
+ "size": 0.09999826,
+ "ndv": 1619
+ },
+ {
+ "start": "12433",
+ "size": 0.09999826,
+ "ndv": 1627
+ },
+ {
+ "start": "14077",
+ "size": 0.09999826,
+ "ndv": 1614
+ },
+ {
+ "start": "15724",
+ "size": 0.09999826,
+ "ndv": 1624
+ },
+ {
+ "start": "17384",
+ "end": "17384",
+ "size": 1.739705e-5,
+ "ndv": 1
+ }
]
}
set analyze_sample_percentage=0;
@@ -2257,18 +3778,63 @@ 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 {
- "histogram_hb_v1": [
- "1",
- "1651",
- "3306",
- "4948",
- "6596",
- "9239",
- "10863",
- "12495",
- "14113",
- "15757",
- "17384"
+ "histogram_hb_v2": [
+ {
+ "start": "1",
+ "size": 0.099999181,
+ "ndv": 1651
+ },
+ {
+ "start": "1651",
+ "size": 0.099999181,
+ "ndv": 1656
+ },
+ {
+ "start": "3306",
+ "size": 0.099999181,
+ "ndv": 1642
+ },
+ {
+ "start": "4948",
+ "size": 0.099999181,
+ "ndv": 1649
+ },
+ {
+ "start": "6596",
+ "size": 0.099999181,
+ "ndv": 1644
+ },
+ {
+ "start": "9239",
+ "size": 0.099999181,
+ "ndv": 1625
+ },
+ {
+ "start": "10863",
+ "size": 0.099999181,
+ "ndv": 1633
+ },
+ {
+ "start": "12495",
+ "size": 0.099999181,
+ "ndv": 1619
+ },
+ {
+ "start": "14113",
+ "size": 0.099999181,
+ "ndv": 1645
+ },
+ {
+ "start": "15757",
+ "size": 0.099999181,
+ "ndv": 1628
+ },
+ {
+ "start": "17384",
+ "end": "17384",
+ "size": 8.190612e-6,
+ "ndv": 1
+ }
]
}
#
@@ -2290,18 +3856,63 @@ 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 {
- "histogram_hb_v1": [
- "1",
- "1639",
- "3277",
- "4916",
- "6554",
- "9193",
- "10831",
- "12469",
- "14108",
- "15746",
- "17384"
+ "histogram_hb_v2": [
+ {
+ "start": "1",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "1639",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "3277",
+ "size": 0.099997384,
+ "ndv": 1640
+ },
+ {
+ "start": "4916",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "6554",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "8192",
+ "size": 0.099997384,
+ "ndv": 1640
+ },
+ {
+ "start": "10831",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "12469",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "14107",
+ "size": 0.099997384,
+ "ndv": 1640
+ },
+ {
+ "start": "15746",
+ "size": 0.099997384,
+ "ndv": 1639
+ },
+ {
+ "start": "17384",
+ "end": "17384",
+ "size": 2.615792e-5,
+ "ndv": 1
+ }
]
}
explain select * from t1;
@@ -2345,122 +3956,72 @@ test.t1_json analyze status Engine-independent statistics collected
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 100 JSON_HB {
- "histogram_hb_v1": [
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-0",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-1",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-2",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-3",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-4",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-5",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-6",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-7",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-8",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9",
- "a-9"
+test t1_json a a-0 a-9 0.0000 3.0000 1.0000 10 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "a-0",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-1",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-2",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-3",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-4",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-5",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-6",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-7",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-8",
+ "size": 0.1,
+ "ndv": 1
+ },
+ {
+ "start": "a-9",
+ "end": "a-9",
+ "size": 0.1,
+ "ndv": 1
+ }
]
}
explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 59.41 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 Using where
Warnings:
Note 1003 select `test`.`t1_json`.`a` AS `a` from `test`.`t1_json` where `test`.`t1_json`.`a` between 'a-3a' and 'zzzzzzzzz'
analyze select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 59.41 60.00 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 10.00 60.00 Using where
explain extended select * from t1_json where a < 'b-1a';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 99.01 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 90.00 Using where
Warnings:
Note 1003 select `test`.`t1_json`.`a` AS `a` from `test`.`t1_json` where `test`.`t1_json`.`a` < 'b-1a'
analyze select * from t1_json where a > 'zzzzzzzzz';
@@ -2470,7 +4031,7 @@ drop table ten;
UPDATE mysql.column_stats SET histogram='["a-1", "a-2", {"a": "b"}, "a-3"]' WHERE table_name='t1_json';
FLUSH TABLES;
explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
-ERROR HY000: Failed to parse histogram: Root JSON element must be a JSON object at offset 1.
+ERROR HY000: Failed to parse histogram: Root JSON element must be a JSON object at offset 12345.
create table t2 (
city varchar(100)
);
@@ -2484,20 +4045,20 @@ test.t2 analyze status Engine-independent statistics collected
test.t2 analyze status OK
explain extended select * from t2 where city = 'Moscow';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t2 ALL NULL NULL NULL NULL 101 98.04 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 101 50.00 Using where
Warnings:
Note 1003 select `test`.`t2`.`city` AS `city` from `test`.`t2` where `test`.`t2`.`city` = 'Moscow'
analyze select * from t2 where city = 'Moscow';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 98.04 98.02 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 50.00 98.02 Using where
explain extended select * from t2 where city = 'Helsinki';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t2 ALL NULL NULL NULL NULL 101 2.00 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 101 50.00 Using where
Warnings:
Note 1003 select `test`.`t2`.`city` AS `city` from `test`.`t2` where `test`.`t2`.`city` = 'Helsinki'
analyze select * from t2 where city = 'helsinki';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 2.00 1.98 Using where
+1 SIMPLE t2 ALL NULL NULL NULL NULL 101 101.00 50.00 1.98 Using where
explain extended select * from t2 where city < 'Lagos';
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t2 ALL NULL NULL NULL NULL 101 50.00 Using where
@@ -2514,672 +4075,3277 @@ set histogram_size=50;
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 50 JSON_HB {
- "histogram_hb_v1": [
- "ABW",
- "ALB",
- "ARM",
- "AUS",
- "BEN",
- "BHR",
- "BMU",
- "BTN",
- "CCK",
- "CMR",
- "COL",
- "CXR",
- "DJI",
- "ECU",
- "ESP",
- "FLK",
- "GBR",
- "GLP",
- "GRD",
- "GUM",
- "HRV",
- "IOT",
- "ISR",
- "JPN",
- "KIR",
- "LBN",
- "LKA",
- "MAC",
- "MDG",
- "MLI",
- "MOZ",
- "MWI",
- "NCL",
- "NIU",
- "NZL",
- "PER",
- "PRI",
- "PSE",
- "RUS",
- "SGP",
- "SLE",
- "SPM",
- "SWE",
- "TCD",
- "TKM",
- "TUR",
- "UGA",
- "UZB",
- "VIR",
- "YEM",
- "ZWE"
+Code ABW ZWE 60 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "ABW",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ALB",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ARG",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ATF",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "AZE",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "BFA",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "BHS",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "BMU",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "BRN",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "CAF",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "CHL",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "COD",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "COM",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "CXR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "DEU",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "DOM",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ERI",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ETH",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "FRA",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "GBR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "GIN",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "GNQ",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "GTM",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "HKG",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "HTI",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "IOT",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ISL",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "JOR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "KGZ",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "KOR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "LBR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "LKA",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "LVA",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "MDA",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "MHL",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "MMR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "MRT",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "MWI",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "NCL",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "NIC",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "NPL",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "PAK",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "PHL",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "PRI",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "PSE",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ROM",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "SDN",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "SHN",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "SLV",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "STP",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "SWE",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "TCA",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "TJK",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "TON",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "TUV",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "UKR",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "UZB",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "VGB",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "WLF",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "ZAF",
+ "end": "ZWE",
+ "size": 0.012552301,
+ "ndv": 3
+ }
]
}
-Name Afghanistan Zimbabwe 50 JSON_HB {
- "histogram_hb_v1": [
- "Afghanistan",
- "Andorra",
- "Argentina",
- "Azerbaijan",
- "Belarus",
- "Bermuda",
- "Bouvet Island",
- "Burkina Faso",
- "Cape Verde",
- "China",
- "Comoros",
- "Croatia",
- "Denmark",
- "Ecuador",
- "Eritrea",
- "Fiji Islands",
- "French Southern territories",
- "Ghana",
- "Guadeloupe",
- "Guinea-Bissau",
- "Honduras",
- "Indonesia",
- "Italy",
- "Kazakstan",
- "Laos",
- "Libyan Arab Jamahiriya",
- "Macedonia",
- "Mali",
- "Mauritania",
- "Moldova",
- "Mozambique",
- "Netherlands",
- "Nicaragua",
- "North Korea",
- "Palau",
- "Peru",
- "Puerto Rico",
- "Rwanda",
- "Saint Pierre and Miquelon",
- "Saudi Arabia",
- "Slovakia",
- "South Africa",
- "Sudan",
- "Switzerland",
- "Thailand",
- "Tunisia",
- "Tuvalu",
- "United States",
- "Venezuela",
- "Western Sahara",
- "Zimbabwe"
+Country ABW ZWE 39 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "ABW",
+ "size": 0.019857808,
+ "ndv": 11
+ },
+ {
+ "start": "ASM",
+ "size": 0.019857808,
+ "ndv": 14
+ },
+ {
+ "start": "BIH",
+ "size": 0.007109586,
+ "ndv": 5
+ },
+ {
+ "start": "BRA",
+ "size": 0.061289532,
+ "ndv": 1
+ },
+ {
+ "start": "BRB",
+ "size": 0.019857808,
+ "ndv": 9
+ },
+ {
+ "start": "CHL",
+ "size": 0.002451581,
+ "ndv": 1
+ },
+ {
+ "start": "CHN",
+ "size": 0.0889924,
+ "ndv": 1
+ },
+ {
+ "start": "CIV",
+ "size": 0.019857808,
+ "ndv": 10
+ },
+ {
+ "start": "CUB",
+ "size": 0.019857808,
+ "ndv": 6
+ },
+ {
+ "start": "DEU",
+ "size": 0.019857808,
+ "ndv": 8
+ },
+ {
+ "start": "EGY",
+ "size": 0.019857808,
+ "ndv": 4
+ },
+ {
+ "start": "ESP",
+ "size": 0.019857808,
+ "ndv": 11
+ },
+ {
+ "start": "GBR",
+ "size": 0.019857808,
+ "ndv": 2
+ },
+ {
+ "start": "GEO",
+ "size": 0.019857808,
+ "ndv": 21
+ },
+ {
+ "start": "IDN",
+ "size": 0.014219171,
+ "ndv": 1
+ },
+ {
+ "start": "IND",
+ "size": 0.083598921,
+ "ndv": 1
+ },
+ {
+ "start": "IRL",
+ "size": 0.019857808,
+ "ndv": 3
+ },
+ {
+ "start": "IRQ",
+ "size": 0.019857808,
+ "ndv": 6
+ },
+ {
+ "start": "JOR",
+ "size": 7.354744e-4,
+ "ndv": 1
+ },
+ {
+ "start": "JPN",
+ "size": 0.060799215,
+ "ndv": 1
+ },
+ {
+ "start": "KAZ",
+ "size": 0.019857808,
+ "ndv": 7
+ },
+ {
+ "start": "KOR",
+ "size": 0.019857808,
+ "ndv": 15
+ },
+ {
+ "start": "MCO",
+ "size": 0.002941898,
+ "ndv": 4
+ },
+ {
+ "start": "MEX",
+ "size": 0.042412356,
+ "ndv": 1
+ },
+ {
+ "start": "MHL",
+ "size": 0.019857808,
+ "ndv": 20
+ },
+ {
+ "start": "NGA",
+ "size": 0.019857808,
+ "ndv": 4
+ },
+ {
+ "start": "NLD",
+ "size": 0.019857808,
+ "ndv": 7
+ },
+ {
+ "start": "PAK",
+ "size": 0.008090218,
+ "ndv": 4
+ },
+ {
+ "start": "PHL",
+ "size": 0.033341505,
+ "ndv": 1
+ },
+ {
+ "start": "PLW",
+ "size": 0.019857808,
+ "ndv": 8
+ },
+ {
+ "start": "PSE",
+ "size": 0.008825693,
+ "ndv": 5
+ },
+ {
+ "start": "RUS",
+ "size": 0.046334886,
+ "ndv": 1
+ },
+ {
+ "start": "RWA",
+ "size": 0.019857808,
+ "ndv": 18
+ },
+ {
+ "start": "SWE",
+ "size": 0.019857808,
+ "ndv": 16
+ },
+ {
+ "start": "TUR",
+ "size": 0.019857808,
+ "ndv": 4
+ },
+ {
+ "start": "TZA",
+ "size": 0.015935278,
+ "ndv": 4
+ },
+ {
+ "start": "USA",
+ "size": 0.067173327,
+ "ndv": 1
+ },
+ {
+ "start": "UZB",
+ "size": 0.019857808,
+ "ndv": 7
+ },
+ {
+ "start": "VNM",
+ "end": "ZWE",
+ "size": 0.018877176,
+ "ndv": 9
+ }
]
}
-SurfaceArea 0.40 17075400.00 50 JSON_HB {
- "histogram_hb_v1": [
- "0.40",
- "14.00",
- "36.00",
- "78.00",
- "160.00",
- "200.00",
- "264.00",
- "347.00",
- "430.00",
- "468.00",
- "650.00",
- "800.00",
- "1705.00",
- "2831.00",
- "5130.00",
- "9251.00",
- "12173.00",
- "17818.00",
- "21056.00",
- "26338.00",
- "28896.00",
- "36125.00",
- "45227.00",
- "51100.00",
- "64589.00",
- "71740.00",
- "86600.00",
- "99434.00",
- "110861.00",
- "117600.00",
- "143100.00",
- "175016.00",
- "199900.00",
- "238533.00",
- "267668.00",
- "301316.00",
- "329758.00",
- "357022.00",
- "446550.00",
- "488100.00",
- "580367.00",
- "622984.00",
- "756626.00",
- "883749.00",
- "1098581.00",
- "1246700.00",
- "1566500.00",
- "2149690.00",
- "2724900.00",
- "9363520.00",
- "17075400.00"
+Name Afghanistan Zimbabwe 60 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "Afghanistan",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Andorra",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Antigua and Barbuda",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Australia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Bahrain",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Belgium",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Bhutan",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Bouvet Island",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Bulgaria",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Cameroon",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Central African Republic",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Christmas Island",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Congo",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Croatia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Côte d’Ivoire",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Dominican Republic",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "El Salvador",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Ethiopia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Finland",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "French Southern territories",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Germany",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Greenland",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Guatemala",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Haiti",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Hong Kong",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Indonesia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Israel",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Jordan",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Kuwait",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Lebanon",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Liechtenstein",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Macedonia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Maldives",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Martinique",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Mexico",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Mongolia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Myanmar",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Netherlands",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Nicaragua",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Norfolk Island",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Oman",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Panama",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Philippines",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Puerto Rico",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Rwanda",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Saint Lucia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "San Marino",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Seychelles",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Slovenia",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "South Georgia and the South Sandwich Islands",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Sudan",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Sweden",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Tajikistan",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Tokelau",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Turkey",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Uganda",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "United States",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Vanuatu",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Virgin Islands, U.S.",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "Yugoslavia",
+ "end": "Zimbabwe",
+ "size": 0.012552301,
+ "ndv": 3
+ }
]
}
-Population 0 1277558000 50 JSON_HB {
- "histogram_hb_v1": [
- "0",
- "0",
- "1000",
- "2500",
- "11000",
- "17000",
- "27000",
- "43000",
- "68000",
- "83000",
- "103000",
- "154000",
- "214000",
- "279000",
- "328000",
- "435700",
- "578000",
- "754700",
- "1158000",
- "1305000",
- "1987800",
- "2441000",
- "2856000",
- "3282000",
- "3615000",
- "3869000",
- "4473000",
- "4854000",
- "5171300",
- "5605000",
- "6485000",
- "7651000",
- "8190900",
- "9169000",
- "10097000",
- "10640000",
- "11234000",
- "12646000",
- "15864000",
- "18827000",
- "21778000",
- "22720000",
- "24318000",
- "31147000",
- "39441700",
- "50456000",
- "59623400",
- "68470000",
- "111506000",
- "170115000",
- "1277558000"
+SurfaceArea 0.40 17075400.00 60 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "0.40",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "14.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "26.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "59.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "102.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "181.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "236.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "264.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "344.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "388.00",
+ "size": 0.016736402,
+ "ndv": 3
+ },
+ {
+ "start": "455.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "549.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "694.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "800.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1399.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "2510.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "4000.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "6257.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "10400.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "12173.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "17364.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "20256.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "23200.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "27834.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "29800.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "36125.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "43094.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "49012.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "56785.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "65610.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "75517.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "86600.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "93030.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "108889.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "112088.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "120538.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "143998.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "175016.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "199900.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "238391.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "245857.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "274000.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "309500.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "329758.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "357022.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "438317.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "462840.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "513115.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "581730.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "637657.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "756626.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "824292.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1001449.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1138914.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1267000.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1648195.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "2149690.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "2505813.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "7741220.00",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "9970610.00",
+ "end": "17075400.00",
+ "size": 0.012552301,
+ "ndv": 3
+ }
]
}
-Capital 1 4074 50 JSON_HB {
- "histogram_hb_v1": [
- "1",
- "35",
- "63",
- "129",
- "150",
- "191",
- "204",
- "539",
- "583",
- "587",
- "653",
- "766",
- "905",
- "919",
- "927",
- "938",
- "1447",
- "1522",
- "1786",
- "1822",
- "1889",
- "2295",
- "2331",
- "2429",
- "2438",
- "2447",
- "2460",
- "2484",
- "2509",
- "2690",
- "2710",
- "2734",
- "2807",
- "2882",
- "2912",
- "2972",
- "3017",
- "3063",
- "3068",
- "3171",
- "3207",
- "3217",
- "3244",
- "3306",
- "3334",
- "3349",
- "3425",
- "3499",
- "3537",
- "3791",
- "4074"
+Population 0 1277558000 59 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "0",
+ "size": 0.029288703,
+ "ndv": 1
+ },
+ {
+ "start": "50",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "2000",
+ "size": 0.016736402,
+ "ndv": 2
+ },
+ {
+ "start": "3200",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "11000",
+ "size": 0.016736402,
+ "ndv": 3
+ },
+ {
+ "start": "17000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "25000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "38000",
+ "size": 0.016736402,
+ "ndv": 3
+ },
+ {
+ "start": "64000",
+ "size": 0.016736402,
+ "ndv": 3
+ },
+ {
+ "start": "71000",
+ "size": 0.016736402,
+ "ndv": 3
+ },
+ {
+ "start": "83000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "103000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "149000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "181000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "235000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "286000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "380200",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "435700",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "473000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "638000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "861000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1213000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1439200",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "1987800",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "2424200",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "2662000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "3101000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "3401200",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "3698500",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "3869000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "4459000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "4699000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "5074000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "5398700",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "6097000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "6485000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "7430000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "8091800",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "8495000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "9586000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "10236000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "10640000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "11201000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "11937000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "15085000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "16125000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "18886000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "21778000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "22720000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "24170000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "29490000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "33517000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "40377000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "50456000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "59623400",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "67702000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "82164700",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "129155000",
+ "size": 0.016736402,
+ "ndv": 4
+ },
+ {
+ "start": "212107000",
+ "end": "1277558000",
+ "size": 0.016736402,
+ "ndv": 4
+ }
]
}
-ID 1 4079 50 JSON_HB {
- "histogram_hb_v1": [
- "1",
- "82",
- "164",
- "245",
- "327",
- "408",
- "490",
- "572",
- "653",
- "735",
- "816",
- "898",
- "979",
- "1061",
- "1143",
- "1224",
- "1306",
- "1387",
- "1469",
- "1551",
- "1632",
- "1714",
- "1795",
- "1877",
- "1958",
- "2040",
- "2122",
- "2203",
- "2285",
- "2366",
- "2448",
- "2529",
- "2611",
- "2693",
- "2774",
- "2856",
- "2937",
- "3019",
- "3101",
- "3182",
- "3264",
- "3345",
- "3427",
- "3508",
- "3590",
- "3672",
- "3753",
- "3835",
- "3916",
- "3998",
- "4079"
+Capital 1 4074 58 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "1",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "35",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "62",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "126",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "148",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "179",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "192",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "211",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "539",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "554",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "586",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "645",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "756",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "901",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "910",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "919",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "927",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "937",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "1365",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "1450",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "1530",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "1791",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "1822",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "1889",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2257",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2317",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2409",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2432",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2440",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2452",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2460",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2482",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2508",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2515",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2696",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2726",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2738",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2807",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2881",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2890",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2919",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "2974",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3018",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3064",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3068",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3171",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3206",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3212",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3236",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3250",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3315",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3334",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3349",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3424",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3492",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3520",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3539",
+ "size": 0.017241379,
+ "ndv": 4
+ },
+ {
+ "start": "3813",
+ "end": "4074",
+ "size": 0.017241379,
+ "ndv": 4
+ }
]
}
-Name A Coruña (La Coruña) Ürgenc 50 JSON_HB {
- "histogram_hb_v1": [
- "A Coruña (La Coruña)",
- "Almere",
- "Araraquara",
- "Bairiki",
- "Bawshar",
- "Bikaner",
- "Brescia",
- "Camaragibe",
- "Charleroi",
- "Ciudad de México",
- "Córdoba",
- "Dire Dawa",
- "Elgin",
- "Francisco Morato",
- "Gijón",
- "Guntur",
- "Helsingborg",
- "Hunjiang",
- "Isesaki",
- "Jevpatorija",
- "Kalookan",
- "Khandwa",
- "Korla",
- "La Rioja",
- "Lilongwe",
- "Lübeck",
- "Maracanaú",
- "Meru",
- "Moradabad",
- "Nakuru",
- "Niihama",
- "Ocumare del Tuy",
- "Oxnard",
- "Penza",
- "Porbandar",
- "Qarchak",
- "Resende",
- "Saint Helens",
- "San Miguel",
- "Saskatoon",
- "Shomolu",
- "Srinagar",
- "São Paulo",
- "Taubaté",
- "Tokorozawa",
- "Tšerepovets",
- "Vanadzor",
- "Waru",
- "Yamoussoukro",
- "Zhangjiang",
- "Ãœrgenc"
+ID 1 4079 51 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "1",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "82",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "163",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "244",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "325",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "406",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "487",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "568",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "649",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "730",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "811",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "892",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "973",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1054",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1135",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1216",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1297",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1378",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1459",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1540",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1621",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1702",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1783",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1864",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "1945",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2026",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2107",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2188",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2269",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2350",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2431",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2512",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2593",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2674",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2755",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2836",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2917",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "2998",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3079",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3160",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3241",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3322",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3403",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3484",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3565",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3646",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3727",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3808",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3889",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "3970",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "4051",
+ "end": "4079",
+ "size": 0.007109586,
+ "ndv": 29
+ }
]
}
-Country ABW ZWE 50 JSON_HB {
- "histogram_hb_v1": [
- "ABW",
- "ASM",
- "BLR",
- "BRA",
- "BRA",
- "BRA",
- "CAN",
- "CHN",
- "CHN",
- "CHN",
- "CHN",
- "CIV",
- "CUB",
- "DEU",
- "EGY",
- "ESP",
- "GBR",
- "GHA",
- "IDN",
- "IND",
- "IND",
- "IND",
- "IND",
- "IRN",
- "ISR",
- "JPN",
- "JPN",
- "JPN",
- "KAZ",
- "KOR",
- "MDV",
- "MEX",
- "MEX",
- "NGA",
- "NLD",
- "PAK",
- "PHL",
- "PHL",
- "PRK",
- "RUS",
- "RUS",
- "SAU",
- "SYC",
- "TUR",
- "UKR",
- "USA",
- "USA",
- "USA",
- "USA",
- "VNM",
- "ZWE"
+Name A Coruña (La Coruña) Ürgenc 51 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "A Coruña (La Coruña)",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Almere",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Arapiraca",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Baidyabati",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Batumi",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Bijapur",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Breda",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Callao",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "Chaoyang",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Ciudad Losada",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Curitiba",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "Dili",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "El Tigre",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Fort Wayne",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Gera",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "Guigang",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "Hayward",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Hubli-Dharwad",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Irbil",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Jelenia Góra",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Kairouan",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Kelowna",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Kolpino",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Kénitra",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "Lianyuan",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Luoyang",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Mangalore",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Meihekou",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Mombasa",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Nagaon",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Newark",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Nuuk",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Osnabrück",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Paterson",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Plovdiv",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Puqi",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Rasht",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "RÃo Cuarto",
+ "size": 0.019857808,
+ "ndv": 74
+ },
+ {
+ "start": "San Francisco del Rincón",
+ "size": 0.019857808,
+ "ndv": 71
+ },
+ {
+ "start": "Santiago de los Caballeros",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Shaoyang",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Sorocaba",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "Swansea",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Tando Adam",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Tijuana",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "Tsukuba",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "Ussurijsk",
+ "size": 0.019857808,
+ "ndv": 76
+ },
+ {
+ "start": "Volgograd",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "Xianning",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "Yuzhou",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "al-Najaf",
+ "end": "Ãœrgenc",
+ "size": 0.007109586,
+ "ndv": 29
+ }
]
}
-Population 42 10500000 50 JSON_HB {
- "histogram_hb_v1": [
- "42",
- "55810",
- "90646",
- "92686",
- "94784",
- "96921",
- "99155",
- "101046",
- "103104",
- "105643",
- "107761",
- "110000",
- "113126",
- "116278",
- "119503",
- "122400",
- "125070",
- "127634",
- "131480",
- "135000",
- "139283",
- "143922",
- "148362",
- "154125",
- "160510",
- "167051",
- "173627",
- "179956",
- "186332",
- "194265",
- "202134",
- "212977",
- "222859",
- "237206",
- "249263",
- "265200",
- "281928",
- "300148",
- "320296",
- "342584",
- "366549",
- "401281",
- "438638",
- "479884",
- "531800",
- "623457",
- "753778",
- "977856",
- "1266461",
- "2130359",
- "10500000"
+Population 42 10500000 51 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "42",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "55810",
+ "size": 0.019857808,
+ "ndv": 63
+ },
+ {
+ "start": "90642",
+ "size": 0.019857808,
+ "ndv": 70
+ },
+ {
+ "start": "92686",
+ "size": 0.019857808,
+ "ndv": 74
+ },
+ {
+ "start": "94709",
+ "size": 0.019857808,
+ "ndv": 72
+ },
+ {
+ "start": "96883",
+ "size": 0.019857808,
+ "ndv": 74
+ },
+ {
+ "start": "98980",
+ "size": 0.019857808,
+ "ndv": 74
+ },
+ {
+ "start": "101000",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "102878",
+ "size": 0.019857808,
+ "ndv": 72
+ },
+ {
+ "start": "105419",
+ "size": 0.019857808,
+ "ndv": 75
+ },
+ {
+ "start": "107663",
+ "size": 0.019857808,
+ "ndv": 76
+ },
+ {
+ "start": "109755",
+ "size": 0.019857808,
+ "ndv": 74
+ },
+ {
+ "start": "112965",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "116103",
+ "size": 0.019857808,
+ "ndv": 76
+ },
+ {
+ "start": "119262",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "121954",
+ "size": 0.019857808,
+ "ndv": 74
+ },
+ {
+ "start": "124775",
+ "size": 0.019857808,
+ "ndv": 76
+ },
+ {
+ "start": "127350",
+ "size": 0.019857808,
+ "ndv": 76
+ },
+ {
+ "start": "131062",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "134222",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "138900",
+ "size": 0.019857808,
+ "ndv": 75
+ },
+ {
+ "start": "143000",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "147744",
+ "size": 0.019857808,
+ "ndv": 75
+ },
+ {
+ "start": "153022",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "159110",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "165889",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "172561",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "179000",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "185154",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "192733",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "200827",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "210068",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "221047",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "233400",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "246535",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "262481",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "277305",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "296127",
+ "size": 0.019857808,
+ "ndv": 78
+ },
+ {
+ "start": "315382",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "337580",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "361747",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "390350",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "425836",
+ "size": 0.019857808,
+ "ndv": 80
+ },
+ {
+ "start": "468931",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "517785",
+ "size": 0.019857808,
+ "ndv": 77
+ },
+ {
+ "start": "593321",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "703324",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "877239",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "1157507",
+ "size": 0.019857808,
+ "ndv": 79
+ },
+ {
+ "start": "1704735",
+ "size": 0.019857808,
+ "ndv": 81
+ },
+ {
+ "start": "4336000",
+ "end": "10500000",
+ "size": 0.007109586,
+ "ndv": 29
+ }
]
}
-Country ABW ZWE 50 JSON_HB {
- "histogram_hb_v1": [
- "ABW",
- "ALB",
- "ATG",
- "AZE",
- "BFA",
- "BIH",
- "BRB",
- "CAN",
- "CHL",
- "CMR",
- "COG",
- "CRI",
- "DEU",
- "ECU",
- "ETH",
- "FRO",
- "GEO",
- "GMB",
- "GTM",
- "HND",
- "IDN",
- "IRN",
- "ITA",
- "KAZ",
- "KHM",
- "LBR",
- "LTU",
- "MAR",
- "MHL",
- "MMR",
- "MOZ",
- "MUS",
- "NAM",
- "NGA",
- "NPL",
- "PAK",
- "PHL",
- "PRY",
- "RUS",
- "SDN",
- "SLE",
- "SVK",
- "TCA",
- "THA",
- "TUN",
- "TZA",
- "UKR",
- "UZB",
- "VNM",
- "ZAF",
- "ZWE"
+Country ABW ZWE 52 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "ABW",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "ALB",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "ASM",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "AZE",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "BEN",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "BHR",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "BRA",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "CAF",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "CHE",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "CIV",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "COD",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "COM",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "CZE",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "DNK",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "ESP",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "FIN",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "GAB",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "GIB",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "GNB",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "GUM",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "HUN",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "IND",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "IRQ",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "JAM",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "KEN",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "KIR",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "LBR",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "LTU",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "MCO",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "MHL",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "MMR",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "MOZ",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "MUS",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "NAM",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "NGA",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "NOR",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "PAK",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "PHL",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "PRK",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "ROM",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "RWA",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "SGP",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "SOM",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "SWE",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "TGO",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "TKM",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "TWN",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "UGA",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "USA",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "VEN",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "WLF",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "ZAF",
+ "end": "ZWE",
+ "size": 0.015243902,
+ "ndv": 3
+ }
]
}
-Language Abhyasi [South]Mande 50 JSON_HB {
- "histogram_hb_v1": [
- "Abhyasi",
- "Amhara",
- "Arabic",
- "Arawakan",
- "Balante",
- "Belorussian",
- "Bulgariana",
- "Chakma",
- "Chinese",
- "Comorian-madagassi",
- "Creole French",
- "Dinka",
- "English",
- "English",
- "English",
- "Ewe",
- "French",
- "Ful",
- "Garifuna",
- "German",
- "Gujarati",
- "Herero",
- "Hungarian",
- "Italian",
- "Kanuri",
- "Khoekhoe",
- "Kosrean",
- "Lithuanian",
- "Macedonian",
- "Malay-English",
- "Maori",
- "Meru",
- "Mossi",
- "Norwegian",
- "Ouaddai",
- "Pilipino",
- "Portuguese",
- "Romani",
- "Russian",
- "San",
- "Shambala",
- "Somali",
- "Spanish",
- "Spanish",
- "Tagalog",
- "Teso",
- "Tswa",
- "Turkmenian",
- "Ukrainian and Russian",
- "Wolea",
- "[South]Mande"
+Language Abhyasi [South]Mande 51 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "Abhyasi",
+ "size": 0.019308943,
+ "ndv": 11
+ },
+ {
+ "start": "Amhara",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "Arabic",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "Araucan",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Bajan",
+ "size": 0.019308943,
+ "ndv": 16
+ },
+ {
+ "start": "Belorussian",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Brahui",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "Catalan",
+ "size": 0.019308943,
+ "ndv": 12
+ },
+ {
+ "start": "Chinese",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "Circassian",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "Creole English",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "Danish",
+ "size": 0.019308943,
+ "ndv": 11
+ },
+ {
+ "start": "Dyula",
+ "size": 0.004065041,
+ "ndv": 4
+ },
+ {
+ "start": "English",
+ "size": 0.06097561,
+ "ndv": 1
+ },
+ {
+ "start": "Eskimo Languages",
+ "size": 0.014227642,
+ "ndv": 8
+ },
+ {
+ "start": "French",
+ "size": 0.025406504,
+ "ndv": 1
+ },
+ {
+ "start": "Fries",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "Gagauzi",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "German",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Greek",
+ "size": 0.019308943,
+ "ndv": 15
+ },
+ {
+ "start": "Hausa",
+ "size": 0.019308943,
+ "ndv": 10
+ },
+ {
+ "start": "Hungarian",
+ "size": 0.019308943,
+ "ndv": 10
+ },
+ {
+ "start": "Italian",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "Joruba",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "Kazakh",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "Kongo",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Kurdish",
+ "size": 0.019308943,
+ "ndv": 15
+ },
+ {
+ "start": "Luchazi",
+ "size": 0.019308943,
+ "ndv": 16
+ },
+ {
+ "start": "Makua",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "Malinke",
+ "size": 0.019308943,
+ "ndv": 15
+ },
+ {
+ "start": "Marma",
+ "size": 0.019308943,
+ "ndv": 17
+ },
+ {
+ "start": "Miskito",
+ "size": 0.019308943,
+ "ndv": 17
+ },
+ {
+ "start": "Naudemba",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "Nubian Languages",
+ "size": 0.019308943,
+ "ndv": 17
+ },
+ {
+ "start": "Palau",
+ "size": 0.019308943,
+ "ndv": 12
+ },
+ {
+ "start": "Polish",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "Portuguese",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Romani",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "Russian",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "Sango",
+ "size": 0.019308943,
+ "ndv": 10
+ },
+ {
+ "start": "Shambala",
+ "size": 0.019308943,
+ "ndv": 11
+ },
+ {
+ "start": "Somali",
+ "size": 0.015243902,
+ "ndv": 9
+ },
+ {
+ "start": "Spanish",
+ "size": 0.028455285,
+ "ndv": 1
+ },
+ {
+ "start": "Sranantonga",
+ "size": 0.019308943,
+ "ndv": 11
+ },
+ {
+ "start": "Tamashek",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Thai",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "Tswana",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "Turkmenian",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "Ukrainian and Russian",
+ "size": 0.019308943,
+ "ndv": 9
+ },
+ {
+ "start": "Watyi",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "Zulu",
+ "end": "[South]Mande",
+ "size": 0.00203252,
+ "ndv": 2
+ }
]
}
-Percentage 0.0 99.9 50 JSON_HB {
- "histogram_hb_v1": [
- "0.0",
- "0.0",
- "0.0",
- "0.0",
- "0.1",
- "0.2",
- "0.3",
- "0.4",
- "0.5",
- "0.6",
- "0.7",
- "0.9",
- "1.1",
- "1.3",
- "1.5",
- "1.7",
- "1.9",
- "2.2",
- "2.4",
- "2.7",
- "3.0",
- "3.3",
- "3.7",
- "4.1",
- "4.7",
- "5.3",
- "5.7",
- "6.4",
- "7.0",
- "7.6",
- "8.2",
- "9.0",
- "9.7",
- "11.0",
- "12.4",
- "14.0",
- "16.5",
- "19.7",
- "23.2",
- "31.0",
- "36.4",
- "45.7",
- "52.6",
- "65.3",
- "76.7",
- "85.6",
- "89.7",
- "94.1",
- "97.2",
- "99.0",
- "99.9"
+Percentage 0.0 99.9 49 JSON_HB {
+ "histogram_hb_v2": [
+ {
+ "start": "0.0",
+ "size": 0.066056911,
+ "ndv": 1
+ },
+ {
+ "start": "0.1",
+ "size": 0.020325203,
+ "ndv": 1
+ },
+ {
+ "start": "0.2",
+ "size": 0.022357724,
+ "ndv": 1
+ },
+ {
+ "start": "0.3",
+ "size": 0.017276423,
+ "ndv": 1
+ },
+ {
+ "start": "0.4",
+ "size": 0.025406504,
+ "ndv": 1
+ },
+ {
+ "start": "0.5",
+ "size": 0.020325203,
+ "ndv": 1
+ },
+ {
+ "start": "0.6",
+ "size": 0.020325203,
+ "ndv": 1
+ },
+ {
+ "start": "0.7",
+ "size": 0.019308943,
+ "ndv": 2
+ },
+ {
+ "start": "0.8",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "1.0",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "1.3",
+ "size": 0.019308943,
+ "ndv": 2
+ },
+ {
+ "start": "1.4",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "1.6",
+ "size": 0.019308943,
+ "ndv": 2
+ },
+ {
+ "start": "1.8",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "2.0",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "2.3",
+ "size": 0.019308943,
+ "ndv": 2
+ },
+ {
+ "start": "2.5",
+ "size": 0.019308943,
+ "ndv": 3
+ },
+ {
+ "start": "2.8",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "3.1",
+ "size": 0.019308943,
+ "ndv": 4
+ },
+ {
+ "start": "3.4",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "3.8",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "4.2",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "4.8",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "5.3",
+ "size": 0.019308943,
+ "ndv": 5
+ },
+ {
+ "start": "5.7",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "6.4",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "7.0",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "7.6",
+ "size": 0.019308943,
+ "ndv": 6
+ },
+ {
+ "start": "8.1",
+ "size": 0.019308943,
+ "ndv": 7
+ },
+ {
+ "start": "8.9",
+ "size": 0.019308943,
+ "ndv": 8
+ },
+ {
+ "start": "9.6",
+ "size": 0.019308943,
+ "ndv": 10
+ },
+ {
+ "start": "10.9",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "12.1",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "13.8",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "16.1",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "18.4",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "21.6",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "28.3",
+ "size": 0.019308943,
+ "ndv": 16
+ },
+ {
+ "start": "33.0",
+ "size": 0.019308943,
+ "ndv": 16
+ },
+ {
+ "start": "41.6",
+ "size": 0.019308943,
+ "ndv": 18
+ },
+ {
+ "start": "50.2",
+ "size": 0.019308943,
+ "ndv": 16
+ },
+ {
+ "start": "59.7",
+ "size": 0.019308943,
+ "ndv": 18
+ },
+ {
+ "start": "70.6",
+ "size": 0.019308943,
+ "ndv": 16
+ },
+ {
+ "start": "80.0",
+ "size": 0.019308943,
+ "ndv": 14
+ },
+ {
+ "start": "86.8",
+ "size": 0.019308943,
+ "ndv": 17
+ },
+ {
+ "start": "91.3",
+ "size": 0.019308943,
+ "ndv": 15
+ },
+ {
+ "start": "95.6",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "97.6",
+ "size": 0.019308943,
+ "ndv": 13
+ },
+ {
+ "start": "99.6",
+ "end": "99.9",
+ "size": 0.016260163,
+ "ndv": 2
+ }
]
}
analyze select * from Country use index () where Code between 'BBC' and 'GGG';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 25.49 25.52 Using where
+1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 25.10 25.52 Using where
analyze select * from Country use index () where Code < 'BBC';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 7.84 7.11 Using where
+1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 8.37 7.11 Using where
set histogram_type=@save_histogram_type;
set histogram_size=@save_histogram_size;
DROP SCHEMA world;
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index f1030662572..9461bd03dbf 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -23,12 +23,35 @@
class Histogram_json_builder : public Histogram_builder
{
Histogram_json_hb *histogram;
- uint hist_width; /* the number of points in the histogram */
- double bucket_capacity; /* number of rows in a bucket of the histogram */
- uint curr_bucket; /* number of the current bucket to be built */
+ /* Number of buckets in the histogram */
+ uint hist_width;
- std::vector<std::string> bucket_bounds;
- bool first_value= true;
+ /*
+ Number of rows that we intend to have in the bucket. That is, this is
+
+ n_rows_in_table / histo_width
+
+ Actual number of rows in the buckets we produce may vary because of
+ "popular values" and rounding.
+ */
+ longlong bucket_capacity;
+
+ /* Number of the buckets already collected */
+ uint n_buckets_collected;
+
+ /* Data about the bucket we are filling now */
+ struct CurBucket
+ {
+ /* Number of values in the bucket so far. */
+ longlong size;
+
+ /* Number of distinct values in the bucket */
+ int ndv;
+ };
+ CurBucket bucket;
+
+ /* Used to create the JSON representation of the histogram. */
+ Json_writer writer;
public:
Histogram_json_builder(Histogram_json_hb *hist, Field *col, uint col_len,
@@ -37,57 +60,159 @@ class Histogram_json_builder : public Histogram_builder
{
bucket_capacity= (double)records / histogram->get_width();
hist_width= histogram->get_width();
- curr_bucket= 0;
+ n_buckets_collected= 0;
+ bucket.ndv= 0;
+ bucket.size= 0;
+
+ writer.start_object();
+ writer.add_member(Histogram_json_hb::JSON_NAME).start_array();
}
~Histogram_json_builder() override = default;
+ bool bucket_is_empty() { return bucket.ndv == 0; }
+
+ /*
+ Flush the current bucket out (to JSON output), and set it to be empty.
+ */
+ void finalize_bucket()
+ {
+ double fract= (double) bucket.size / records;
+ writer.add_member("size").add_double(fract);
+ writer.add_member("ndv").add_ll(bucket.ndv);
+ writer.end_object();
+ n_buckets_collected++;
+
+ bucket.ndv= 0;
+ bucket.size= 0;
+ }
+
+ /*
+ Same as finalize_bucket() but also provide the bucket's end value.
+ */
+ void finalize_bucket_with_end_value(void *elem)
+ {
+ column->store_field_value((uchar*) elem, col_length);
+ StringBuffer<MAX_FIELD_WIDTH> val;
+ column->val_str(&val);
+ writer.add_member("end").add_str(val.c_ptr());
+ finalize_bucket();
+ }
+
+ /*
+ Write the first value group to the bucket.
+ @param elem The value we are writing
+ @param cnt The number of such values.
+ */
+ void start_bucket(void *elem, element_count cnt)
+ {
+ DBUG_ASSERT(bucket.size == 0);
+ column->store_field_value((uchar*) elem, col_length);
+ StringBuffer<MAX_FIELD_WIDTH> val;
+ column->val_str(&val);
+
+ writer.start_object();
+ writer.add_member("start").add_str(val.c_ptr());
+
+ bucket.ndv= 1;
+ bucket.size= cnt;
+ }
+
+ /*
+ Append a value group of cnt values.
+ */
+ void append_to_bucket(element_count cnt)
+ {
+ bucket.ndv++;
+ bucket.size += cnt;
+ }
+
/*
@brief
- Add data to the histogram. This call adds elem_cnt rows, each
- of which has value of *elem.
+ Add data to the histogram.
@detail
- Subsequent next() calls will add values that are greater than *elem.
+ The call signals to add a "value group" of elem_cnt rows, each of which
+ has the same value that is provided in *elem.
+
+ Subsequent next() calls will add values that are greater than the
+ current one.
+
+ @return
+ 0 - OK
*/
int next(void *elem, element_count elem_cnt) override
{
counters.next(elem, elem_cnt);
ulonglong count= counters.get_count();
- if (curr_bucket == hist_width)
- return 0;
- if (first_value)
+ /*
+ Ok, we've got a "value group" of elem_cnt identical values.
+
+ If we take the values from the value group and put them into
+ the current bucket, how many values will be left after we've
+ filled the bucket?
+ */
+ longlong overflow= bucket.size + elem_cnt - bucket_capacity;
+
+ /*
+ Case #1: This value group should be put into a separate bucket, if
+ A. It fills the current bucket and also fills the next bucket, OR
+ B. It fills the current bucket, which was empty.
+ */
+ if (overflow >= bucket_capacity || (bucket_is_empty() && overflow >= 0))
{
- first_value= false;
- column->store_field_value((uchar*) elem, col_length);
- StringBuffer<MAX_FIELD_WIDTH> val;
- column->val_str(&val);
- bucket_bounds.push_back(std::string(val.ptr(), val.length()));
+ // Finalize the current bucket
+ if (!bucket_is_empty())
+ finalize_bucket();
+
+ // Start/end the separate bucket for this value group.
+ start_bucket(elem, elem_cnt);
+ if (records == count)
+ finalize_bucket_with_end_value(elem);
+ else
+ finalize_bucket();
}
-
- if (count > bucket_capacity * (curr_bucket + 1))
+ else if (overflow >= 0)
{
- column->store_field_value((uchar*) elem, col_length);
- StringBuffer<MAX_FIELD_WIDTH> val;
- column->val_str(&val);
- bucket_bounds.emplace_back(val.ptr(), val.length());
-
- curr_bucket++;
- while (curr_bucket != hist_width &&
- count > bucket_capacity * (curr_bucket + 1))
+ /*
+ Case #2: is when Case#1 doesn't hold, but we can still fill the
+ current bucket.
+ */
+
+ // If the bucket was empty, it would have been case #1.
+ DBUG_ASSERT(!bucket_is_empty());
+
+ /*
+ Finalize the current bucket. Put there enough values to make it hold
+ bucket_capacity values.
+ */
+ append_to_bucket(bucket_capacity - bucket.size);
+ if (records == count && !overflow)
+ finalize_bucket_with_end_value(elem);
+ else
+ finalize_bucket();
+
+ if (overflow > 0)
{
- bucket_bounds.push_back(std::string(val.ptr(), val.length()));
- curr_bucket++;
+ // Then, start the new bucket with the remaining values.
+ start_bucket(elem, overflow);
}
}
+ else
+ {
+ // Case #3: there's not enough values to fill the current bucket.
+ if (bucket_is_empty())
+ start_bucket(elem, elem_cnt);
+ else
+ append_to_bucket(elem_cnt);
+ }
- if (records == count && bucket_bounds.size() == hist_width)
+ if (records == count)
{
- column->store_field_value((uchar*) elem, col_length);
- StringBuffer<MAX_FIELD_WIDTH> val;
- column->val_str(&val);
- bucket_bounds.push_back(std::string(val.ptr(), val.length()));
+ // This is the final value group.
+ if (!bucket_is_empty())
+ finalize_bucket_with_end_value(elem);
}
return 0;
}
@@ -98,17 +223,10 @@ class Histogram_json_builder : public Histogram_builder
*/
void finalize() override
{
- Json_writer writer;
- writer.start_object();
- writer.add_member(Histogram_json_hb::JSON_NAME).start_array();
-
- for(auto& value: bucket_bounds) {
- writer.add_str(value.c_str());
- }
writer.end_array();
writer.end_object();
Binary_string *json_string= (Binary_string *) writer.output.get_string();
- histogram->set_json_text(bucket_bounds.size()-1,
+ histogram->set_json_text(n_buckets_collected,
(uchar *) json_string->c_ptr());
}
};
@@ -143,78 +261,132 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
Histogram_type type_arg, const char *hist_data,
size_t hist_data_len)
{
+ const char *err;
DBUG_ENTER("Histogram_json_hb::parse");
DBUG_ASSERT(type_arg == JSON_HB);
- const char *err;
- json_engine_t je;
- json_string_t key_name;
+ const char *obj1;
+ int obj1_len;
+ double cumulative_size= 0.0;
- json_scan_start(&je, &my_charset_utf8mb4_bin,
- (const uchar*)hist_data,
- (const uchar*)hist_data+hist_data_len);
-
- if (json_read_value(&je) || je.value_type != JSON_VALUE_OBJECT)
+ if (JSV_OBJECT != json_type(hist_data, hist_data + hist_data_len,
+ &obj1, &obj1_len))
{
err= "Root JSON element must be a JSON object";
goto error;
}
- json_string_set_str(&key_name, (const uchar*)JSON_NAME,
- (const uchar*)JSON_NAME + strlen(JSON_NAME));
- json_string_set_cs(&key_name, system_charset_info);
-
- if (json_scan_next(&je) || je.state != JST_KEY ||
- !json_key_matches(&je, &key_name))
- {
- err= "The first key in the object must be histogram_hb_v1";
- goto error;
- }
-
- // The value must be a JSON array
- if (json_read_value(&je) || (je.value_type != JSON_VALUE_ARRAY))
+ const char *hist_array;
+ int hist_array_len;
+ if (JSV_ARRAY != json_get_object_key(obj1, obj1 + obj1_len,
+ "histogram_hb_v2", &hist_array,
+ &hist_array_len))
{
err= "A JSON array expected";
goto error;
}
- // Read the array
- while (!json_scan_next(&je))
+ for (int i= 0;; i++)
{
- switch(je.state)
+ const char *bucket_info;
+ int bucket_info_len;
+ enum json_types ret= json_get_array_item(hist_array, hist_array+hist_array_len,
+ i, &bucket_info,
+ &bucket_info_len);
+ if (ret == JSV_NOTHING)
+ break;
+ if (ret == JSV_BAD_JSON)
{
- case JST_VALUE:
- {
- const char *val;
- int val_len;
- json_smart_read_value(&je, &val, &val_len);
- if (je.value_type != JSON_VALUE_STRING &&
- je.value_type != JSON_VALUE_NUMBER &&
- je.value_type != JSON_VALUE_TRUE &&
- je.value_type != JSON_VALUE_FALSE)
- {
- err= "Scalar value expected";
- goto error;
- }
- uchar buf[MAX_KEY_LENGTH];
- uint len_to_copy= field->key_length();
- field->store_text(val, val_len, &my_charset_bin);
- uint bytes= field->get_key_image(buf, len_to_copy, Field::itRAW);
- histogram_bounds.push_back(std::string((char*)buf, bytes));
- // TODO: Should we also compare this endpoint with the previous
- // to verify that the ordering is right?
- break;
- }
- case JST_ARRAY_END:
- break;
+ err= "JSON parse error";
+ goto error;
+ }
+ if (ret != JSV_OBJECT)
+ {
+ err= "Object expected";
+ goto error;
+ }
+
+ // Ok, now we are parsing the JSON object describing the bucket
+ // Read the "start" field.
+ const char *val;
+ int val_len;
+ ret= json_get_object_key(bucket_info, bucket_info+bucket_info_len,
+ "start", &val, &val_len);
+ if (ret != JSV_STRING && ret != JSV_NUMBER)
+ {
+ err= ".start member must be present and be a scalar";
+ goto error;
+ }
+
+ // Read the "size" field.
+ const char *size;
+ int size_len;
+ ret= json_get_object_key(bucket_info, bucket_info+bucket_info_len,
+ "size", &size, &size_len);
+ if (ret != JSV_NUMBER)
+ {
+ err= ".size member must be present and be a scalar";
+ goto error;
+ }
+
+ int conv_err;
+ char *size_end= (char*)size + size_len;
+ double size_d= my_strtod(size, &size_end, &conv_err);
+ if (conv_err)
+ {
+ err= ".size member must be a floating-point value";
+ goto error;
+ }
+ cumulative_size += size_d;
+
+ // Read the "ndv" field
+ const char *ndv;
+ int ndv_len;
+ ret= json_get_object_key(bucket_info, bucket_info+bucket_info_len,
+ "ndv", &ndv, &ndv_len);
+ if (ret != JSV_NUMBER)
+ {
+ err= ".ndv member must be present and be a scalar";
+ goto error;
+ }
+ char *ndv_end= (char*)ndv + ndv_len;
+ longlong ndv_ll= my_strtoll10(ndv, &ndv_end, &conv_err);
+ if (conv_err)
+ {
+ err= ".ndv member must be an integer value";
+ goto error;
+ }
+
+ const char *end_val;
+ int end_val_len;
+ ret= json_get_object_key(bucket_info, bucket_info+bucket_info_len,
+ "end", &end_val, &end_val_len);
+ if (ret != JSV_NOTHING && ret != JSV_STRING && ret !=JSV_NUMBER)
+ {
+ err= ".end member must be a scalar";
+ goto error;
+ }
+ if (ret != JSV_NOTHING)
+ last_bucket_end_endp.assign(end_val, end_val_len);
+
+ buckets.push_back({std::string(val, val_len), NULL, cumulative_size,
+ ndv_ll});
+
+ if (buckets.size())
+ {
+ auto& prev_bucket= buckets[buckets.size()-1];
+ if (prev_bucket.ndv == 1)
+ prev_bucket.end_value= &prev_bucket.start_value;
+ else
+ prev_bucket.end_value= &buckets.back().start_value;
}
}
- // n_buckets = n_bounds - 1 :
- size= histogram_bounds.size()-1;
- DBUG_RETURN(false);
+ buckets.back().end_value= &last_bucket_end_endp;
+ size= buckets.size();
+ DBUG_RETURN(false);
error:
my_error(ER_JSON_HISTOGRAM_PARSE_FAILED, MYF(0), err,
- je.s.c_str - (const uchar*)hist_data);
+ 12345);
DBUG_RETURN(true);
}
@@ -257,7 +429,7 @@ double position_in_interval(Field *field, const uchar *key, uint key_len,
{
store_key_image_to_rec_no_null(field, left.data(), field->key_length());
double min_val_real= field->val_real();
-
+
store_key_image_to_rec_no_null(field, right.data(), field->key_length());
double max_val_real= field->val_real();
@@ -273,37 +445,44 @@ double position_in_interval(Field *field, const uchar *key, uint key_len,
double Histogram_json_hb::point_selectivity(Field *field, key_range *endpoint,
double avg_sel)
{
- double sel;
- store_key_image_to_rec(field, (uchar *) endpoint->key,
- field->key_length());
- const uchar *min_key = endpoint->key;
+ const uchar *key = endpoint->key;
if (field->real_maybe_null())
- min_key++;
- uint min_idx= find_bucket(field, min_key, false);
-
- uint max_idx= find_bucket(field, min_key, true);
-#if 0
- // find how many buckets this value occupies
- while ((max_idx + 1 < get_width() ) &&
- (field->key_cmp((uchar *)histogram_bounds[max_idx + 1].data(), min_key) == 0)) {
- max_idx++;
- }
-#endif
- if (max_idx > min_idx)
+ key++;
+
+ // If the value is outside of the histogram's range, this will "clip" it to
+ // first or last bucket.
+ int idx= find_bucket(field, key, false);
+
+ double sel;
+
+ if (buckets[idx].ndv == 1 &&
+ field->key_cmp((uchar*)buckets[idx].start_value.data(), key))
{
- // value spans multiple buckets
- double bucket_sel= 1.0/(get_width() + 1);
- sel= bucket_sel * (max_idx - min_idx + 1);
+ // The bucket has a single value and it doesn't match! Use the global
+ // average.
+ sel= avg_sel;
}
else
{
- // the value fits within a single bucket
- sel = MY_MIN(avg_sel, 1.0/get_width());
+ /*
+ We get here when:
+ * The bucket has one value and this is the value we are looking for.
+ * The bucket has multiple values. Then, assume
+ */
+ sel= (get_left_fract(idx) - buckets[idx].cum_fract) / buckets[idx].ndv;
}
return sel;
}
+double Histogram_json_hb::get_left_fract(int idx)
+{
+ if (!idx)
+ return 0.0;
+ else
+ return buckets[idx-1].cum_fract;
+}
+
/*
@param field The table field histogram is for. We don't care about the
field's current value, we only need its virtual functions to
@@ -317,7 +496,6 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
key_range *max_endp)
{
double min, max;
- double width= 1.0 / histogram_bounds.size();
if (min_endp && !(field->null_ptr && min_endp->key[0]))
{
@@ -333,10 +511,12 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
// Find the leftmost bucket that contains the lookup value.
// (If the lookup value is to the left of all buckets, find bucket #0)
int idx= find_bucket(field, min_key, exclusive_endp);
- double min_sel= position_in_interval(field, min_key, min_key_len,
- histogram_bounds[idx],
- histogram_bounds[idx+1]);
- min= idx*width + min_sel*width;
+ double left_fract= get_left_fract(idx);
+ double sel= position_in_interval(field, min_key, min_key_len,
+ buckets[idx].start_value,
+ *buckets[idx].end_value);
+
+ min= left_fract + sel * (buckets[idx].cum_fract - left_fract);
}
else
min= 0.0;
@@ -355,10 +535,11 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
}
int idx= find_bucket(field, max_key, inclusive_endp);
- double max_sel= position_in_interval(field, max_key, max_key_len,
- histogram_bounds[idx],
- histogram_bounds[idx+1]);
- max= idx*width + max_sel*width;
+ double left_fract= get_left_fract(idx);
+ double sel= position_in_interval(field, max_key, max_key_len,
+ buckets[idx].start_value,
+ *buckets[idx].end_value);
+ max= left_fract + sel * (buckets[idx].cum_fract - left_fract);
}
else
max= 1.0;
@@ -375,23 +556,35 @@ void Histogram_json_hb::serialize(Field *field)
/*
- Find the histogram bucket that contains the value.
+ Find the rightmost histogram bucket such that "lookup_val $GT start_value".
+
+ $GT is either '>' or '>=' depending on equal_is_less parameter.
@param equal_is_less Controls what to do if a histogram bound is equal to the
lookup_val.
+
+ @detail
+ Possible cases:
+ 1. The regular case: the value falls into some bucket.
+
+ 2. The value is less than the minimum of the first bucket
+ 3. The value is greater than the maximum of the last bucket
+ In these cases we "clip" to the first/last bucket.
+
+ 4. The value hits the bucket boundary. Then, we need to know whether the
+ point of interest is to the left the constant, or to the right of it.
*/
int Histogram_json_hb::find_bucket(Field *field, const uchar *lookup_val,
bool equal_is_less)
{
int low= 0;
- int high= (int)histogram_bounds.size() - 1;
- int middle;
+ int high= (int)buckets.size() - 1;
while (low + 1 < high)
{
- middle= (low + high) / 2;
- int res= field->key_cmp((uchar*)histogram_bounds[middle].data(), lookup_val);
+ int middle= (low + high) / 2;
+ int res= field->key_cmp((uchar*)buckets[middle].start_value.data(), lookup_val);
if (!res)
res= equal_is_less? -1: 1;
if (res < 0)
diff --git a/sql/opt_histogram_json.h b/sql/opt_histogram_json.h
index a83e88a88c4..ed48d951a7f 100644
--- a/sql/opt_histogram_json.h
+++ b/sql/opt_histogram_json.h
@@ -20,6 +20,32 @@
An equi-height histogram which stores real values for bucket bounds.
Handles @@histogram_type=JSON_HB
+
+ Histogram format in JSON:
+
+ {
+ "histogram_hb_v2": [
+ { "start": "value", "size":nnn.nn, "ndv": nnn },
+ ...
+ { "start": "value", "size":nnn.nn, "ndv": nnn, "end": "value"}
+ ]
+ }
+
+ The histogram is an object with single member named "histogram_hb_v2".
+ The value of that member is an array of buckets.
+ Each bucket is an object with these members:
+ "start" - the first value in the bucket.
+ "size" - fraction of table rows that is contained in the bucket.
+ "ndv" - Number of Distinct Values in the bucket.
+ "end" - Optionally, the last value in the bucket.
+
+ A bucket is a single-point bucket if it has ndv=1.
+
+ Most buckets have no "end" member: the bucket is assumed to contain all
+ values up to the "start" of the next bucket.
+
+ The exception is single-point buckets where last value is the same as the
+ first value.
*/
class Histogram_json_hb : public Histogram_base
@@ -29,11 +55,29 @@ class Histogram_json_hb : public Histogram_base
/* Collection-time only: collected histogram in the JSON form. */
std::string json_text;
- // Array of histogram bucket endpoints in KeyTupleFormat.
- std::vector<std::string> histogram_bounds;
+ struct Bucket
+ {
+ // The left endpoint in KeyTupleFormat. The endpoint is inclusive, this
+ // value is in this bucket.
+ std::string start_value;
+
+ // The right endpoint. It is non-inclusive, except for the last bucket.
+ std::string *end_value;
+
+ // Cumulative fraction: The fraction of table rows that fall into this
+ // and preceding buckets.
+ double cum_fract;
+
+ // Number of distinct values in the bucket.
+ longlong ndv;
+ };
+
+ std::vector<Bucket> buckets;
+
+ std::string last_bucket_end_endp;
public:
- static constexpr const char* JSON_NAME="histogram_hb_v1";
+ static constexpr const char* JSON_NAME="histogram_hb_v2";
bool parse(MEM_ROOT *mem_root, Field *field, Histogram_type type_arg,
const char *hist_data, size_t hist_data_len) override;
@@ -80,6 +124,7 @@ class Histogram_json_hb : public Histogram_base
}
private:
+ double get_left_fract(int idx);
int find_bucket(Field *field, const uchar *lookup_val, bool equal_is_less);
};
1
0
revision-id: bfdc2ee636901e6f4c86a94e082092e5edc931a1 (mariadb-10.6.1-122-gbfdc2ee6369)
parent(s): d43552edd3b32209aab3150069a4b4f29c9e2e7c
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-07 10:38:36 +0300
message:
Fix compilation on windows
---
sql/opt_histogram_json.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 2817a257838..f1030662572 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -220,11 +220,11 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
static
-void store_key_image_to_rec_no_null(Field *field, const char *ptr, uint len)
+void store_key_image_to_rec_no_null(Field *field, const char *ptr, size_t len)
{
MY_BITMAP *old_map= dbug_tmp_use_all_columns(field->table,
&field->table->write_set);
- field->set_key_image((const uchar*)ptr, len);
+ field->set_key_image((const uchar*)ptr, (uint)len);
dbug_tmp_restore_column_map(&field->table->write_set, old_map);
}
1
0
[Commits] d43552edd3b: Correctly decode string field values for pos_in_interval_for_string call
by psergey 06 Sep '21
by psergey 06 Sep '21
06 Sep '21
revision-id: d43552edd3b32209aab3150069a4b4f29c9e2e7c (mariadb-10.6.1-121-gd43552edd3b)
parent(s): 8fc778f3e9cbc339d14653e9e035163e52a582cd
author: Sergei Petrunia
committer: Sergei Petrunia
timestamp: 2021-09-06 18:18:08 +0300
message:
Correctly decode string field values for pos_in_interval_for_string call
---
mysql-test/main/statistics_json.result | 6 ++---
sql/field.h | 9 +++++++
sql/opt_histogram_json.cc | 47 ++++++++++++++++++++++------------
3 files changed, 42 insertions(+), 20 deletions(-)
diff --git a/mysql-test/main/statistics_json.result b/mysql-test/main/statistics_json.result
index aa7b7c08a31..102fcfff194 100644
--- a/mysql-test/main/statistics_json.result
+++ b/mysql-test/main/statistics_json.result
@@ -2452,12 +2452,12 @@ test t1_json a a-0 a-9 0.0000 3.0000 1.0000 100 JSON_HB {
}
explain extended select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 60.27 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 59.41 Using where
Warnings:
Note 1003 select `test`.`t1_json`.`a` AS `a` from `test`.`t1_json` where `test`.`t1_json`.`a` between 'a-3a' and 'zzzzzzzzz'
analyze select * from t1_json where a between 'a-3a' and 'zzzzzzzzz';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 60.27 60.00 Using where
+1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 10.00 59.41 60.00 Using where
explain extended select * from t1_json where a < 'b-1a';
id select_type table type possible_keys key key_len ref rows filtered Extra
1 SIMPLE t1_json ALL NULL NULL NULL NULL 10 99.01 Using where
@@ -3179,7 +3179,7 @@ id select_type table type possible_keys key key_len ref rows r_rows filtered r_f
1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 25.49 25.52 Using where
analyze select * from Country use index () where Code < 'BBC';
id select_type table type possible_keys key key_len ref rows r_rows filtered r_filtered Extra
-1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 5.88 7.11 Using where
+1 SIMPLE Country ALL NULL NULL NULL NULL 239 239.00 7.84 7.11 Using where
set histogram_type=@save_histogram_type;
set histogram_size=@save_histogram_size;
DROP SCHEMA world;
diff --git a/sql/field.h b/sql/field.h
index e4224fc1e51..2db81c61b75 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -1511,11 +1511,20 @@ class Field: public Value_source
if (null_ptr)
null_ptr=ADD_TO_PTR(null_ptr,ptr_diff,uchar*);
}
+
+ /*
+ Copy the Field's value to buff. The value will be in table->record[]
+ format.
+ */
void get_image(uchar *buff, uint length, CHARSET_INFO *cs) const
{ get_image(buff, length, ptr, cs); }
virtual void get_image(uchar *buff, uint length,
const uchar *ptr_arg, CHARSET_INFO *cs) const
{ memcpy(buff,ptr_arg,length); }
+
+ /*
+ Set Field's value to the value in *buf.
+ */
virtual void set_image(const uchar *buff,uint length, CHARSET_INFO *cs)
{ memcpy(ptr,buff,length); }
diff --git a/sql/opt_histogram_json.cc b/sql/opt_histogram_json.cc
index 5f4e0eca585..2817a257838 100644
--- a/sql/opt_histogram_json.cc
+++ b/sql/opt_histogram_json.cc
@@ -220,43 +220,48 @@ bool Histogram_json_hb::parse(MEM_ROOT *mem_root, Field *field,
static
-void store_key_image_to_rec_no_null(Field *field, const uchar *ptr)
+void store_key_image_to_rec_no_null(Field *field, const char *ptr, uint len)
{
MY_BITMAP *old_map= dbug_tmp_use_all_columns(field->table,
&field->table->write_set);
- field->set_key_image(ptr, field->key_length());
+ field->set_key_image((const uchar*)ptr, len);
dbug_tmp_restore_column_map(&field->table->write_set, old_map);
}
static
-double position_in_interval(Field *field, const uchar *key,
+double position_in_interval(Field *field, const uchar *key, uint key_len,
const std::string& left, const std::string& right)
{
double res;
if (field->pos_through_val_str())
{
- uint32 min_len= uint2korr(left.data());
- uint32 max_len= uint2korr(right.data());
- uint32 midp_len= uint2korr(key);
+ StringBuffer<64> buf1, buf2, buf3;
+ String empty_buf1, empty_buf2, empty_buf3;
+
+ store_key_image_to_rec_no_null(field, left.data(), left.size());
+ String *min_str= field->val_str(&buf1, &empty_buf1);
+
+ store_key_image_to_rec_no_null(field, right.data(), right.size());
+ String *max_str= field->val_str(&buf2, &empty_buf2);
+
+ store_key_image_to_rec_no_null(field, (const char*)key, key_len);
+ String *midp_str= field->val_str(&buf3, &empty_buf3);
res= pos_in_interval_for_string(field->charset(),
- key + HA_KEY_BLOB_LENGTH,
- midp_len,
- (const uchar*)left.data() + HA_KEY_BLOB_LENGTH,
- min_len,
- (const uchar*)right.data() + HA_KEY_BLOB_LENGTH,
- max_len);
+ (const uchar*)midp_str->ptr(), midp_str->length(),
+ (const uchar*)min_str->ptr(), min_str->length(),
+ (const uchar*)max_str->ptr(), max_str->length());
}
else
{
- store_key_image_to_rec_no_null(field, (const uchar*)left.data());
+ store_key_image_to_rec_no_null(field, left.data(), field->key_length());
double min_val_real= field->val_real();
- store_key_image_to_rec_no_null(field, (const uchar*)right.data());
+ store_key_image_to_rec_no_null(field, right.data(), field->key_length());
double max_val_real= field->val_real();
- store_key_image_to_rec_no_null(field, key);
+ store_key_image_to_rec_no_null(field, (const char*)key, field->key_length());
double midp_val_real= field->val_real();
res= pos_in_interval_for_double(midp_val_real, min_val_real, max_val_real);
@@ -318,13 +323,17 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
{
bool exclusive_endp= (min_endp->flag == HA_READ_AFTER_KEY)? true: false;
const uchar *min_key= min_endp->key;
+ uint min_key_len= min_endp->length;
if (field->real_maybe_null())
+ {
min_key++;
+ min_key_len--;
+ }
// Find the leftmost bucket that contains the lookup value.
// (If the lookup value is to the left of all buckets, find bucket #0)
int idx= find_bucket(field, min_key, exclusive_endp);
- double min_sel= position_in_interval(field, (const uchar*)min_key,
+ double min_sel= position_in_interval(field, min_key, min_key_len,
histogram_bounds[idx],
histogram_bounds[idx+1]);
min= idx*width + min_sel*width;
@@ -338,11 +347,15 @@ double Histogram_json_hb::range_selectivity(Field *field, key_range *min_endp,
DBUG_ASSERT(!(field->null_ptr && max_endp->key[0]));
bool inclusive_endp= (max_endp->flag == HA_READ_AFTER_KEY)? true: false;
const uchar *max_key= max_endp->key;
+ uint max_key_len= max_endp->length;
if (field->real_maybe_null())
+ {
max_key++;
+ max_key_len--;
+ }
int idx= find_bucket(field, max_key, inclusive_endp);
- double max_sel= position_in_interval(field, (const uchar*)max_key,
+ double max_sel= position_in_interval(field, max_key, max_key_len,
histogram_bounds[idx],
histogram_bounds[idx+1]);
max= idx*width + max_sel*width;
1
0