O código ETL foi feito em php.
Para agilizar o processo de extração, foi necessário a retirada dos índices das tabelas. O índices são funcionais para buscas, mas podem dificultar quando são necessárias numerosas inserções.
O tempo total do processo foi e 24 horas e foram feitos blocos de 10000 linhas para ser dado o "commit"
_______________________________________________________________________________
<?php
class Clinica extends Conexao {
private $bloco = 10000;
public function ETLMedico() {
$conexao = new Conexao();
$totalMedicos = $conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_medico");
$total = mysql_fetch_array($totalMedicos);
if ($total["total"] < $this->bloco){
$inicio = 0;
$final = $total["total"];
}else{
$inicio = 0;
$final = $this->bloco;
}
while ($total["total"] >= $final){
$resultado = $conexao->executeSQLBancoReal("SELECT medi_nome, medi_crm, medi_especialidade, medi_ativo FROM clin_medico");
$inserir = "INSERT INTO clin_medico (medi_nome, medi_crm, medi_especialidade, medi_ativo) VALUES ";
$max = 0;
while ($rows = mysql_fetch_array($resultado)){
if ($max < 100){
if ($max == 0){
$inserir .= "('".$rows["medi_nome"]."', '".$rows["medi_crm"]."', '".$rows["medi_especialidade"]."', '".$rows["medi_ativo"]."')";
}else{
$inserir .= ", ('".$rows["medi_nome"]."', '".$rows["medi_crm"]."', '".$rows["medi_especialidade"]."', '".$rows["medi_ativo"]."')";
}
$max++;
}else{
$max = 0;
$inserir .= ", ('".$rows["medi_nome"]."', '".$rows["medi_crm"]."', '".$rows["medi_especialidade"]."', '".$rows["medi_ativo"]."')";
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_medico no bloco de $inicio a $final')");
}else{
$inserir = "INSERT INTO clin_medico (medi_nome, medi_crm, medi_especialidade, medi_ativo) VALUES ";
}
}
}
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_medico no bloco de $inicio a $final')");
}
if ($final == $total["total"]){
$final++;
}else{
$inicio = $final;
$final += $this->bloco;
if ($final > $total["total"]){
$final = $total["total"];
}
}
}
}
public function ETLExames() {
$conexao = new Conexao();
$totalExames = $conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_exames");
$total = mysql_fetch_array($totalExames);
if ($total["total"] < $this->bloco){
$inicio = 0;
$final = $total["total"];
}else{
$inicio = 0;
$final = $this->bloco;
}
while ($total["total"] >= $final){
$resultado = $conexao->executeSQLBancoReal("SELECT exam_nome, exam_ativo FROM clin_exames");
$inserir = "INSERT INTO clin_exames (exam_nome, exam_ativo) VALUES ";
$max = 0;
while ($rows = mysql_fetch_array($resultado)){
if ($max < 100){
if ($max == 0){
$inserir .= "('".$rows["exam_nome"]."', '".$rows["exam_ativo"]."')";
}else{
$inserir .= ", ('".$rows["exam_nome"]."', '".$rows["exam_ativo"]."')";
}
$max++;
}else{
$max = 0;
$inserir .= ", ('".$rows["exam_nome"]."', '".$rows["exam_ativo"]."')";
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_exames no bloco de $inicio a $final')");
}else{
$inserir = "INSERT INTO clin_exames (exam_nome, exam_ativo) VALUES ";
}
}
}
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_exames no bloco de $inicio a $final')");
}
if ($final == $total["total"]){
$final++;
}else{
$inicio = $final;
$final += $this->bloco;
if ($final > $total["total"]){
$final = $total["total"];
}
}
}
}
public function ETLEmpresa() {
$conexao = new Conexao();
$totalEmpresas = $conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_empresa");
$total = mysql_fetch_array($totalEmpresas);
if ($total["total"] < $this->bloco){
$inicio = 0;
$final = $total["total"];
}else{
$inicio = 0;
$final = $this->bloco;
}
while ($total["total"] >= $final){
$resultado = $conexao->executeSQLBancoReal("SELECT empr_cnpj, empr_razao_social, empr_fantasia, empr_rua, empr_numero, empr_complemento, empr_bairro, empr_cidade, empr_estado, empr_pais, empr_data_cadastro, empr_ativo FROM clin_empresa");
$inserir = "INSERT INTO clin_empresa (empr_cnpj, empr_razao_social, empr_fantasia, empr_rua, empr_numero, empr_complemento, empr_bairro, empr_cidade, empr_estado, empr_pais, empr_data_cadastro, empr_ativo) VALUES ";
$max = 0;
while ($rows = mysql_fetch_array($resultado)){
if ($max < 100){
if ($max == 0){
$inserir .= "('".$rows["empr_cnpj"]."','".$rows["empr_razao_social"]."', '".$rows["empr_fantasia"]."', '".$rows["empr_rua"]."', '".$rows["empr_numero"]."', '".$rows["empr_complemento"]."', '".$rows["empr_bairro"]."', '".$rows["empr_cidade"]."', '".$rows["empr_estado"]."', '".$rows["empr_pais"]."', '".$rows["empr_data_cadastro"]."', '".$rows["empr_ativo"]."')";
}else{
$inserir .= ", ('".$rows["empr_cnpj"]."','".$rows["empr_razao_social"]."', '".$rows["empr_fantasia"]."', '".$rows["empr_rua"]."', '".$rows["empr_numero"]."', '".$rows["empr_complemento"]."', '".$rows["empr_bairro"]."', '".$rows["empr_cidade"]."', '".$rows["empr_estado"]."', '".$rows["empr_pais"]."', '".$rows["empr_data_cadastro"]."', '".$rows["empr_ativo"]."')";
}
$max++;
}else{
$max = 0;
$inserir .= ", ('".$rows["empr_cnpj"]."','".$rows["empr_razao_social"]."', '".$rows["empr_fantasia"]."', '".$rows["empr_rua"]."', '".$rows["empr_numero"]."', '".$rows["empr_complemento"]."', '".$rows["empr_bairro"]."', '".$rows["empr_cidade"]."', '".$rows["empr_estado"]."', '".$rows["empr_pais"]."', '".$rows["empr_data_cadastro"]."', '".$rows["empr_ativo"]."')";
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_empresa no bloco de $inicio a $final')");
}else{
$inserir = "INSERT INTO clin_empresa (empr_cnpj, empr_razao_social, empr_fantasia, empr_rua, empr_numero, empr_complemento, empr_bairro, empr_cidade, empr_estado, empr_pais, empr_data_cadastro, empr_ativo) VALUES ";
}
}
}
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_empresa no bloco de $inicio a $final')");
}
if ($final == $total["total"]){
$final++;
}else{
$inicio = $final;
$final += $this->bloco;
if ($final > $total["total"]){
$final = $total["total"];
}
}
}
}
public function ETLFuncionario() {
$conexao = new Conexao();
$resultado = $conexao->executeSQLBancoReal("SELECT func_empr_fk_empresa, func_empr_nome, func_empr_rg, func_empr_cpf, func_empr_rua, func_empr_numero, func_empr_complemento, func_empr_bairro, func_empr_cidade, func_empr_estado, func_empr_pais, func_empr_data_cadastro, func_empr_ativo FROM clin_funcionario_empresa");
$inserir = "INSERT INTO clin_funcionario_empresa (func_empr_fk_empresa, func_empr_nome, func_empr_rg, func_empr_cpf, func_empr_rua, func_empr_numero, func_empr_complemento, func_empr_bairro, func_empr_cidade, func_empr_estado, func_empr_pais, func_empr_data_cadastro, func_empr_ativo) VALUES ";
$max = 0;
while ($rows = mysql_fetch_array($resultado)){
if ($max < 100){
if ($max == 0){
$inserir .= "('".$rows["func_empr_fk_empresa"]."','".$rows["func_empr_nome"]."', '".$rows["func_empr_rg"]."', '".$rows["func_empr_cpf"]."', '".$rows["func_empr_rua"]."', '".$rows["func_empr_numero"]."', '".$rows["func_empr_complemento"]."', '".$rows["func_empr_bairro"]."', '".$rows["func_empr_cidade"]."', '".$rows["func_empr_estado"]."', '".$rows["func_empr_pais"]."', '".$rows["func_empr_data_cadastro"]."', '".$rows["func_empr_ativo"]."')";
}else{
$inserir .= ", ('".$rows["func_empr_fk_empresa"]."','".$rows["func_empr_nome"]."', '".$rows["func_empr_rg"]."', '".$rows["func_empr_cpf"]."', '".$rows["func_empr_rua"]."', '".$rows["func_empr_numero"]."', '".$rows["func_empr_complemento"]."', '".$rows["func_empr_bairro"]."', '".$rows["func_empr_cidade"]."', '".$rows["func_empr_estado"]."', '".$rows["func_empr_pais"]."', '".$rows["func_empr_data_cadastro"]."', '".$rows["func_empr_ativo"]."')";
}
$max++;
}else{
$max = 0;
$inserir .= ", ('".$rows["func_empr_fk_empresa"]."','".$rows["func_empr_nome"]."', '".$rows["func_empr_rg"]."', '".$rows["func_empr_cpf"]."', '".$rows["func_empr_rua"]."', '".$rows["func_empr_numero"]."', '".$rows["func_empr_complemento"]."', '".$rows["func_empr_bairro"]."', '".$rows["func_empr_cidade"]."', '".$rows["func_empr_estado"]."', '".$rows["func_empr_pais"]."', '".$rows["func_empr_data_cadastro"]."', '".$rows["func_empr_ativo"]."')";
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_funcionario_empresa no bloco de $inicio a $final')");
}else{
$inserir = "INSERT INTO clin_funcionario_empresa (func_empr_fk_empresa, func_empr_nome, func_empr_rg, func_empr_cpf, func_empr_rua, func_empr_numero, func_empr_complemento, func_empr_bairro, func_empr_cidade, func_empr_estado, func_empr_pais, func_empr_data_cadastro, func_empr_ativo) VALUES ";
}
}
}
$result = $conexao->executeSQL($inserir);
if ($result == false){
while ($result == false){
$result = $conexao->executeSQL($inserir);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_funcionario_empresa no bloco de $inicio a $final')");
}
}
public function ETLRealizacaodeExames() {
$conexao = new Conexao();
//$resuLaudo = mysql_fetch_assoc($conexao->executeSQLBancoReal("SELECT count(*) as total FROM clin_func_empr_exames"));
//echo $resuLaudo["total"];
//ceil();
$codigo = 5630548;
$fim = 7949663;
$resultado = $conexao->executeSQLBancoReal("SELECT clin_func_empr_exam_codigo, clin_func_empr_exam_fk_funcionario, clin_func_empr_exam_fk_exames, clin_func_empr_exam_data_exame, clin_func_empr_exam_qtd, clin_func_empr_exam_valor FROM clin_func_empr_exames WHERE clin_func_empr_exam_codigo > $codigo AND clin_func_empr_exam_codigo <= $fim ORDER BY clin_func_empr_exam_codigo ASC");
//exit;
$max = 0;
$insertTempoExame = "INSERT INTO clin_tempo_exame (temp_exam_codigo, temp_exam_dia, temp_exam_mes, temp_exam_ano) VALUES ";
$insertTempoLaudo = "INSERT INTO clin_tempo_laudo (temp_laudo_codigo, temp_laudo_dia, temp_laudo_mes, temp_laudo_ano) VALUES ";
$insertExamesFunc = "INSERT INTO clin_func_empr_exames (clin_func_empr_exam_fk_tempo_exame, clin_func_empr_exam_fk_tempo_laudo, clin_func_empr_exam_fk_funcionario, clin_func_empr_exam_fk_exames, clin_func_empr_exam_fk_medico, clin_func_empr_exam_laudo, clin_func_empr_exam_qtd, clin_func_empr_exam_valor) VALUES ";
while ($rows = mysql_fetch_array($resultado)){
$resultadoLaudo = $conexao->executeSQLBancoReal("SELECT * FROM clin_laudo WHERE laudo_fk_func_empr_exames = '".$rows["clin_func_empr_exam_codigo"]."'");
$dataExame = explode("-",$rows["clin_func_empr_exam_data_exame"]);
$tempExDia = $dataExame[2];
$tempExMes = $dataExame[1];
$tempExAno = $dataExame[0];
$boolLaudo = mysql_num_rows($resultadoLaudo);
if ($boolLaudo > 0){
$resuLaudo = mysql_fetch_assoc($resultadoLaudo);
$dataLaudo = explode("-",$resuLaudo["laudo_data"]);
$tempLdDia = $dataLaudo[2];
$tempLdMes = $dataLaudo[1];
$tempLdAno = $dataLaudo[0];
}
$codigo++;
$idTempExame = $codigo;
$idTempLaudo = $codigo;
if ($max < 100){
if ($max == 0){
$insertTempoExame .= "('".$idTempExame."', '".$tempExDia."', '".$tempExMes."','".$tempExAno."')";
if ($boolLaudo > 0){
$insertTempoLaudo .= "('".$idTempLaudo."', '".$tempLdDia."', '".$tempLdMes."','".$tempLdAno."')";
}
if ($boolLaudo > 0){
$insertExamesFunc .= "('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
}else{
$insertExamesFunc .= "('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
}
}else{
$insertTempoExame .= ", ('".$idTempExame."', '".$tempExDia."', '".$tempExMes."','".$tempExAno."')";
if ($boolLaudo > 0){
$insertTempoLaudo .= ", ('".$idTempLaudo."', '".$tempLdDia."', '".$tempLdMes."','".$tempLdAno."')";
}
if ($boolLaudo > 0){
$insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
}else{
$insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
}
}
$max++;
}else{
$max = 0;
/*TEMPO EXAME*/
$insertTempoExame .= ", ('".$idTempExame."', '".$tempExDia."', '".$tempExMes."','".$tempExAno."')";
$result1 = $conexao->executeSQL($insertTempoExame);
if ($result1 == false){
while ($result1 == false){
$result1 = $conexao->executeSQL($insertTempoExame);
}
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_exame no bloco de $inicio a $final')");
}else{
$insertTempoExame = "INSERT INTO clin_tempo_exame (temp_exam_codigo, temp_exam_dia, temp_exam_mes, temp_exam_ano) VALUES ";
}
/*TEMPO LAUDO*/
if ($boolLaudo > 0){
$insertTempoLaudo .= ", ('".$idTempLaudo."', '".$tempLdDia."', '".$tempLdMes."','".$tempLdAno."')";
}
$result2 = $conexao->executeSQL($insertTempoLaudo);
if ($result2 == false){
while ($result2 == false){
$result2 = $conexao->executeSQL($insertTempoLaudo);
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_laudo no bloco de $inicio a $final')");
}
}else{
$insertTempoLaudo = "INSERT INTO clin_tempo_laudo (temp_laudo_codigo, temp_laudo_dia, temp_laudo_mes, temp_laudo_ano) VALUES ";
}
/*EXAMES DOS FUNCS*/
if ($boolLaudo > 0){
$insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
}else{
$insertExamesFunc .= ", ('".$idTempExame."', '".$idTempLaudo."', '".$rows["clin_func_empr_exam_fk_funcionario"]."', '".$rows["clin_func_empr_exam_fk_exames"]."', '".$resuLaudo["laudo_fk_medico"]."', '".$resuLaudo["laudo_descricao"]."', '".$rows["clin_func_empr_exam_qtd"]."', '".$rows["clin_func_empr_exam_valor"]."')";
}
$result3 = $conexao->executeSQL($insertExamesFunc);
if ($result3 == false){
while ($result3 == false){
$result3 = $conexao->executeSQL($insertExamesFunc);
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_func_empr_exames no bloco de $inicio a $final')");
}
}else{
$insertExamesFunc = "INSERT INTO clin_func_empr_exames (clin_func_empr_exam_fk_tempo_exame, clin_func_empr_exam_fk_tempo_laudo, clin_func_empr_exam_fk_funcionario, clin_func_empr_exam_fk_exames, clin_func_empr_exam_fk_medico, clin_func_empr_exam_laudo, clin_func_empr_exam_qtd, clin_func_empr_exam_valor) VALUES ";
}
}
}
$result1 = $conexao->executeSQL($insertTempoExame);
if ($result1 == false){
while ($result1 == false){
$result1 = $conexao->executeSQL($insertTempoExame);
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_exame no bloco de $inicio a $final')");
}
}
$result2 = $conexao->executeSQL($insertTempoLaudo);
if ($result2 == false){
while ($result2 == false){
$result2 = $conexao->executeSQL($insertTempoLaudo);
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_tempo_laudo no bloco de $inicio a $final')");
}
}
$result3 = $conexao->executeSQL($insertExamesFunc);
if ($result3 == false){
while ($result3 == false){
$result3 = $conexao->executeSQL($insertExamesFunc);
$conexao->executeSQL("INSERT INTO clin_auditoria (aud_descricao) VALUES ('Houve ROLLBACK na insercao da tabela clin_func_empr_exames no bloco de $inicio a $final')");
}
}
}
}
?>
Nenhum comentário:
Postar um comentário