diff --git a/README.md b/README.md index c5a44f3..3a1398c 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ pairing with smart people at Hashrocket. For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186). -_1696 TILs and counting..._ +_1697 TILs and counting..._ See some of the other learning resources I work on: @@ -763,6 +763,7 @@ If you've learned something here, support my efforts writing daily TILs by - [Doing Date Math](mysql/doing-date-math.md) - [Dump A Database To A File](mysql/dump-a-database-to-a-file.md) - [Echo A Message From A SQL File](mysql/echo-a-message-from-a-sql-file.md) +- [Get Idea Of What Is In A JSON Column](mysql/get-idea-of-what-is-in-a-json-column.md) - [Ignore Duplicates When Inserting Records](mysql/ignore-duplicates-when-inserting-records.md) - [List Databases And Tables](mysql/list-databases-and-tables.md) - [Run Statements In A Transaction](mysql/run-statements-in-a-transaction.md) diff --git a/mysql/get-idea-of-what-is-in-a-json-column.md b/mysql/get-idea-of-what-is-in-a-json-column.md new file mode 100644 index 0000000..97395cc --- /dev/null +++ b/mysql/get-idea-of-what-is-in-a-json-column.md @@ -0,0 +1,40 @@ +# Get Idea Of What Is In A JSON Column + +While digging through some data trying to reacquaint myself with the overall +schema and data model, I ran into an issue selecting rows from this +`content_resource` table. There was so much text packed in to the `"body"`, +`"summary"`, and `"description"` key-value pairs of `fields` JSON column that a +simple `select * ... limit 3;` was overwhelming the screen with text and table +formatting characters (i.e. `+------+-------`). + +I figured the `fields` JSON followed a reliable structure, at least for records +of the same `type`. So, let's start by only grabbing the +[`json_keys`](https://dev.mysql.com/doc/refman/8.4/en/json-search-functions.html#function_json-keys) +so that I can get a sense of the shape of the JSON. + +```sql +select id, json_keys(fields) +from content_resource +where type = 'post' +limit 3; + ++-----+-----------------------------------------------------------------------------------------------------------+ +| id | json_keys(`fields`) | ++-----+-----------------------------------------------------------------------------------------------------------+ +| 1 | ["body", "slug", "state", "title", "summary", "postType", "visibility", "description", "originalLessonId"] | +| 2 | ["body", "slug", "state", "title", "summary", "postType", "visibility", "description", "originalLessonId"] | +| 3 | ["body", "slug", "state", "title", "summary", "postType", "visibility", "description", "originalLessonId"] | ++-----+-----------------------------------------------------------------------------------------------------------+ +``` + +For the `post` type, I see the same keys for this sampling of rows. Now I have +an idea what keys are present and can start digging in further. + +My next query might look something like this: + +```sql +select id, fields->'$.slug', fields->'$.title', fields->'$.state' +from content_resource +where type = 'post' +limit 3; +```