Dans cet article, je veux montrer en détail comment vous pouvez utiliser R dans Microsoft SQL Server pour implémenter la récupération de données à partir de Google Analytics (et généralement à partir de n'importe quelle API).
Remerciements:
Comme je n'ai jamais été marketeur, j'avais besoin de l'aide d'un spécialiste. La salle de test et l'accès à Google Analytics (GA) ont été organisés par Alexei Seleznev et ont également donné des conseils pratiques.
Il est analyste professionnel en marketing. Et en guise de gratitude pour l'aide, la chaîne de télégramme d'Aleksey est mentionnée ici, où il mène son activité.
La tâche - nous avons un serveur MS SQL et nous voulons recevoir des données en DWH par API
Pour nous connecter à Google Analytics (GA), nous utiliserons le package googleAnalyticsR .
Ce package est sélectionné, par exemple, en raison de sa popularité. Vous pouvez utiliser un autre package, par exemple: RGoogleAnalytic .
Les approches pour résoudre le problème seront les mêmes.
Installer R sur MS SQL Server
cela se fait via l'interface standard pour l'installation des composants MS SQL.



- Il s'agit du R avec lequel SQL Server travaillera directement (appelé dans les requêtes SQL).
- Une copie client de R peut fonctionner avec RStudio sans craindre de casser quelque chose sur le serveur de base de données.
Nous sommes d'accord avec la licence et faisons attention à ce que R ordinaire ne soit pas installé, mais Microsoft R Open

En un mot, qu'est-ce que c'est:
Microsoft prend R Open ennoblit avec ses packages et le distribue également gratuitement.
Par conséquent, les packages de cette version de R peuvent être téléchargés non pas dans CRAN mais dans MRAN .
Mais ce n'est pas tout. En fait, lors de l'installation de MS SQL, nous n'obtenons pas un pur MRAN, mais quelque chose de plus - Microsoft ML Server .
Pour nous, cela signifie qu'il y aura des packages supplémentaires dans l'ensemble des bibliothèques R - RevoScaleR .
RevoScaleR est conçu pour traiter les mégadonnées et créer des modèles d'apprentissage automatique sur des ensembles de données importants.
Ces informations doivent être gardées à l'esprit car il existe une forte probabilité de questions liées aux différentes versions des packages R.
Après avoir installé les composants, nous obtenons l'interface par défaut pour interagir avec R de Microsoft.

Cette console n'est pas la plus pratique que vous puissiez utiliser, alors téléchargez et installez immédiatement la version gratuite de RStudio .
Nous configurons SQL Server pour fonctionner avec R
Dans SSMS, nous exécutons les scripts suivants:
Nous permettons d'exécuter des scripts sur le serveur SQL
sp_configure 'external scripts enabled', 1; RECONFIGURE WITH OVERRIDE;
Redémarrez le serveur SQL

Assurez-vous que les scripts R scripts sont exécutés
EXECUTE sp_execute_external_script @language =N'R', @script=N'print(version)';
Rechercher l'emplacement des packages R utilisés par le serveur 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));

Dans mon cas, le chemin d'accès aux packages R MS SQL:
C: / Program Files / Microsoft SQL Server / MSSQL14.MSSQLSERVER / R_SERVICES / library
Nous démarrons RStudio.
Il est possible que plusieurs versions de R soient installées sur l'ordinateur et vous devez vous assurer que nous travaillons avec une version de SQL Server.


Les paramètres seront appliqués après le redémarrage de RStudio.
Installez le package googleAnalyticsR
Dans l'équipe RStudio
library()
connaître le chemin d'accès à la bibliothèque de packages de la version client de R (avec laquelle RStudio fonctionne)

Dans mon cas, de cette façon:
C: / Program Files / Microsoft SQL Server / 140 / R_SERVER / bibliothèque
Installez le package googleAnalyticsR via RStudio


Ici, il y a une nuance non évidente:
Vous ne pouvez pas simplement écrire quelque chose dans les dossiers système MS SQL. Les packages seront enregistrés dans un répertoire temporaire sous forme d'archives ZIP.

Dans l'Explorateur, accédez au dossier temporaire et décompressez tous les packages.

Les packages décompressés doivent être copiés dans le répertoire de la bibliothèque R Services (avec lequel le serveur MS SQL fonctionne).
Dans mon exemple, c'est un dossier
C: / Program Files / Microsoft SQL Server / MSSQL14.MSSQLSERVER / R_SERVICES / library
De plus, les packages décompressés doivent être copiés dans la version client de R (avec laquelle RStudio fonctionne)
Dans mon exemple, c'est un dossier
C: / Program Files / Microsoft SQL Server / 140 / R_SERVER / bibliothèque
(nous avons appris ces chemins à partir de scripts exécutés précédemment)
Avant de copier dans le dossier R Services, il est préférable d'enregistrer une copie du dossier de la bibliothèque, comme le montre la pratique, il existe différents cas et il est préférable de pouvoir revenir aux packages existants.
Lors de la copie, remplacez tous les packages disponibles.
Pour consolider la compétence acquise, répétez l'exercice.
Seulement maintenant, nous n'installons pas de packages, mais mettons à jour tous les packages disponibles.
(pour se connecter à GA, ce n'est pas nécessaire, mais il est préférable d'avoir les dernières versions de tous les packages)
Dans RStudio, nous recherchons de nouveaux packages

Les packages seront téléchargés dans un dossier temporaire.
Nous effectuons avec eux les mêmes actions que lors de l'installation de nouveaux packages.
Vérification de l'accès 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
Étant donné que SQL Server n'a pas accès à Internet par défaut, votre script précédent provoquera probablement l'erreur suivante.

Nous ouvrons l'accès à Internet pour les scripts R à partir de SQL.
SQL 2017

SQL2019

Dans SSMS
Obtenez le jeton Google Analytics
Dans RStudio, nous exécutons le code suivant:
Dans le même temps, la fenêtre d'authentification des services Google s'ouvrira dans le navigateur, vous devrez vous connecter et autoriser l'accès à Google Analytics.
Dans SSMS, assurez-vous que le jeton de Google est reçu et enregistré dans la base de données
Select * from [GA].[token]
Vérifier la connexion à GA via RStudio
Si tout se passe bien, ajoutez le script R à SQL et exécutez la requête.
drop table if exists
Veuillez noter que le script utilise un identifiant et un mot de passe - ce n'est pas très bon.
Par conséquent, nous changeons la chaîne de connexion en authentification Windows.
conStr <- ''Driver={SQL Server};Server=EC2AMAZ-68OQ7JV;Database=Demo;Trusted_Connection=true''
Après avoir changé la méthode d'authentification, il sera nécessaire d'ajouter l'accès à la base de données au R. appelant.

(Bien sûr, il est préférable d'utiliser des groupes d'utilisateurs, dans le cadre de la démo, j'ai simplifié la solution)
On fait la requête SQL comme une procédure
Create procedure Ga.Get_session @Date_start date ='2019-01-01', @Date_End date ='2019-08-01' as drop table if exists
Vérifier le fonctionnement de la procédure
Le script R n'est pas compliqué, il peut toujours être copié dans R Studio. Modifiez et enregistrez dans la procédure SQL.
Par exemple, je n'ai modifié que le paramètre des dimensions et je peux déjà charger la landingPage par date.
Create procedure [GA].[Get_landingPage_session] @Date_start date ='2019-01-01', @Date_End date ='2019-08-01' as drop table if exists
vérifient
exec [GA].[Get_landingPage_session]
En principe, tout est prêt.
Je voudrais noter qu'en utilisant R via SQL, vous pouvez obtenir des données de n'importe quelle API
Par exemple: obtenir le taux de change
ou obtenir des données de la première API que vous obtenez, certaines fermes en Australie ...
Total:
- les mots de passe de connexion ne sont stockés nulle part
- les droits sont distribués de manière centralisée via les comptes Active Directory
- aucun fichier de configuration supplémentaire
- il n'y a pas de fichiers python avec des violons contenant des mots de passe pour la base de données
- tout le code est dans les procédures et est enregistré lorsque la base de données est sauvegardée
La base de données de sauvegarde MS SQL 2017 avec tout le code est disponible ici
(pour la lecture, vous devez installer des packages, donner des droits, spécifier le nom de votre serveur)