41. +----+--------------------+
Map | id | text |
+----+--------------------+
| 1 | to be or not to be |
+----+--------------------+
↓ レコードを連想配列として Map へ ↓
+----+---------+-------+
| id | key | value |
+----+---------+-------+
| 1 | to | 1 |
| 2 | be | 1 |
| 3 | or | 1 |
| 4 | not | 1 |
| 5 | to | 1 |
| 6 | be | 1 |
+----+---------+-------+
42. +----+--------------------+
Map | id | text |
+----+--------------------+
| 1 | to be or not to be |
+----+--------------------+
↓ レコードを連想配列として Map へ ↓
+----+---------+-------+
| id | key | value |
+----+---------+-------+
| 1 | to | 1 |
| 2 | be | 1 |
| 3 | or | 1 |
| 4 | not
value には JSON で入れるので | 1 |
| 5 | to
構造化データも使用可能 | 1 |
| 6 | be | 1 |
+----+---------+-------+
43. +----+---------+-------+
| id | key | value |
Shuffle +----+---------+-------+
| 1 | to
| 2 | be
| 1
| 1
|
|
| 3 | or | 1 |
| 4 | not | 1 |
| 5 | to | 1 |
| 6 | be | 1 |
+----+---------+-------+
↓ キーで GROUP BY して ↓
SELECT ↓ 値は GROUP_CONCAT ↓
`key`, +---------+--------+
GROUP_CONCAT(`value`) | key | values |
FROM +---------+--------+
`中間テーブル` | be | 1,1 |
| not | 1 |
GROUP BY | or | 1 |
`key` | to | 1,1 |
+---------+--------+
44. +---------+--------+
| key | values |
Reduce +---------+--------+
| be | 1,1 |
| not | 1 |
| or | 1 |
| to | 1,1 |
+---------+--------+
↓ キーと値の配列を Reduce へ ↓
+----+---------+-------+
| id | key | count |
+----+---------+-------+
| 1 | be | 2 |
| 2 | not | 1 |
| 3 | or | 1 |
| 4 | to | 2 |
+----+---------+-------+
45. +---------+--------+
| key | values |
Reduce +---------+--------+
| be | 1,1 |
| not | 1 |
| or | 1 |
実際にはデリミタとして改行を使用| to | 1,1 |
+---------+--------+
改行区切りの JSON になる
↓ キーと値の配列を Reduce へ ↓
+----+---------+-------+
| id | key | count |
+----+---------+-------+
| 1 | be | 2 |
| 2 | not | 1 |
| 3 | or | 1 |
| 4 | to | 2 |
+----+---------+-------+