Eu tenho uma tabela com essas colunas e os valores vêm dessas tabelas de um arquivo csv em um intervalo regular de n minutos (por cron o comando load infile):
ID (PK) status first last value
1 Q 12 15 low
2 Q 12 15 low
3 O 12 15 High
agora, sempre que os próximos dados vierem, ele deve primeiro verificar se o ID está presente na tabela, se estiver, basta atualizar o campo correspondente desse ID e, se vier um novo ID, basta inserir os dados.
Para isso criei um procedimento:
create procedure test.testproc (IN no int , IN status varchar(10))
begin if exists (select id from test.testproc where id = no)
then
update baseline set status=status where id=no;
else insert into tname(id,status) value(no,status);
end if;
end$$
Agora o que eu quero saber:
devo criar duas tabelas para isso, ou seja, uma é uma tabela temporária e uma tabela principal? ** estou 100% confuso aqui o que devo fazer aqui
como devo automatizar todos esses, ou seja, os dados vêm de um arquivo csv, então meu script de carga infile é executado, então meu procedimento acima deve ser executado e verificar se o ID já está presente, ele simplesmente será atualizado, senão ele será inserido.
OU, se você tiver qualquer outro processo, informe
Acho que primeiro você pode carregar o arquivo de entrada na tabela temporária MEMORY . E então apenas:
INSERT ... SELECT referência de sintaxe.
É claro que o campo id deve ter uma chave única e seus arquivos csv devem caber na memória.
As tabelas do mecanismo MEMORY são muito rápidas, portanto, você deve ter apenas uma pequena sobrecarga para carregar os dados em duas etapas. Como uma das desvantagens, eles têm apenas bloqueios no nível da tabela, portanto, seu uso é limitado. Mas isso não afeta esse cenário de carregamento de dados.