Pergunta

Existem vantagens da utilização de instalações de passagem SQL junto com SAS?

Foi útil?

Solução

Embora esta questão é muito ampla, posso dar uma resposta excessivamente ampla.

O pass-through SQL no SAS permite que você se comunique diretamente com um banco de dados. Isto torna-se muito vantajoso quando você estiver usando funções específicas de banco de dados. Um exemplo seria funções estatísticas da Oracle. Você não tem que se preocupar sobre como SAS vai lidar com a sua codificação ou traduzir o seu SQL.

Além disso, ele também tem sido um benefício para nós que pass-through SQL requer muito pouco processamento no lado do SAS. Se você tiver uma caixa de SAS extremamente ocupado, você pode optar por enviar a lógica de processamento diretamente ao banco de dados. Isso é possível sem usar passagem SQL, mas você tem um maior grau de controle quando utiliza-lo.

Esta é de nenhuma maneira uma lista exaustiva de benefícios, simplesmente alguns alto nível vantagens para usando pass-through SQL. Se você tem um caso de uso mais concreto, podemos discutir as diferenças específicas em técnicas de codificação.

Outras dicas

PROC SQL vai tentar passar o máximo de lógica, uma vez que pode para o banco de dados, mas há várias vezes que ele não pode. Usando funções SAS que não têm equivalente no banco de dados (ou no motor SAS / ACCESS para o banco de dados), irá evitar passar toda a consulta ao banco de dados. Quando a consulta não está completamente passado para o banco de dados, em seguida, os dados são puxados para SAS e processadas lá. Quanto mais complicado o seu SQL é o mais provável que ele vai acabar sendo processado no SAS. Aqui está um caso que faz uma diferença maior do que você imagina.

libname db <database> path=dbserver user=... password=...;
proc sql;
   create table db.new as
   select * from db.largedata where flag=1;
quit;

Isso vai realmente (pelo menos através de SAS 9.1.3) puxar todos os dados que correspondam flag = 1 até SAS e, em seguida, carregá-lo de volta para o banco de dados. Ele é milhões de linhas realmente fica mais lento.

Você iria encontrar passagem explícita através de muito mais rápido neste caso.

proc sql;
   connect dbase (server=dbserver user=... password=...);
   execute (create table db.new as
   select * from db.largedata where flag=1) as dbase;
   disconnect dbase;
quit;

Eu fiz recentemente um exemplo usando o Oracle e uma mesa com cerca de 250.000 linhas. A primeira maneira levou 20 segundos ea segunda maneira de 2 segundos.

Se você não usar o pass-through, então você tem que importar todos os registros (que você precisa para o processamento) do banco de dados para sas. Ao utilizar o pass-through, você pode ter algum processamento feito no lado do banco de dados e trazer mais apenas os registros resultantes em sas. A diferença (em termos de tempo de processamento e uso de rede) pode muito, desde pequeno a grande, dependendo do que você faz.

Há vantagens de se utilizar passthrough, mas isso depende do que você está tentando realizar. Geralmente, eu uso SQL proc padrão sem o repasse ao fazer consultas. Recentemente, no entanto, eu usei-o para gerar alguns procedimentos armazenados.

proc sql;
    connect to mysql(user = 'xxxxx' pass = 'xxxxx' server = 'localhost');
        execute(set @id = &id.) by mysql;
        execute(select (@lit:=image_text) from quality.links_image_text where image_id = @id) by mysql;
        execute(set @lidx = locate('ninja',@lit)) by mysql;
        execute(set @lidx2 = locate(' ',@lit,@lidx)) by mysql;
        execute(set @lidxd = @lidx2 - @lidx) by mysql;
        execute(set @lf = substr(@lit,@lidx,@lidxd)) by mysql;

        create table asdf as
        select &id. as id, a as ws from connection to mysql
        (select @lf as a)
        ;
    disconnect from mysql;
quit;

Claramente, isso não é algo que pode ser feito fora de passagem (pelo menos não que eu saiba). Então, sim ... tudo depende do que é que você está tentando realizar.

Simplificando, SQL pass-through declarações lhe dar mais controle sobre o que é enviado para o banco de dados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top