Ir para conteúdo
Fórum Script Brasil

chrystoffer

Membros
  • Total de itens

    12
  • Registro em

  • Última visita

Tudo que chrystoffer postou

  1. Olá pessoal... bom, depois de vários dias sofrendo consegui gravar os dados no bd. O arquivo csv tem quase 10gb e quase 20milhões de linhas... sofri mas consegui. Comparei a quantia de linhas, tudo ok... comparei alguns registro, tudo ok. Porém, percebemos que as linhas foram gravadas aleatoriamente no banco de dados... por exemplo, a linha 1000 do arquivo original ficou na linha 1002 no banco de dados. Gostaria de saber, como posso arrumar isso? Porque o comando load data gravou tudo bagunçado as linhas?? O comando que usei foi LOAD DATA LOCAL INFILE '2013.csv' IGNORE INTO TABLE bd2013 FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ',' LINES TERMINATED BY '\n';e o comando que usei para conferir a linha 1000, por exemplo, foi SELECT * FROM bd2013 LIMIT 1000,1; Lembrando que a quantia de linhas deu exatamente igual ao arquivo e conferindo alguns campos também deram certo... para conferir usei SELECT COUNT(*) FROM bd2013 WHERE NOME_ORGAO= 'CM AGUDO'Por exemplo, todos os "CM AGUDO" também deram o valor exato que tem no arquivo original... então, tudo leva a crer que apenas foram gravados aleatoriamente os dados. Desed já meu agradecimento -------------- Na verdade o banco começa a contar na linha 0... então a linha 0 é a linha 2 do arquivo... por isso essa confusão aqui. Pode fechar o tópico e desculpe por ter aberto.
  2. Olá Denis...pois é. Eu fiz vários testes e nada de conseguir arrumar.. nem importado linha por linha com php. Vou tentar ver quem fez esse csv pois erro de comando não é. Pode fechar o tópico, e obrigado por me ajudar novamente.
  3. Apenas para deixar registrado pra quem estiver com o mesmo problema, criei esse script em php para tentar solucionar mas no meio também da erro e trava o php: <?php @set_time_limit(1200000000000); $servidor = "localhost"; $user = "root"; $senha = ""; $db = "bds"; $conexao = mysql_connect($servidor,$user) or die (mysql_error()); $banco = mysql_select_db($db, $conexao) or die(mysql_error()); mysql_query("START TRANSACTION"); $row = 1; $commit = 1; $handle = fopen ('2014_repartido\2014_1(6).csv',"r"); while (($data = fgetcsv($handle, 1000, ',', '"')) !== FALSE) { $CD_ORGAO = $data[2]; $NOME_ORGAO = $data[3]; $TIPO_OPERACAO = $data[10]; $ANO_EMPENHO = $data[11]; $ANO_OPERACAO = $data[12]; $DT_EMPENHO = $data[13]; $DT_OPERACAO = $data[14]; $NR_EMPENHO = $data[15]; $CD_RUBRICA = $data[25]; $DS_RUBRICA = $data[26]; $CNPJ_CPF = $data[31]; $VL_EMPENHO = $data[34]; $VL_LIQUIDACAO = $data[36]; $VL_PAGAMENTO = $data[38]; $query = "INSERT INTO 2014phpronta (CD_ORGAO,NOME_ORGAO,TIPO_OPERACAO,ANO_EMPENHO,ANO_OPERACAO,DT_EMPENHO,DT_OPERACAO,NR_EMPENHO,CD_RUBRICA,DS_RUBRICA,CNPJ_CPF,VL_EMPENHO,VL_LIQUIDACAO,VL_PAGAMENTO) VALUES ('$CD_ORGAO','$NOME_ORGAO','$TIPO_OPERACAO','$ANO_EMPENHO','$ANO_OPERACAO','$DT_EMPENHO','$DT_OPERACAO','$NR_EMPENHO','$CD_RUBRICA','$DS_RUBRICA','$CNPJ_CPF','$VL_EMPENHO','$VL_LIQUIDACAO','$VL_PAGAMENTO')"; $insert = mysql_query($query,$conexao); $row++; $commit++; if ($commit == 1000) { mysql_query("COMMIT"); mysql_query("START TRANSACTION"); $commit = 0; } } fclose ($handle); ?>
  4. Olá Denis... também estou achando que é problema nesse arquivo csv. Ontem executei o comando pelo prompt pra retornar algum erro e recebi vários iguais esse: Data truncated for column 'HISTORICO' at row XXXXX (xxxx = linha) Alterei de varchar(255) para text o campo historico e executei novamente o comando load, que retornou os erros: Row XXXX was truncated; it contained more data than there were input columns (xxxx = linhas diferentes do erro anterior) Edit: meu chefe disse que esse csv é do governo e que acredita que não tem problema... perguntei se ele ou alguém editou o arquivo, ele disse que editou mas não no excel, em outro programa... isso pode estar ocasionando esses erros? Edit2: Qual programa posso usar para acrescentar outro carácter no final de cada linha? Visto que o arquivo tem 10gb e quase 20milhões de linhas?
  5. Olá... então usando \r\n não grava nada no bd. Não fui eu que escrevi esse csv, peguei pronto. Tentei executar o comando LOAD DATA LOCAL INFILE '2014.csv' INTO TABLE `teste2014` FIELDS OPTIONALLY ENCLOSED BY '"' TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 ROWS; E agora ele conseguiu identificar que o que tem dentro de "aspas mesmo, com virgula" é um campo apenas.. ficou tudo certo. Mas o problema das linhas continua. Usando esse comando gravou 19.443.743 linhas(mesma quantia de linhas quando eu removia antes as tabelas que não vou usar) enquanto o arquivo tem 19.444.897 linhas (contando com a primeira row) Agora outro problema que encontrei, não sei se pode ser isso... algumas linhas terminam assim: 0, e outras simplesmente 85 45 12 Todas as linhas não deveriam terminar com ou em virgula?? Eu estou executando no Windows tudo isso, mas fazendo igual você disse com TERMINATED BY '\r\n' ele não grava nada, só com \n Por exemplo essas quarto últimas linhas: Coloquei um "C>" na frente de cada começo de linha pra identificar melhor executei agora com um IGNORE pra tentar ver se poderia resolver algum problema, mas nada... continua faltando linhas. Agora executei pelo prompt,pra tentar ver se descubro qual erro retorna... estamos na luta Executei e tive o retorno, mas ainda faltando linha
  6. Obrigado pela ajuda novamente Denis. Vou fazer esse teste e assim que tiver alguma resposta volto a postar aqui. Por enquanto, muito obrigado mesmo :)
  7. Olá Denis.. fiz um script em php para tentar identificar as linhas e deu seguinte problema. No csv tem 39 campos e para identificar cada campo separaram por , (virgula) em cada linha... acontece que várias linhas escreveram errado algumas opções adicionando vírgula no meio do texto ocasionando que o sistema acha que tem mais campos na linha. Por exemplo na linha 8 aonde mostra: "PAGAMENTO SERVICOS DE FRETE E LOCACAO, P/XVII OLIMPIADA ESTUDANTIL, CFE. DECRETO 092/2008." (virgula em LOCACAO, ESTUDANTIL,) aonde deveria ser apenas "PAGAMENTO SERVICOS DE FRETE E LOCACAO P/XVII OLIMPIADA ESTUDANTIL CFE. DECRETO 092/2008." (sem vírgula) E isso aconteceu em várias outras linhas... pode ser por isso que tá "bugando" todo o bd?
  8. Isso... depois que já está feito o bd eu removo o que não vai ser usado, e diga-se de passagem muita coisa. De 10gbs fica 3gbs +- Estou fazendo um teste agora de importar somente as colunas que vou usar para ver como fica. Usei o comando: INTO TABLE e14cv (@remover1,adicionar2,@remover3,@remover4...) E para abrir o csv uso o ultra-edit... unico programa que consegui abrir esses arquivos. Novamente, obrigado pela resposta Denis
  9. Olá amigos, bom dia. Venho procurar ajuda novamente. Dias atrás importei uma tabela em csv de 9GB, tive algumas dúvidas que foram esclarecidas em outro tópico (www.scriptbrasil.com.br/forum/topic/180070-resolvido-update-e-inner-join-em-um-banco-muito-grande/) e funcionou perfeitamente. Conferimos a quantidade de linhas que ficou no bd e com o csv, revisamos algumas linhas.. tudo certo. Agora tenho que fazer a mesma coisa, mas com outra tabela e outro arquivo csv também de 9GB, quase 10GB. Fiz os mesmos comandos apenas alterando o nome do arquivo e o nome da tabela... terminado fomos conferir, o bd ficou com mais linhas do que o próprio arquivo!! O que pode estar gerando essas linhas a mais? Não tenho como conferir linha por linha, pois são mais de 18 milhões de linhas com 39 'campos' dentro da tabela... Abaixo os comandos que executei em ambas, tanto 2013 como 2014 apenas alterando o nome da tabela: Edit: Bom, importei novamente e descobri um dos problemas. Ele importou normal agora.. mas perde linha quando eu removo colunas que não vou usar na tabela. Por exemplo... O arquivo tem 19.444.896 linhas, quando importo o bd fica exatamente com a mesma quantia de linhas... quando removo as tabelas que não são necessárias o bd diminui para 19.443.743 linhas. No arquivo todas as linhas estão preenchidas pois são todas de campos obrigatórios. Resumindo, quando removo colunas que não vou usar, perco linhas
  10. Obrigado pelas resposta Denis! Fiz as mudanças que você falou, agora esperando executar aqui. Fiquei apenas com uma dúvida sobre porque criar uma tabela temporária? Ela ajuda em que especificamente ? edit: Obrigado Denis. Fiz o índice no CD_ORGAO e funcionou normalmente agora :)
  11. Olá Denis, obrigado pela resposta. No momento não poderei mostrar pois estou executando um comando para testar... quando voltar tudo ao normal aqui coloco detalhadamente as tabelas. Mas só para adiantar o que eu fiz, aumentei o valor do innodb_buffer_pool_size e executei esse comando agora: UPDATE e13cv_teste n INNER JOIN ( SELECT CD_ORGAO FROM e13cv_teste GROUP BY CD_ORGAO ) m ON n.CD_ORGAO = m.CD_ORGAO INNER JOIN e13m_teste o ON n.CD_ORGAO = o.CD_ORGAO SET n.MUNICIPIO = o.MUNICIPIO Aparentemente está indo... vamos ver se vai dar certo.Mais tarde comento aqui sobre se deu certo ou não... abraços
  12. Bom dia pessoal. Estou tendo problemas com esse comando update e inner join. Tenho o bd X e Y. No bd Y tenho uma tabela chama "NOME" e "CODIGO". No bd X também tenho essas tabelas, mas o "NOME" está vazio pois tenho que importar esse nome do bd Y correspondente com o "CODIGO" das duas tabelas. Por exemplo: +---------bd X-----------------+ ----------------------------------- +---NOME--CODIGO-------+ +- - 40100 + + - 40101 + -------------------------------------- +---------bd Y-----------------+ ----------------------------------- +---NOME--CODIGO-------+ +- CURITIBA - 40100 + + ACRE - 40101 + ------------------------------------ Preciso colocar os nomes da tabela Y na tabela X... eu utilizei esse comando em bd menores para testar: UPDATE BD_X AS t1 INNER JOIN BD_Y AS t2 ON t1.CODIGO = t2.CODIGO SET t1.NOME = t2.NOME; Funcionou no banco de dados menor tranquilamente... mas quando executei no bd de quase 9gb que tem mais de 16 milhões de linhas ele executou mas não gravou os dados... o que pode ser?
×
×
  • Criar Novo...