Arquivo de agosto, 2013

Iniciando a vida com BigData – mongoDB

Publicado: 27 de agosto de 2013 em Diversos

Ola pessoal to na área novamente!

Navegando por ai encontrei um ótimo artigo para quem quer se aventurar no mundo BigData, é um ótimo artigo para quem esta no HelloWord “Pegou” BDHelloWorld 😛 .

Este artigo fala sobre o mongoDB e para quem esta iniciando nesta área é uma ótima alternativa,  e ainda conta com versões para Windows, Linux, Max OS X e Solaris. Tenha uma boa leitura

Segue abaixo o link e parabéns ao  pelo ótimo artigo.

ACESSOhttp://www.itexto.net/devkico/?p=682

Anúncios

Pentaho Kettle – INSERT / UPDATE

Publicado: 23 de agosto de 2013 em Diversos

Pessoal tenho visto por ai  um monte de gente com dúvidas sobre o que faz cada opção do STEP  INSERT / UPDATE do Pentaho Kettle, componente este responsável por inserir ou atualizar dados em um banco de dados de destino.

Por esta razão coloco aqui o componente devidamente mapeado para ajudar a galera , se ainda houver dúvidas me avise, :-), vou ver se pouco a pouco coloco todos os componentes mapeados , assim a galera fica por dentro 😉

Segue :

TEMPLATE_PENTAHO

.

Neste post irei demonstrar como executar um Prepared Statements para atribuir valores a variáveis dinamicamente, estou assumindo que saiba o que é um Stored Procedure e seus recursos, caso não saiba o que estou falando recomendo ler este ARTIGO, caso queira saber mais sobre Prepared Statement leia ESTE.

Cenário:

Um certa condição IF precisa saber que ação tomar para inserir registros em uma tabela de destino, porém antes de executar precisa averiguar o último registro da tabela de destino, se for vazio ou nulo significa que não há registros e precisa pegar o primeiro registro da origem, atribuir em uma variável de start e inserir os registros a partir do início. Coisas de ETL kkkkkk

Agora a questão que fica no ar é: Como farei para atribuir um valor de uma variável com dados da origem, se estou executando um SELECT para atribuir a uma variável já ativa no caso IDStartCon2 ???

Para isso uma das soluções seria atribuir o valor do SELECT em uma variável de usuário usando o INTO, mas outra questão aparece. L Como executar e retornar o valor para a próxima linha e continuar o código?

Bom para isso usuremos o Prepared Statement. (Referências lá no início lembra? )

O trecho de código de exemplo abaixo comentando irá ajudar a esclarecer todos os questionamentos levantados

— Recebendo o ultimo ID da tabela de destino (Imagine que seja o SELECT do seu ambiente )
SET v_ultima_id=(SELECT MAX(factClipDetailsIDFROM mos_index_bi WHERE factOttID=v_mos_indexType AND factSourceID=v_mos_indexSource AND  factYearID=yearNumber);

— AVERIGUANDO SE VALOR É VÁLIDO
  IF (v_ultima_id IS NULL OR v_ultima_id=THEN
     — AQUI ACONTECE A MÁGICA (USAREMOS A VARIÁVEL v_IDStartCon2 COMO APOIO PARA MONTAR A QUERY DINAMICAMENTE E ATRIBUIR O VALOR …
     — GERADO A VARIAVEL DE USUARIO @v_IDStart2 PROVIDA DO MENOR VALOR DA TABELA DE ORIGEM E USUANDO O INTO DENTRO DO SELECT PARA       

         — ATRIBUIR O VALOR.
     SET v_IDStartCon2= (‘select MIN(ID) INTO @v_IDStart2 from Relaciones WHERE TIPO <> ”P”’);

        — AQUI ESTOU PREPARANDO PARA EXECUTAR A CONSULTA
     PREPARE STMT1 FROM v_IDStartCon2;

        — AQUI IREI EXECUTAR A CONSULTA PARA RECEBER O RESULTADO EM @v_IDStart2
     EXECUTE STMT1;    

        — PRONTO JA TEM A A VARIÁVEL EM MEMÓRIA PRONTA PARA USAR COMO QUISER 😉
        SET v_ultima_id=@v_IDStart2;
        SET v_ultima_id2=@v_IDStart2 + v_IDIncremental;        

END IF;

É isso ai galera qualquer duvida , avisa!

 

É ai pessoal, neste post vou falar sobre dois comandos que podem ajudar a vida de muita gente e que por incrível que pareça é bem pouco conhecido, principalmente para quem está iniciando na área. Trata-se dos comandos de comparação do T-SQL o Except e o Intersect, estes dois comandos realizam a comparação de valores distintos entre 2 tabelas e é extremamente útil.

A sintaxe do comando retirada do site oficial ( http://technet.microsoft.com/pt-br/library/ms188055(v=sql.100).aspx) :

{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }

Traduzindo

SELECT x,y FROM Z
EXCEPT OU INTERSECT
SELECT x,y FROM W

Bom para que possam entender melhor vou preparar um cenário de teste e ir explicando passo a passo:

Primeiro passo, estou criando 2 tabelas temporárias apenas para ilustrar os testes, fiz o mais simples possível para que possam entender os dados posteriormente.

— CRIAÇÃO DO CENÁRIO DE TESTE

— TABELA TEMPORÁRIA B
create table #A (
 ID 
int not null identity(1,1) primary key
,nome varchar(50)
,salario Money
);

GO

— TABELA TEMPORÁRIA B
create 
table #B (
 ID int not null identity(1,1) primary key
,nome varchar(50)
,salario money
);

Agora vou realizar alguns inserts , afim de realizar a comparação dos dados

— INSERTS NECESSÁRIOS TABELA #A

INSERT INTO #A values (‘MARCELO’,345.49);
INSERT INTO #A values (‘BEATRIZ’,185.49);
INSERT INTO #A values (‘JUAREZ’,745.49);
INSERT INTO #A values (‘JOSE’,3345.49);

GO

— INSERTS NECESSÁRIOS TABELA #B

INSERT INTO #B values (‘JOSE’,3345.49);
INSERT INTO #B values (‘JOAO’,2345.49);
INSERT  INTO #B values (‘JUAREZ’,745.49);

 

Analisando os dados a seguir e imaginando que fossem 30.000 registros, poderíamos nos perguntar:

  1. Quais são os dados distintos entre a tabela #A e tabela #B ?
  2. Quais valores distintos presentes nas  tabelas #A e  #B ?

Para responder exatamente estas questões é que entram em ação os comandos Except e Intersect onde :

EXCECPT: Retorna os dados distintos da tabela #A e que não existam na tabela #B.
INTERSECT: Retorna os valores distintos entre nas tabelas #A e #B.

Na prática:

A Tabela #A possui:

MARCELO    345,49
BEATRIZ    185,49
JUAREZ    745,49
JOSE    3345,49

A Tabela #B possui:

JOSE    3345,49
JOAO    2345,49
JUAREZ    745,49

Logo :

SELECT NOME,SALARIO FROM #A
EXCEPT
SELECT NOME,SALARIO FROM #B

 Devo ter como resultado os valores de #A que não estão em #B como podem ver abaixo

EXCEPT
BEATRIZ    185,49
MARCELO    345,49

Agora caso eu execute:

SELECT NOME,SALARIO FROM #A
INTERSECT
SELECT NOME,SALARIO FROM #B

Devo ter como resultado os valores que distintos que apareçam tanto na tabela #A quanto na #B como podem ver abaixo

INTERSECT
JOSE    3345,49
JUAREZ    745,49

OBS: Estes comandos foram introduzidos no SQL Server a partir da versão 2008 J

 

É isso ai galera, espero que possa ter ajudado a esclarecer as dúvidas e até a próxima …

 

 

Problemas para conectar no banco de dados ?

Publicado: 20 de agosto de 2013 em Diversos

Pessoal olá tudo bem? desculpem não ter postado nada por estes dias, mas correria sabe como é néh J Bom, eu tenho recebido pedidos e pedidos de muitos devs com dúvidas sobre strings de conexão com base de dados, para ajudar coloco neste post algumas de exemplo. Este é um assunto pra galera de desenvolvimento, mas resolvi postar aqui no BDHelloWord pra ajudar a galera, afinal se fala de BD é nóis!!! Kkkk E xiste um site excelente para quem tiver com dúvidas referentes a strings de conexão, na dúvida só visitar: http://www.connectionstrings.com/ lá tem tudo 😛 Exemplos de Strings de conexão:

  • Microsoft Access

Provider = Microsoft.Jet.OLEDB.4.0;Data Source =c:\seu_banco_mdb.mdb;Jet OLEDB:database Password=

  • SQL Server

Provider=SQLNCLI.1;Password=123456;Persist Security Info=True;User ID=seu_usuario;Initial Catalog= sua_base_de_dados;Data Source=seu_ip_ou_host\sua_instancia

  • Mysql
    • 3.51

    Driver={MySQL ODBC 3.51 Driver};Server=seu_ip;Database=sua_base;uid=seu_user;pwd=seu_pass

    • 5.1

    Driver={MySQL ODBC 5.1 Driver};Server=seu_ip;Database=sua_base;uid=seu_user;pwd=seu_pass

    • 5.2 ANSI DRIVER

    Driver={MySQL ODBC 5.2 Ansi Driver};Server=seu_ip;Database=sua_base;uid=seu_user;pwd=seu_pass Exemplo de utilização via código (VB6 e Access) o resto é parecido

    Dim conString As ADODB.Connection Dim obj_RS As ADODB.Recordset

    strConnect = “Provider = Microsoft.Jet.OLEDB.4.0;Data Source =” & caminho & “;Jet OLEDB:database Password=” conString.Open strConnect

    SQLu = “SELECT x from Y” Set obj_RS = conString.Execute(SQLu)

    Do while not obj_RS.eof

            cboID.AddItem obj_RS.Fields(“ID”).value

    ….. obj_RS.MoveNext

           blab la blab la …….

Boa sorte galera, qualquer coisa só avisar.

 

Gramática para os Nerds de Plantão

Publicado: 15 de agosto de 2013 em Diversos

Pessoal navegando por ai encontrei um site interessante, ótimo para quem quer aprender um pouco mais sobre sintaxe de comandos (DDL, DML e DCL). Boa leitura a todos.

SITE: http://www.h2database.com/html/grammar.html

Os comandos são voltados ao banco de dados H2 , mas uma boa parte esta no padrão SQL-92. 😀

Veja um exemplo abaixo , demonstrando a sintaxe do comando SELECT o resto está no site :-P.

querys

.

 

Rodei o comando e ai ?

Publicado: 14 de agosto de 2013 em Diversos

Quantas vezes você já se deparou com o seguinte problema: Rodei o comando e ai ?

Você  roda aquele comando, ou seja para backup ou para criação de índices ou qualquer outra coisa e o negócio fica ali processando horas e horas sem retornar um status, muitos ficam desesperados e agora ? ou então tenta cancelar  e rodar novamente ou até mesmo reinicia o serviço do SQL Server. Aliás muito cuida ao sair clicando nas coisas assim com o serviço vivo e rodando, principalmente em ambiente de produção.

Agora a questão é . Por que não ficar sabendo do status ? Não seria bem melhor se eu tivesse uma ideia de quando vai acabar ? Ou então quantos % faltam para acabar este processo ?

Bom vamos imaginar o seguinte cenário , um simples comando de backup como este abaixo

comandos_3

O resultado será este abaixo, agora e se a base de dados tivesse 200 GB quanto tempo teríamos que esperar ?

comandos_4

Pensando nisso coloco aqui um comando bem simples utilizando as próprias views de sistemas do SQL Server para obter um status do que acontece para que possa monitorar o andamento. Aqui é um imagem , mas no final do post coloquei o comando lá bem bonitinho 😛

comandos_2

O retorno de saída será:

comandos

Com isso já é possível ter uma boa ideia, além dos campos mostrado existem muitos outros campos que você pode utilizar para monitorar o que é executado no SQL Server vale a pena estudar e ver quais são os mais adequados para sua necessidade 😀

É isso ai galera espero , ter ajudado alguém com esta dica ;D. O Script segue abaixo 😀

SELECT
A.NAME as [Base de Dados]
, B.TOTAL_ELAPSED_TIME/60000 AS [Tempo de Execução]
, B.ESTIMATED_COMPLETION_TIME/60000 AS [Tempo Restante]
, B.PERCENT_COMPLETE as [% Completo]
, (SELECT TEXT FROM sys.dm_exec_sql_text(B.SQL_HANDLE))AS [Comando Executado]
, B.session_id as Seção
, B.start_time as Inicio
, B.command as [Comando Executado]
FROM MASTER..SYSDATABASES A, sys.dm_exec_requests B
WHERE A.DBID=B.DATABASE_ID and Name=’sua_base_de_dados’ and B.TOTAL_ELAPSED_TIME/60000 <> 0
ORDER BY percent_complete DESC,B.TOTAL_ELAPSED_TIME/60000 DESC