UP
Exportação para csv
Fechado
Caros,
Estou tentando fazer uma exportação para csv com mais de 60.000 registros, porém não exporta, o máximo que consegui exportar foi com 10.000 registros, usando metodo setProperty('limit',1000); se deixar livre não vai, fica Loading e não termina. Estou certo de que o problema é a quantidade de registros. Alguma idéia ?
Abração a todos.
Estou tentando fazer uma exportação para csv com mais de 60.000 registros, porém não exporta, o máximo que consegui exportar foi com 10.000 registros, usando metodo setProperty('limit',1000); se deixar livre não vai, fica Loading e não termina. Estou certo de que o problema é a quantidade de registros. Alguma idéia ?
Abração a todos.
poste seu código pra tentarmos ajudar
Segue código abaixo:
function onExportCSV()
{
//$this->onSearch();
$form_data = $this->form->getData();
try
{
// open a transaction with database 'samples'
TTransaction::open('svoi');
// creates a repository for Customer
$repository = new TRepository('Data');
// creates a criteria
$criteria = new TCriteria;
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "1-> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "2-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "3-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "4-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "5-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
}
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "6-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "7 -> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "8-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
$csv = '';
// load the objects according to criteria
$criteria->setProperties();
$criteria->setProperty('limit',15000);
$customers = $repository->load($criteria);
if ($customers)
{
foreach ($customers as $customer)
{
$csv .= $customer->id.';'.
$customer->uf.';'.
$customer->estacao.';'.
$customer->sessao.';'.
$customer->num_ddd.';'.
$customer->num_terminal.';'.
$customer->velocidade_contratada.';'.
$customer->city_name."\n";
}
file_put_contents('app/output/customers.csv', $csv);
TPage::openFile('app/output/customers.csv');
}
// close the transaction
TTransaction::close();
}
catch (Exception $e) // in case of exception
{
// shows the exception error message
new TMessage('error', 'Error ' . $e->getMessage());
// undo all pending operations
TTransaction::rollback();
}
}
Udson,
Veja minha resposta neste seu outro post:
www.adianti.com.br/forum/pt/view_1164?problema-na-exportacao-de-csv
Att,
Pablo
Amigos, consegui resolver o problema da importação, vou deixar registrado aqui, obrigado Pablo e a todos pela atenção.
a) Um problema que tinha era o tempo de execução do algorítimo, por padrão no php é setado para 30 segundos, então setei no topo do algorítimo o tempo assim:
set_time_limit(900);
b) Me parece que file_put_contents carrega tudo na memória pra depois gravar, então usei outra estratégia: fopen+fwrite como o Pablo havia me orientado, então fiz o método abaixo:
function onWrite($file,$line){
$fp = fopen($file, "a");
$write = fwrite($fp, $line);
fclose($fp);
}
E tudo funcionou uma maravilha, eu consegui gerar um arquivo com 5159171 registros de 136 megas. segue abaixo o algorítimo completo, inclusive eu criei até um cabeçalho no csv.
function onExportCSV()
{
//$this->onSearch();
$form_data = $this->form->getData();
try
{
TTransaction::open('svoi');
$repository = new TRepository('Data');
$criteria = new TCriteria;
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "1-> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada == '' )
{
//print "2-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "3-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "4-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada == '' )
{
//print "5-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
}
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao != '' && $form_data->velocidade_contratada != '' )
{
//print "6-> SELECT * FROM `data` WHERE `estacao` LIKE " . $form_data->estacao . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('estacao','like',$form_data->estacao));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
if($form_data->uf != '' && $form_data->num_ddd == '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "7 -> SELECT * FROM `data` WHERE `uf` LIKE " . $form_data->uf . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('uf','like',$form_data->uf));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
if($form_data->uf != '' && $form_data->num_ddd != '' && $form_data->estacao == '' && $form_data->velocidade_contratada != '' )
{
//print "8-> SELECT * FROM `data` WHERE `num_ddd` LIKE " . $form_data->num_ddd . " AND `velocidade_contratada` LIKE " . $form_data->velocidade_contratada . "<br />";
$criteria->add( new TFilter('num_ddd','like',$form_data->num_ddd));
$criteria->add( new TFilter('velocidade_contratada','like',$form_data->velocidade_contratada));
}
$line = '';
//$criteria->setProperty('limit',15000);
$data = $repository->load($criteria);
$file ="app/output/data.csv";
$line_number=0;
unlink($file);
if($data){
$header="id".';'.
"estado".';'.
"estacao".';'.
"sessao".';'.
"ddd".';'.
"numero".';'.
"veloc_contratada"."n";
$this->onWrite($file,$header);
foreach ($data as $row) {
$line = $row->id .';'.
$row->uf .';'.
$row->estacao .';'.
$row->sessao .';'.
$row->num_ddd .';'.
$row->num_terminal .';'.
$row->velocidade_contratada . "n";
$this->onWrite($file,$line);
$line_number++;
}
}
TPage::openFile($file);
TTransaction::close();
new TMessage('info', $line_number . ' registros foram importados com sucesso.',NULL,'Resultado');
}
catch (Exception $e) // in case of exception
{
new TMessage('error', 'Error ' . $e->getMessage());
TTransaction::rollback();
}
}
function onWrite($file,$line){
$fp = fopen($file, "a");
$write = fwrite($fp, $line);
fclose($fp);
}