Neste artigo, quero mostrar em detalhes como você pode usar o R no Microsoft SQL Server para obter dados do Google Analytics (e geralmente de qualquer API).
A tarefa - temos o servidor MS SQL e queremos receber dados em DWH pela API
Usaremos o pacote googleAnalyticsR para conectar-se ao Google Analytics (GA).
Este pacote é escolhido como exemplo devido à sua popularidade. Você pode usar outro pacote, por exemplo: RGoogleAnalytic .
As abordagens para a resolução de problemas serão as mesmas.
Instale o R no MS SQL Server
isso é feito através da interface padrão para instalar componentes do MS SQL.



- É com esse R que o SQL Server irá interagir diretamente (chamado nas consultas SQL).
- Você pode trabalhar com a cópia do cliente R do R Studio sem medo de quebrar algo no servidor de banco de dados.
Aceite o contrato de licença e preste atenção para que o R não comum seja instalado, mas o Microsoft R Open

Resumidamente, o que é:
A Microsoft pega o R Open, aprimora-o com seus pacotes e distribui gratuitamente.
Consequentemente, os pacotes desta versão R estão disponíveis para download não no CRAN , mas no MRAN .
Há mais por vir. De fato, ao instalar o MS SQL, não temos um MRAN limpo, mas algo mais - o Microsoft ML Server .
Isso significa para nós que haverá pacotes adicionais no conjunto de bibliotecas R - RevoScaleR .
O RevoScaleR foi desenvolvido para processar big data e criar modelos de aprendizado de máquina em grandes conjuntos de dados.
Essas informações devem ser lembradas, pois há uma alta probabilidade de perguntas relacionadas a diferentes versões R.
Depois de instalar os componentes, obtemos a interação do Microsoft R.

Esse console não é muito conveniente de usar, então baixe e instale imediatamente a versão gratuita RStudio .
Execute os seguintes scripts no SSMS:
Permitir que scripts sejam executados no servidor SQL
sp_configure 'external scripts enabled', 1; RECONFIGURE WITH OVERRIDE;
Reinicialização sql do servidor

Verifique se os scripts R são executados
EXECUTE sp_execute_external_script @language =N'R', @script=N'print(version)';
Encontre o local dos pacotes R usados pelo servidor SQL
declare @Rscript nvarchar(max) set @Rscript = N' InstaledLibrary <- library() InstaledLibrary <- as.data.frame(InstaledLibrary$results ) OutputDataSet <- InstaledLibrary ' EXECUTE sp_execute_external_script @language = N'R' , @script = @Rscript WITH RESULT SETS (([Package] varchar(255) NOT NULL, [LibPath] varchar(255) NOT NULL, [Title] varchar(255) NOT NULL));

No meu caso, o caminho para os pacotes R MS SQL:
C: / Arquivos de Programas / Microsoft SQL Server / MSSQL14.MSSQLSERVER / R_SERVICES / library
Execute o RStudio.
Há uma boa chance de que existam várias versões R instaladas no computador, portanto, você precisa se certificar de que estamos trabalhando com a versão do SQL Server.


As configurações serão aplicadas após a reinicialização do RStudio.
Instale o pacote googleAnalyticsR
Para o RStudio usando o comando
library()
Descubra o caminho para a biblioteca de pacotes da versão do cliente R (com a qual o RStudio funciona)

No meu caso, este caminho:
C: / Arquivos de Programas / Microsoft SQL Server / 140 / R_SERVER / library
Instale o pacote googleAnalyticsR via RStudio


Aqui estão algumas nuances sombreadas:
Você não pode simplesmente adicionar o que quiser nas pastas do sistema MS SQL. Os pacotes serão salvos em um diretório temporário como arquivos ZIP.

Vá para a pasta temporária e descompacte todos os pacotes no Explorer.

Pacotes descompactados devem ser copiados para o diretório de biblioteca dos Serviços R (com o qual o MS SQL Server trabalha).
No meu exemplo, esta é a pasta
C: / Arquivos de Programas / Microsoft SQL Server / MSSQL14.MSSQLSERVER / R_SERVICES / library
Pacotes descompactados também devem ser copiados para a versão do cliente R (com a qual o RStudio trabalha)
No meu exemplo, esta é a pasta
C: / Arquivos de Programas / Microsoft SQL Server / 140 / R_SERVER / library
(aprendemos esses caminhos com scripts executados anteriormente)
Antes de copiar para a pasta R Services, é melhor salvar uma cópia da pasta da biblioteca. A experiência provou que existem situações diferentes e é melhor poder retornar aos pacotes existentes.
Ao copiar, substitua todos os pacotes existentes.
Para consolidar a habilidade, repita o exercício.
Somente agora não instalamos pacotes, mas atualizamos todos os existentes.
(isso não é necessário para se conectar ao GA, mas é melhor ter as versões mais recentes de todos os pacotes)
Verifique novos pacotes no RStudio

Os pacotes serão baixados para uma pasta temporária.
Execute as mesmas ações que ao instalar novos pacotes.
Verificando o acesso à Internet MS SQL
declare @Rscript nvarchar(max) set @Rscript = N' library(httr) HEAD("https://www.yandex.ru", verbose()) ' EXECUTE sp_execute_external_script @language = N'R' , @script = @Rscript
Como o SQL Server não tem acesso à Internet por padrão, é provável que o script anterior cause o seguinte erro.

Forneça acesso à Internet aos scripts R do SQL.
SQL 2017

SQL 2019

Em ssms
Obtenha o token do Google Analytics
Execute o seguinte código no RStudio:
Isso abrirá a janela de autenticação de serviços do Google no seu navegador. Você precisará fazer login e dar permissão para acessar o Google Analytics.
No SSMS, verifique se o token do Google é recebido e registrado no banco de dados
Select * from [GA].[token]
Verifique a conexão com o GA via RStudio
Se tudo der certo, adicione o script R ao SQL e execute a consulta.
drop table if exists
Preste atenção que o script usa um nome de usuário e senha, o que é uma coisa boa.
Portanto, alteramos a cadeia de conexão para autenticação do Windows.
conStr <- ''Driver={SQL Server};Server=EC2AMAZ-68OQ7JV;Database=Demo;Trusted_Connection=true''
Após alterar o método de autenticação, você precisará adicionar direitos de acesso ao banco de dados no serviço que chama R.

(Obviamente, é melhor trabalhar com grupos de usuários. Simplifiquei a solução como parte da demonstração)
Executamos a consulta SQL como um procedimento.
Create procedure Ga.Get_session @Date_start date ='2019-01-01', @Date_End date ='2019-08-01' as drop table if exists
Verifique a operação do procedimento
O script R não é complicado, sempre pode ser copiado para o R Studio. Modifique e salve no procedimento SQL.
Por exemplo, alterei apenas o parâmetro de dimensões e agora posso carregar a página de destino por datas.
Create procedure [GA].[Get_landingPage_session] @Date_start date ='2019-01-01', @Date_End date ='2019-08-01' as drop table if exists
verificação
exec [GA].[Get_landingPage_session]
Basicamente, é isso.
Gostaria de observar que, usando R via SQL, você pode obter dados de qualquer API.
Por exemplo: recebendo taxas de câmbio.
ou obtendo dados da primeira API disponível, alguns farms na Austrália ...
No total:
● senhas de conexão não são armazenadas em nenhum lugar
● direitos são distribuídos centralmente através de contas do Active Directory
● nenhum arquivo de configuração adicional
● não há violações em Python que contenham senhas no banco de dados
● todo o código é armazenado nos procedimentos e salvo quando o backup do banco de dados é feito
O backup do banco de dados MS SQL 2017 com código completo está disponível aqui
(para reprodução, você precisa instalar pacotes, distribuir os direitos, especificar o nome do seu servidor)