我一直在开发这个django应用程序。我们从加利福尼亚州的一个机构提取了一大组表格,处理数据并重新发布。我一直在尝试做一些简单的事情,但简单的实现真的很慢,我可能认为自己陷入了一个洞。这是其中的一张桌子。像这样的桌子有很多。你知道吗
mysql> desc EXPN_CD;
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| AGENT_NAMF | varchar(45) | NO | | NULL | |
| AGENT_NAML | varchar(200) | NO | | NULL | |
| AGENT_NAMS | varchar(10) | NO | | NULL | |
| AGENT_NAMT | varchar(10) | NO | | NULL | |
| AMEND_ID | int(11) | NO | MUL | NULL | |
| AMOUNT | decimal(14,2) | NO | | NULL | |
| BAKREF_TID | varchar(20) | NO | | NULL | |
| BAL_JURIS | varchar(40) | NO | | NULL | |
| BAL_NAME | varchar(200) | NO | | NULL | |
| BAL_NUM | varchar(7) | NO | | NULL | |
| CAND_NAMF | varchar(45) | NO | | NULL | |
| CAND_NAML | varchar(200) | NO | | NULL | |
| CAND_NAMS | varchar(10) | NO | | NULL | |
| CAND_NAMT | varchar(10) | NO | | NULL | |
| CMTE_ID | varchar(9) | NO | | NULL | |
| CUM_OTH | decimal(14,2) | YES | | NULL | |
| CUM_YTD | decimal(14,2) | YES | | NULL | |
| DIST_NO | varchar(3) | NO | | NULL | |
| ENTITY_CD | varchar(3) | NO | | NULL | |
| EXPN_CHKNO | varchar(20) | NO | | NULL | |
| EXPN_CODE | varchar(3) | NO | | NULL | |
| EXPN_DATE | date | YES | | NULL | |
| EXPN_DSCR | varchar(400) | NO | | NULL | |
| FILING_ID | int(11) | NO | MUL | NULL | |
...
我正在检查所有这些桌子。我把每个名字,即“CAND”(候选人)、“AGENT”等等都取出来,然后把每个引用放进一行:
mysql> desc calaccess_campaign_browser_name;
+-------------+---------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| ext_pk | int(11) | NO | MUL | NULL | |
| ext_table | varchar(255) | NO | | NULL | |
| ext_prefix | varchar(255) | NO | | NULL | |
| naml | varchar(255) | YES | | NULL | |
| namf | varchar(255) | YES | | NULL | |
| nams | varchar(255) | YES | | NULL | |
| namt | varchar(255) | YES | | NULL | |
| name | varchar(1023) | YES | | NULL | |
+-------------+---------------+------+-----+---------+----------------+
值从不为null,但许多(有时是绝大多数)是空字符串。你知道吗
我正在建立名称列。显而易见的方法是:
concat(namt,“”,namf,“”,naml,“”,nams)
但是当其中的2或3个是空的,这就给了我很多双空格和字符串开头或结尾的空格填充。你知道吗
我做过的事情:
1)使用python regex查找并删除多余的空格。如果我有一个月左右的时间来运行它,它就可以工作了。你知道吗
2)按上述方式将名称放在一起,并使用SQL查找和替换多余的空格。再说一次,要花很长时间。你知道吗
其中一个问题是MySQL的python库有一个游标,专门用来处理大的结果集。对于大型查询操作没有类似的情况。或许我看错了。你知道吗
% pip freeze
...
MySQL-python==1.2.5c
...
3)将名称拉入一个制表符分隔的文本文件并在那里进行修复,然后将文件加载到新表中。布莱奇。很多愚蠢的脚本。使用sed还是awk?什么?你知道吗
4)我可以在15个不同的查询中执行concat()操作,并为每个查询执行适当的concat,这样名称中就不会有多余的空格。我有:
这就是我要的。跑步不到一天。呜呼!你知道吗
但我也出于其他原因做了类似的事情,我到底想写多少次这样的代码?哎呀!你知道吗
一定有更聪明的方法来做这件事,我没有看到。我在大约24个表中这样做,每个表中有2-5个名称,有时大约有15000行,有时有20000000行。大多数桌子在30万到75万之间。天哪,我累了吗。。。。你知道吗
在MySQL中,我认为您正在寻找
concat_ws()
:如果值为空,
nullif()
将其转换为NULL
。concat_ws()
忽略NULL
值,因此不会得到重复的空格。你知道吗相关问题 更多 >
编程相关推荐