Lendo Azure Blob Storage através do SQL Server 2016 com T-SQL

Fala galera, o Polybase é mais uma das coisas interessantes que foi lançado no segmento de Big Data e Data Science do SQL Server 2016. Ele nos dá a possibilidade de ler dados diretamente de uma base Hadoop ou de um arquivo armazenado no Azure Blob Storage. Neste post vou mostrar como configurar e disparar consultas escritas em T-SQL de dentro do SQL lendo dados de um arquivo CSV que está no Blob Storage. Lembrando que para isso é necessário que você tenha um subscription ativa no Azure, tanto para replicar este experimento no Azure Blob Storage e/ou um cluster do Hadoop. No meu caso vou usar um arquivo que subi em um contêiner do Azure Blob Storage, mas poderia ser em um cluster do Hadoop dentro do HDInsight que também funcionaria. Num próximo post, quando o tempo permitir, mostrarei funcionando também no HDInsight.

Pré Requisitos e Instalação

Para replicar estas técnicas no seu ambiente, é necessário que tenha baixado o SQL Server 2016 CTP 3 e também o Java Runtime 7. Um ponto importante durante a instalação é que isso que estou mostrando é público com o SQL Server 2016 CTP 3. Pode ser que na versão final do SQL Server 2016 isso seja diferente, mas até o lançamento, dá pra gente usar o recurso desta forma.

Durante a instalação é preciso que você garanta a seleção da instalação do PolyBase Query Services for External Data. Este recurso do SQL 2016 exige o Java Runtime 7 porque o motor do Hadoop roda em cima do Java. Caso você não tenha o Java instalado, ele vai pedir para você instalar e lhe dará um link para fazer o download. Baixe e conclua a instalação do Java antes de terminar a do SQL.

Depois de concluir a instalação, abra o SQL Server 2016 e vamos fazer a configuração do ambiente para permitir os acessos.

Configuração do ambiente

Depois de tudo instalado, é hora de configurar o ambiente para recuperar dados do Hadoop ou Azure Blob Storage e mostrar diretamente no seu SQL 2016. É necessário criar uma base de dados para armazenar a tabela externa que por sua vez receberá os dados. Fique à vontade para criar um banco vazio ou usar um já existente. No meu caso de exemplo, criei um chamado PolybaseAzure.

CREATE DATABASE PolybaseAzure
GO

USE PolybaseAzure
GO

 

Lembra que na instalação você marcou a caixa do Polybase? Então, é hora de habilitar este recurso no seu SQL 2016. Faça isso utilizando o comando T-SQL abaixo. Lembrando que o parametro 7 permite ler um arquivo do Azure Blob Storage e o parametro 6 é para ler do Hadoop (no nosso caso, como é no Azure então é diretamente do HDInsight).

exec sp_configure 'hadoop connectivity', 7
Reconfigure
Go

sp_configure
go

Confira se o recurso do Hadoop Connectivity está configurado com o parametro que quer ler (6 ou 7).

Reinicie o SQL Server 2016, e garanta que também reiniciaram os serviços SQL Server PolyBase Engine e SQL Server PolyBase Data Movement Service.

Configurando o Polybase

Depois da configuração macro no servidor, é preciso configurar o Polybase na base de dados para ler os dados externos. Vamos fazer isso agora.

Usaremos aquele banco de dados criado anteriormente para ter objetos que armazenarão as credenciais necessárias para se conectar ao Azure Blob Storage e recuperar os dados de lá. Neste banco de dados ficarão:

  • Chave de acesso ao seu Azure Blob Storage
  • Origem de dados Externa
  • Arquivo Externo

Garanta que está no banco correto, e então execute o código abaixo:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'coloque sua senha aqui'
go

Este código cria uma senha master no banco. Lembrando que esta senha master não é do database de sistema master, é para o banco de dados que você criou (ou está usando um já existente). Não esqueça de colocar uma senha neste código antes de executar.

Depois de criada a senha master, é preciso colocar a chave de autenticação do Storage do Azure, para poder acessar os dados dentro dele. Esta chave fica nas configurações do Blob Storage, acesse o seu portal, vá até o item Storage (Armazenamento) no menu da esquerda e procure o seu Storage. Ao acessar, vá até o painel e no meu inferior procure as chaves de acesso, copie a chave primária.

Com essa chave em mãos, substitua ela no código T-SQL abaixo e execute. Pode deixar o usuário que está como ‘user’ desta forma, não precisa mexer nisso.

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = 'user', 
SECRET = 'chave de segurança do Azure'
GO

Select * from sys.database_credentials
GO

Se a configuração funcionou corretamente, você terá um resultado como o abaixo:

O passo seguinte é criar uma origem de dados externa. Faça isso com o código abaixo.

Lembre-se de colocar o nome do container e do storage, sem os sinais de menor “<” e maior “>”. No meu exemplo, o storage tem o nome blognogareml e o contêiner é ssis. A construção do caminho ficou assim: wasbs://ssis@blognogareml.blob.core.windows.net

CREATE EXTERNAL DATA SOURCE AzureStorage
WITH (
TYPE = Hadoop,
LOCATION = 'wasbs://<nome do container>@<nome do storage>.blob.core.windows.net',
CREDENTIAL = AzureStorageCredential)
GO

select * from sys.external_data_sources
GO

Acompanhe no seu Object Explorer surgir um item dentro do banco de dados PolybaseAzure >> External Resources >> Data Sources. É a origem de dados externa que será consultada.

Da mesma forma que criou a origem de dados externa, vamos criar agora um apontamento para uma estruturação de arquivo. Ajuste o Field Terminator para o caracter que você usou pra separar os seus campos no arquivo que quer ler (neste caso é a tabulação). Execute o código abaixo:

CREATE EXTERNAL FILE FORMAT ArquivoPorTab
WITH (
FORMAT_TYPE = DelimitedText,
FORMAT_OPTIONS (FIELD_TERMINATOR = '\t'))
GO

select * from sys.external_file_formats
GO

Veja o resultado da execução da consulta na tabela de arquivos externos.

Mais uma vez acompanhe no Object Explorer o objeto que foi criado.

Acessando os dados externos

Para receber estes dados do Hadoop ou do Azure Blob Storage, é necessário criar uma tabela que faça a referência externa necessária. Complete o código abaixo com o seu caminho do arquivo do Blog Storage e execute. O que você precisa garantir é que o caminho do seu arquivo esteja no LOCATION, o nome da origem de dados externa que criamos a pouco esteja no DATA_SOURCE e o apontador pra estrutura do arquivo externo esteja no FILE_FORMAT.

CREATE EXTERNAL TABLE Municipios
(Ano varchar(5)
, ufid varchar(5)
, uf varchar(50)
, municipioid varchar(15)
, municipio varchar(200)
, regiaometropolitana varchar(200)
, mesorregiaoid varchar(15)
, mesorregiao varchar(200)
, microrregiaoid varchar(15)
, microrregiao varchar(200)
, valoragropecuaria varchar(20)
, valorindustria varchar(20)
, valorservicos varchar(20)
, valoradministracao varchar(20)
, valorimpostos varchar(20)
, pibcorrente varchar(20)
, populacao varchar(20)
, pibpercapita varchar(20))
WITH (
LOCATION='/dadosBrutos.csv',
DATA_SOURCE=AzureStorage,
FILE_FORMAT=ArquivoPorTab )
GO

Você pode verificar as duas estruturas de tipos de tabelas, tanto as internas quanto as externas, através dos códigos abaixo:

select * from sys.tables
select * from sys.external_tables

Lembre-se que a tabela externa gerencia a tabela interna. Ao criar uma tabela externa, ela também cria automaticamente a tabela interna. A exclusão da tabela externa também exclui a tabela interna. É importante lembrar disso para não ter surpresas em seus ambientes.

Se tudo foi configurado corretamente, ao executar o código abaixo você terá os dados no seu SQL Server 2016 vindo diretamente do Azure Blob Storage ou do Hadoop. Isso só dependerá das configurações que você fez.

SELECT top 10 *   FROM [PolybaseAzure].[dbo].[Municipios]

Veja o resultado.

Tendo acesso ao cluster Hadoop e ao Azure Blob Storage de dentro do SQL Server 2016 fica muito mais tranquilo para trabalharmos com Big Data em um ambiente próximo da nossa realidade diária. As consultas aqui serão feitas através de códigos T-SQL e não Hive-QL. Isso faz a nossa curva de aprendizado para trabalhar com Big Data bem menor, porque podemos evitar de usar outras linguagens para consultas simples de nossos dados externos.

Caso queira rodar o código inteiro, é este (você precisará ajustar algumas coisas com os seus dados de credenciais):

exec sp_configure 'hadoop connectivity', 7
Reconfigure
Go

sp_configure
go

/****************/
CREATE DATABASE PolybaseAzure
GO

USE PolybaseAzure
GO

/****************/
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MinhaSenhaSegura@SQL2016&'
GO

CREATE DATABASE SCOPED CREDENTIAL AzureStorageCredential
WITH IDENTITY = 'user', 
SECRET = 'chave_do_storage_azure'
GO

SELECT * FROM sys.database_credentials
GO

/****************/
CREATE EXTERNAL DATA SOURCE AzureStorage
WITH (
TYPE = Hadoop,
LOCATION = 'wasbs://contêiner_do_azure@storage_do_azure.blob.core.windows.net',
CREDENTIAL = AzureStorageCredential)
GO

select * from sys.external_data_sources
GO

/****************/
CREATE EXTERNAL FILE FORMAT ArquivoPorTab
WITH (
FORMAT_TYPE = DelimitedText,
FORMAT_OPTIONS (FIELD_TERMINATOR = '\t'))
GO

select * from sys.external_file_formats
GO

/****************/
CREATE EXTERNAL TABLE Municipios
(Ano varchar(5)
, ufid varchar(5)
, uf varchar(50)
, municipioid varchar(15)
, municipio varchar(200)
, regiaometropolitana varchar(200)
, mesorregiaoid varchar(15)
, mesorregiao varchar(200)
, microrregiaoid varchar(15)
, microrregiao varchar(200)
, valoragropecuaria varchar(20)
, valorindustria varchar(20)
, valorservicos varchar(20)
, valoradministracao varchar(20)
, valorimpostos varchar(20)
, pibcorrente varchar(20)
, populacao varchar(20)
, pibpercapita varchar(20))
WITH (
LOCATION='/dadosBrutos.csv',
DATA_SOURCE=AzureStorage,
FILE_FORMAT=ArquivoPorTab )
GO

/****************/
select * from sys.tables
select * from sys.external_tables

/****************/
SELECT TOP 10 [Ano]
      ,[ufid]
      ,[uf]
      ,[municipioid]
      ,[municipio]
      ,[regiaometropolitana]
      ,[mesorregiaoid]
      ,[mesorregiao]
      ,[microrregiaoid]
      ,[microrregiao]
      ,[valoragropecuaria]
      ,[valorindustria]
      ,[valorservicos]
      ,[valoradministracao]
      ,[valorimpostos]
      ,[pibcorrente]
      ,[populacao]
      ,[pibpercapita]
  FROM [PolybaseAzure].[dbo].[Municipios]

Divirta-se com o SQL 2016 e as consultas externas J

0  

Muito obrigado, Minha Vida!

Fala galera, depois de 3 anos trabalhando curtindo o dia-a-dia do Grupo Minha Vida, não estou mais trabalhando pra eles. Infelizmente a crise que estamos passando no Brasil também chegou lá e pediu ao grupo para que se adequasse ao péssimo cenário nacional causado pela incompetência política.

Mesmo assim, este ano de 2015 foi especialmente um tesão pra mim, trabalhamos e entregamos muita coisa de impacto em diversas áreas, principalmente na área nutricional da unidade de negócios. Alguns dos principais projetos usando técnicas de Data Science e Machine Learning aplicadas à nossa necessidade que entregamos nestes últimos meses:

  • Permitir que alimentos considerados mistura (não os pratos bases) pudessem ser trocados por outras misturas. Pra isso usamos um conjunto de técnicas de aprendizado supervisionado de Machine Learning onde a equipe nutricional nos disse em uma amostra do universo de alimentos que existe na base do Dieta e Saúde, o que era mistura e o que não era com uma assertividade maior que 99%. Com algoritmos de Data Science ensinamos isso para o computador, ele replicou para o resto da base e com isso foi possível classificar todo o universo de alimentos existente na base de dados.

     

  • Através de dados nutricionais existente nos alimentos foi possível classificar e segmentar os 12 principais grupos alimentares (carnes, leites, verduras, frutas, etc). Depois de mais de 1 mês pesquisando e cruzando possibilidades com a equipe nutricional, conseguimos chegar num modelo preditivo satisfatório. Então foi possível inserir a informação nutricional de um alimento, e independente do nome, este alimento passa a ser classificado dentro de um daqueles 12 grupos alimentares com uma taxa de acurácia acima de 85%. Sim, com isso pudemos expandir para outros países e conseguir montar uma alimentação saudável lá independente do nome do alimento, só usando as informações nutricionais. Num primeiro momento foi o México que recebeu o aplicativo do “Dieta y Salud”, mas com isso, pode-se ir para o Azerbaijão que a informação nutricional vai classificar o alimento.

 

  • Montamos uma lista de compras baseada em diversos Score Cards que definimos com base na experiência do usuário no aplicativo, com isso permitimos um aproveitamento de alimentos para o usuário não gastar dinheiro que não precisa no supermercado. Até a ordem das coisas segue uma lógica igual às dos grandes mercados. Isso ficou muito bom, inclusive foi combinado com informações de sazonalidade da disponibilidade do alimento, permitindo uma elaboração de cardápio real e com alimentos existentes.

 

Implementamos também o PowerBI e o Datazen para nossos tomadores de decisão. O Alexandre Tarifa (ASP .Net MVP e diretor de tecnologia do grupo) estava fazendo alguns testes com o PowerBI e chegou a colocar mais de 1.5 bilhão de linhas dentro do aplicativo, e este respondeu sem problemas…

Também fizemos uma iniciativa de colaboração conjunta com a FIAP e com o Instituto Colabore, onde trouxemos 13 alunos da FIAP para dentro do Minha Vida durante as férias do meio do ano, ficamos 2 semanas com eles trocando experiências e vivências reais. Na primeira semana trabalhamos em disciplinas que usamos diariamente nas empresas, e trabalhamos em um hackathon para o Instituto Colabore na segunda semana. Foram duas semanas foda, a galera da FIAP é muito empenhada e dedicada, teve dia de sairmos do Minha Vida depois da meia noite, e a galera ainda estava empolgada com o que estávamos fazendo. Grupo de alunos excepcionais!

Nossas conquistas com Machine Learning e Data Science foram tão impactantes para nosso business, que tivemos a honra de mostrar isso nos dois maiores eventos de tecnologia Microsoft no Brasil. Em Maio fizemos uma participação (o Alexandre Tarifa e eu apresentamos a solução) no Keynote do //Build, e em Setembro também foi apresentado no Keynote do TechEd, nesta ocasião não fomos nós que apresentamos, mas foi nossa solução.

Muito obrigado a todos que permitiram que estas coisas acontecessem!

Hoje quando fui pegar minhas tralhas lá no escritório, peguei as duas mochilas cheias de livros e apostilas que usava frequentemente, e no caminho de volta pra casa senti um leve vazio dentro do peito. Deixar de trabalhar no Minha Vida não é fácil, o ambiente de trabalho e, principalmente, as pessoas são incríveis. Sentirei saudades, com certeza. Minha Vida, vocês são foda!!!

5  

Open Data Science Conference – São Francisco/2015

Fala galera, no fim de semana dos dias 14 e 15/Novembro estive em São Francisco para acompanhar o evento Open Data Science Conference. Este evento já aconteceu em Boston também em 2015 e a agenda pra 2016 é que aconteça em mais alguns lugares aqui dos Estados Unidos e também vá para Inglaterra e Japão. A localização do evento é ótima, ao lado do aeroporto de São Francisco, isso facilitou demais a logistica pra quem veio de fora.

O evento foi MUITO superior ao que esperava, a estrutura do evento foi impecável. As salas comportaram todos os participantes, workshops e palestras relevantes, interação com os patrocinadores ocorreu naturalmente por serem patrocinadores com importância pro evento e pra nós, participantes. No fim do primeiro dia tivemos um momento pra fazer network (com cerveja na faixa!) no hotel mesmo, e foi interessante conversar com alguns cientistas de dados aqui dos Estados Unidos.

Fiz algumas anotações das palestras/workshops que achei mais interessantes durante o evento, veja abaixo:

Dia 1 – Sábado

Keynote

Brian Granger – Criador do IPython e Project Jupyter

O Jupyter é um compilador/interpretador online para Python (e mais 40 outras linguagens) que permite trabalhar em soluções narrativas com outros profissionais. Parecido com o Knirt (para R), mas ao invés de só renderizar na tela no formato escolhido, ele permite que o script que é escrito seja processador pelo server através do navegador. Jupyter é uma plataforma aberta, desenvolvida pela comunidade e com um time de estrelas por trás, a facilidade do crescimento se dá pelo uso do GitHub como repositório. Empresas como Microsoft, Google, IBM e varias outras estão desenvolvendo soluções para o Jupyter Notebook ou Kernel. JupyterHub permite empresas usar o Jupyter em suas organizações (pelo que entendi, como um repositório privado do github). Num futuro próximo pode ser que mude o nome para Jupyter Workbench, e também estão trabalhando para entregar Real-Time Colaboration, e na tentativa de permitir em uma única janela do navegador ter um console, graficos interativos, e várias outras coisas de UX para os desenvolvedores ficarem só em uma janela e aumentar a produtividade.

O Brian deu um exemplo de dois jornalistas que escrevem sobre ciência no BuzzFeed, que entregam seus experimentos no github e permite que nós possamos reproduzir as pesquisas. Caso queiram ver, este é o link: https://github.com/BuzzFeedNews/everything

 

Palestras

Claudia Perlich – Big Data matou o click | heróis de métricas não celebrados

40% dos clicks são acidentais ou fraudes! Fraudes são fáceis de gerar através de robos (bots) em eventos de conversão, principalmente nos retargets para aumentar o CTR e o contratante pagar mais pelo serviço. O comportamento de robos são mais fáceis de prever do que humanos, nosso comportamento é quase impossível de prever. Em uma análise focada, quando se analisa um dataset atrás de padrão de comportamento, deve-se conhecer o que procura para eliminar problemas gerados por randomização. Quando se tem uma precisão/acurácia de aproximadamente 50%, isso significa uma randomização. O objetivo é conseguir um valor de limiar acima de 70 ou 80%. Uma técnica que pode ajudar, é coletar para análise alguns registros randomicamente dos 1 ou 2% mais importantes do universo que tem, e analisar o comportamento desta amostra. A chance desta técnica apresentar um padrão de comportamento diferente do comportamento geral é muito grande, e diversos estudos mostram que este comportamento pode ser mais próximo do real do que se imagina.

 

Richard Socher, PhD – Metamind.io – Deep Learning for Enterprise

Esta foi a palestra mais foda e que eu mais me impressionei. Richard apresentou diversos problemas do mundo e as soluções que sua empresa criou utilizando Deep Learning. Esta palestra me fez mudar a agenda e participar de um Workshop de Deep Learning no segundo dia do evento ao invés de assistir às palestras que tinha me planejado. Não sei como descrever as técnicas que ele apresentou, e não teve quase nenhuma teoria, só que o reconhecimento de voz e de imagem são complexos para se executar com algoritmos convencionais de Data Science. O uso de técnicas de Deep Learning ajuda muito nestas tarefas. Processar isso é muito custos e usa-se o CPU pra procesamento de texto e a GPU pra processar imagens.

 

Workshop

John Mount / Nina Zumel – Preparando dados para análise usando R: Técnicas avançadas através das básicas

Workshop de 2 horas com diversas técnicas para se trabalhar com dados, limpar e processar as análises. Foi disponibilizado um repositório no github pra gente configurar a máquina antes e acompanhar o workshop com tudo o que foi discutido (repo garfado): https://github.com/diegonogare/PreparingDataWorkshop

 

Dia 2 – Domingo

Workshop

Markus Beissinger – Intro to Deep Learning with Theano and OpenDeep

Deep Learning segmenta a análise em hierarquia, encontrando item a item treinado separadamente para encontrar o objeto que quer depois. Por exemplo, imagine o reconhecimento de um rosto: em Deep Learning a tecnica começa com uma camada reconhecimento elementos separados, como nariz, orelha, olho, boca, etc; na sequencia a proxima camada reconhece um pouco mais de coisas, como as posições de olhos próximos ao nariz. Boca próximo ao nariz. Orelhas ao lado dos olhos, e assim por diante. Por fim, neste exemplo, ele consegue reconhecer um rosto completo em uma terceira camada de classificação.

O processo interno usa algebra linear, porque tudo dentro de Deep Learning é calculado com matrizes e vetores. Um dos calculos mais básicos ainda é a Regressão Logistica para analisar as probabilidades.

Mesmo a Regressão Logistica sendo a estrutura mais básica, uma das mais usadas é a Rede Neural, que possibilita executar muitas Regressões Logisticas em paralelo e encontrar uma melhor solução para a análise que está fazendo com Deep Learning. Muitas outras técnicas, como Convolutional Nets, por exemplo, devem combinar com as redes neurais artificiais para conseguir fazer o reconhecimento de imagem.

Códigos usados para os exemplos, estão disponíveis nestes dois repositórios garfados https://github.com/diegonogare/odsc e https://github.com/diegonogare/OpenDeep

 

Fidan Boylu / Muxi Li – How to build and operationalize data science solutions with Cortana Analytics

Fidan apresentou um overview interessante de AzureML utilizando alguns modelos nativos de algoritmos existentes dentro do AzureML, avançou expandindo as possibilidades utilizando R. Um tour guiado para analisar dados que fizemos upload, com certeza todos conseguiram acompanhar. Na sequência Mixu mostrou integração entre AzureML e scripts em Python, analisando tudo nos Workbooks do Jupyter que possui integração com o AzureML. Esta segunda parte eu não acompanhei, e pelo visto, a galera que estava acompanhando também se perdeu.

PS. Não falaram nada de Cortana Analytics! :(

Dá pra acompanhar depois, passo a passo, com os dados que foram disponibilizados neste repositório garfado: https://github.com/diegonogare/Azure-Machine-Learning-Lab

 

Ted Kwartler – Introduction to text mining using R

Existem muitos problemas na interpretação de texto: O dado não é estruturado, expressões são individualistas, implicações culturais, e vários outros fatores. É possível trabalhar com Text Mining de duas formas, uma é usando validação sintatica e outra é usando “bag of words”. O foco desta sessão é trabalhar com o bag of words. A análise de sentimentos é sempre lembrada quando se fala de mineração de texto, o Ted ainda está estudando esta disciplina e mostrou algumas coisas utilizando técnicas de Score baseada em dicionários. Em resumo, várias técnicas foram apresentadas, e podem ser acompanhadas no repositório do Github que garfei, não do github do Ted, e sim de uma pasta no Amazon Drive dele: https://github.com/diegonogare/DataScience/tree/master/Text%20Mining

0  

Introdução ao SQL Server R Services 2016

Fala galera, uma das novidades do SQL Server 2016 é a possibilidade de executar scripts da linguagem R internamente na plataforma de dados da Microsoft. Isso avança mais um passo dentro da abordagem deles para a área de Big Data e Data Science, que já possui coisas como o HDInsight, PowerBI, Datazen, Data Lake e outros. Aqui vou mostrar como instalar os pré-requisitos e configurar o R dentro do CTP3 – Community Technology
Preview – do SQL Server 2016. Pode ser que isso mude até a versão final, mas até lançarem, dá pra brincar com o R seguindo estes passos…

 

Pré-Requisitos

SQL Server 2016 CTP 3 (2.7GB)

Revolution R Open 3.2.2 for Revolution R Enterprise 7.5.0 (60MB)

Revolution R Enterprise 7.5.0 (RRE-7.5.0) (470MB)

Instalação

O primeiro passo é instalar o SQL Server 2016 CTP 3, lembrando de habilitar o recurso de Advanced Analytics Extensions.

Depois de concluir a instalação, é necessário instalar o Revolution R Open 3.2.2 for Revolution R Enterprise 7.5.0 e em seguida Revolution R Enterprise 7.5. Estas ferramentas são, respectivamente, a distribuição do R com o runtime e algumas bibliotecas, e, um grupo de melhorias nos pacotes que oferece suporte de alta performance á diversas origens de dados.


Da parte de instalação é só isso, agora faltam só mais alguns passos de configuração e o R começará a responder de dentro do SQL Server.

Configuração

Pode parecer complexo pra quem vê a primeira vez, mas é bem simples. A primeira coisa é habilitar a execução de scripts externos no SQL Server que por padrão, vem desabilitado. Você pode verificar isso chamando o código SP_CONFIGURE.

Para habilitar, execute o código abaixo:

Exec sp_configure 'external scripts enabled', 1;
reconfigure;

O resultado deve ter mudado a linha do External Scripts Enabled, que agora está habilitado.

Depois de habilitar a execução de scripts externos no SQL Server, é necessário registrar um daqueles serviços externos que foram instalados, é o serviço do Revolution R Open. Para isso, abra um prompt de comando com privilégios de admin e vé até o caminho que fez a instalação do RRO. No meu caso foi neste caminho (provavelmente você precisará editar isso para que funcione no seu servidor).

c:\Program Files\RRO\RRO-3.2.2-for-RRE-7.5.0\R-3.2.2\
library\RevoScaleR\rxLibs\x64>

Procure um executável chamado registerRext.exe e passe a instrução de instalar. Como eu renomeei a minha instância para SQL2016, eu também precisei passar o nome da instância para o executavel. Ficou assim:

c:\Program Files\RRO\RRO-3.2.2-for-RRE-7.5.0\R-3.2.2\
library\RevoScaleR\rxLibs\x64>registerRext.exe /install /instance:SQL2016

 

Ele executa um monte de instalações e registros internos, olha o resultado do prompt de comando depois dos registros:

Source directory to pick the RExtension binaries determined to be “c:\Program Files\RRO\RRO-3.2.2-for-RRE-7.5.0\R-3.2.2\library\RevoScaleR\rxLibs\x64\”.

Connecting to SQL server…

Sql server binn directory is “C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Binn”.

Sql server log directory is “C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Log”.

Creating user account pool…

Creating user accounts.

Processing 20/20

Adding firewall rule for user account pool.

***WARNING: For security reasons, it is recommended to block network access for

R processes executing under local user accounts. It appears that Windows Firewall is currently disabled for the Network Profiles DOMAIN, PRIVATE. Please enable Windows Firewall or use another firewall to block network access

Creating working directory for user accounts.

Saving user account configuration.

User account pool with 20 users created.

R installation found at C:\Program Files\RRO\RRO-3.2.2-for-RRE-7.5.0\R-3.2.2.MPI installation found at C:\Program Files\Microsoft MPI.

Settings file C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Binn\rlauncher.config created.

Stopping service MSSQLLaunchpad$SQL2016…

Stopping service MSSQL$SQL2016…

Copied xp_callrre.dll from c:\Program Files\RRO\RRO-3.2.2-for-RRE-7.5.0\R-3.2.2\library\RevoScaleR\rxLibs\x64\ to C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Binn.

Copied RLauncher.dll from c:\Program Files\RRO\RRO-3.2.2-for-RRE-7.5.0\R-3.2.2\library\RevoScaleR\rxLibs\x64\ to C:\Program Files\Microsoft SQL Server\MSSQL13.SQL2016\MSSQL\Binn.

Starting service MSSQLLaunchpad$SQL2016…

Connecting to SQL server…

Created role db_rrerole

Added extended stored procedure xp_ScaleR_init_job.

Granted Execute for extended stored procedure xp_ScaleR_init_job to db_rrerole.

Added extended stored procedure xp_ScaleR_queue_job.

Granted Execute for extended stored procedure xp_ScaleR_queue_job to db_rrerole.

Added extended stored procedure xp_ScaleR_retrieve_results.

Granted Execute for extended stored procedure xp_ScaleR_retrieve_results to db_rrerole.

Added extended stored procedure xp_ScaleR_query_status.

Granted Execute for extended stored procedure xp_ScaleR_query_status to db_rrerole.

Added extended stored procedure xp_ScaleR_cancel_job.

Granted Execute for extended stored procedure xp_ScaleR_cancel_job to db_rrerole.

Added extended stored procedure xp_ScaleR_cleanup.

Granted Execute for extended stored procedure xp_ScaleR_cleanup to db_rrerole.

R extensibility installed successfully.

Agora só falta reiniciar o serviço do SQL Server.

Primeira execução!

Agora é momento de abrir o SQL Server 2016 e executar o seu código em R. Peguei um código já criado aqui no blog anteriormente (Trabalhando com cores no R), e reaproveitei. Execute o código abaixo:

EXECUTE   sp_execute_external_script
                @language = N'R'
              , @script = N'OutputDataSet <- InputDataSet
              color <- colorRampPalette(c("red","yellow", "green"))
              color(10)
              a <- c(1:10)
              jpeg("C:/TEMP/Barras.jpg")
              barplot(a, col=color(10), main="R no SQL Server 2016")
              dev.off()'
              , @input_data_1 = N'SELECT ''R no SQL Server 2016'' as Col'

              WITH RESULT SETS ((col varchar(30) not null));
go

 

E vá até sua pasta C:\Temp e pocure o arquivo Barras.jpg. Se tudo deu certo, você terá um gráfico como este abaixo gerado pelo R diretamente do seu SQL Server 2016.

Agora é explorar as funcionalidades e possibilidades do R, e integrar isso ao seu ambiente. Fique atento que mais posts sobre R dentro do SQL Server serão publicados em breve!

Links de Referência

Todas estas configurações acima foram consolidadas e tiradas destes links de referências abaixo.

Installing SQL Server R Services

Install Advanced Analytics Extensions

Install R Packages and Providers for SQL Server R Services

Configure and Manage Advanced Analytics Extensions

0  

Conheça algumas atividades do SQL PASS Summit 2015

Fala galera, estamos a praticamente 1 semana do SQL PASS Summit 2015, que acontecerá em Seattle dos dias 27 a 30/Outubro. Neste ano, como de praxe, muitas coisas bacanas (e também lançamentos) estão por vir. Eu foquei minhas sessões para ver as coisas de Business Intelligence, Data Science e Big Data… Dê uma olhada no que vou acompanhar lá:

28 de outubro de 2015

10:15 – 11:30 SQL Server 2016 on Flash: Fast Track DW, SOFS, Columnstore, & AlwaysOn

13:30 – 14:45 Integrating SQL Server Analysis Services with Hadoop

15:15 – 16:30 Business Intelligence Updates in SQL Server 2016

16:45 – 18:00 A Concept for Clean Reporting: Information Design Rules for SSRS and R

29 de outubro de 2015

10:45 – 12:00 Data Storytelling with R, Azure Machine Learning, and Power BI

13:30 – 14:45 Cortana Analytics Deep Dive: Information Management

15:15 – 16:30 Advanced Analytics with R in SQL Server 2016

16:45 – 18:00 Deep Dive into Data Preparation, Modeling & Analytics using Power BI Desktop

30 de outubro de 2015

08:00 – 09:15 Cortana Analytics Deep Dive: Perceptual Intelligence

09:30 – 10:45 Using the Cortana Analytics Process for Smart Transportation

11:00 – 12:15 Real-Time Data Integration (in the Cloud or Not)

14:00 – 15:15 Cortana Analytics Deep Dive: Preconfigured Solutions

15:30 – 16:45 Integrating with Power BI Using Developer APIs

Você que também vai ao evento, já montou sua agenda?? Quem sabe a gente se encontra em alguma palestra em comum??

Community Zone

Sem contar as atividades paralelas que tem durante o evento, que integra e proporciona um network fantástico, como por exemplo o Community Zone, onde vamos reunir todos os falantes do idioma português (Brasileiros e Portugueses) por 1 hora (das 11 as 12hs – horário de Seattle!) no dia 28/10 pra trocar experiências e fazer contatos, e claro, ajudar os caras que estão indo a primeira vez ao evento. Inclusive, caso queira ler um pouco sobre “ser calouro” no evento, veja este link: http://www.sqlpass.org/summit/2015/Connect/FirstTimers.aspx

Speaker Idol

Outra forma de interação que temos durante o evento é o Speaker Idol, onde alguns palestrantes se candidatam e fazem uma palestra em inglês. Uma banca examinadora dá feedbacks sobre sua apresentação com o intuito de te ajudar a fazer melhores apresentações. Não são sugestões sobre a parte técnica, e sim sobre a forma de apresentar. Este ano o Luti (blog|twitter) participará, quem puder, compareça à apresentação e dê uma força pro Luti. Veja mais detalhes desta ação no link: http://www.sqlpass.org/summit/2015/Connect/SpeakerIdol.aspx

Kilt Day e Women in Technology

O PASS toma um cuidado muito importante para eliminar qualquer tipo de assédio ou preconceito. Isso é muito importante na nossa área, onde existem muitas diferenças e isso deve ser totalmente irrelevante mediante ao que você entrega. Independente de vc ser homem, mulher, marciano ou lunárico; ser branco, negro, amarelo, azul ou vermelho; ser alto, baixo, mediano. Isso tudo é indiferente quando você faz um trabalho de qualidade. E o PASS incentiva que isso aconteça, tanto que no dia 29/10 acontece o Women in Technology para mostrar projetos importantes capitaneados por mulheres que fazem a diferença. E também, de quebra, é o Kilt Day. Vários participantes vestem seus Kilts e vão pro evento para ajudar, de forma simbólica, a eliminar este preconceito. Sim, eu vou com o meu o/

Expositores

Conhecer os produtos e serviços de vários fornecedores do mundo é interessante. Fazer contato com eles é ainda mais legal. Durante o PASS, a área de expositores pode ser visitada e você pode fazer um network forte com vários fornecedores. Visite e conheça os caras, as vezes você está precisando de um fornecedor e lá tem o que você precisa. Converse, entenda o que ele tem a oferecer, veja se a sua necessidade é coberta pela oferta dele. Aproveite ao máximo!!!

Isso é só um resumo, muito resumido mesmo, do que você pode ter de experiência nestes 3 dias de evento. Nos vemos no PASS, e não se esqueça: Connect, Share and Learn!

2