将MySQLjson数据类型字段直接导出为CSV

Export MySQL json data type field directly to CSV

考虑具有 JSON 字段的 MySQL 数据库 (8.x):

mysql>  desc users_health;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int unsigned | NO   | PRI | NULL    | auto_increment |
| user_id    | int          | NO   |     | NULL    |                |
| data       | json         | YES  |     | NULL    |                |
| created_at | timestamp    | YES  |     | NULL    |                |
| updated_at | timestamp    | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

在这个答案中有一种方法可以将列导出到 csv 字段:

How to output MySQL query results in CSV format?

我想要实现的是仅将 data 列中的数据导出到 CSV。此数据组织良好,由键值对组成,如下所示:

{"email": "x@example.com", "user_id": 100, "ivr_used": false, "ivr_enabled": true, "callerids_used": true, "call-queue_used": false ...}

我希望将其导出为如下所示的 CSV 文件:

    +--------------+-----------+----------+-------------+----------+
    | email        | user_id   | ivr_used | ivr_enabled | ...      |
    +--------------+----------+-----------+-------------+----------+
    | x@example.com| 100       | false    | true        | ...      |
    +--------------+----------+-----------+-------------+----------+
    | y@example.com| 101       | true     | true        | ...      |
    +--------------+----------+-----------+-------------+----------+
    ....

这甚至可以使用仅 MySQL 的解决方案,还是我必须获取数据并在其他地方处理它?

对我来说部分有效的解决方案是将数据导出到 JSON 文件。

这有点像数据在列中,你必须从每一行数据列中提取你想要的每个值

SELECT JSON_EXTRACT(data, '$.email') as email,
       JSON_EXTRACT(data, '$.user_id') as user_id,
        . . .

FROM users_health
WHERE foo = 'bar'
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';