SlideShare a Scribd company logo
1Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
MySQL JSON Functions
Sveta Smirnova
Principal Technical Support Engineer

2Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

Insert Picture Here
Program Agenda
 Introduction: NoSQL involvement on MySQL
 Overview of the functions
 Function descriptions
 Where to get
 The future

3Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
NoSQL history
4
3.5
3
2.5
2
1.5

Main historic points of
NoSQL

1
0.5

WebSphere
MongoDB
Virtuoso
Redis
DynamoDB
MemcacheDB
Tarantool
Hbase
CouchDB
BigTable
db40 memcached
NoSQL
NoSQL Insert Chart Here term
database

0
1997

1998

2000

2003

2004

2008

Databases

4Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

2009

2010

2012

2013
NoSQL in MySQL world
Hadoop Applier
mysqlv8udfs
JSON UDFs
InnoDB with memcached
Memcache API for
MySQL Cluster

6
5
4
3

Main points for NoSQL
features in MySQL

HandlerSocket NoSQL Connector
Insert Chart Here
for JavaScript
1 Memcached bugs
EXPLAIN in JSON
at mysql.com
0

2

2009

5Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

2010

2011

2012

2013
JSON functions in MySQL

A little bit before this year

0.2
0.18
0.16
0.14
0.12
0.1
0.08
0.06
0.04
0.02
0

Version 0.2

Version 0.1
Never published
Insert Chart Here
2012
2013

6Copyright © 2013, 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 OSX 7 and Windows

7Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
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';
create function json_append returns string
soname 'libmy_json_udf.so';
...

8Copyright © 2013, 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';
create function json_test_parser returns string
soname 'my_json_udf.dll';
...
9Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Dependencies

Regex library
UNIX
●
Usually already exists
Windows
●
Provided with sources
●
Compiled statically
You don't need to install additional libraries to run the UDF!

10Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
How to compile?
UNIX
You need:
●
cmake
●
Regex library (usually already exists)
●
Working compiler
To build:
●
cmake . ­DMYSQL_DIR=/home/sveta/src/mysql­5.5
●
make

11Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
How to compile?
Windows
You need: PCRE static libraries, Visual Studio and cmake (cmake.org)
To build PCRE:
●
Download sources from http://www.pcre.org/ Recommended version is 8.33 or cd pcre­8.33
●
Unpack archive and run:
●
"C:Program Files (x86)CMake 2.8bincmake.exe" ­G "Visual Studio 
11 Win64"
●

●

devenv PCRE.sln /build Release

To build JSON UDFs copy pcre.h, pcreposix.h, Release/pcre.lib, 
Release/pcreposix.lib into JSON UDFs source directory, then run:
●
"C:Program Files (x86)CMake 2.8bincmake.exe" ­G "Visual Studio 
11 Win64" . ­DMYSQL_DIR="C:/MySQL/mysql­5.5"
●

devenv my_json_udf.sln /build Release

12Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Disadvantages of UDFs

They are slow
●
Can not use certain server features, available for internal functions
●
Full-text
●

Indexes

●

Built-in optimization

13Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Why UDFs?

Flexibility
●
You can install as many functions as you want: single, few or all of them
Compatible with any server version
●
You don't need to upgrade to not stable version only to try these functions
Easy to add
Easy to change
Easy to remove
Feature requests are easy to implement
●
Report bugs!
●
Raise your opinion!

14Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Functions descriptions
Insert Picture Here

15Copyright © 2013, 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

16Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_valid(doc)

mysql> select json_valid('{"MySQL connect": ["conference", 2013]}');
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| json_valid('{"MySQL connect": ["conference", 2013]}') |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
|                                                     1 |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.01 sec)

17Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_valid(doc)

mysql> select json_valid('{"MySQL connect"}');
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| json_valid('{"MySQL connect"}') |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
|                               0 |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

18Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_contains_key(doc, keypart1, keypart2, ...)

Checks if documents contains specified key.
Returns 1 if key exists, 0 if not exists or NULL if parsing failed.
Warning! This version does not check whole document for validity.

19Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_contains_key(doc, keypart1, keypart2, ...)

SET optimizer_trace=1;
mysql> select user from mysql.user;
+­­­­­­+
...
mysql> select json_contains_key(trace, 'steps', '0', 
'join_optimization', 'steps', '0', 'condition_processing') as contains 
from information_schema.optimizer_trace;
+­­­­­­­­­­+
| contains |
+­­­­­­­­­­+
|        0 |
+­­­­­­­­­­+
1 row in set (0.01 sec)
20Copyright © 2013, 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', '0', 
'join_optimization', 'steps', '0', 'condition_processing') as 
contains from information_schema.optimizer_trace;
+­­­­­­­­­­+
| contains |
+­­­­­­­­­­+
|        1 |
+­­­­­­­­­­+
1 row in set (0.01 sec)
21Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_extract(doc, keypart1, keypart2, ...)

Extracts value of the specified key.
Returns value of the key specified, NULL if the key does not exist or if
parsing failed.
Warning! This version does not check whole document for validity.

22Copyright © 2013, 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', '0', 'join_optimization', 
'steps', '0', 'condition_processing') as value from 
information_schema.optimizer_trace;
+­­­­­­­­­­+
| value    |
+­­­­­­­­­­+
|     NULL |
+­­­­­­­­­­+
1 row in set (0.01 sec)
23Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Search path

{“steps”:
  [
    {“join_optimization”:
        {“steps”:
            [
              {“condition_processing”: .....
json_extract(trace, 'steps', '0', 
'join_optimization', 'steps', '0', 
'condition_processing')
24Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_extract(doc, keypart1, keypart2, ...)

mysql> select user from mysql.user where user='Sveta';
+­­­­­­+
...
mysql> select json_extract(trace, 'steps', '0', 'join_optimization', 
'steps', '0', 'condition_processing') as value from 
information_schema.optimizer_traceG
*************************** 1. row ***************************
value: {
              "condition": "WHERE",
              "original_condition": "(`mysql`.`user`.`User` = 
'sveta')",
              "steps": [
....
25Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_append(doc, keypart1, keypart2, ...,
new_element)
Inserts new element into JSON document.
Returns document with appended element, original document if no
place to insert or NULL if parsing failed.
Warning! This version does not check whole document for validity.

26Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_append(doc, keypart1, keypart2, ...,
new_element)
mysql> select json_append('{"MySQL connect": ["conference", 2013]}', 'MySQL 
connect', '2', '”San Francisco”') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                                          |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2013, “San Francisco”]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

27Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_append(doc, keypart1, keypart2, ...,
new_element)
mysql> select json_append('{"MySQL connect": 
["conference", 2013]}', 'MySQL connect', '1', '”San 
Francisco”') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                           |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)
28Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_replace(doc, keypart1, keypart2, ...,
new_value)
Updates value of the specified key.
Returns document with replaced key or original document if no such an
element found, NULL if parsing failed.
Warning! This version does not check whole document for validity.

29Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_replace(doc, keypart1, keypart2, ...,
new_value)
mysql> select json_replace('{"MySQL connect": 
["conference", 2013]}', 'MySQL connect', '0', '"User 
conference"') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                                |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["User conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)
30Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_replace(doc, keypart1, keypart2, ...,
new_value)
mysql> select json_replace('{"MySQL connect": 
["conference", 2013]}', 'MySQL connect', '2', '"User 
conference"') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                           |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)
31Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_set(doc, keypart1, keypart2, ..., new_value)

Performs kind of INSERT ... ON DUPLICATE KEY UPDATE operation.
Returns document with updated or inserted element or NULL if parsing
failed.
Warning! This version does not check whole document for validity.

32Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_set(doc, keypart1, keypart2, ..., new_value)

mysql> select json_set('{"MySQL connect": 
["conference", 2013]}', 'MySQL connect', '0', '"User 
conference"') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                                |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["User conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)
33Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_set(doc, keypart1, keypart2, ..., new_value)

mysql> select json_set('{"MySQL connect": ["conference", 2013]}', 'MySQL 
connect', '2', '"San Francisco"') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                                            |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2013, "San Francisco"]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

34Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_remove(doc, keypart1, keypart2, ...)

Removes element specified by the key.
Returns document without the element, original document if no element
found or NULL if parsing failed.
Warning! This version does not check whole document for validity.

35Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_remove(doc, keypart1, keypart2, ...)

mysql> select json_remove('{"MySQL connect": 
["conference", 2013]}', 'MySQL connect', '1') as 
'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                     |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference"]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)
36Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_remove(doc, keypart1, keypart2, ...)

mysql> select json_remove('{"MySQL connect": 
["conference", 2013]}', 'MySQL connect', '2') as 
'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                           |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)
37Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_search(doc, value)

Searches for specified value in the document.
Returns key path of the element which contains the value in reverse
order or NULL if not found or parsing failed.
Warning! This version does not check whole document for validity.

38Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_search(doc, value)

mysql> select json_search(trace, '"trivial_condition_removal"') from 
information_schema.optimizer_trace;
­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| json_search(trace, '"trivial_condition_removal"')                               |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| transformation:0:steps:condition_processing:0:steps:join_optimization:0:steps:: |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

39Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_search(doc, value)

mysql> select json_search(trace, '"trivial_condition"') 
from information_schema.optimizer_trace;
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| json_search(trace, '"trivial_condition"') |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| NULL                                      |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.01 sec)

40Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_merge(doc1, doc2, ...)

Merges 2 or more documents into one.
Returns first document with following documents appended.
Warning! This version does not check whole document for validity.
If one of following documents does not contain an opening curly
bracket first documents merged are returned and warning is generated.
NULL if first document does not contain an opening curly bracket.

41Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_merge(doc1, doc2, ...)

mysql> select json_merge('{"MySQL connect": ["conference", 2012]}', '{"MySQL 
connect": ["conference", 2013]}') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                                                                  |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2012], "MySQL connect": ["conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

42Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_merge(doc1, doc2, ...)

mysql> select json_merge('{"MySQL connect": ["conference", 2012]}', '{"MySQL 
connect": ["conference", 2013]}', '1') as 'MySQL connect';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| MySQL connect                                                                  |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| {"MySQL connect": ["conference", 2012], "MySQL connect": ["conference", 2013]} |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

43Copyright © 2013, 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.

44Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_test_parser(doc)

mysql> select json_test_parser('{"MySQL connect": 
["conference", 2013]}') as 'Parse tree'G
********************** 1. row **********************
Parse tree:  => "conference";
             => 2013;
         "MySQL connect" => ["conference", 2013];
       => {"MySQL connect": ["conference", 2013]};

45Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
json_test_parser(doc)

mysql> select json_test_parser('{"MySQL connect": ["conference", 
2013]') as 'Parse tree';
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
| Parse tree                                                         |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
|  => "conference"; => 2013;"MySQL connect" => ["conference", 2013]; |
+­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­+
1 row in set (0.00 sec)

46Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Where to get
Insert Picture Here

47Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Source code and binaries

MySQL Labs
●
Source code
●
Binaries
●
x86 and x86_64
●

●

Mac OSX 10.7

●

●

Generic Linux

Windows 7

http://labs.mysql.com/

48Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
More information

Manuals and articles
●
README file
●
My blog: https://blogs.oracle.com/svetasmirnova/
Announces
●
My twitter: https://twitter.com/#!/svetsmirnova

49Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
The future
Insert Picture Here

50Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Depends from you

Send bugs
Send feature requests
More you send – more ideas we implement
Now you can affect decisions

51Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Where to report bugs and feature requests

MySQL Community bugs database
●
https://bugs.mysql.com/
●
No special category for now
●
General category
●
“MySQL Server: User-defined functions (UDF)”
Internal Oracle bugs database
●

Ask MySQL Support engineer to open a bug report for you

●

Category “UDFJSON”

52Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
More NoSQL
Sessions at MySQL Connect
MySQL and Hadoop: Big Data Integration—Unlocking New Insights [CON2053,
Sunday, 11:30 AM]
MySQL User-Defined Functions....in JavaScript! [CON1738, passed]
Oracle NoSQL Database: When Is It the Right Tool for the Job? [CON13034,
Saturday, 4:00 PM]
MySQL As a NoSQL Store with the InnoDB/memcached Plug-in [CON3457,
Sunday, 1:00 PM]
MySQL’s EXPLAIN Command New Features [HOL9734, passed]
Big Data with MySQL and Hadoop [CON2342, Sunday, 5:30 PM]

53Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
References

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

54Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
?
Insert Picture Here

55Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
THANK YOU!
Insert Picture Here

56Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
Graphic Section Divider

57Copyright © 2013, Oracle and/or its affiliates. All rights reserved.
The preceding 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.

58Copyright © 2013, Oracle and/or its affiliates. All rights reserved.

More Related Content

What's hot (20)

PDF
Mysql nowwhat
sqlhjalp
 
PDF
What's New MySQL 8.0?
OracleMySQL
 
PDF
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
Olivier DASINI
 
PDF
My sql 5.6&MySQL Cluster 7.3
Oleksii(Alexey) Porytskyi
 
PDF
20160821 coscup-my sql57docstorelab01
Ivan Ma
 
PDF
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
Dave Stokes
 
PDF
MySQL Group Replication - an Overview
Matt Lord
 
PDF
Open Source World June '21 -- JSON Within a Relational Database
Dave Stokes
 
PDF
MySQL8.0 in COSCUP2017
Shinya Sugiyama
 
PDF
Multi thread slave_performance_on_opc
Shinya Sugiyama
 
PDF
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
Dave Stokes
 
PDF
MySQL Monitoring 101
Ronald Bradford
 
PDF
MySQL Webinar 2/4 Performance tuning, hardware, optimisation
Mark Swarbrick
 
PDF
Undelete (and more) rows from the binary log
Frederic Descamps
 
PDF
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
Dave Stokes
 
PDF
PNWPHP -- What are Databases so &#%-ing Difficult
Dave Stokes
 
PDF
MySQL Database Architectures - 2020-10
Kenny Gryp
 
PDF
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Kenny Gryp
 
PDF
MySQL Replication Update - DEbconf 2020 presentation
Dave Stokes
 
PDF
common_schema 2.0: DBA's Framework for MySQL
Shlomi Noach
 
Mysql nowwhat
sqlhjalp
 
What's New MySQL 8.0?
OracleMySQL
 
MySQL High Availability Solutions - Avoid loss of service by reducing the r...
Olivier DASINI
 
My sql 5.6&MySQL Cluster 7.3
Oleksii(Alexey) Porytskyi
 
20160821 coscup-my sql57docstorelab01
Ivan Ma
 
MySQL 5.7 NEW FEATURES, BETTER PERFORMANCE, AND THINGS THAT WILL BREAK -- Mid...
Dave Stokes
 
MySQL Group Replication - an Overview
Matt Lord
 
Open Source World June '21 -- JSON Within a Relational Database
Dave Stokes
 
MySQL8.0 in COSCUP2017
Shinya Sugiyama
 
Multi thread slave_performance_on_opc
Shinya Sugiyama
 
MySQL's NoSQL -- Texas Linuxfest August 22nd 2015
Dave Stokes
 
MySQL Monitoring 101
Ronald Bradford
 
MySQL Webinar 2/4 Performance tuning, hardware, optimisation
Mark Swarbrick
 
Undelete (and more) rows from the binary log
Frederic Descamps
 
JavaScript and Friends August 20th, 20201 -- MySQL Shell and JavaScript
Dave Stokes
 
PNWPHP -- What are Databases so &#%-ing Difficult
Dave Stokes
 
MySQL Database Architectures - 2020-10
Kenny Gryp
 
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Kenny Gryp
 
MySQL Replication Update - DEbconf 2020 presentation
Dave Stokes
 
common_schema 2.0: DBA's Framework for MySQL
Shlomi Noach
 

Viewers also liked (8)

PDF
Using JSON with MariaDB and MySQL
Anders Karlsson
 
PDF
HTTP Plugin for MySQL!
Ulf Wendel
 
PDF
Making big data small
andertech
 
PDF
The Ring programming language version 1.2 book - Part 18 of 84
Mahmoud Samir Fayed
 
PDF
MariaDB: Connect Storage Engine
Kangaroot
 
PPT
MySQL Functions
Compare Infobase Limited
 
PDF
Advanced Arel: When ActiveRecord Just Isn't Enough
Cameron Dutro
 
DOCX
COMANDOS DE JAVA
Alfa Mercado
 
Using JSON with MariaDB and MySQL
Anders Karlsson
 
HTTP Plugin for MySQL!
Ulf Wendel
 
Making big data small
andertech
 
The Ring programming language version 1.2 book - Part 18 of 84
Mahmoud Samir Fayed
 
MariaDB: Connect Storage Engine
Kangaroot
 
MySQL Functions
Compare Infobase Limited
 
Advanced Arel: When ActiveRecord Just Isn't Enough
Cameron Dutro
 
COMANDOS DE JAVA
Alfa Mercado
 
Ad

Similar to MySQL JSON Functions (20)

PDF
Moving to the NoSQL side: MySQL JSON functions
Sveta Smirnova
 
PDF
Cloud native - Why to use MySQL 8.0 and how to use it on oci with MDS
Frederic Descamps
 
PDF
MySQL's JSON Data Type and Document Store
Dave Stokes
 
PPTX
Php forum2015 tomas_final
Bertrand Matthelie
 
PDF
Json improvements in my sql 8.0
Mysql User Camp
 
PPTX
JSON improvements in MySQL 8.0
Mydbops
 
PPTX
2018: State of the Dolphin, MySQL Keynote at Percona Live Europe 2018, Frankf...
Geir Høydalsvik
 
PPTX
Data Con LA 2022 - MySQL, JSON & You: Perfect Together
Data Con LA
 
PDF
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
Ryusuke Kajiyama
 
PPTX
BGOUG15: JSON support in MySQL 5.7
Georgi Kodinov
 
PDF
MySQL Document Store for Modern Applications
Olivier DASINI
 
PDF
RivieraJUG - MySQL 8.0 - What's new for developers.pdf
Frederic Descamps
 
PDF
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
Frederic Descamps
 
PPTX
MySQL Rises with JSON Support
Okcan Yasin Saygılı
 
PPTX
PostgreSQL 9.4 JSON Types and Operators
Nicholas Kiraly
 
PDF
MySQL 5.7. Tutorial - Dutch PHP Conference 2015
Dave Stokes
 
PDF
MySQL 5.7 Tutorial Dutch PHP Conference 2015
Dave Stokes
 
PDF
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
MariaDB plc
 
PDF
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
MariaDB plc
 
PDF
Optimizer percona live_ams2015
Manyi Lu
 
Moving to the NoSQL side: MySQL JSON functions
Sveta Smirnova
 
Cloud native - Why to use MySQL 8.0 and how to use it on oci with MDS
Frederic Descamps
 
MySQL's JSON Data Type and Document Store
Dave Stokes
 
Php forum2015 tomas_final
Bertrand Matthelie
 
Json improvements in my sql 8.0
Mysql User Camp
 
JSON improvements in MySQL 8.0
Mydbops
 
2018: State of the Dolphin, MySQL Keynote at Percona Live Europe 2018, Frankf...
Geir Høydalsvik
 
Data Con LA 2022 - MySQL, JSON & You: Perfect Together
Data Con LA
 
[OSC 2020 Online/Nagoya] MySQLドキュメントストア
Ryusuke Kajiyama
 
BGOUG15: JSON support in MySQL 5.7
Georgi Kodinov
 
MySQL Document Store for Modern Applications
Olivier DASINI
 
RivieraJUG - MySQL 8.0 - What's new for developers.pdf
Frederic Descamps
 
UAE MySQL Users Group Meet-up : MySQL Shell Document Store & more...
Frederic Descamps
 
MySQL Rises with JSON Support
Okcan Yasin Saygılı
 
PostgreSQL 9.4 JSON Types and Operators
Nicholas Kiraly
 
MySQL 5.7. Tutorial - Dutch PHP Conference 2015
Dave Stokes
 
MySQL 5.7 Tutorial Dutch PHP Conference 2015
Dave Stokes
 
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
MariaDB plc
 
What's New in MariaDB Server 10.2 and MariaDB MaxScale 2.1
MariaDB plc
 
Optimizer percona live_ams2015
Manyi Lu
 
Ad

More from Sveta Smirnova (20)

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

Recently uploaded (20)

PPT
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
PPTX
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
PDF
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PPTX
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
PPTX
Digital Circuits, important subject in CS
contactparinay1
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
PDF
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
PDF
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
PDF
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
PDF
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 
Ericsson LTE presentation SEMINAR 2010.ppt
npat3
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
From Sci-Fi to Reality: Exploring AI Evolution
Svetlana Meissner
 
ICONIQ State of AI Report 2025 - The Builder's Playbook
Razin Mustafiz
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
Agentforce World Tour Toronto '25 - MCP with MuleSoft
Alexandra N. Martinez
 
Digital Circuits, important subject in CS
contactparinay1
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
SIZING YOUR AIR CONDITIONER---A PRACTICAL GUIDE.pdf
Muhammad Rizwan Akram
 
“Voice Interfaces on a Budget: Building Real-time Speech Recognition on Low-c...
Edge AI and Vision Alliance
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
🚀 Let’s Build Our First Slack Workflow! 🔧.pdf
SanjeetMishra29
 
How do you fast track Agentic automation use cases discovery?
DianaGray10
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Mastering Financial Management in Direct Selling
Epixel MLM Software
 
Newgen Beyond Frankenstein_Build vs Buy_Digital_version.pdf
darshakparmar
 

MySQL JSON Functions