Sim, você pode fazer isso em alguns passos:
Primeiro Crie uma tabela de preparo temporária (vamos chamá-la de
import
) com uma coluna que conterá linhas como linhas do arquivo de dados de origem CREATE TABLE `import` (
`line` varchar(512) DEFAULT NULL
);
e carregar dados do arquivo na tabela
LOAD DATA INFILE '/path/to/your/file.txt'
INTO TABLE import
FIELDS TERMINATED BY '\n'
LINES TERMINATED BY '\n'
Segundo Supondo que você tenha uma tabela de destino (vamos chamá-la de
words
) que se parece com isso CREATE TABLE `words` (
`word` varchar(64) DEFAULT NULL
);
podemos dividir cada linha em palavras e inseri-las em
words
tabela com uma consulta INSERT INTO words (word)
SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(line, ' ', n.n), ' ', -1) word
FROM import CROSS JOIN
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) n
WHERE n.n <= 1 + (LENGTH(line) - LENGTH(REPLACE(line, ' ', '')))
ORDER BY n.n
NOTA:
- suposição é que suas palavras sejam separadas exatamente por um espaço
- esta consulta será dividida em até 100 palavras. Se você precisar de mais ou menos, pode ajustar um limite editando a subconsulta interna ou se importar regularmente, considere usar a tabela de contagem (números) persistente.
Terceiro Solte ou trunque (se você for usá-lo novamente para importar mais arquivos) a tabela de preparo
DROP TABLE import;
Aqui está SQLFiddle demo que mostra o passo dois.