【问题标题】:mysql millions of rows data import from one table to another tablemysql 百万行数据从一张表导入到另一张表
【发布时间】:2016-03-28 07:40:02
【问题描述】:

我有一个表,它有两百万行数据。对于每一行,它都有一个body 列,它存储一个JSON 格式的数据。例如:

table_a:

id user_id  body
1  1        {'tel': '13678031283', 'email': 'test@gmail.com', 'name': 'test'....}
2  2        {'tel' : '1567827126', 'age': '16'....}
......

我有另一个表,名为 table_b:

table_b:

id     user_id    tel        email         name
1      1          13678019   test@qq.com   test1
2      2          15627378   test1@qq.com  test2  
.....

table_a有200万行数据,我想把table_a的数据全部导入table_b,table_a的每一行都要处理。

我想这样处理:

for row in table_a_rows:
    result = process(row)
    insert result to table_b
.....

但我认为这不是一个好主意。有更好的方法吗?

【问题讨论】:

  • mysql / mariadb 有一个扩展,允许将这种烦人的 json 结构视为“虚拟列”。这样您就可以为您的任务使用普通的 sql 更新语句,而无需实现存储过程。
  • 我不想将正文的每个键作为单列,我只想获取我需要的信息。
  • 抱歉,我不明白您在上一条评论中想要表达的意思。您需要访问 JSON 结构的内容,就好像这些值存储在单独的列中一样。这是扩展允许的。这样,您可以将这些 JSON 字符串的内容拆分为单独的值,然后您可以再次在更新语句中使用这些值。这就是你要问的,除非我完全想念你的问题。

标签: python mysql database


【解决方案1】:

您可以直接使用JSON_EXTRACT从table_a中选择您需要的数据。例如,获取电子邮件是这样的:

mysql> SELECT JSON_EXTRACT(body, '$.email') from table_a;

因此,您可以将 table_a 中的所有数据直接替换到 table_b 中:

mysql> REPLACE INTO table_b SELECT user_id, 
JSON_EXTRACT(body, '$.tel'),
JSON_EXTRACT(body,'$.email'), 
JSON_EXTRACT(body,'$.name') from table_a

【讨论】:

  • 收到错误:FUNCTION JSON_EXTRACT does not exist
  • ops,对不起,你必须为 mysql 安装一个 json 库。访问 labs.mysql.com 并安装 JSON UDF(用户定义的函数)。检查自述文件。
猜你喜欢
  • 2019-10-22
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
相关资源
最近更新 更多