You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by GitBox <gi...@apache.org> on 2022/11/27 08:55:03 UTC
[GitHub] [doris] xiaokang opened a new pull request, #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
xiaokang opened a new pull request, #14619:
URL: https://github.com/apache/doris/pull/14619
# Proposed changes
Issue Number: close [DSIP-016: Support JSON type](https://cwiki.apache.org/confluence/display/DORIS/DSIP-016%3A+Support+JSON+type?src=contextnavpagetreemode)
## Problem summary
Describe your changes.
1. change jsonb_extract_string behavior: convert to string instead of NULL if the type of json path is not string
2. move jsonb tutorial doc to JSONB data type
## Checklist(Required)
1. Does it affect the original behavior:
- [ ] Yes
- [ ] No
- [ ] I don't know
3. Has unit tests been added:
- [ ] Yes
- [ ] No
- [ ] No Need
4. Has document been added or modified:
- [ ] Yes
- [ ] No
- [ ] No Need
5. Does it need to update dependencies:
- [ ] Yes
- [ ] No
6. Are there any changes that cannot be rolled back:
- [ ] Yes (If Yes, please explain WHY)
- [ ] No
## Further comments
If this is a relatively large or complex change, kick off the discussion at [dev@doris.apache.org](mailto:dev@doris.apache.org) by explaining why you chose the solution you did and what alternatives you considered, etc...
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] github-actions[bot] commented on pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
github-actions[bot] commented on PR #14619:
URL: https://github.com/apache/doris/pull/14619#issuecomment-1328491894
PR approved by anyone and no changes requested.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] morningman commented on a diff in pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
morningman commented on code in PR #14619:
URL: https://github.com/apache/doris/pull/14619#discussion_r1032893151
##########
docs/en/docs/sql-manual/sql-reference/Data-Types/JSONB.md:
##########
@@ -35,8 +35,775 @@ under the License.
2. JSONB format is more efficient. Using jsonb_extract functions on JSONB format is 2-4 times faster than get_json_xx on JSON STRING format.
### example
- refer to jsob tutorial.
+A tutorial for JSONB datatype including create table, load data and query.
+
+### create database and table
Review Comment:
level 4
##########
docs/en/docs/sql-manual/sql-reference/Data-Types/JSONB.md:
##########
@@ -35,8 +35,775 @@ under the License.
2. JSONB format is more efficient. Using jsonb_extract functions on JSONB format is 2-4 times faster than get_json_xx on JSON STRING format.
### example
- refer to jsob tutorial.
+A tutorial for JSONB datatype including create table, load data and query.
+
+### create database and table
+
+```
+CREATE DATABASE testdb;
+
+USE testdb;
+
+CREATE TABLE test_jsonb (
+ id INT,
+ j JSONB
+)
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 10
+PROPERTIES("replication_num" = "1");
+```
+
+### Load data
+
+#### stream load test_jsonb.csv test data
+
+- there are 2 columns, the 1st column is id and the 2nd column is json string
+- there are 25 rows, the first 18 rows are valid json and the last 7 rows are invalid
+
+
+```
+1 \N
+2 null
+3 true
+4 false
+5 100
+6 10000
+7 1000000000
+8 1152921504606846976
+9 6.18
+10 "abcd"
+11 {}
+12 {"k1":"v31", "k2": 300}
+13 []
+14 [123, 456]
+15 ["abc", "def"]
+16 [null, true, false, 100, 6.18, "abc"]
+17 [{"k1":"v41", "k2": 400}, 1, "a", 3.14]
+18 {"k1":"v31", "k2": 300, "a1": [{"k1":"v41", "k2": 400}, 1, "a", 3.14]}
+19 ''
+20 'abc'
+21 abc
+22 100x
+23 6.a8
+24 {x
+25 [123, abc]
+```
+
+- due to the 28% of rows is invalid,stream load with default configuration will fail with error message "too many filtered rows"
+
+```
+curl --location-trusted -u root: -T test_jsonb.csv http://127.0.0.1:8840/api/testdb/test_jsonb/_stream_load
+{
+ "TxnId": 12019,
+ "Label": "744d9821-9c9f-43dc-bf3b-7ab048f14e32",
+ "TwoPhaseCommit": "false",
+ "Status": "Fail",
+ "Message": "too many filtered rows",
+ "NumberTotalRows": 25,
+ "NumberLoadedRows": 18,
+ "NumberFilteredRows": 7,
+ "NumberUnselectedRows": 0,
+ "LoadBytes": 380,
+ "LoadTimeMs": 48,
+ "BeginTxnTimeMs": 0,
+ "StreamLoadPutTimeMs": 1,
+ "ReadDataTimeMs": 0,
+ "WriteDataTimeMs": 45,
+ "CommitAndPublishTimeMs": 0,
+ "ErrorURL": "http://172.21.0.5:8840/api/_load_error_log?file=__shard_2/error_log_insert_stmt_95435c4bf5f156df-426735082a9296af_95435c4bf5f156df_426735082a9296af"
+}
+```
+
+- stream load will success after set header configuration 'max_filter_ratio: 0.3'
+```
+curl --location-trusted -u root: -H 'max_filter_ratio: 0.3' -T test_jsonb.csv http://127.0.0.1:8840/api/testdb/test_jsonb/_stream_load
+{
+ "TxnId": 12017,
+ "Label": "f37a50c1-43e9-4f4e-a159-a3db6abe2579",
+ "TwoPhaseCommit": "false",
+ "Status": "Success",
+ "Message": "OK",
+ "NumberTotalRows": 25,
+ "NumberLoadedRows": 18,
+ "NumberFilteredRows": 7,
+ "NumberUnselectedRows": 0,
+ "LoadBytes": 380,
+ "LoadTimeMs": 68,
+ "BeginTxnTimeMs": 0,
+ "StreamLoadPutTimeMs": 2,
+ "ReadDataTimeMs": 0,
+ "WriteDataTimeMs": 45,
+ "CommitAndPublishTimeMs": 19,
+ "ErrorURL": "http://172.21.0.5:8840/api/_load_error_log?file=__shard_0/error_log_insert_stmt_a1463f98a7b15caf-c79399b920f5bfa3_a1463f98a7b15caf_c79399b920f5bfa3"
+}
+```
+
+- use SELECT to view the data loaded by stream load. The column with JSONB type will be displayed as plain JSON string.
+
+```
+mysql> SELECT * FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+
+| id | j |
++------+---------------------------------------------------------------+
+| 1 | NULL |
+| 2 | null |
+| 3 | true |
+| 4 | false |
+| 5 | 100 |
+| 6 | 10000 |
+| 7 | 1000000000 |
+| 8 | 1152921504606846976 |
+| 9 | 6.18 |
+| 10 | "abcd" |
+| 11 | {} |
+| 12 | {"k1":"v31","k2":300} |
+| 13 | [] |
+| 14 | [123,456] |
+| 15 | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
++------+---------------------------------------------------------------+
+18 rows in set (0.03 sec)
+
+```
+
+#### write data using insert into
+
+- total rows increae from 18 to 19 after insert 1 row
+```
+mysql> INSERT INTO test_jsonb VALUES(26, '{"k1":"v1", "k2": 200}');
+Query OK, 1 row affected (0.09 sec)
+{'label':'insert_4ece6769d1b42fd_ac9f25b3b8f3dc02', 'status':'VISIBLE', 'txnId':'12016'}
+
+mysql> SELECT * FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+
+| id | j |
++------+---------------------------------------------------------------+
+| 1 | NULL |
+| 2 | null |
+| 3 | true |
+| 4 | false |
+| 5 | 100 |
+| 6 | 10000 |
+| 7 | 1000000000 |
+| 8 | 1152921504606846976 |
+| 9 | 6.18 |
+| 10 | "abcd" |
+| 11 | {} |
+| 12 | {"k1":"v31","k2":300} |
+| 13 | [] |
+| 14 | [123,456] |
+| 15 | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
+| 26 | {"k1":"v1","k2":200} |
++------+---------------------------------------------------------------+
+19 rows in set (0.03 sec)
+
+```
+
+### Query
+
+#### extract some filed from json by jsonb_extract functions
+
+1. extract the whole json, '$' stands for root in json path
+```
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| id | j | jsonb_extract(`j`, '$') |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | null |
+| 3 | true | true |
+| 4 | false | false |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1152921504606846976 |
+| 9 | 6.18 | 6.18 |
+| 10 | "abcd" | "abcd" |
+| 11 | {} | {} |
+| 12 | {"k1":"v31","k2":300} | {"k1":"v31","k2":300} |
+| 13 | [] | [] |
+| 14 | [123,456] | [123,456] |
+| 15 | ["abc","def"] | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
+| 26 | {"k1":"v1","k2":200} | {"k1":"v1","k2":200} |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+19 rows in set (0.03 sec)
+```
+
+1. extract k1 field, return NULL if it does not exist
+```
+mysql> SELECT id, j, jsonb_extract(j, '$.k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+----------------------------+
+| id | j | jsonb_extract(`j`, '$.k1') |
++------+---------------------------------------------------------------+----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | "v31" |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | "v31" |
+| 26 | {"k1":"v1","k2":200} | "v1" |
++------+---------------------------------------------------------------+----------------------------+
+19 rows in set (0.03 sec)
+```
+
+1. extract element 0 of the top level array
+```
+mysql> SELECT id, j, jsonb_extract(j, '$[0]') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+----------------------------+
+| id | j | jsonb_extract(`j`, '$[0]') |
++------+---------------------------------------------------------------+----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | 123 |
+| 15 | ["abc","def"] | "abc" |
+| 16 | [null,true,false,100,6.18,"abc"] | null |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | {"k1":"v41","k2":400} |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+----------------------------+
+19 rows in set (0.03 sec)
+```
+
+1. extract a whole json array of name a1
+```
+mysql> SELECT id, j, jsonb_extract(j, '$.a1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+------------------------------------+
+| id | j | jsonb_extract(`j`, '$.a1') |
++------+---------------------------------------------------------------+------------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+------------------------------------+
+19 rows in set (0.02 sec)
+```
+
+1. extract nested field from an object in an array
+```
+mysql> SELECT id, j, jsonb_extract(j, '$.a1[0]'), jsonb_extract(j, '$.a1[0].k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-------------------------------+----------------------------------+
+| id | j | jsonb_extract(`j`, '$.a1[0]') | jsonb_extract(`j`, '$.a1[0].k1') |
++------+---------------------------------------------------------------+-------------------------------+----------------------------------+
+| 1 | NULL | NULL | NULL |
+| 2 | null | NULL | NULL |
+| 3 | true | NULL | NULL |
+| 4 | false | NULL | NULL |
+| 5 | 100 | NULL | NULL |
+| 6 | 10000 | NULL | NULL |
+| 7 | 1000000000 | NULL | NULL |
+| 8 | 1152921504606846976 | NULL | NULL |
+| 9 | 6.18 | NULL | NULL |
+| 10 | "abcd" | NULL | NULL |
+| 11 | {} | NULL | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL | NULL |
+| 13 | [] | NULL | NULL |
+| 14 | [123,456] | NULL | NULL |
+| 15 | ["abc","def"] | NULL | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | {"k1":"v41","k2":400} | "v41" |
+| 26 | {"k1":"v1","k2":200} | NULL | NULL |
++------+---------------------------------------------------------------+-------------------------------+----------------------------------+
+19 rows in set (0.02 sec)
+
+```
+
+1. extract field with specific datatype
+- jsonb_extract_string will extract field with string type,convert to string if the field is not string
+```
+mysql> SELECT id, j, jsonb_extract_string(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| id | j | jsonb_extract_string(`j`, '$') |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | null |
+| 3 | true | true |
+| 4 | false | false |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1152921504606846976 |
+| 9 | 6.18 | 6.18 |
+| 10 | "abcd" | abcd |
+| 11 | {} | {} |
+| 12 | {"k1":"v31","k2":300} | {"k1":"v31","k2":300} |
+| 13 | [] | [] |
+| 14 | [123,456] | [123,456] |
+| 15 | ["abc","def"] | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
+| 26 | {"k1":"v1","k2":200} | {"k1":"v1","k2":200} |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_extract_string(j, '$.k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------------+
+| id | j | jsonb_extract_string(`j`, '$.k1') |
++------+---------------------------------------------------------------+-----------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | v31 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | v31 |
+| 26 | {"k1":"v1","k2":200} | v1 |
++------+---------------------------------------------------------------+-----------------------------------+
+19 rows in set (0.03 sec)
+
+```
+
+- jsonb_extract_int will extract field with int type,return NULL if the field is not int
+```
+mysql> SELECT id, j, jsonb_extract_int(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------+
+| id | j | jsonb_extract_int(`j`, '$') |
++------+---------------------------------------------------------------+-----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+-----------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_extract_int(j, '$.k2') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_int(`j`, '$.k2') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | 300 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 300 |
+| 26 | {"k1":"v1","k2":200} | 200 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+```
+
+- jsonb_extract_bigint will extract field with bigint type,return NULL if the field is not bigint
+```
+mysql> SELECT id, j, jsonb_extract_bigint(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_bigint(`j`, '$') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1152921504606846976 |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+
+mysql> SELECT id, j, jsonb_extract_bigint(j, '$.k2') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------------+
+| id | j | jsonb_extract_bigint(`j`, '$.k2') |
++------+---------------------------------------------------------------+-----------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | 300 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 300 |
+| 26 | {"k1":"v1","k2":200} | 200 |
++------+---------------------------------------------------------------+-----------------------------------+
+19 rows in set (0.02 sec)
+
+```
+
+- jsonb_extract_double will extract field with double type,return NULL if the field is not double
+```
+mysql> SELECT id, j, jsonb_extract_double(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_double(`j`, '$') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1.152921504606847e+18 |
+| 9 | 6.18 | 6.18 |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_extract_double(j, '$.k2') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------------+
+| id | j | jsonb_extract_double(`j`, '$.k2') |
++------+---------------------------------------------------------------+-----------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | 300 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 300 |
+| 26 | {"k1":"v1","k2":200} | 200 |
++------+---------------------------------------------------------------+-----------------------------------+
+19 rows in set (0.03 sec)
+```
+
+- jsonb_extract_bool will extract field with boolean type,return NULL if the field is not boolean
+```
+mysql> SELECT id, j, jsonb_extract_bool(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+------------------------------+
+| id | j | jsonb_extract_bool(`j`, '$') |
++------+---------------------------------------------------------------+------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | 1 |
+| 4 | false | 0 |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+------------------------------+
+19 rows in set (0.01 sec)
+
+mysql> SELECT id, j, jsonb_extract_bool(j, '$[1]') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+---------------------------------+
+| id | j | jsonb_extract_bool(`j`, '$[1]') |
++------+---------------------------------------------------------------+---------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | 1 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+---------------------------------+
+19 rows in set (0.01 sec)
+```
+
+- jsonb_extract_isnull will extract field with json null type,return 1 if the field is json null , else 0
+- json null is different from SQL NULL. SQL NULL stands for no value for a field, but json null stands for an field with special value null.
+```
+mysql> SELECT id, j, jsonb_extract_isnull(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_isnull(`j`, '$') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 1 |
+| 3 | true | 0 |
+| 4 | false | 0 |
+| 5 | 100 | 0 |
+| 6 | 10000 | 0 |
+| 7 | 1000000000 | 0 |
+| 8 | 1152921504606846976 | 0 |
+| 9 | 6.18 | 0 |
+| 10 | "abcd" | 0 |
+| 11 | {} | 0 |
+| 12 | {"k1":"v31","k2":300} | 0 |
+| 13 | [] | 0 |
+| 14 | [123,456] | 0 |
+| 15 | ["abc","def"] | 0 |
+| 16 | [null,true,false,100,6.18,"abc"] | 0 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 0 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 0 |
+| 26 | {"k1":"v1","k2":200} | 0 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+
+```
+
+#### check if a field is existed in json by jsonb_exists_path
+
+```
+mysql> SELECT id, j, jsonb_exists_path(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------+
+| id | j | jsonb_exists_path(`j`, '$') |
++------+---------------------------------------------------------------+-----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 1 |
+| 3 | true | 1 |
+| 4 | false | 1 |
+| 5 | 100 | 1 |
+| 6 | 10000 | 1 |
+| 7 | 1000000000 | 1 |
+| 8 | 1152921504606846976 | 1 |
+| 9 | 6.18 | 1 |
+| 10 | "abcd" | 1 |
+| 11 | {} | 1 |
+| 12 | {"k1":"v31","k2":300} | 1 |
+| 13 | [] | 1 |
+| 14 | [123,456] | 1 |
+| 15 | ["abc","def"] | 1 |
+| 16 | [null,true,false,100,6.18,"abc"] | 1 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 1 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 1 |
+| 26 | {"k1":"v1","k2":200} | 1 |
++------+---------------------------------------------------------------+-----------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_exists_path(j, '$.k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_exists_path(`j`, '$.k1') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 0 |
+| 3 | true | 0 |
+| 4 | false | 0 |
+| 5 | 100 | 0 |
+| 6 | 10000 | 0 |
+| 7 | 1000000000 | 0 |
+| 8 | 1152921504606846976 | 0 |
+| 9 | 6.18 | 0 |
+| 10 | "abcd" | 0 |
+| 11 | {} | 0 |
+| 12 | {"k1":"v31","k2":300} | 1 |
+| 13 | [] | 0 |
+| 14 | [123,456] | 0 |
+| 15 | ["abc","def"] | 0 |
+| 16 | [null,true,false,100,6.18,"abc"] | 0 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 0 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 1 |
+| 26 | {"k1":"v1","k2":200} | 1 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+
+mysql> SELECT id, j, jsonb_exists_path(j, '$[2]') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_exists_path(`j`, '$[2]') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 0 |
+| 3 | true | 0 |
+| 4 | false | 0 |
+| 5 | 100 | 0 |
+| 6 | 10000 | 0 |
+| 7 | 1000000000 | 0 |
+| 8 | 1152921504606846976 | 0 |
+| 9 | 6.18 | 0 |
+| 10 | "abcd" | 0 |
+| 11 | {} | 0 |
+| 12 | {"k1":"v31","k2":300} | 0 |
+| 13 | [] | 0 |
+| 14 | [123,456] | 0 |
+| 15 | ["abc","def"] | 0 |
+| 16 | [null,true,false,100,6.18,"abc"] | 1 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 1 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 0 |
+| 26 | {"k1":"v1","k2":200} | 0 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.02 sec)
+
+
+```
+
+#### get the datatype of a field in json by jsonb_type
+
+- return the data type of the field specified by json path, NULL if not existed.
+```
+mysql> SELECT id, j, jsonb_type(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+----------------------+
+| id | j | jsonb_type(`j`, '$') |
++------+---------------------------------------------------------------+----------------------+
+| 1 | NULL | NULL |
+| 2 | null | null |
+| 3 | true | bool |
+| 4 | false | bool |
+| 5 | 100 | int |
+| 6 | 10000 | int |
+| 7 | 1000000000 | int |
+| 8 | 1152921504606846976 | bigint |
+| 9 | 6.18 | double |
+| 10 | "abcd" | string |
+| 11 | {} | object |
+| 12 | {"k1":"v31","k2":300} | object |
+| 13 | [] | array |
+| 14 | [123,456] | array |
+| 15 | ["abc","def"] | array |
+| 16 | [null,true,false,100,6.18,"abc"] | array |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | array |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | object |
+| 26 | {"k1":"v1","k2":200} | object |
++------+---------------------------------------------------------------+----------------------+
+19 rows in set (0.02 sec)
+
+mysql> select id, j, jsonb_type(j, '$.k1') from test_jsonb order by id;
++------+---------------------------------------------------------------+-------------------------+
+| id | j | jsonb_type(`j`, '$.k1') |
++------+---------------------------------------------------------------+-------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | string |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | string |
+| 26 | {"k1":"v1","k2":200} | string |
++------+---------------------------------------------------------------+-------------------------+
+19 rows in set (0.03 sec)
+
+```
### keywords
+JSONB, JSON, jsonb_parse, jsonb_parse_error_to_null, jsonb_parse_error_to_value, jsonb_extract, jsonb_extract_isnull, jsonb_extract_bool, jsonb_extract_int, jsonb_extract_bigint, jsonb_extract_double, jsonb_extract_string, jsonb_exists_path, jsonb_type
Review Comment:
only need `JSONB, JSON`
Other functions has their own docs
##########
docs/en/docs/sql-manual/sql-reference/Data-Types/JSONB.md:
##########
@@ -35,8 +35,775 @@ under the License.
2. JSONB format is more efficient. Using jsonb_extract functions on JSONB format is 2-4 times faster than get_json_xx on JSON STRING format.
### example
- refer to jsob tutorial.
+A tutorial for JSONB datatype including create table, load data and query.
+
+### create database and table
Review Comment:
And pay a attention to the following level
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] xiaokang commented on a diff in pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
xiaokang commented on code in PR #14619:
URL: https://github.com/apache/doris/pull/14619#discussion_r1032906358
##########
docs/en/docs/sql-manual/sql-reference/Data-Types/JSONB.md:
##########
@@ -35,8 +35,775 @@ under the License.
2. JSONB format is more efficient. Using jsonb_extract functions on JSONB format is 2-4 times faster than get_json_xx on JSON STRING format.
### example
- refer to jsob tutorial.
+A tutorial for JSONB datatype including create table, load data and query.
+
+### create database and table
Review Comment:
thanks for remind, fixed
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] hello-stephen commented on pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
hello-stephen commented on PR #14619:
URL: https://github.com/apache/doris/pull/14619#issuecomment-1328207824
TeamCity pipeline, clickbench performance test result:
the sum of best hot time: 34.92 seconds
load time: 469 seconds
storage size: 17122675646 Bytes
https://doris-community-test-1308700295.cos.ap-hongkong.myqcloud.com/tmp/20221127094359_clickbench_pr_53624.html
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] morningman merged pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
morningman merged PR #14619:
URL: https://github.com/apache/doris/pull/14619
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] xiaokang commented on a diff in pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
xiaokang commented on code in PR #14619:
URL: https://github.com/apache/doris/pull/14619#discussion_r1032906503
##########
docs/en/docs/sql-manual/sql-reference/Data-Types/JSONB.md:
##########
@@ -35,8 +35,775 @@ under the License.
2. JSONB format is more efficient. Using jsonb_extract functions on JSONB format is 2-4 times faster than get_json_xx on JSON STRING format.
### example
- refer to jsob tutorial.
+A tutorial for JSONB datatype including create table, load data and query.
+
+### create database and table
+
+```
+CREATE DATABASE testdb;
+
+USE testdb;
+
+CREATE TABLE test_jsonb (
+ id INT,
+ j JSONB
+)
+DUPLICATE KEY(id)
+DISTRIBUTED BY HASH(id) BUCKETS 10
+PROPERTIES("replication_num" = "1");
+```
+
+### Load data
+
+#### stream load test_jsonb.csv test data
+
+- there are 2 columns, the 1st column is id and the 2nd column is json string
+- there are 25 rows, the first 18 rows are valid json and the last 7 rows are invalid
+
+
+```
+1 \N
+2 null
+3 true
+4 false
+5 100
+6 10000
+7 1000000000
+8 1152921504606846976
+9 6.18
+10 "abcd"
+11 {}
+12 {"k1":"v31", "k2": 300}
+13 []
+14 [123, 456]
+15 ["abc", "def"]
+16 [null, true, false, 100, 6.18, "abc"]
+17 [{"k1":"v41", "k2": 400}, 1, "a", 3.14]
+18 {"k1":"v31", "k2": 300, "a1": [{"k1":"v41", "k2": 400}, 1, "a", 3.14]}
+19 ''
+20 'abc'
+21 abc
+22 100x
+23 6.a8
+24 {x
+25 [123, abc]
+```
+
+- due to the 28% of rows is invalid,stream load with default configuration will fail with error message "too many filtered rows"
+
+```
+curl --location-trusted -u root: -T test_jsonb.csv http://127.0.0.1:8840/api/testdb/test_jsonb/_stream_load
+{
+ "TxnId": 12019,
+ "Label": "744d9821-9c9f-43dc-bf3b-7ab048f14e32",
+ "TwoPhaseCommit": "false",
+ "Status": "Fail",
+ "Message": "too many filtered rows",
+ "NumberTotalRows": 25,
+ "NumberLoadedRows": 18,
+ "NumberFilteredRows": 7,
+ "NumberUnselectedRows": 0,
+ "LoadBytes": 380,
+ "LoadTimeMs": 48,
+ "BeginTxnTimeMs": 0,
+ "StreamLoadPutTimeMs": 1,
+ "ReadDataTimeMs": 0,
+ "WriteDataTimeMs": 45,
+ "CommitAndPublishTimeMs": 0,
+ "ErrorURL": "http://172.21.0.5:8840/api/_load_error_log?file=__shard_2/error_log_insert_stmt_95435c4bf5f156df-426735082a9296af_95435c4bf5f156df_426735082a9296af"
+}
+```
+
+- stream load will success after set header configuration 'max_filter_ratio: 0.3'
+```
+curl --location-trusted -u root: -H 'max_filter_ratio: 0.3' -T test_jsonb.csv http://127.0.0.1:8840/api/testdb/test_jsonb/_stream_load
+{
+ "TxnId": 12017,
+ "Label": "f37a50c1-43e9-4f4e-a159-a3db6abe2579",
+ "TwoPhaseCommit": "false",
+ "Status": "Success",
+ "Message": "OK",
+ "NumberTotalRows": 25,
+ "NumberLoadedRows": 18,
+ "NumberFilteredRows": 7,
+ "NumberUnselectedRows": 0,
+ "LoadBytes": 380,
+ "LoadTimeMs": 68,
+ "BeginTxnTimeMs": 0,
+ "StreamLoadPutTimeMs": 2,
+ "ReadDataTimeMs": 0,
+ "WriteDataTimeMs": 45,
+ "CommitAndPublishTimeMs": 19,
+ "ErrorURL": "http://172.21.0.5:8840/api/_load_error_log?file=__shard_0/error_log_insert_stmt_a1463f98a7b15caf-c79399b920f5bfa3_a1463f98a7b15caf_c79399b920f5bfa3"
+}
+```
+
+- use SELECT to view the data loaded by stream load. The column with JSONB type will be displayed as plain JSON string.
+
+```
+mysql> SELECT * FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+
+| id | j |
++------+---------------------------------------------------------------+
+| 1 | NULL |
+| 2 | null |
+| 3 | true |
+| 4 | false |
+| 5 | 100 |
+| 6 | 10000 |
+| 7 | 1000000000 |
+| 8 | 1152921504606846976 |
+| 9 | 6.18 |
+| 10 | "abcd" |
+| 11 | {} |
+| 12 | {"k1":"v31","k2":300} |
+| 13 | [] |
+| 14 | [123,456] |
+| 15 | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
++------+---------------------------------------------------------------+
+18 rows in set (0.03 sec)
+
+```
+
+#### write data using insert into
+
+- total rows increae from 18 to 19 after insert 1 row
+```
+mysql> INSERT INTO test_jsonb VALUES(26, '{"k1":"v1", "k2": 200}');
+Query OK, 1 row affected (0.09 sec)
+{'label':'insert_4ece6769d1b42fd_ac9f25b3b8f3dc02', 'status':'VISIBLE', 'txnId':'12016'}
+
+mysql> SELECT * FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+
+| id | j |
++------+---------------------------------------------------------------+
+| 1 | NULL |
+| 2 | null |
+| 3 | true |
+| 4 | false |
+| 5 | 100 |
+| 6 | 10000 |
+| 7 | 1000000000 |
+| 8 | 1152921504606846976 |
+| 9 | 6.18 |
+| 10 | "abcd" |
+| 11 | {} |
+| 12 | {"k1":"v31","k2":300} |
+| 13 | [] |
+| 14 | [123,456] |
+| 15 | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
+| 26 | {"k1":"v1","k2":200} |
++------+---------------------------------------------------------------+
+19 rows in set (0.03 sec)
+
+```
+
+### Query
+
+#### extract some filed from json by jsonb_extract functions
+
+1. extract the whole json, '$' stands for root in json path
+```
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| id | j | jsonb_extract(`j`, '$') |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | null |
+| 3 | true | true |
+| 4 | false | false |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1152921504606846976 |
+| 9 | 6.18 | 6.18 |
+| 10 | "abcd" | "abcd" |
+| 11 | {} | {} |
+| 12 | {"k1":"v31","k2":300} | {"k1":"v31","k2":300} |
+| 13 | [] | [] |
+| 14 | [123,456] | [123,456] |
+| 15 | ["abc","def"] | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
+| 26 | {"k1":"v1","k2":200} | {"k1":"v1","k2":200} |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+19 rows in set (0.03 sec)
+```
+
+1. extract k1 field, return NULL if it does not exist
+```
+mysql> SELECT id, j, jsonb_extract(j, '$.k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+----------------------------+
+| id | j | jsonb_extract(`j`, '$.k1') |
++------+---------------------------------------------------------------+----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | "v31" |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | "v31" |
+| 26 | {"k1":"v1","k2":200} | "v1" |
++------+---------------------------------------------------------------+----------------------------+
+19 rows in set (0.03 sec)
+```
+
+1. extract element 0 of the top level array
+```
+mysql> SELECT id, j, jsonb_extract(j, '$[0]') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+----------------------------+
+| id | j | jsonb_extract(`j`, '$[0]') |
++------+---------------------------------------------------------------+----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | 123 |
+| 15 | ["abc","def"] | "abc" |
+| 16 | [null,true,false,100,6.18,"abc"] | null |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | {"k1":"v41","k2":400} |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+----------------------------+
+19 rows in set (0.03 sec)
+```
+
+1. extract a whole json array of name a1
+```
+mysql> SELECT id, j, jsonb_extract(j, '$.a1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+------------------------------------+
+| id | j | jsonb_extract(`j`, '$.a1') |
++------+---------------------------------------------------------------+------------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+------------------------------------+
+19 rows in set (0.02 sec)
+```
+
+1. extract nested field from an object in an array
+```
+mysql> SELECT id, j, jsonb_extract(j, '$.a1[0]'), jsonb_extract(j, '$.a1[0].k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-------------------------------+----------------------------------+
+| id | j | jsonb_extract(`j`, '$.a1[0]') | jsonb_extract(`j`, '$.a1[0].k1') |
++------+---------------------------------------------------------------+-------------------------------+----------------------------------+
+| 1 | NULL | NULL | NULL |
+| 2 | null | NULL | NULL |
+| 3 | true | NULL | NULL |
+| 4 | false | NULL | NULL |
+| 5 | 100 | NULL | NULL |
+| 6 | 10000 | NULL | NULL |
+| 7 | 1000000000 | NULL | NULL |
+| 8 | 1152921504606846976 | NULL | NULL |
+| 9 | 6.18 | NULL | NULL |
+| 10 | "abcd" | NULL | NULL |
+| 11 | {} | NULL | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL | NULL |
+| 13 | [] | NULL | NULL |
+| 14 | [123,456] | NULL | NULL |
+| 15 | ["abc","def"] | NULL | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | {"k1":"v41","k2":400} | "v41" |
+| 26 | {"k1":"v1","k2":200} | NULL | NULL |
++------+---------------------------------------------------------------+-------------------------------+----------------------------------+
+19 rows in set (0.02 sec)
+
+```
+
+1. extract field with specific datatype
+- jsonb_extract_string will extract field with string type,convert to string if the field is not string
+```
+mysql> SELECT id, j, jsonb_extract_string(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| id | j | jsonb_extract_string(`j`, '$') |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | null |
+| 3 | true | true |
+| 4 | false | false |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1152921504606846976 |
+| 9 | 6.18 | 6.18 |
+| 10 | "abcd" | abcd |
+| 11 | {} | {} |
+| 12 | {"k1":"v31","k2":300} | {"k1":"v31","k2":300} |
+| 13 | [] | [] |
+| 14 | [123,456] | [123,456] |
+| 15 | ["abc","def"] | ["abc","def"] |
+| 16 | [null,true,false,100,6.18,"abc"] | [null,true,false,100,6.18,"abc"] |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | [{"k1":"v41","k2":400},1,"a",3.14] |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} |
+| 26 | {"k1":"v1","k2":200} | {"k1":"v1","k2":200} |
++------+---------------------------------------------------------------+---------------------------------------------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_extract_string(j, '$.k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------------+
+| id | j | jsonb_extract_string(`j`, '$.k1') |
++------+---------------------------------------------------------------+-----------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | v31 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | v31 |
+| 26 | {"k1":"v1","k2":200} | v1 |
++------+---------------------------------------------------------------+-----------------------------------+
+19 rows in set (0.03 sec)
+
+```
+
+- jsonb_extract_int will extract field with int type,return NULL if the field is not int
+```
+mysql> SELECT id, j, jsonb_extract_int(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------+
+| id | j | jsonb_extract_int(`j`, '$') |
++------+---------------------------------------------------------------+-----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+-----------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_extract_int(j, '$.k2') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_int(`j`, '$.k2') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | 300 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 300 |
+| 26 | {"k1":"v1","k2":200} | 200 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+```
+
+- jsonb_extract_bigint will extract field with bigint type,return NULL if the field is not bigint
+```
+mysql> SELECT id, j, jsonb_extract_bigint(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_bigint(`j`, '$') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1152921504606846976 |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+
+mysql> SELECT id, j, jsonb_extract_bigint(j, '$.k2') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------------+
+| id | j | jsonb_extract_bigint(`j`, '$.k2') |
++------+---------------------------------------------------------------+-----------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | 300 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 300 |
+| 26 | {"k1":"v1","k2":200} | 200 |
++------+---------------------------------------------------------------+-----------------------------------+
+19 rows in set (0.02 sec)
+
+```
+
+- jsonb_extract_double will extract field with double type,return NULL if the field is not double
+```
+mysql> SELECT id, j, jsonb_extract_double(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_double(`j`, '$') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | 100 |
+| 6 | 10000 | 10000 |
+| 7 | 1000000000 | 1000000000 |
+| 8 | 1152921504606846976 | 1.152921504606847e+18 |
+| 9 | 6.18 | 6.18 |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_extract_double(j, '$.k2') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------------+
+| id | j | jsonb_extract_double(`j`, '$.k2') |
++------+---------------------------------------------------------------+-----------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | 300 |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 300 |
+| 26 | {"k1":"v1","k2":200} | 200 |
++------+---------------------------------------------------------------+-----------------------------------+
+19 rows in set (0.03 sec)
+```
+
+- jsonb_extract_bool will extract field with boolean type,return NULL if the field is not boolean
+```
+mysql> SELECT id, j, jsonb_extract_bool(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+------------------------------+
+| id | j | jsonb_extract_bool(`j`, '$') |
++------+---------------------------------------------------------------+------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | 1 |
+| 4 | false | 0 |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+------------------------------+
+19 rows in set (0.01 sec)
+
+mysql> SELECT id, j, jsonb_extract_bool(j, '$[1]') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+---------------------------------+
+| id | j | jsonb_extract_bool(`j`, '$[1]') |
++------+---------------------------------------------------------------+---------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | NULL |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | 1 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | NULL |
+| 26 | {"k1":"v1","k2":200} | NULL |
++------+---------------------------------------------------------------+---------------------------------+
+19 rows in set (0.01 sec)
+```
+
+- jsonb_extract_isnull will extract field with json null type,return 1 if the field is json null , else 0
+- json null is different from SQL NULL. SQL NULL stands for no value for a field, but json null stands for an field with special value null.
+```
+mysql> SELECT id, j, jsonb_extract_isnull(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_extract_isnull(`j`, '$') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 1 |
+| 3 | true | 0 |
+| 4 | false | 0 |
+| 5 | 100 | 0 |
+| 6 | 10000 | 0 |
+| 7 | 1000000000 | 0 |
+| 8 | 1152921504606846976 | 0 |
+| 9 | 6.18 | 0 |
+| 10 | "abcd" | 0 |
+| 11 | {} | 0 |
+| 12 | {"k1":"v31","k2":300} | 0 |
+| 13 | [] | 0 |
+| 14 | [123,456] | 0 |
+| 15 | ["abc","def"] | 0 |
+| 16 | [null,true,false,100,6.18,"abc"] | 0 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 0 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 0 |
+| 26 | {"k1":"v1","k2":200} | 0 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+
+```
+
+#### check if a field is existed in json by jsonb_exists_path
+
+```
+mysql> SELECT id, j, jsonb_exists_path(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+-----------------------------+
+| id | j | jsonb_exists_path(`j`, '$') |
++------+---------------------------------------------------------------+-----------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 1 |
+| 3 | true | 1 |
+| 4 | false | 1 |
+| 5 | 100 | 1 |
+| 6 | 10000 | 1 |
+| 7 | 1000000000 | 1 |
+| 8 | 1152921504606846976 | 1 |
+| 9 | 6.18 | 1 |
+| 10 | "abcd" | 1 |
+| 11 | {} | 1 |
+| 12 | {"k1":"v31","k2":300} | 1 |
+| 13 | [] | 1 |
+| 14 | [123,456] | 1 |
+| 15 | ["abc","def"] | 1 |
+| 16 | [null,true,false,100,6.18,"abc"] | 1 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 1 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 1 |
+| 26 | {"k1":"v1","k2":200} | 1 |
++------+---------------------------------------------------------------+-----------------------------+
+19 rows in set (0.02 sec)
+
+mysql> SELECT id, j, jsonb_exists_path(j, '$.k1') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_exists_path(`j`, '$.k1') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 0 |
+| 3 | true | 0 |
+| 4 | false | 0 |
+| 5 | 100 | 0 |
+| 6 | 10000 | 0 |
+| 7 | 1000000000 | 0 |
+| 8 | 1152921504606846976 | 0 |
+| 9 | 6.18 | 0 |
+| 10 | "abcd" | 0 |
+| 11 | {} | 0 |
+| 12 | {"k1":"v31","k2":300} | 1 |
+| 13 | [] | 0 |
+| 14 | [123,456] | 0 |
+| 15 | ["abc","def"] | 0 |
+| 16 | [null,true,false,100,6.18,"abc"] | 0 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 0 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 1 |
+| 26 | {"k1":"v1","k2":200} | 1 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.03 sec)
+
+mysql> SELECT id, j, jsonb_exists_path(j, '$[2]') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+--------------------------------+
+| id | j | jsonb_exists_path(`j`, '$[2]') |
++------+---------------------------------------------------------------+--------------------------------+
+| 1 | NULL | NULL |
+| 2 | null | 0 |
+| 3 | true | 0 |
+| 4 | false | 0 |
+| 5 | 100 | 0 |
+| 6 | 10000 | 0 |
+| 7 | 1000000000 | 0 |
+| 8 | 1152921504606846976 | 0 |
+| 9 | 6.18 | 0 |
+| 10 | "abcd" | 0 |
+| 11 | {} | 0 |
+| 12 | {"k1":"v31","k2":300} | 0 |
+| 13 | [] | 0 |
+| 14 | [123,456] | 0 |
+| 15 | ["abc","def"] | 0 |
+| 16 | [null,true,false,100,6.18,"abc"] | 1 |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | 1 |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | 0 |
+| 26 | {"k1":"v1","k2":200} | 0 |
++------+---------------------------------------------------------------+--------------------------------+
+19 rows in set (0.02 sec)
+
+
+```
+
+#### get the datatype of a field in json by jsonb_type
+
+- return the data type of the field specified by json path, NULL if not existed.
+```
+mysql> SELECT id, j, jsonb_type(j, '$') FROM test_jsonb ORDER BY id;
++------+---------------------------------------------------------------+----------------------+
+| id | j | jsonb_type(`j`, '$') |
++------+---------------------------------------------------------------+----------------------+
+| 1 | NULL | NULL |
+| 2 | null | null |
+| 3 | true | bool |
+| 4 | false | bool |
+| 5 | 100 | int |
+| 6 | 10000 | int |
+| 7 | 1000000000 | int |
+| 8 | 1152921504606846976 | bigint |
+| 9 | 6.18 | double |
+| 10 | "abcd" | string |
+| 11 | {} | object |
+| 12 | {"k1":"v31","k2":300} | object |
+| 13 | [] | array |
+| 14 | [123,456] | array |
+| 15 | ["abc","def"] | array |
+| 16 | [null,true,false,100,6.18,"abc"] | array |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | array |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | object |
+| 26 | {"k1":"v1","k2":200} | object |
++------+---------------------------------------------------------------+----------------------+
+19 rows in set (0.02 sec)
+
+mysql> select id, j, jsonb_type(j, '$.k1') from test_jsonb order by id;
++------+---------------------------------------------------------------+-------------------------+
+| id | j | jsonb_type(`j`, '$.k1') |
++------+---------------------------------------------------------------+-------------------------+
+| 1 | NULL | NULL |
+| 2 | null | NULL |
+| 3 | true | NULL |
+| 4 | false | NULL |
+| 5 | 100 | NULL |
+| 6 | 10000 | NULL |
+| 7 | 1000000000 | NULL |
+| 8 | 1152921504606846976 | NULL |
+| 9 | 6.18 | NULL |
+| 10 | "abcd" | NULL |
+| 11 | {} | NULL |
+| 12 | {"k1":"v31","k2":300} | string |
+| 13 | [] | NULL |
+| 14 | [123,456] | NULL |
+| 15 | ["abc","def"] | NULL |
+| 16 | [null,true,false,100,6.18,"abc"] | NULL |
+| 17 | [{"k1":"v41","k2":400},1,"a",3.14] | NULL |
+| 18 | {"k1":"v31","k2":300,"a1":[{"k1":"v41","k2":400},1,"a",3.14]} | string |
+| 26 | {"k1":"v1","k2":200} | string |
++------+---------------------------------------------------------------+-------------------------+
+19 rows in set (0.03 sec)
+
+```
### keywords
+JSONB, JSON, jsonb_parse, jsonb_parse_error_to_null, jsonb_parse_error_to_value, jsonb_extract, jsonb_extract_isnull, jsonb_extract_bool, jsonb_extract_int, jsonb_extract_bigint, jsonb_extract_double, jsonb_extract_string, jsonb_exists_path, jsonb_type
Review Comment:
the examples are useful for other functions and referenced by other docs
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org
[GitHub] [doris] github-actions[bot] commented on pull request #14619: [feature](jsonb function)change jsonb_extract_string behavior and doc
Posted by GitBox <gi...@apache.org>.
github-actions[bot] commented on PR #14619:
URL: https://github.com/apache/doris/pull/14619#issuecomment-1328491883
PR approved by at least one committer and no changes requested.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org