In diesem Artikel möchte ich detailliert zeigen, wie Sie R in Microsoft SQL Server verwenden können, um Daten von Google Analytics (und im Allgemeinen von einer beliebigen API) abzurufen.
Die Aufgabe - wir haben MS SQL Server und möchten Daten in DWH per API empfangen
Wir werden das googleAnalyticsR- Paket verwenden, um eine Verbindung zu Google Analytics (GA) herzustellen .
Dieses Paket wird aufgrund seiner Beliebtheit als Beispiel gewählt. Sie können ein anderes Paket verwenden, zum Beispiel: RGoogleAnalytic .
Die Ansätze zur Problemlösung werden gleich sein.
Installieren Sie R auf MS SQL Server
Dies erfolgt über die Standardschnittstelle zur Installation von MS SQL-Komponenten.



- Dies ist R, mit dem SQL Server direkt interagiert (in SQL-Abfragen aufgerufen).
- Sie können mit der R-Client-Kopie von R Studio arbeiten, ohne befürchten zu müssen, dass etwas auf dem Datenbankserver beschädigt wird.
Akzeptieren Sie die Lizenzvereinbarung und achten Sie darauf, dass nicht gewöhnliches R installiert wird, sondern Microsoft R Open

Kurz gesagt, was es ist:
Microsoft nimmt R Open, verbessert es mit seinen Paketen und verteilt es kostenlos.
Dementsprechend stehen Pakete dieser R-Version nicht in CRAN , sondern in MRAN zum Download zur Verfügung.
Es kommt noch mehr. Tatsächlich erhalten wir bei der Installation von MS SQL kein sauberes MRAN, sondern etwas mehr - Microsoft ML Server .
Dies bedeutet für uns, dass der Satz der R-Bibliotheken - RevoScaleR - zusätzliche Pakete enthält .
RevoScaleR wurde für die Verarbeitung von Big Data und die Erstellung von Modellen für maschinelles Lernen auf großen Datenmengen entwickelt.
Diese Informationen sollten berücksichtigt werden, da eine hohe Wahrscheinlichkeit für Fragen zu verschiedenen R-Versionen besteht.
Nach der Installation der Komponenten erhalten wir die Microsoft R-Interaktion.

Diese Konsole ist nicht sehr bequem zu bedienen, laden Sie also sofort die kostenlose Version RStudio herunter und installieren Sie sie.
Führen Sie die folgenden Skripts in SSMS aus:
Ermöglichen, dass Skripte auf SQL Server ausgeführt werden
sp_configure 'external scripts enabled', 1; RECONFIGURE WITH OVERRIDE;
Server SQL Neustart

Stellen Sie sicher, dass R-Skripte ausgeführt werden
EXECUTE sp_execute_external_script @language =N'R', @script=N'print(version)';
Suchen Sie den Speicherort von R-Paketen, die von SQL Server verwendet werden
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));

In meinem Fall der Pfad zu R MS SQL-Paketen:
C: / Programme / Microsoft SQL Server / MSSQL14.MSSQLSERVER / R_SERVICES / library
Führen Sie RStudio aus.
Es besteht eine gute Chance, dass mehrere R-Versionen auf dem Computer installiert sind. Stellen Sie daher sicher, dass wir mit der Version von SQL Server arbeiten.


Die Einstellungen werden nach dem Neustart von RStudio übernommen.
Installieren Sie das googleAnalyticsR-Paket
Zu RStudio mit dem Befehl
library()
Finden Sie den Pfad zur Paketbibliothek der R-Client-Version heraus (mit der RStudio arbeitet).

In meinem Fall dieser Pfad:
C: / Programme / Microsoft SQL Server / 140 / R_SERVER / library
Installieren Sie das googleAnalyticsR-Paket über RStudio


Hier ist eine schattierte Nuance:
Sie können den MS SQL-Systemordnern nicht einfach alles hinzufügen, was Sie möchten. Pakete werden in einem temporären Verzeichnis als ZIP-Archiv gespeichert.

Gehen Sie zum temporären Ordner und entpacken Sie alle Pakete im Explorer.

Entpackte Pakete müssen in das R Services-Bibliotheksverzeichnis kopiert werden (mit dem MS SQL Server arbeitet).
In meinem Beispiel ist dies der Ordner
C: / Programme / Microsoft SQL Server / MSSQL14.MSSQLSERVER / R_SERVICES / library
Entpackte Pakete müssen auch in die R-Client-Version kopiert werden (mit der RStudio arbeitet).
In meinem Beispiel ist dies der Ordner
C: / Programme / Microsoft SQL Server / 140 / R_SERVER / library
(Wir haben diese Pfade aus zuvor ausgeführten Skripten gelernt)
Vor dem Kopieren in den R Services-Ordner ist es besser, eine Kopie des Bibliotheksordners zu speichern. Die Erfahrung hat gezeigt, dass es unterschiedliche Situationen gibt und es besser ist, zu vorhandenen Paketen zurückzukehren.
Ersetzen Sie beim Kopieren alle vorhandenen Pakete.
Wiederholen Sie die Übung, um die Fertigkeit zu festigen.
Erst jetzt installieren wir keine Pakete, sondern aktualisieren alle vorhandenen.
(Dies ist für die Verbindung zu GA nicht erforderlich, es ist jedoch besser, die neuesten Versionen aller Pakete zu haben.)
Suchen Sie in RStudio nach neuen Paketen

Pakete werden in einen temporären Ordner heruntergeladen.
Führen Sie die gleichen Aktionen aus wie bei der Installation neuer Pakete.
Überprüfen des MS SQL-Internetzugangs
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
Da SQL Server standardmäßig keinen Internetzugang hat, verursacht das vorherige Skript wahrscheinlich den folgenden Fehler.

Bereitstellung des Internetzugangs für R-Skripte aus SQL.
SQL 2017

SQL 2019

In ssms
Holen Sie sich das Google Analytics-Token
Führen Sie den folgenden Code in RStudio aus:
Dadurch wird das Authentifizierungsfenster für Google-Dienste in Ihrem Browser geöffnet. Sie müssen sich anmelden und die Berechtigung zum Zugriff auf Google Analytics erteilen.
Stellen Sie in SSMS sicher, dass das Token von Google empfangen und in der Datenbank aufgezeichnet wird
Select * from [GA].[token]
Überprüfen Sie die Verbindung zu GA über RStudio
Wenn alles gut gegangen ist, fügen Sie SQL ein R-Skript hinzu und führen Sie die Abfrage aus.
drop table if exists
Achten Sie darauf, dass das Skript einen Benutzernamen und ein Passwort verwendet, was eine gute Sache ist.
Daher ändern wir die Verbindungszeichenfolge in Windows-Authentifizierung.
conStr <- ''Driver={SQL Server};Server=EC2AMAZ-68OQ7JV;Database=Demo;Trusted_Connection=true''
Nach dem Ändern der Authentifizierungsmethode müssen Sie dem Dienst, der R aufruft, Datenbankzugriffsrechte hinzufügen.

(Natürlich ist es besser, mit Benutzergruppen zu arbeiten. Ich habe die Lösung im Rahmen der Demonstration vereinfacht.)
Wir führen die SQL-Abfrage als Prozedur aus.
Create procedure Ga.Get_session @Date_start date ='2019-01-01', @Date_End date ='2019-08-01' as drop table if exists
Überprüfen Sie den Vorgang
R-Skript ist nicht kompliziert, es kann immer nach R Studio kopiert werden. Ändern und Speichern in SQL-Prozedur.
Zum Beispiel habe ich nur den Dimensionsparameter geändert und kann jetzt die Landing Page nach Datum laden.
Create procedure [GA].[Get_landingPage_session] @Date_start date ='2019-01-01', @Date_End date ='2019-08-01' as drop table if exists
Überprüfung
exec [GA].[Get_landingPage_session]
Im Grunde ist es das.
Ich möchte darauf hinweisen, dass Sie mit R über SQL Daten von jeder API abrufen können.
Zum Beispiel: Wechselkurse erhalten.
oder Daten von der ersten verfügbaren API erhalten, einige Farmen in Australien ...
Insgesamt:
● Verbindungskennwörter werden nirgendwo gespeichert
● Rechte werden zentral über Active Directory-Konten verteilt
● keine zusätzlichen Konfigurationsdateien
● Keine Python-Geigen mit Passwörtern für die Datenbank
● Der gesamte Code wird in den Prozeduren gespeichert und beim Sichern der Datenbank gespeichert
Eine MS SQL 2017-Datenbanksicherung mit vollständigem Code finden Sie hier
(Für die Wiedergabe müssen Sie Pakete installieren, die Rechte verteilen und den Namen Ihres Servers angeben.)