SlideShare a Scribd company logo
1 of 48
Download to read offline
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Second Step to the NoSQL Side: MySQL JSON 
Functions 
Sveta Smirnova 
Senior Principal Technical Support Engineer 
MySQL Support 
September 29, 2014 
Copyright © 2014, Oracle and/or its affiliates. All rriigghhttss rreesseerrvveedd.. ||
Safe Harbor Statement 
The following is intended to outline our general product direction. It is intended for 
information purposes only, and may not be incorporated into any contract. It is not a 
commitment to deliver any material, code, or functionality, and should not be relied upon 
in making purchasing decisions. The development, release, and timing of any features or 
functionality described for Oracle’s products remains at the sole discretion of Oracle. 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Program Agenda 
Overview 
Function descriptions 
Where to get 
How to install 
References 
1 
2 
3 
4 
5
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Overview
0.3 
0.25 
0.2 
0.15 
0.1 
0.05 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
JSON functions in MySQL 
• 2012: version 0.1 
– Presented at MySQL Connect 
– Internally 
0.2 
• 2013: version 0.2 
–First public release 0.2.0 
–0.2.1 
0.1 
Never published 
• 2014: version 0.3 
–First Community contribution 
–0.3.0, 0.2.2, 0.3.1 
0 
–Current version 0.3.2 2012 2013 2014 
0.3
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
JSON functions overview 
What are they doing? 
• Functions 
–Manipulate JSON text 
• Validate 
• Search 
• Modify 
• UDF functions 
–Easy to install 
–Independent from MySQL Server version 
• Work on all MySQL supported platforms 
• Binaries for Linux, Mac OS X 10.9 and Windows
JSON functions improvements after 
MySQL Connect 2013 
• 26 bugs fixed 
• 13 features implemented 
• 1 Community contribution 
• Simplified build 
• Automatic package builder 
• Error messages in the error log file 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Function descriptions 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_valid(doc) 
• Checks if doc is valid JSON document. 
• Returns 1 if document is valid, 0 if document is invalid. 
• Strict format as described at 
● http://json.org 
● http://www.ietf.org/rfc/rfc4627.txt?number=4627 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_valid(doc) 
mysql> select json_valid('{"MySQL Central": ["conference", 
2014]}'), 
json_valid('["conference", 2014]'), 
json_valid('"conference"'), 
json_valid('{"MySQL Central"}')G 
*************************** 1. row *************************** 
json_valid('{"MySQL Central": ["conference", 2014]}'): 1 
json_valid('["conference", 2014]'): 1 
json_valid('"conference"'): 1 
json_valid('{"MySQL Central"}'): 0 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
1 row in set (0.00 sec)
Functions, accessing elements by a key 
• json_contains_key 
• json_extract 
• json_append 
• json_replace 
• json_set 
• json_remove 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Functions, accessing elements by a key 
• json_contains_key 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
• json_extract 
• json_append 
• json_replace 
• json_set 
• json_remove 
Checks if the document contains key 
specified 
Extracts the element by key 
Appends the element 
Replaces the element 
Perform a kind of INSERT ON 
DUPLICATE KEY UPDATE operation 
Removes the element
json_contains_key(doc, keypart1, keypart2, ...) 
SET optimizer_trace=1; 
mysql> select user from mysql.user; 
... 
mysql> select json_contains_key(trace, 'steps', '1', 'join_optimization', 
'steps', '0', 'condition_processing') as contains from 
information_schema.optimizer_trace; 
+----------+ 
| contains | 
+----------+ 
| 0 | 
+----------+ 
1 row in set (0.01 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_contains_key(doc, keypart1, keypart2, ...) 
mysql> select user from mysql.user where user='Sveta'; 
mysql> select json_contains_key(trace, 'steps', '1', 
'join_optimization', 'steps', '0', 'condition_processing') 
as contains from information_schema.optimizer_trace; 
+----------+ 
| contains | 
+----------+ 
| 1 | 
+----------+ 
1 row in set (0.01 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_extract(doc, keypart1, keypart2, ...) 
SET optimizer_trace=1; 
mysql> select user from mysql.user; 
... 
mysql> select json_extract(trace, 'steps', '1', 'join_optimization', 'steps', 
'0', 'condition_processing') as contains from 
information_schema.optimizer_trace; 
+----------+ 
| contains | 
+----------+ 
| NULL | 
+----------+ 
1 row in set (0.03 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Search path 
{“steps”: 
[ 
... 
{“join_optimization”: 
{“steps”: 
[ 
{“condition_processing”: ..... 
json_extract(trace, 'steps', '1', 'join_optimization', 'steps', 
'0', 'condition_processing')
json_extract(doc, keypart1, keypart2, ...) 
mysql> select user from mysql.user where user='Sveta'; 
… 
mysql> select json_extract(trace, 'steps', '1', 'join_optimization', 
'steps', '0', 'condition_processing') as contains from 
information_schema.optimizer_traceG 
*************************** 1. row *************************** 
contains: { 
"condition": "WHERE", 
"original_condition": "(`mysql`.`user`.`User` = 'Sveta')", 
"steps": [ 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
...
json_append(doc, keypart1, keypart2, ..., 
new_element) 
mysql> select json_append('{"MySQL Central": ["conference", 
2014]}', 'MySQL Central', 2, '"San Francisco"') as el2, 
-> json_append('{"MySQL Central": ["conference", 2014]}', 
'MySQL Central', -1, '"San Francisco"') as `el-1`, 
-> json_append('{"MySQL Central": ["conference", 2014]}', 
'MySQL Central', 1, '"San Francisco"') as el1G 
*************************** 1. row *************************** 
el2: {"MySQL Central": ["conference", 2014, "San Francisco"]} 
el-1: {"MySQL Central": ["conference", 2014, "San Francisco"]} 
el1: {"MySQL Central": ["conference", 2014]} 
1 row in set (0.01 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_replace(doc, keypart1, keypart2, ..., 
new_value) 
mysql> select json_replace('{"MySQL Central": ["conference", 
2014]}', 'MySQL Central', 0, '"User conference"') as el0, 
-> json_replace('{"MySQL Central": ["conference", 2014]}', 
'MySQL Central', 2, '"User conference"') as el2, 
-> json_replace('{"MySQL Central": ["conference", 2014]}', 
'MySQL Central', -1, '"User conference"') as `el-1`G 
*************************** 1. row *************************** 
el0: {"MySQL Central": ["User conference", 2014]} 
el2: {"MySQL Central": ["conference", 2014]} 
el-1: {"MySQL Central": ["conference", 2014]} 
1 row in set (0.00 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_set(doc, keypart1, keypart2, ..., new_value) 
mysql> select json_set('{"MySQL Central": ["conference", 2014]}', 
'MySQL Central', 0, '"User conference"') as el0, 
-> json_set('{"MySQL Central": ["conference", 2014]}', 'MySQL 
Central', 2, '"San Francisco"') as el2, 
-> json_set('{"MySQL Central": ["conference", 2014]}', 'MySQL 
Central', -1, '"San Francisco"') as `el-1`G 
*************************** 1. row *************************** 
el0: {"MySQL Central": ["User conference", 2014]} 
el2: {"MySQL Central": ["conference", 2014, "San Francisco"]} 
el-1: {"MySQL Central": ["conference", 2014, "San Francisco"]} 
1 row in set (0.00 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_remove(doc, keypart1, keypart2, ...) 
mysql> select json_remove('{"MySQL Central": ["conference", 
2014]}', 'MySQL Central', 1) as el1, 
-> json_remove('{"MySQL Central": ["conference", 2014]}', 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
'MySQL Central', 2) as el2, 
-> json_remove('{"MySQL Central": ["conference", 2014]}', 
'MySQL Central', -1) as `el-1`G 
*************************** 1. row *************************** 
el1: {"MySQL Central": ["conference"]} 
el2: {"MySQL Central": ["conference", 2014]} 
el-1: {"MySQL Central": ["conference", 2014]} 
1 row in set (0.00 sec)
json_search(doc, value) 
• Searches for specified value in the document 
• Wildcards supported since version 0.3.2 
• Returns key path of the element which contains the value in reverse order 
or NULL if not found or parsing failed 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_search(doc, value) 
mysql> select json_search(trace, '"trivial_condition_removal"') as `full`, 
-> json_search(trace, '"trivial_condition"') as `partial`, 
-> json_search(trace, '"trivial_condition%"') as `wildcard` from 
information_schema.optimizer_traceG 
*************************** 1. row *************************** 
full: 
transformation:0:steps:condit...essing:0:steps:join_optimization:0:steps:: 
partial: NULL 
wildcard: 
transformation:0:steps:condit...essing:0:steps:join_optimization:0:steps:: 
1 row in set (0.01 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Functions, merging documents 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
• json_merge 
• json_safe_merge 
• json_deep_merge 
Merge two or more documents into 
one 
Return first document with 
followings appended 
Does not handle duplicate keys, 
does not check for validity, open and 
closing brackets must match 
+ Checks for validity 
+ Duplicate keys are updated
json_[safe_|deep_]merge(doc1, doc2, ...) 
mysql> select json_merge('{"OOW": ["conference", 2013]}',  
'{"OOW": ["conference" 2014]}') as 'json_merge', 
-> json_safe_merge('{"OOW": ["conference", 2013]}',  
'{"OOW": ["conference" 2014]}') as 'json_safe_merge', 
-> json_safe_merge('{"OOW": ["conference", 2013]}',  
'{"OOW": ["conference", 2014]}') as 'json_safe_merge', 
-> json_deep_merge('{"OOW": ["conference", 2013]}',  
'{"OOW": ["conference", 2014]}') as 'json_deep_merge'G 
*************************** 1. row *************************** 
json_merge: {"OOW": ["conference", 2013], "OOW": ["conference" 2014]} 
json_safe_merge: {"OOW": ["conference", 2013]} 
json_safe_merge: {"OOW": ["conference", 2013], "OOW": ["conference", 2014]} 
json_deep_merge: {"OOW": ["conference", 2013, "conference", 2014]} 
1 row in set (0.01 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_depth(doc) 
• Returns depth of the document 
• mysql> select json_depth('{"MySQL Central": 
["conference", 2014]}') as 'json_depth'; 
+------------+ 
| json_depth | 
+------------+ 
| 3 | 
+------------+ 
1 row in set (0.00 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_count(doc[, keypart1[, keypart2[, ...]]]) 
• Returns number of childs of the key specified 
• mysql> select json_count('{"MySQL Central": ["conference", 
2014]}') as 'root count', 
-> json_count('{"MySQL Central": ["conference", 
2014]}', 'MySQL Central') as 'first element count'G 
************************ 1. row ************************ 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
root count: 1 
first element count: 2 
1 row in set (0.02 sec)
json_version() 
• Returns version number of the functions 
• mysql> select json_version(); 
+----------------------------+ 
| json_version() | 
+----------------------------+ 
| MySQL JSON UDFs 0.3.2-labs | 
+----------------------------+ 
1 row in set (0.00 sec) 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_test_parser(doc) 
• Returns text representation of parse tree of the JSON document, partial 
parse tree or empty string if document is invalid. 
• This function is supposed to use for tests only and should not be used in 
production. 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
json_test_parser(doc) 
mysql> select json_test_parser('{"MySQL Central": ["conference", 
2014]}') as 'parse tree'G 
*************************** 1. row *************************** 
parse tree: => "conference"; 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
=> 2014; 
"MySQL Central" => ["conference", 2014]; 
=> {"MySQL Central": ["conference", 2014]}; 
1 row in set (0.00 sec)
json_test_parser(doc) 
mysql> select json_test_parser('{"MySQL Central": ["conference", 
2014]') as 'parse tree'G 
*************************** 1. row *************************** 
parse tree: => "conference"; 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
=> 2014; 
"MySQL Central" => ["conference", 2014]; 
1 row in set (0.00 sec)
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Where to get?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Source Code and Binaries 
• MySQL Labs 
– Source code 
– Binaries 
• x86 and x86_64 
• Generic Linux 
• Mac OSX 10.9 
• Windows 7 
• http://labs.mysql.com/
More Information 
• Manuals and articles 
– README file 
– Author's blog: https://blogs.oracle.com/svetasmirnova/tags/json 
• Announces 
–Author's twitter: https://twitter.com/svetsmirnova 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
How to install?
How to install? 
UNIX 
create function json_valid returns integer 
soname 'libmy_json_udf.so'; 
create function json_search returns string 
soname 'libmy_json_udf.so'; 
create function json_extract returns string 
soname 'libmy_json_udf.so'; 
create function json_replace returns string 
soname 'libmy_json_udf.so'; 
... 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
How to install? 
Windows 
create function json_remove returns string 
soname 'my_json_udf.dll'; 
create function json_set returns string 
soname 'my_json_udf.dll'; 
create function json_merge returns string 
soname 'my_json_udf.dll'; 
create function json_contains_key returns integer 
soname 'my_json_udf.dll'; 
... 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
How to install or remove? 
Ready-to use scripts 
mysql db_name < install_jsonudf.sql 
mysql db_name < uninstall_jsonudf.sql 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
• Thank you, Daniel van Eeden!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Dependencies 
• PCRE library 
• Bundled with the functions 
• Statically compiled with binaries 
• UNIX 
– You can use system's 
• Windows 
● Always compiles statically 
• You should not install any additional libraries to use functions!
How to Compile? 
UNIX 
• You need: 
– Cmake 
– PCRE library (bundled with sources) 
– Compiler 
• How to compile: 
cmake . -DMYSQL_DIR=/home/sveta/build/mysql-5.6 
make 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
How to Compile? 
Windows 
• You need: 
– Cmake 
– PCRE library (bundled with sources) 
– Visual Studio 
• How to compile: 
"C:Program Files (x86)CMake 2.8bincmake.exe" 
-G "Visual Studio 11 Win64" . 
-DMYSQL_DIR="C:/MySQL/mysql-5.6.21" 
devenv my_json_udf.sln /build Release 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
References
Feature Requests and Bug Reports 
• MySQL Community Bugs Database 
– https://bugs.mysql.com 
– Category 
• “MySQL Server: JSON User-defined function (UDF)” 
• Oracle's Bugs Database for engineers and paying customers 
– Ask MySQL Support engineers to open a bug report for you 
– Category 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
• “UDFJSON”
More information 
• https://blogs.oracle.com/svetasmirnova/ 
• https://twitter.com/#!/svetsmirnova 
• http://json.org/ 
• http://www.pcre.org/ 
• http://dev.mysql.com/doc/refman/5.6/en/adding-functions.html 
• http://bugs.mysql.com/ 
• https://support.oracle.com 
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
?
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 
Thank you!
Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |

More Related Content

What's hot

OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenNETWAYS
 
OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)David Bosschaert
 
Multi thread slave_performance_on_opc
Multi thread slave_performance_on_opcMulti thread slave_performance_on_opc
Multi thread slave_performance_on_opcShinya Sugiyama
 
Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGiDavid Bosschaert
 
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...Frederic Descamps
 
Manual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQLManual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQLErick Vidbaz
 
common_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQLcommon_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQLShlomi Noach
 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesDave Stokes
 
Open Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseOpen Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseDave Stokes
 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationDave Stokes
 
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScriptJavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScriptDave Stokes
 
openark-kit: MySQL utilities for everyday use
openark-kit: MySQL utilities for everyday useopenark-kit: MySQL utilities for everyday use
openark-kit: MySQL utilities for everyday useShlomi Noach
 
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
MySQL's NoSQL  -- Texas Linuxfest August 22nd 2015MySQL's NoSQL  -- Texas Linuxfest August 22nd 2015
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015Dave Stokes
 
Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my! Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my! Dave Stokes
 
Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Performance Tuning Corporation
 
MySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationMySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationNuno Carvalho
 

What's hot (20)

MySQL8.0 in COSCUP2017
MySQL8.0 in COSCUP2017MySQL8.0 in COSCUP2017
MySQL8.0 in COSCUP2017
 
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert VanderkelenOSMC 2008 | Monitoring MySQL by Geert Vanderkelen
OSMC 2008 | Monitoring MySQL by Geert Vanderkelen
 
OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)OSGi Cloud Ecosystems (EclipseCon 2013)
OSGi Cloud Ecosystems (EclipseCon 2013)
 
MySQL Monitoring 101
MySQL Monitoring 101MySQL Monitoring 101
MySQL Monitoring 101
 
Multi thread slave_performance_on_opc
Multi thread slave_performance_on_opcMulti thread slave_performance_on_opc
Multi thread slave_performance_on_opc
 
Maximize the power of OSGi
Maximize the power of OSGiMaximize the power of OSGi
Maximize the power of OSGi
 
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...FOSDEM 2022 MySQL Devroom:  MySQL 8.0 - Logical Backups, Snapshots and Point-...
FOSDEM 2022 MySQL Devroom: MySQL 8.0 - Logical Backups, Snapshots and Point-...
 
Manual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQLManual Tecnico OGG Oracle to MySQL
Manual Tecnico OGG Oracle to MySQL
 
Oracle Cloud As Services
Oracle Cloud As ServicesOracle Cloud As Services
Oracle Cloud As Services
 
common_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQLcommon_schema 2.0: DBA's Framework for MySQL
common_schema 2.0: DBA's Framework for MySQL
 
MySQL 8.0 Operational Changes
MySQL 8.0 Operational ChangesMySQL 8.0 Operational Changes
MySQL 8.0 Operational Changes
 
MySQL Router REST API
MySQL Router REST APIMySQL Router REST API
MySQL Router REST API
 
Open Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational DatabaseOpen Source World June '21 -- JSON Within a Relational Database
Open Source World June '21 -- JSON Within a Relational Database
 
MySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentationMySQL Replication Update - DEbconf 2020 presentation
MySQL Replication Update - DEbconf 2020 presentation
 
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScriptJavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
 
openark-kit: MySQL utilities for everyday use
openark-kit: MySQL utilities for everyday useopenark-kit: MySQL utilities for everyday use
openark-kit: MySQL utilities for everyday use
 
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
MySQL's NoSQL  -- Texas Linuxfest August 22nd 2015MySQL's NoSQL  -- Texas Linuxfest August 22nd 2015
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
 
Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my! Datacon LA - MySQL without the SQL - Oh my!
Datacon LA - MySQL without the SQL - Oh my!
 
Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?Database 12c is ready for you... Are you ready for 12c?
Database 12c is ready for you... Are you ready for 12c?
 
MySQL High Availability with Group Replication
MySQL High Availability with Group ReplicationMySQL High Availability with Group Replication
MySQL High Availability with Group Replication
 

Similar to MySQL JSON Functions Guide

NoSQL атакует: JSON функции в MySQL сервере.
NoSQL атакует: JSON функции в MySQL сервере.NoSQL атакует: JSON функции в MySQL сервере.
NoSQL атакует: JSON функции в MySQL сервере.Sveta Smirnova
 
MySQL sys schema deep dive
MySQL sys schema deep diveMySQL sys schema deep dive
MySQL sys schema deep diveMark Leith
 
20161029 py con-mysq-lv3
20161029 py con-mysq-lv320161029 py con-mysq-lv3
20161029 py con-mysq-lv3Ivan Ma
 
MySQL Fabric Tutorial, October 2014
MySQL Fabric Tutorial, October 2014MySQL Fabric Tutorial, October 2014
MySQL Fabric Tutorial, October 2014Lars Thalmann
 
The MySQL SYS Schema
The MySQL SYS SchemaThe MySQL SYS Schema
The MySQL SYS SchemaMark Leith
 
Exploring mysql cluster 7.4
Exploring mysql cluster 7.4Exploring mysql cluster 7.4
Exploring mysql cluster 7.4Ivan Ma
 
MySQL-Performance Schema- What's new in MySQL-5.7 DMRs
MySQL-Performance Schema- What's new in MySQL-5.7 DMRsMySQL-Performance Schema- What's new in MySQL-5.7 DMRs
MySQL-Performance Schema- What's new in MySQL-5.7 DMRsMayank Prasad
 
Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001jucaab
 
Monitoring your technology stack with New Relic
Monitoring your technology stack with New RelicMonitoring your technology stack with New Relic
Monitoring your technology stack with New RelicRonald Bradford
 
Basic MySQL Troubleshooting for Oracle DBAs
Basic MySQL Troubleshooting for Oracle DBAsBasic MySQL Troubleshooting for Oracle DBAs
Basic MySQL Troubleshooting for Oracle DBAsSveta Smirnova
 
Optimizer percona live_ams2015
Optimizer percona live_ams2015Optimizer percona live_ams2015
Optimizer percona live_ams2015Manyi Lu
 
Exachk and oem12c - IOUG C15LV
Exachk and oem12c - IOUG C15LVExachk and oem12c - IOUG C15LV
Exachk and oem12c - IOUG C15LVBobby Curtis
 
Moving to the NoSQL side: MySQL JSON functions
 Moving to the NoSQL side: MySQL JSON functions Moving to the NoSQL side: MySQL JSON functions
Moving to the NoSQL side: MySQL JSON functionsSveta Smirnova
 
NoSQL and MySQL: News about JSON
NoSQL and MySQL: News about JSONNoSQL and MySQL: News about JSON
NoSQL and MySQL: News about JSONMario Beck
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGIMike Pittaro
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersBruno Borges
 
Python and the MySQL Document Store
Python and the MySQL Document StorePython and the MySQL Document Store
Python and the MySQL Document StoreJesper Wisborg Krogh
 
20141011 my sql clusterv01pptx
20141011 my sql clusterv01pptx20141011 my sql clusterv01pptx
20141011 my sql clusterv01pptxIvan Ma
 

Similar to MySQL JSON Functions Guide (20)

NoSQL атакует: JSON функции в MySQL сервере.
NoSQL атакует: JSON функции в MySQL сервере.NoSQL атакует: JSON функции в MySQL сервере.
NoSQL атакует: JSON функции в MySQL сервере.
 
MySQL sys schema deep dive
MySQL sys schema deep diveMySQL sys schema deep dive
MySQL sys schema deep dive
 
MySQL Quick Dive
MySQL Quick DiveMySQL Quick Dive
MySQL Quick Dive
 
20161029 py con-mysq-lv3
20161029 py con-mysq-lv320161029 py con-mysq-lv3
20161029 py con-mysq-lv3
 
MySQL Fabric Tutorial, October 2014
MySQL Fabric Tutorial, October 2014MySQL Fabric Tutorial, October 2014
MySQL Fabric Tutorial, October 2014
 
The MySQL SYS Schema
The MySQL SYS SchemaThe MySQL SYS Schema
The MySQL SYS Schema
 
Exploring mysql cluster 7.4
Exploring mysql cluster 7.4Exploring mysql cluster 7.4
Exploring mysql cluster 7.4
 
MySQL-Performance Schema- What's new in MySQL-5.7 DMRs
MySQL-Performance Schema- What's new in MySQL-5.7 DMRsMySQL-Performance Schema- What's new in MySQL-5.7 DMRs
MySQL-Performance Schema- What's new in MySQL-5.7 DMRs
 
Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001Ebs dba con4696_pdf_4696_0001
Ebs dba con4696_pdf_4696_0001
 
Monitoring your technology stack with New Relic
Monitoring your technology stack with New RelicMonitoring your technology stack with New Relic
Monitoring your technology stack with New Relic
 
Basic MySQL Troubleshooting for Oracle DBAs
Basic MySQL Troubleshooting for Oracle DBAsBasic MySQL Troubleshooting for Oracle DBAs
Basic MySQL Troubleshooting for Oracle DBAs
 
MySQL NoSQL APIs
MySQL NoSQL APIsMySQL NoSQL APIs
MySQL NoSQL APIs
 
Optimizer percona live_ams2015
Optimizer percona live_ams2015Optimizer percona live_ams2015
Optimizer percona live_ams2015
 
Exachk and oem12c - IOUG C15LV
Exachk and oem12c - IOUG C15LVExachk and oem12c - IOUG C15LV
Exachk and oem12c - IOUG C15LV
 
Moving to the NoSQL side: MySQL JSON functions
 Moving to the NoSQL side: MySQL JSON functions Moving to the NoSQL side: MySQL JSON functions
Moving to the NoSQL side: MySQL JSON functions
 
NoSQL and MySQL: News about JSON
NoSQL and MySQL: News about JSONNoSQL and MySQL: News about JSON
NoSQL and MySQL: News about JSON
 
OpenStack API's and WSGI
OpenStack API's and WSGIOpenStack API's and WSGI
OpenStack API's and WSGI
 
Java EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c DevelopersJava EE 7 for WebLogic 12c Developers
Java EE 7 for WebLogic 12c Developers
 
Python and the MySQL Document Store
Python and the MySQL Document StorePython and the MySQL Document Store
Python and the MySQL Document Store
 
20141011 my sql clusterv01pptx
20141011 my sql clusterv01pptx20141011 my sql clusterv01pptx
20141011 my sql clusterv01pptx
 

More from Sveta Smirnova

MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?Sveta Smirnova
 
Database in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and MonitoringDatabase in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and MonitoringSveta Smirnova
 
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveMySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveSveta Smirnova
 
MySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for DevelopersMySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for DevelopersSveta Smirnova
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOpsSveta Smirnova
 
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговMySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговSveta Smirnova
 
MySQL Cookbook: Recipes for Your Business
MySQL Cookbook: Recipes for Your BusinessMySQL Cookbook: Recipes for Your Business
MySQL Cookbook: Recipes for Your BusinessSveta Smirnova
 
Introduction into MySQL Query Tuning for Dev[Op]s
Introduction into MySQL Query Tuning for Dev[Op]sIntroduction into MySQL Query Tuning for Dev[Op]s
Introduction into MySQL Query Tuning for Dev[Op]sSveta Smirnova
 
Производительность MySQL для DevOps
 Производительность MySQL для DevOps Производительность MySQL для DevOps
Производительность MySQL для DevOpsSveta Smirnova
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOpsSveta Smirnova
 
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB ClusterHow to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB ClusterSveta Smirnova
 
How to migrate from MySQL to MariaDB without tears
How to migrate from MySQL to MariaDB without tearsHow to migrate from MySQL to MariaDB without tears
How to migrate from MySQL to MariaDB without tearsSveta Smirnova
 
Modern solutions for modern database load: improvements in the latest MariaDB...
Modern solutions for modern database load: improvements in the latest MariaDB...Modern solutions for modern database load: improvements in the latest MariaDB...
Modern solutions for modern database load: improvements in the latest MariaDB...Sveta Smirnova
 
How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?Sveta Smirnova
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaСовременному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaSveta Smirnova
 
How to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraHow to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraSveta Smirnova
 
How Safe is Asynchronous Master-Master Setup?
 How Safe is Asynchronous Master-Master Setup? How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?Sveta Smirnova
 
Introduction to MySQL Query Tuning for Dev[Op]s
Introduction to MySQL Query Tuning for Dev[Op]sIntroduction to MySQL Query Tuning for Dev[Op]s
Introduction to MySQL Query Tuning for Dev[Op]sSveta Smirnova
 
Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?Sveta Smirnova
 
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...Sveta Smirnova
 

More from Sveta Smirnova (20)

MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
 
Database in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and MonitoringDatabase in Kubernetes: Diagnostics and Monitoring
Database in Kubernetes: Diagnostics and Monitoring
 
MySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to HaveMySQL Database Monitoring: Must, Good and Nice to Have
MySQL Database Monitoring: Must, Good and Nice to Have
 
MySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for DevelopersMySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for Developers
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOps
 
MySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации баговMySQL Test Framework для поддержки клиентов и верификации багов
MySQL Test Framework для поддержки клиентов и верификации багов
 
MySQL Cookbook: Recipes for Your Business
MySQL Cookbook: Recipes for Your BusinessMySQL Cookbook: Recipes for Your Business
MySQL Cookbook: Recipes for Your Business
 
Introduction into MySQL Query Tuning for Dev[Op]s
Introduction into MySQL Query Tuning for Dev[Op]sIntroduction into MySQL Query Tuning for Dev[Op]s
Introduction into MySQL Query Tuning for Dev[Op]s
 
Производительность MySQL для DevOps
 Производительность MySQL для DevOps Производительность MySQL для DevOps
Производительность MySQL для DevOps
 
MySQL Performance for DevOps
MySQL Performance for DevOpsMySQL Performance for DevOps
MySQL Performance for DevOps
 
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB ClusterHow to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
 
How to migrate from MySQL to MariaDB without tears
How to migrate from MySQL to MariaDB without tearsHow to migrate from MySQL to MariaDB without tears
How to migrate from MySQL to MariaDB without tears
 
Modern solutions for modern database load: improvements in the latest MariaDB...
Modern solutions for modern database load: improvements in the latest MariaDB...Modern solutions for modern database load: improvements in the latest MariaDB...
Modern solutions for modern database load: improvements in the latest MariaDB...
 
How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения PerconaСовременному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
 
How to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with GaleraHow to Avoid Pitfalls in Schema Upgrade with Galera
How to Avoid Pitfalls in Schema Upgrade with Galera
 
How Safe is Asynchronous Master-Master Setup?
 How Safe is Asynchronous Master-Master Setup? How Safe is Asynchronous Master-Master Setup?
How Safe is Asynchronous Master-Master Setup?
 
Introduction to MySQL Query Tuning for Dev[Op]s
Introduction to MySQL Query Tuning for Dev[Op]sIntroduction to MySQL Query Tuning for Dev[Op]s
Introduction to MySQL Query Tuning for Dev[Op]s
 
Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?Billion Goods in Few Categories: How Histograms Save a Life?
Billion Goods in Few Categories: How Histograms Save a Life?
 
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
A Billion Goods in a Few Categories: When Optimizer Histograms Help and When ...
 

Recently uploaded

EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityNeo4j
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesPhilip Schwarz
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Matt Ray
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxTier1 app
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....kzayra69
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfLivetecs LLC
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)jennyeacort
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmSujith Sukumaran
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEOrtus Solutions, Corp
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanyChristoph Pohl
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Hr365.us smith
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Andreas Granig
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackVICTOR MAESTRE RAMIREZ
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfAlina Yurenko
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtimeandrehoraa
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfStefano Stabellini
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024StefanoLambiase
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based projectAnoyGreter
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesŁukasz Chruściel
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)OPEN KNOWLEDGE GmbH
 

Recently uploaded (20)

EY_Graph Database Powered Sustainability
EY_Graph Database Powered SustainabilityEY_Graph Database Powered Sustainability
EY_Graph Database Powered Sustainability
 
Folding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a seriesFolding Cheat Sheet #4 - fourth in a series
Folding Cheat Sheet #4 - fourth in a series
 
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
Open Source Summit NA 2024: Open Source Cloud Costs - OpenCost's Impact on En...
 
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptxKnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
KnowAPIs-UnknownPerf-jaxMainz-2024 (1).pptx
 
What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....What are the key points to focus on before starting to learn ETL Development....
What are the key points to focus on before starting to learn ETL Development....
 
How to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdfHow to Track Employee Performance A Comprehensive Guide.pdf
How to Track Employee Performance A Comprehensive Guide.pdf
 
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
Call Us🔝>༒+91-9711147426⇛Call In girls karol bagh (Delhi)
 
Intelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalmIntelligent Home Wi-Fi Solutions | ThinkPalm
Intelligent Home Wi-Fi Solutions | ThinkPalm
 
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASEBATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
BATTLEFIELD ORM: TIPS, TACTICS AND STRATEGIES FOR CONQUERING YOUR DATABASE
 
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte GermanySuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
SuccessFactors 1H 2024 Release - Sneak-Peek by Deloitte Germany
 
Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)Recruitment Management Software Benefits (Infographic)
Recruitment Management Software Benefits (Infographic)
 
Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024Automate your Kamailio Test Calls - Kamailio World 2024
Automate your Kamailio Test Calls - Kamailio World 2024
 
Cloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStackCloud Management Software Platforms: OpenStack
Cloud Management Software Platforms: OpenStack
 
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdfGOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
GOING AOT WITH GRAALVM – DEVOXX GREECE.pdf
 
SpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at RuntimeSpotFlow: Tracking Method Calls and States at Runtime
SpotFlow: Tracking Method Calls and States at Runtime
 
Xen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdfXen Safety Embedded OSS Summit April 2024 v4.pdf
Xen Safety Embedded OSS Summit April 2024 v4.pdf
 
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
Dealing with Cultural Dispersion — Stefano Lambiase — ICSE-SEIS 2024
 
MYjobs Presentation Django-based project
MYjobs Presentation Django-based projectMYjobs Presentation Django-based project
MYjobs Presentation Django-based project
 
Unveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New FeaturesUnveiling the Future: Sylius 2.0 New Features
Unveiling the Future: Sylius 2.0 New Features
 
Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)Der Spagat zwischen BIAS und FAIRNESS (2024)
Der Spagat zwischen BIAS und FAIRNESS (2024)
 

MySQL JSON Functions Guide

  • 1. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 2. Second Step to the NoSQL Side: MySQL JSON Functions Sveta Smirnova Senior Principal Technical Support Engineer MySQL Support September 29, 2014 Copyright © 2014, Oracle and/or its affiliates. All rriigghhttss rreesseerrvveedd.. ||
  • 3. Safe Harbor Statement The following is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions. The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 4. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Program Agenda Overview Function descriptions Where to get How to install References 1 2 3 4 5
  • 5. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Overview
  • 6. 0.3 0.25 0.2 0.15 0.1 0.05 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON functions in MySQL • 2012: version 0.1 – Presented at MySQL Connect – Internally 0.2 • 2013: version 0.2 –First public release 0.2.0 –0.2.1 0.1 Never published • 2014: version 0.3 –First Community contribution –0.3.0, 0.2.2, 0.3.1 0 –Current version 0.3.2 2012 2013 2014 0.3
  • 7. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | JSON functions overview What are they doing? • Functions –Manipulate JSON text • Validate • Search • Modify • UDF functions –Easy to install –Independent from MySQL Server version • Work on all MySQL supported platforms • Binaries for Linux, Mac OS X 10.9 and Windows
  • 8. JSON functions improvements after MySQL Connect 2013 • 26 bugs fixed • 13 features implemented • 1 Community contribution • Simplified build • Automatic package builder • Error messages in the error log file Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 9. Function descriptions Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 10. json_valid(doc) • Checks if doc is valid JSON document. • Returns 1 if document is valid, 0 if document is invalid. • Strict format as described at ● http://json.org ● http://www.ietf.org/rfc/rfc4627.txt?number=4627 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 11. json_valid(doc) mysql> select json_valid('{"MySQL Central": ["conference", 2014]}'), json_valid('["conference", 2014]'), json_valid('"conference"'), json_valid('{"MySQL Central"}')G *************************** 1. row *************************** json_valid('{"MySQL Central": ["conference", 2014]}'): 1 json_valid('["conference", 2014]'): 1 json_valid('"conference"'): 1 json_valid('{"MySQL Central"}'): 0 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 1 row in set (0.00 sec)
  • 12. Functions, accessing elements by a key • json_contains_key • json_extract • json_append • json_replace • json_set • json_remove Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 13. Functions, accessing elements by a key • json_contains_key Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • json_extract • json_append • json_replace • json_set • json_remove Checks if the document contains key specified Extracts the element by key Appends the element Replaces the element Perform a kind of INSERT ON DUPLICATE KEY UPDATE operation Removes the element
  • 14. json_contains_key(doc, keypart1, keypart2, ...) SET optimizer_trace=1; mysql> select user from mysql.user; ... mysql> select json_contains_key(trace, 'steps', '1', 'join_optimization', 'steps', '0', 'condition_processing') as contains from information_schema.optimizer_trace; +----------+ | contains | +----------+ | 0 | +----------+ 1 row in set (0.01 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 15. json_contains_key(doc, keypart1, keypart2, ...) mysql> select user from mysql.user where user='Sveta'; mysql> select json_contains_key(trace, 'steps', '1', 'join_optimization', 'steps', '0', 'condition_processing') as contains from information_schema.optimizer_trace; +----------+ | contains | +----------+ | 1 | +----------+ 1 row in set (0.01 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 16. json_extract(doc, keypart1, keypart2, ...) SET optimizer_trace=1; mysql> select user from mysql.user; ... mysql> select json_extract(trace, 'steps', '1', 'join_optimization', 'steps', '0', 'condition_processing') as contains from information_schema.optimizer_trace; +----------+ | contains | +----------+ | NULL | +----------+ 1 row in set (0.03 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 17. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Search path {“steps”: [ ... {“join_optimization”: {“steps”: [ {“condition_processing”: ..... json_extract(trace, 'steps', '1', 'join_optimization', 'steps', '0', 'condition_processing')
  • 18. json_extract(doc, keypart1, keypart2, ...) mysql> select user from mysql.user where user='Sveta'; … mysql> select json_extract(trace, 'steps', '1', 'join_optimization', 'steps', '0', 'condition_processing') as contains from information_schema.optimizer_traceG *************************** 1. row *************************** contains: { "condition": "WHERE", "original_condition": "(`mysql`.`user`.`User` = 'Sveta')", "steps": [ Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ...
  • 19. json_append(doc, keypart1, keypart2, ..., new_element) mysql> select json_append('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 2, '"San Francisco"') as el2, -> json_append('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', -1, '"San Francisco"') as `el-1`, -> json_append('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 1, '"San Francisco"') as el1G *************************** 1. row *************************** el2: {"MySQL Central": ["conference", 2014, "San Francisco"]} el-1: {"MySQL Central": ["conference", 2014, "San Francisco"]} el1: {"MySQL Central": ["conference", 2014]} 1 row in set (0.01 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 20. json_replace(doc, keypart1, keypart2, ..., new_value) mysql> select json_replace('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 0, '"User conference"') as el0, -> json_replace('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 2, '"User conference"') as el2, -> json_replace('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', -1, '"User conference"') as `el-1`G *************************** 1. row *************************** el0: {"MySQL Central": ["User conference", 2014]} el2: {"MySQL Central": ["conference", 2014]} el-1: {"MySQL Central": ["conference", 2014]} 1 row in set (0.00 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 21. json_set(doc, keypart1, keypart2, ..., new_value) mysql> select json_set('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 0, '"User conference"') as el0, -> json_set('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 2, '"San Francisco"') as el2, -> json_set('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', -1, '"San Francisco"') as `el-1`G *************************** 1. row *************************** el0: {"MySQL Central": ["User conference", 2014]} el2: {"MySQL Central": ["conference", 2014, "San Francisco"]} el-1: {"MySQL Central": ["conference", 2014, "San Francisco"]} 1 row in set (0.00 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 22. json_remove(doc, keypart1, keypart2, ...) mysql> select json_remove('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', 1) as el1, -> json_remove('{"MySQL Central": ["conference", 2014]}', Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | 'MySQL Central', 2) as el2, -> json_remove('{"MySQL Central": ["conference", 2014]}', 'MySQL Central', -1) as `el-1`G *************************** 1. row *************************** el1: {"MySQL Central": ["conference"]} el2: {"MySQL Central": ["conference", 2014]} el-1: {"MySQL Central": ["conference", 2014]} 1 row in set (0.00 sec)
  • 23. json_search(doc, value) • Searches for specified value in the document • Wildcards supported since version 0.3.2 • Returns key path of the element which contains the value in reverse order or NULL if not found or parsing failed Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 24. json_search(doc, value) mysql> select json_search(trace, '"trivial_condition_removal"') as `full`, -> json_search(trace, '"trivial_condition"') as `partial`, -> json_search(trace, '"trivial_condition%"') as `wildcard` from information_schema.optimizer_traceG *************************** 1. row *************************** full: transformation:0:steps:condit...essing:0:steps:join_optimization:0:steps:: partial: NULL wildcard: transformation:0:steps:condit...essing:0:steps:join_optimization:0:steps:: 1 row in set (0.01 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 25. Functions, merging documents Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • json_merge • json_safe_merge • json_deep_merge Merge two or more documents into one Return first document with followings appended Does not handle duplicate keys, does not check for validity, open and closing brackets must match + Checks for validity + Duplicate keys are updated
  • 26. json_[safe_|deep_]merge(doc1, doc2, ...) mysql> select json_merge('{"OOW": ["conference", 2013]}', '{"OOW": ["conference" 2014]}') as 'json_merge', -> json_safe_merge('{"OOW": ["conference", 2013]}', '{"OOW": ["conference" 2014]}') as 'json_safe_merge', -> json_safe_merge('{"OOW": ["conference", 2013]}', '{"OOW": ["conference", 2014]}') as 'json_safe_merge', -> json_deep_merge('{"OOW": ["conference", 2013]}', '{"OOW": ["conference", 2014]}') as 'json_deep_merge'G *************************** 1. row *************************** json_merge: {"OOW": ["conference", 2013], "OOW": ["conference" 2014]} json_safe_merge: {"OOW": ["conference", 2013]} json_safe_merge: {"OOW": ["conference", 2013], "OOW": ["conference", 2014]} json_deep_merge: {"OOW": ["conference", 2013, "conference", 2014]} 1 row in set (0.01 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 27. json_depth(doc) • Returns depth of the document • mysql> select json_depth('{"MySQL Central": ["conference", 2014]}') as 'json_depth'; +------------+ | json_depth | +------------+ | 3 | +------------+ 1 row in set (0.00 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 28. json_count(doc[, keypart1[, keypart2[, ...]]]) • Returns number of childs of the key specified • mysql> select json_count('{"MySQL Central": ["conference", 2014]}') as 'root count', -> json_count('{"MySQL Central": ["conference", 2014]}', 'MySQL Central') as 'first element count'G ************************ 1. row ************************ Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | root count: 1 first element count: 2 1 row in set (0.02 sec)
  • 29. json_version() • Returns version number of the functions • mysql> select json_version(); +----------------------------+ | json_version() | +----------------------------+ | MySQL JSON UDFs 0.3.2-labs | +----------------------------+ 1 row in set (0.00 sec) Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 30. json_test_parser(doc) • Returns text representation of parse tree of the JSON document, partial parse tree or empty string if document is invalid. • This function is supposed to use for tests only and should not be used in production. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 31. json_test_parser(doc) mysql> select json_test_parser('{"MySQL Central": ["conference", 2014]}') as 'parse tree'G *************************** 1. row *************************** parse tree: => "conference"; Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | => 2014; "MySQL Central" => ["conference", 2014]; => {"MySQL Central": ["conference", 2014]}; 1 row in set (0.00 sec)
  • 32. json_test_parser(doc) mysql> select json_test_parser('{"MySQL Central": ["conference", 2014]') as 'parse tree'G *************************** 1. row *************************** parse tree: => "conference"; Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | => 2014; "MySQL Central" => ["conference", 2014]; 1 row in set (0.00 sec)
  • 33. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Where to get?
  • 34. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Source Code and Binaries • MySQL Labs – Source code – Binaries • x86 and x86_64 • Generic Linux • Mac OSX 10.9 • Windows 7 • http://labs.mysql.com/
  • 35. More Information • Manuals and articles – README file – Author's blog: https://blogs.oracle.com/svetasmirnova/tags/json • Announces –Author's twitter: https://twitter.com/svetsmirnova Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 36. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | How to install?
  • 37. How to install? UNIX create function json_valid returns integer soname 'libmy_json_udf.so'; create function json_search returns string soname 'libmy_json_udf.so'; create function json_extract returns string soname 'libmy_json_udf.so'; create function json_replace returns string soname 'libmy_json_udf.so'; ... Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 38. How to install? Windows create function json_remove returns string soname 'my_json_udf.dll'; create function json_set returns string soname 'my_json_udf.dll'; create function json_merge returns string soname 'my_json_udf.dll'; create function json_contains_key returns integer soname 'my_json_udf.dll'; ... Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 39. How to install or remove? Ready-to use scripts mysql db_name < install_jsonudf.sql mysql db_name < uninstall_jsonudf.sql Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • Thank you, Daniel van Eeden!
  • 40. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Dependencies • PCRE library • Bundled with the functions • Statically compiled with binaries • UNIX – You can use system's • Windows ● Always compiles statically • You should not install any additional libraries to use functions!
  • 41. How to Compile? UNIX • You need: – Cmake – PCRE library (bundled with sources) – Compiler • How to compile: cmake . -DMYSQL_DIR=/home/sveta/build/mysql-5.6 make Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 42. How to Compile? Windows • You need: – Cmake – PCRE library (bundled with sources) – Visual Studio • How to compile: "C:Program Files (x86)CMake 2.8bincmake.exe" -G "Visual Studio 11 Win64" . -DMYSQL_DIR="C:/MySQL/mysql-5.6.21" devenv my_json_udf.sln /build Release Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 43. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | References
  • 44. Feature Requests and Bug Reports • MySQL Community Bugs Database – https://bugs.mysql.com – Category • “MySQL Server: JSON User-defined function (UDF)” • Oracle's Bugs Database for engineers and paying customers – Ask MySQL Support engineers to open a bug report for you – Category Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | • “UDFJSON”
  • 45. More information • https://blogs.oracle.com/svetasmirnova/ • https://twitter.com/#!/svetsmirnova • http://json.org/ • http://www.pcre.org/ • http://dev.mysql.com/doc/refman/5.6/en/adding-functions.html • http://bugs.mysql.com/ • https://support.oracle.com Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |
  • 46. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | ?
  • 47. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. | Thank you!
  • 48. Copyright © 2014, Oracle and/or its affiliates. All rights reserved. |