Monday 7 August 2017

Db2 Média Móvel


Esta é uma questão Evergreen Joe Celko. Ignoro qual plataforma DBMS é usada. Mas, em qualquer caso, Joe conseguiu responder há mais de 10 anos com o SQL padrão. Citação de Joe Celko SQL Puzzles and Answers: Essa última tentativa de atualização sugere que poderíamos usar o predicado para construir uma consulta que nos daria uma média móvel: a coluna extra ou a abordagem de consulta melhor. A consulta é tecnicamente melhor porque a abordagem UPDATE Desmoralize o banco de dados. No entanto, se os dados históricos que estão sendo registrados não mudem e o cálculo da média móvel é caro, você pode considerar usar a abordagem da coluna. Consulta SQL Puzzle: por todos os meios uniforme. Você apenas joga no balde de peso apropriado dependendo da distância do ponto de tempo atual. Por exemplo, quottake weight1 para datapoints dentro de 24 horas a partir do ponto de dados atual0.5 para pontos de dados dentro de 48hrsquot. Esse caso é importante quantos pontos de dados consecutivos (como 6:12 e 11:48) estão distantes um do outro. Um caso de uso que eu posso pensar seria uma tentativa de alisar o histograma sempre que os pontos de dados não forem suficientemente densos. 22:22 Não estou certo de que seu resultado esperado (saída) mostre uma média simples em movimento simples (rolando) por 3 dias. Como, por exemplo, o primeiro triplo dos números, por definição, dá: mas você espera 4.360 e é confuso. No entanto, sugiro a seguinte solução, que usa o AVG de função de janela. Essa abordagem é muito mais eficiente (clara e menos intensiva em recursos) do que a SELF-JOIN introduzida em outras respostas (e estou surpreso que ninguém tenha dado uma solução melhor). Você vê que o AVG está envolvido com o caso quando rownum gt p. days, em seguida, para forçar NULL s nas primeiras filas, onde 3 Day Moving Average não tem sentido. Respondeu 23 de fevereiro às 13:12. Podemos aplicar o método de junção externa suja esquerda de Joe Celkos (como citado acima por Diego Scaravaggi) para responder a pergunta como foi feita. Gera o resultado solicitado: respondeu Jan 9 às 0:33 Sua resposta 2016 Stack Exchange, IncDB2 10: Execute aplicativos Oracle no DB2 10 para Linux, UNIX e Motivação do Windows Desenvolva habilidades sobre este tópico Este conteúdo faz parte de um caminho de conhecimento progressivo para Avançando suas habilidades. Veja os fundamentos do DB2 para profissionais da Oracle: Migrando do Oracle para o DB2 Em março de 2009, em uma apresentação do Cebit que eu segurei no DB2, queimentei um alto-falante de computador de 110V que eu tinha inconscientemente ligado à grade de energia de 230V da Germanys sem usar um transformador. Na mesma viagem, eu também destruí o carregador para minha escova de dentes elétrica e minha cortadora de barba em incidentes semelhantes. Dada a minha incapacidade de aprender com os erros, não é surpresa que um dos meus provérbios favoritos (origem desconhecida) seja o seguinte: o problema com os padrões é que há muitos deles. No mundo dos sistemas de gerenciamento de banco de dados relacional (RDBMS), somos abençoados com pelo menos três padrões principais e inúmeras variações sobre aqueles: ANSI SQL e ANSI SQL / PSM Oracle SQL e PL / SQL Sybase e Microsoft174 TSQL Figura 1 ilustra com um Venn Diagrama como os dialetos SQL se sobrepõem. Figura 1. Confusão Babyloniana do SQL Sempre que você escreve um aplicativo, você deve escolher qual o fornecedor de RDBMS para utilizar. Depois de ter feito essa escolha, você está empenhado essencialmente. Qualquer tentativa de trocar fornecedores para aproveitar preços mais baixos, uma melhor tecnologia ou uma parceria melhor é frustrada pelo código legado que requer reescrita extensa antes que possa ser usado com outro RDBMS. Além disso, seu conjunto de habilidades não pode ser transferido de um produto para outro tão facilmente como seria de esperar. IBM174 DB2174 10 para Linux174, UNIX174 e Windows174 (DB2) reduz drasticamente as barreiras para aplicativos escritos para Oracle ao habilitá-los no DB2. Isso fornece aos clientes e fornecedores a capacidade de escolher um SGBD com base em seus méritos em vez do histórico do aplicativo. O DB2 10 inclui recursos de compatibilidade Oracle Para permitir que um aplicativo escrito para um RDBMS seja executado em outro praticamente inalterado, muitas peças devem cair no lugar. Diferentes mecanismos de bloqueio, tipos de dados, SQL, linguagem processual que residem no servidor e até mesmo as interfaces cliente usadas pelo próprio aplicativo precisam ser alinhadas não apenas na sintaxe, mas também na semântica. Todas essas etapas foram tomadas no DB2. As mudanças são a exceção, não a regra (você pode avaliar rapidamente as mudanças de aplicativos necessárias). A Tabela 1 fornece uma visão geral rápida dos recursos comumente usados. Tabela 1. Funcionalidades comumente usadas Descreve-se que não há razão semântica para que uma transação executada sob o isolamento do CS aguarde o resultado ao encontrar uma linha alterada. Um comportamento igualmente satisfatório é ler a versão atualmente comprometida da linha alterada. Esse comportamento foi implementado desde o DB2 9.7. O que acontece é que o DB2 simplesmente recupera a versão atualmente comprometida de uma linha bloqueada do log. Nos casos mais comuns, a linha ainda está no buffer de log porque a alteração ainda não foi confirmada. Mas mesmo que a linha tenha sido escrita e também tenha sido substituída no buffer de log, o DB2 sabe exatamente onde encontrá-lo, de modo que um único IO trará a versão desejada para o bufferpool. Conforme mostrado na Figura 2, imagine um usuário atualizando um nome em uma tabela de funcionários. Antes de o usuário ter cometido a alteração, outro usuário verifica essa tabela. Tradicionalmente, o segundo usuário teria que esperar para o primeiro usuário cometer ou reverter. Graças à leitura de dados atualmente comprometidos, a verificação do segundo usuário simplesmente recuperará a versão da linha do buffer de log que não contém as alterações dos primeiros usuários. Figura 2. Os escritores não bloqueiam os leitores É importante notar que esse comportamento: não apresenta novos objetos, como um segmento de reversão. Não há sobrecarga de desempenho para o escritor, uma vez que o registro precisa ser escrito de qualquer maneira. Não pode causar qualquer situação, como um instantâneo, muito antiga porque, no caso extremamente improvável de que o arquivo de log necessário foi arquivado (enquanto uma transação ainda estava aberta), o DB2 simplesmente recusaria e esperaria que o bloqueio fosse retirado. Além dessas mudanças, técnicas de prevenção de bloqueio adicionais foram introduzidas no DB2 para eliminar um leitor que possui um bloqueio sob o isolamento CS. A Tabela 4 mostra o novo comportamento de concorrência que o DB2 possui com o CS. Tabela 4. Novo comportamento de concorrência de DB2 com CS Como você pode ver, o comportamento de concorrência agora é idêntico ao de Oracle. De fato, qualquer banco de dados DB2 criado desde o DB2 9.7 exibe esse comportamento por padrão. Novos tipos de dados O coração de cada banco de dados são seus dados. Os tipos irregulares ou a semântica incompatível desses tipos podem afetar seriamente a habilidade de habilitar um aplicativo para outro RDBMS. Portanto, para permitir que os aplicativos Oracle sejam executados no DB2, é crucial apoiar seus tipos básicos não padronizados, como cadeias de caracteres, datas e números. Além de alinhar esses tipos básicos, existem outros tipos mais complexos que são comumente usados ​​em Oracles PL / SQL que estão disponíveis desde o DB2 9.7, conforme mostrado na Tabela 5. Tabela 5. Novos tipos de dados do DB2 Suporte para NUMBER e NUMBER (p, s ) Foi adicionado com base em DECFLOAT (com aceleração de hardware de energia) e DECIMAL. O comportamento do tipo VARCHAR2 inclui cadeias vazias sendo interpretadas como NULL e agrupamento sensível em branco. NCHAR, NVARCHAR2 e NCLOB Os tipos de caracteres nacionais fornecem suporte de string de dois bytes para bancos de dados Unicode. Um banco de dados no modo Oracle DATE inclui o componente TIME, além da data do calendário. A escala de frações de segundos pode ser escolhida entre 0 (tempo da data) até 12 (segundos pico). Esse tipo pode ser usado em lógica processual, variáveis ​​e parâmetros para rotinas. O suporte ARRAY em procedimentos foi estendido para suportar métodos de estilo VARRAY e sintaxe. Além dos arrays regulares, o DB2 também oferece suporte a matrizes associativas. Este tipo composto pode ser usado em variáveis ​​e parâmetros, e como um elemento para arrays e matrizes associativas. Ref Cursor type Cursors pode ser atribuído a variáveis ​​ou passado usando parâmetros. Criação implícita e resolução de tipos Se ele caminha como um pato, e fala como um pato, então ele deve ser um pato. Este é o mantra de muitas das novas linguagens, como PHP e Ruby. Cada literal é uma string e depois se usa como outro tipo com base no contexto. Em conformidade com o padrão SQL e seguindo uma filosofia de que um tipo de incompatibilidade provavelmente é uma indicação de um erro de codificação, o DB2 tradicionalmente seguiu regras de digitação fortes, onde as cadeias e números não podem ser comparados, a menos que um seja explicitamente convertido para o outro. Infelizmente, quando um aplicativo Oracle usa digitação fraca em seu SQL, esse aplicativo já não conseguiu compilar contra o DB2. Desde o DB2 9.7, o lançamento implícito (ou a digitação fraca) foi o padrão. Ou seja, as cordas e os números podem ser comparados, atribuídos e operados de forma muito flexível. Além disso, os NULL não tipificados podem ser usados ​​em muitos outros lugares, enquanto os marcadores de parâmetros não tipificados podem ser usados ​​em qualquer lugar, graças à preparação diferida. Ou seja, o DB2 não resolverá o tipo de marcador de parâmetro até ter visto o primeiro valor real. Para completar a moldagem implícita, o DB2 também suporta a inadimplência de parâmetros de rotina, bem como a associação de argumentos a parâmetros por nome. Biblioteca de funções integrada expandida no DB2 Todos os RDBMs fornecem bibliotecas de funções para operar nos dados. O problema é que nenhum deles usa os mesmos nomes para essas funções, mesmo que, no final, a funcionalidade seja muito semelhante. Além do seu próprio conjunto tradicional de funções, o DB2 agora oferece suporte a uma biblioteca compatível com a Oracle. A lista a seguir fornece uma visão geral rápida, mas não é de modo algum uma lista exaustiva: Funções de conversão e transmissão TOCHAR TOTAL TOCLOB TONUMBER TOSINGLEBYTE TOTIMESTAMP Cada uma dessas funções suporta um conjunto rico de strings de formatação compatíveis. A sobreposição grandemente aumentada nas funções suportadas entre os dois produtos implica um grande sucesso aprimorado, permitindo um aplicativo Oracle para o DB2. Suporte de dialetos Oracle SQL Este artigo, até agora, cobriu a concorrência, os tipos de dados, a digitação e as funções. Mas as diferenças entre Oracle e DB2 são mais profundas do que isso. O próprio tecido dos dialetos SQL, suas palavras-chave e semântica diferem em algumas áreas. Além disso, cada produto suporta alguns recursos que o outro simplesmente não faz. Quando esses recursos são populares, eles limitam a capacidade de enviar SQL comuns contra ambos os produtos, o que pode induzir muitos pequenos e grandes ajustes de idioma. A Tabela 6 lista alguns destaques. Tabela 6. Novo suporte SQL

No comments:

Post a Comment