SSIS Converting wildcard characters file pattern to regex

Sometimes we need to use wildcard characters in ours SSIS solutions to define a search pattern. The SSIS has total support to wildcard, and you can keep using it to find files in a local file system, but how can we use it in a C# script for an FTP directory? The best way that I have found was using regex.

//Converting FilePattern to regex language
Regex mask = new Regex(‘^’ + Dts.Variables[“FilePattern“].Value.ToString().Replace(“.”, “[.]“).Replace(“*”, “.*”).Replace(“?”, “.”) + ‘$’, RegexOptions.IgnoreCase);

The FilePattern is my variable with the file name pattern.

E.g.

  • FileParttern [wildcard characters]: FinancialsData*.xlsx
  • FileParttner [Regex]: ^FinancialsData.*[.]xlsx$

You can use the regex tester (http://regexstorm.net/) to check your pattern.

 

Instalando e configurando (DB2) o Squirrel SQL no Linux

O Squirrel SQL é uma ótima opção de client SQL, pois além de possuir diversas funcionalidades sua distribuição é livre.  Segue o passo a passo para instalação e configuração do Squirrel SQL no Linux.

Instalação

1. Primeiro acesse o site http://squirrel-sql.sourceforge.net/e clique em Download and Installation.
2. Selecione a opção Install jar of SQuirreL 3.6 for Windows/Linux/others (ou superior)
3. Faça o download do instalador.
4. O instalador é um .jar, uma extensão compilada do Java. Abra uma janela de terminal, vá até o diretório do instalador e digite java -jar squirrel-sql-3.6-standard.jar

Será aberta a seguinte tela de instalação, clique em Next

5. Aqui são algumas informações. Caso queira ler fique a vontade, ou então clique em Next.

6.  Nessa tela ele irá pedir qual a pasta de instalação, no meu caso é a “/home/antonioc/squirrel-sql-3.6″, altere para uma de sua preferência ou deixe a padrão. Clique em Next.

7. Caso a pasta informada não exista, a seguinte mensagem será exibida. Clique em OK para criar a pasta.

8. Agora aparecerá a tela para selecionarmos os pacotes a serem instalados, mantenha o Base e o Standard selecionados e escolha os plugins que deseja instalar (podem ser adicionados depois da instalação também).

9. Aguarde o processo de instalação de clique em Next

10. A primeira opção cria um atalho no menu iniciar do sistema. Caso queira que seja criado um atalho na área de trabalho marque também a segunda opção. Clique em Next.

11. Seu Squirrel SQL esta instalado.

Configuração (DB2)

Iremos configurar o Squirrel SQL para conectar a uma base de dados DB2, para isso e necessário que  haja um client DB2 instalado na maquina.

1. Abra o Squirrel e selecione a opção Drivers.

2.  Localize na lista de Drivers o “IBM DB2 App Driver”,  e dê um duplo clique nele para editar suas configurações. Preencha o formulário com as informações abaixo:
Name: IBM DB2 App Driver
Exemple URL: jdbc:db2:<dbname>
Web Site URL: http://www-306.ibm.com/software/data/db2

Class Name: com.ibm.db2.jcc.DB2Driver

Extra Class Patch:
/opt/IBM/db2/V9.7/java/db2jcc.jar
/opt/IBM/db2/V9.7/java/db2jcc_license_cu.jar
/opt/IBM/db2/V9.7/java/db2jcc_license_cisuz.jar


Utilize o botão Add para adicionar as classes

Após preencher todos os dados, selecione OK. Caso queira utilize o botão Show Loaded Drivers Only para exibir apensa os drivers configurados.

Pronto, o seu Squirrel SQL já esta com o Driver DB2 configurado, agora vamos adicionar uma conexão com um banco de dados.

1. No menu a esquerda clique em Aliases e depois no sinal “+”.

2.  Na tela que abrir insira um nome para a conexão, selecione um Driver, e preencha o usuário e a senha de acesso ao banco.

3. Selecione o botão Properties para configurar algumas variáveis da conexão. Em Driver Properties, habilite a opção “Use driver properties” e depois clique com o botão direito em uma das linhas e selecione Add Property:

Irá abrir uma janela para você preencher as informações:
Property Name: retrieveMessagesFromServerOnGetMessage
Property Value: true
Selecione o botão Add:

Selecione a opção Specify para a nova linha inserida e depois clique em OK
Essa nova linha garante que o DB2 retorno uma mensagem com a descrição do erro encontrado em uma instrução SQL.

4.Selecione o botão Test para verificar se esta funcionando.

Acione o botão Connect para realizar a conexão com o banco de dados.

Será exibida uma mensagem informando que a conexão foi realizada com sucesso.

Pronto sua conexão com o banco de dados foi criada com sucesso! Para criar outras conexões DB2 você pode duplicar essa que você criou e alterar apenas as informações de conexão.

DB2 – Realizando INSERT com o resultado de um SELECT

Essa é uma forma de inserir dados muito útil, que pode simplificar muito seu código.
Vou dar um exemplo:

Imagine que você precisa abrir um registro de RCA (Root cause analysis) para cada desvio de processo. Você já possui um Data Warehouse onde há todos os processos gravados (tanto os finalizados com sucesso quanto os com desvio). Esses RCA’s são armazenados em uma tabela em seu banco de dados.
Dessa forma, utilizando a dica desse post,  você pode criar uma rotina para a partir de alguns dados chave do seu Data Warehouse (mais associações com tabelas auxiliares) realizar a abertura automática de RCA’s para os devidos owners.

Vamos ver qual a sintaxe do SQL:

<strong>INSERT INTO</strong> SCHEMA_X_NAME.TABLE_NAME_INSERT
     (EMPNUMBER, PROJNUMBER, STARTDATE, ENDDATE)
  <strong>SELECT</strong> EMPNO, PROJNO, EMSTDATE, EMENDATE
    <strong>FROM</strong> SCHEMA_Y_NAME.NAME_SELECT

No caso o INSERT seria feito na tabela SCHEMA_X_NAME.TABLE_NAME_INSERT a partir dos dados da tabela SCHEMA_Y_NAME.NAME_SELECT.

O comando é bem simples, eu mesmo já utilizei diversas vezes.
Espero ter ajudado, qualquer dúvida deixem um comentário.
Obrigado.

DB2 – Calcular a diferença entre duas datas

Muitas vezes precisamos calcular a diferença entre duas datas, porem uma simples subtração não resolve o nosso problema. Para tanto devemos utilizar a função TIMESTAMPDIFF do DB2, funcionando da seguinte forma:

&gt;&gt;-TIMESTAMPDIFF--(--expression--,--expression--)--------------&gt;&lt;

No caso o primeiro parâmetro é um número que indica qual será o formato do resultado (dias, minutos, semanas, …), seguindo a seguinte tabela:

1 Fractions of a second
2 Seconds
4 Minutes
8 Hours
16 Days
32 Weeks
64 Months
128 Quarters
256 Years

O segundo parâmetro é onde será adicionada sua expressão, ou seja onde você fará a subtração entre datas:

DATA_HORA_FECHAMENTO - DATA_HORA_ABERTURA

Para finalizar segue um exemplo de como ficaria a consulta SLQ utilizando a função:
SELECT  TIMESTAMPDIFF(4, DATA_HORA_FECHAMENTO - DATA_HORA_ABERTURA)
    FROM YOUR_SCHEMA.YOUR_TABLE
GO

No caso o retorno será a diferença entre a data hora de fechamento e a data hora de abertura, sendo retornado em minutos, já que utilizamos o parâmetro 4.

O DB2 utiliza a seguinte regra para fazer os cálculos:

  • There are 365 days in a year.
  • There are 30 days in a month.
  • There are 24 hours in a day.
  • There are 60 minutes in an hour.
  • There are 60 seconds in a minute.

Espero ter ajudado, qualquer dúvida deixem um comentário.
Obrigado.

Removendo registros duplicados em uma tabela

Muitas vezes nos deparamos com a necessidade de remover registros duplicados em uma determinada tabela do Banco de Dados. No caso que vou compartilhar com vocês comparamos os registros mantendo apenas o registro mais antigo na base.

Considerando

SCHEMA_NAME: Nome do seu Schema no banco de dados;
TABLE_NAME: Nome da tabela onde temos os registros duplicados;
CAMPO_A_TIMESTAMP: Campo (DATE ou TIMESTAMP) que iremos utilizar de parâmetro para verificar qual o registro mais antigo;
CHAVE: Campo que indica o numero do registro duplicado (código do produto, numero do incidente, …);

Temo o seguinte SQL

DELETE
FROM <strong>SCHEMA_NAME</strong>.<strong>TABLE_NAME</strong> A
WHERE
<strong>CAMPO_A_TIMESTAMP</strong> &gt;
(SELECT MIN(<strong>CAMPO_A_TIMESTAMP</strong>)
FROM <strong>SCHEMA_NAME</strong>.<strong>TABLE_NAME</strong> B
WHERE A.<strong>CHAVE</strong> = B.<strong>CHAVE</strong>)

Espero que a dica tenha sido útil, caso tenham alguma dúvida é só deixar um comentário. Obrigado.

Entendendo o Método Científico

Na maioria das vezes nós não nos damos conta, mas aplicamos ao menos parte do método científico no nosso dia-a-dia e também no nosso trabalho. Ele nos ajuda a resolver os problemas e a fornecer argumentações e informação justificada quando necessário. Mas o que é o método científico e por que é importante conhecê-lo?
O método científico é um conjunto de técnicas para a investigação dos fenômenos que nos cercam, para deles podermos gerar novos conhecimentos ou ajustar e corrigir o que já sabemos. É um esforço empírico com base em evidências mensuráveis. E embora as especificidades variem de área para área de conhecimento, pode-se identificar dois elementos comuns que conferem a sua forma geral. Esses elementos básicos são as hipóteses e os testes dessas hipóteses.

Uma hipótese é uma formulação provisória, com intenções de ser posteriormente demonstrada ou verificada, constituindo uma suposição admissível.

Ao observar um fenômeno, um cientista propõe uma ou mais hipóteses para explicá-lo. As hipóteses não surgem do nada, mas vêm daquilo que já se conhece sobre o fenômeno (ou fenômenos parecidos) e seguem também uma análise de plausibilidade. Com as hipóteses, o cientista então propõe testes para validá-las ou refutá-las. Os testes devem ser passíveis de repetição por outros cientistas, para verificação independente, e devem ser os mais objetivos e controlados possíveis para evitar tendenciosidade nos resultados. As hipóteses também geram previsões, por exemplo, se elas forem verdadeiras, então espera-se observar certos valores, comportamentos ou novos fatos sobre o fenômeno. Essas previsões, por sua vez, podem ser confirmadas com mais testes e observações, tornando a pesquisa ainda mais fundamentada.

Esse processo culmina quando fornece uma teoria. Na ciência, o significado da palavra teoria é diferente do seu uso geral. Coloquialmente, uma teoria é um “palpite” sobre a explicação de algo, mas sem necessidade de maiores confirmações. Cientificamente, uma teoria é muito mais, compondo-se de um corpo de conhecimento estabelecido e bem suportado pelas evidências disponíveis. Exemplos de teorias científicas conhecidas são a da evolução das espécies de Charles Darwin e a da relatividade de AlbertEinstein, que até hoje fornecem explicações verificáveis para uma vasta gama de fenômenos naturais mesmo frente aos mais novos testes a que são submetidas.

Claro, nem toda pesquisa termina com uma teoria totalmente nova, mas pode propor ajustes ao conhecimento existente, confirmar aspectos novos de uma teoria ou mesmo mostrar que conceitos importantes, à luz de novos dados, são na verdade incorretos (vide o caso do éter, o meio proposto para a propagação da luz, refutado no famoso experimento de Michelson-Morley em 1887).

Em nosso trabalho frequentemente nos deparamos com situações que pedem uma análise apurada para serem resolvidas e são nesses momentos em que nossas habilidades, como o pensamento crítico, são mais requisitadas. A elaboração de hipóteses e seus testes frente ao problema que se apresenta formam o cerne de nosso processo investigativo. Além disso, é possível traçar uma relação direta entre o que fazemos para resolver nossos desafios profissionais e os elementos do método científico. Portanto, conhecendo mais a fundo o método temos a oportunidade de melhorar os resultados de nosso trabalho. E isso é refletido em todos os fatores que deles derivam, como por exemplo a satisfação final do cliente. Um exemplo dessa aplicação talvez seja em times de suporte à produção, nos quais a análise e resolução rápidas e acertadas de um problema podem fazer a diferença entre o sucesso ou fracasso de um projeto.

O método científico tem a capacidade de melhorar nosso trabalho e suas lições têm grande abrangência e utilização imediata. Portanto vale a pena conhecê-lo e aplicá-lo.

Links úteis:

Obtendo data e hora atual no DB2

Para os que estão acostumados com o MySql esse é um problema que seria facilmente resolvido utilizando a função Now(), porem no DB2 essa função não existe.

No DB2 devemos utilizar current timestamp para indicar a data e hora atual (isso mesmo, separado). Exemplo de utilização:

INSERT INTO DB.TABELA
(DATA_ALTER, OWNER_ALTER, NOME, EMAIL)
VALUES
( current timestamp, 'contato@acmcorrea.com.br',
 'Nome da pessoa', 'Email da pessoa')

Configurando o PHP para exibir (ou não) erros na pagina

Para evitar que usuários recebam informações referentes a erros em nossa aplicação, os  administradores do ambiente mantêm o php.ini configurado para inibir a exibição de erros. Porem durante a fase de desenvolvimento/teste, nos realizamos diversos testes e debugs onde é essencial o feedback da aplicação (exibindo mensagens caso haja algum erro).

Nesse post irei demonstrar como podemos habilitar / desabilitar a exibição dessas mensagens de erro através do php.ini ou direto no código de sua aplicação.

Configurando pelo php.ini

Dentro do arquivo php.ini você deverá procurar a chave display_errors, que por padrão estará assim:

display_errors = Off

Para habilitar a exibição das mensagens de erro é só trocar o parâmetro da chave de Offpara On, e fazer o restart do serviço web do servidor (apache, IIS, …).

Configurando pelo código

Acredito que essa seja a melhor opção, já que você pode especificar quais paginas irão exibir as mensagens de erro, evitando problemas no caso de existir mais de uma aplicação rodando no servidor.

Para tanto iremos utilizar as funções ini_set e error_reporting, habilitando a exibição dos erros e gerando uma log com todos eles. Insira o código abaixo nas páginas em que deseja habilitar essas ações:

ini_set('display_errors', 1);
ini_set('log_errors', 1);
ini_set('error_log', dirname(__FILE__) . '/error_log.txt');
error_reporting(E_ALL);

Observação: Eu aconselho adicionar esse código em uma pagina que esteja incluída em todas as demais paginas do seu site, pois assim você só terá que fazer a alteração uma vez e caso precise desabilitar não terá que entrar pagina por pagina.

Links úteis:

Nota

Oá, esse é o meu primeiro post, e gostaria de falar um pouco sobre o que pretendo publicar nesse site.

Sou formado em analise de sistemas pela PUC Campinas, e trabalho em uma multi nacional de TI, onde atuo na área de projetos, qualidade, desenvolvimento de software e administração de sistemas (atualmente como Project Tech Leader).
A ideia do site é manter um canal de comunicação aberto  para compartilhar soluções / conhecimento, além de divulgar o meu trabalho.

Att,