Sunday, November 6, 2016

Sybase Iq Moving Average

Para obter um guia de quickref completo do QI, abrangendo IQ 15.4, vá para sypron. nl/iqqr. Introdução Como descrito na questão do quiz de abril de 2011. É relativamente simples usar funcionalidade de QI em ASE. Isso pode ser útil para áreas onde o IQ 15.x possui recursos SQL, mas o ASE não, por exemplo, com funções OLAP. A idéia básica aqui é que, se você tiver Sybase IQ disponível de qualquer maneira (com todas as licenças necessárias no lugar), você poderia usar a funcionalidade do CIS (para acesso remoto a dados através de proxy tables e RPCs) em ASE e IQ para permitir ASE usar IQ Específicas do SQL. Em resumo, é assim que funciona (detalhes completos são descritos abaixo): os dados reais reside em uma tabela ASE no IQ, uma tabela proxy é criada que mapeia para a tabela ASE no IQ, um procedimento armazenado é escrito que executa o ASE executa o procedimento armazenado IQ através de uma chamada de procedimento remoto (RPC) Antes de prosseguir, deve ser claro que usando uma tabela de proxy desta forma tem um monte de sobrecarga, e você deve Esperar uma penalidade de desempenho grave em comparação com a execução da mesma funcionalidade de QI nativamente dentro do IQ com os dados em tabelas de QI. Mas a idéia do truque aqui descrito é usar algumas das funcionalidades de IQ SQL para executar uma função que o ASE não poderia fazer, ou exigiria a implementação da funcionalidade manualmente no SQL no ASE. O preço que você paga por usar essa funcionalidade de QI é potencialmente uma perda de desempenho. Dito isto, a sobrecarga de desempenho no IQ 15.2 deve ser menor do que nas versões anteriores do IQ. Etapas de configuração Antes de chegar aos detalhes de configuração, vamos tomar como exemplo a necessidade de fazer algum processamento de estilo OLAP no ASE, como calcular o 6 - mês ponderada exponencialmente a média móvel sobre alguns dados de vendas mensais. IQ 15.1 contém a função OLAP expweightedavg () o que torna isso muito fácil - se só você pode descobrir como deixar ASE invocá-lo. Este é o esquema da tabela ASE que contém os dados reais: Antes de configurar os servidores ASE IQ, vamos supor o seguinte: o nosso servidor ASE (chamado MYASE) é executado na porta 5001 no servidor myasehost estava se conectando ao MYASE com o login myaselogin, com a senha myasepasswd (Sem as aspas) este usuário é assumido como dbo no banco de dados mydb nosso servidor IQ 15.1 (chamado MYIQ) é executado na porta 2639 no servidor myiqhost estavam se conectando ao MYIQ com o login myiqlogin, com a senha myiqpasswd (sem as aspas) Uma tabela de proxy no QI que aponta para a nossa tabela ASE mydb..mytable. Isto leva um par de etapas de configuração: Existem diferentes maneiras de configurar a tabela de proxy, e você poderia potencialmente executar em alguns problemas ao configurar as coisas (vá aqui para mais detalhes). Agora que podemos acessar dados ASE do IQ, o O próximo passo é escrever um procedimento armazenado IQ que calcula a média móvel, acessando os dados ASE através da tabela de proxy IQ. Este procedimento será iniciado a partir de ASE. Nós criamos o lado do QI agora. A parte restante é configurar ASE para que possamos iniciar o procedimento armazenado iqprocforase acima, que reside no IQ: A única coisa que falta agora é alguns dados de teste. Use esta consulta irá gerar rapidamente algumas linhas. E agora executar o procedimento armazenado IQ: Usando IQ Full Text Search em ASE Outro exemplo de usar recursos de IQ em ASE é com pesquisa de texto completo de QI. IQ 15.2 introduziu o novo recurso de pesquisa de texto completo, que executa funções de busca de texto, incl. Pesquisas de proximidade, em dados CLOB / long varchar. Usando a infra-estrutura ASE CIS, a funcionalidade de pesquisa de texto do IQ também pode ser usada dentro do ASE. Os detalhes são descritos no white paper técnico: Usando o Sybase IQ como um mecanismo de busca de texto para ASE (observe que a configuração descrita neste white paper é diferente da configuração acima, embora ambos usem recursos do CIS). Notas gerais A abordagem acima descrita também funciona para o QI 12.7. Observe que a função OLAP usada acima, expweightedavg (). Foi introduzido apenas no IQ 15.1 (assim como weightedavg () e um monte de outras funções estatísticas). Observe também que o recurso de pesquisa de texto completo foi introduzido no IQ 15.2. Notas sobre a conectividade de IQ para ASE No exemplo acima, estavam usando o driver asejdbc para configurar um mapeamento de servidor remoto para ASE (com o servidor de criação de comando IQ). Em princípio, é melhor usar o driver aseodbc, pois ele tem menos sobrecarga de desempenho do que asejdbc. Infelizmente, também é um pouco mais complicado de configurar do que com asejdbc por esse motivo, asejdbc foi usado para o exemplo. Vá aqui para obter detalhes completos sobre como configurar uma conexão ODBC em vez disso. A eficiência das tabelas de proxy criadas no QI foi melhorada significativamente no IQ 15.2. Você deve, portanto, ver menos impacto no desempenho ao usar o truque descrito nesta página no IQ 15.2 do que nas versões anteriores do iQ. Ao usar o asejdbc para configurar o mapeamento do servidor remoto no IQ, corri no seguinte erro ao conectar-se ao ASE (seu improvável youll atingiu o mesmo erro, mas apenas no caso.): O motivo do erro foi que o meu IQ 15.2 ESD2 Servidor usado jConnect versão 6 para o driver asejdbc, mas infelizmente não funcionou bem junto com os procedimentos armazenados para jConnect versão 7 que foram instalados no meu servidor ASE 15.5. Eu acredito que este problema foi corrigido agora, mas se você acertar esse erro de qualquer maneira, execute spversion em ASE para encontrar a versão jConnect mencionada para o script installjdbc, e compará-lo com a versão jConnect no diretório SYBASE para sua instalação de IQ (theres a JConnect-XY). No meu caso, o problema foi resolvido instalando o jConnect 6.0 procs armazenados em ASE executando manualmente o script ./jConnect-60/sp/sqlserver15.0.sql (no diretório de instalação do ASE). Notas sobre o procedimento armazenado IQ iqprocforase O procedimento armazenado IQ iqprocforase descrito acima usa uma tabela proxy para copiar os dados de ASE para uma tabela temporária no IQ. É muito possível que usando o comando IQ inserir .. localidade executa melhor, então você poderia preferir usar isso em vez disso. A razão pela qual uma tabela de proxy foi utilizada no exemplo acima é que é mais simples, uma vez que copia os nomes de coluna e tipos de dados da tabela ASE automaticamente. Kevin Sherlock gentilmente apontou que embora algumas das funções IQ OLAP não podem operar em tabelas de proxy, eles podem operar em uma tabela derivada. A vantagem disso é que você não precisa da instrução select-in adicional para copiar da tabela proxy para a tabela temporária IQ local (e nem você tem que descartar essa tabela temporária). A única coisa é que você precisa de um truque para fazer o trabalho de tabela derivada, desde youd obter um erro se você acabou de colocar a tabela de proxy em uma cláusula de tabela derivada da seguinte forma: from (select year, month, sales from aseproxytab) as derivedtb. Como mais freqüentemente no QI, você precisa ser um pouco persuasivo, fazendo uma tabela IQ regular parte da consulta aqui, estou usando a tabela iqdummy 1-row para isso (como a documentação QI muitas vezes usa-se): O iQ armazenado procedimento iqprocforase Acima envia sua saída para o cliente. Não é difícil alterá-lo de forma que ele escreve seus resultados de volta para uma tabela em ASE vez. Abaixo está uma versão melhorada do procedimento que leva um parâmetro adicional especificando a tabela ASE onde os resultados devem ser colocados. O procedimento IQ criará automaticamente uma tabela de proxy para esta tabela ASE e inserirá os resultados lá. Observe que a tabela de resultados deve existir no ASE antes de chamar o procedimento QI obviamente, você deve garantir o número de colunas e os tipos de dados estão corretos para o conjunto de resultados inserido nele.


No comments:

Post a Comment