R-plugin-program (förhandsversion)
R-plugin-programmet kör en användardefinierad funktion (UDF) med ett R-skript.
Skriptet hämtar tabelldata som indata och genererar tabellutdata. Plugin-programmets körning finns i en sandbox-miljö på klustrets noder. Sandbox-miljön ger en isolerad och säker miljö.
Syntax
T|
evaluate
[hint.distribution
=
(single
| per_node
)] r(
output_schema,
skript [,
script_parameters] [,
external_artifacts])
Läs mer om syntaxkonventioner.
Parametrar
Namn | Typ | Obligatorisk | Beskrivning |
---|---|---|---|
output_schema | string |
✔️ | En type literal som definierar utdataschemat för tabelldata som returneras av R-koden. Formatet är: typeof( ColumnName: ColumnType[, ...]) . Till exempel: typeof(col1:string, col2:long) . Om du vill utöka indataschemat använder du följande syntax: typeof(*, col1:string, col2:long) . |
Skript | string |
✔️ | Det giltiga R-skriptet som ska köras. |
script_parameters | dynamic |
En egenskapsuppsättning med namn- och värdepar som ska skickas till R-skriptet som reserverad kargs ordlista. Mer information finns i Reserverade R-variabler. |
|
hint.distribution |
string |
Tips för att plugin-programmets körning ska distribueras över flera klusternoder. Standardvärdet är single . single innebär att en enda instans av skriptet körs över hela frågedata. per_node innebär att om frågan innan R-blocket distribueras körs en instans av skriptet på varje nod över de data som den innehåller. |
|
external_artifacts | dynamic |
En egenskapsuppsättning med namn- och URL-par för artefakter som är tillgängliga från molnlagring. De kan göras tillgängliga för skriptet som ska användas vid körning. URL:er som refereras i den här egenskapsuppsättningen måste inkluderas i klustrets pratbubblans princip och på en offentligt tillgänglig plats, eller innehålla nödvändiga autentiseringsuppgifter, enligt beskrivningen i anslutningssträngar för lagring. Artefakterna görs tillgängliga för skriptet att använda från en lokal tillfällig katalog, .\Temp . Namnen som anges i egenskapspåsen används som lokala filnamn. Se Exempel. Mer information finns i Installera paket för R-plugin-programmet. |
Reserverade R-variabler
Följande variabler är reserverade för interaktion mellan Kusto-frågespråk och R-koden:
df
: Tabelldata för indata (värdenaT
ovan) som en R DataFrame.kargs
: Värdet för argumentet script_parameters som en R-ordlista.result
: En R DataFrame som skapats av R-skriptet. Värdet blir tabelldata som skickas till alla Kusto-frågeoperatorer som följer plugin-programmet.
Aktivera plugin-programmet
- Plugin-programmet är inaktiverat som standard.
- Aktivera eller inaktivera plugin-programmet i Azure Portal på fliken Konfiguration i klustret. Mer information finns i Hantera språktillägg i ditt Azure Data Explorer-kluster (förhandsversion)
R-sandbox-avbildning
- R-sandbox-avbildningen är baserad på R 3.4.4 för Windows och innehåller paket från Anacondas R Essentials-paket.
Exempel
range x from 1 to 360 step 1
| evaluate r(
//
typeof(*, fx:double), // Output schema: append a new fx column to original table
//
'result <- df\n' // The R decorated script
'n <- nrow(df)\n'
'g <- kargs$gain\n'
'f <- kargs$cycles\n'
'result$fx <- g * sin(df$x / n * 2 * pi * f)'
//
, bag_pack('gain', 100, 'cycles', 4) // dictionary of parameters
)
| render linechart
Prestandatips
Minska plugin-programmets indatauppsättning till den minsta mängd som krävs (kolumner/rader).
Använd filter på källdatauppsättningen med hjälp av Kusto-frågespråk, när det är möjligt.
Om du vill göra en beräkning på en delmängd av källkolumnerna projicerar du bara dessa kolumner innan du anropar plugin-programmet.
Använd
hint.distribution = per_node
när logiken i skriptet kan distribueras.Du kan också använda partitionsoperatorn för partitionering av indatamängden.
När det är möjligt använder du Kusto-frågespråk för att implementera logiken i ditt R-skript.
Exempel:
.show operations | where StartedOn > ago(1d) // Filtering out irrelevant records before invoking the plugin | project d_seconds = Duration / 1s // Projecting only a subset of the necessary columns | evaluate hint.distribution = per_node r( // Using per_node distribution, as the script's logic allows it typeof(*, d2:double), 'result <- df\n' 'result$d2 <- df$d_seconds\n' // Negative example: this logic should have been written using Kusto's query language ) | summarize avg = avg(d2)
Användningstips
Så här undviker du konflikter mellan Kusto-strängavgränsare och R-strängavgränsare:
- Använd enkla citattecken (
'
) för Kusto-strängliteraler i Kusto-frågor. - Använd dubbla citattecken (
"
) för R-strängliteraler i R-skript.
- Använd enkla citattecken (
Använd den externa dataoperatorn för att hämta innehållet i ett skript som du har lagrat på en extern plats, till exempel Azure Blob Storage eller en offentlig GitHub-lagringsplats.
Exempel:
let script = externaldata(script:string) [h'https://kustoscriptsamples.blob.core.windows.net/samples/R/sample_script.r'] with(format = raw); range x from 1 to 360 step 1 | evaluate r( typeof(*, fx:double), toscalar(script), bag_pack('gain', 100, 'cycles', 4)) | render linechart
Installera paket för R-plugin-programmet
Följ dessa steg för steg-instruktioner för att installera paket som inte ingår i plugin-programmets basavbildning.
Förutsättningar
Skapa en blobcontainer som värd för paketen, helst på samma plats som klustret. Anta till exempel att klustret finns i USA,
https://artifactswestus.blob.core.windows.net/r
västra.Ändra klustrets pratbubblans princip för att tillåta åtkomst till den platsen.
Den här ändringen kräver Behörigheter för AllDatabasesAdmin .
Om du till exempel vill aktivera åtkomst till en blob som finns i
https://artifactswestus.blob.core.windows.net/r
kör du följande kommando:
.alter-merge cluster policy callout @'[ { "CalloutType": "sandbox_artifacts", "CalloutUriRegex": "artifactswestus\\.blob\\.core\\.windows\\.net/r/","CanCall": true } ]'
Installera paket
Exempelfragmenten nedan förutsätter lokal R-dator i Windows-miljön.
Kontrollera att du använder rätt R-version – den aktuella R Sandbox-versionen är 3.4.4:
> R.Version()["version.string"] $version.string [1] "R version 3.4.4 (2018-03-15)"
Om det behövs kan du ladda ned det härifrån.
Starta x64 RGui
Skapa en ny tom mapp som ska fyllas i med alla relevanta paket som du vill installera. I det här exemplet installerar vi brglm2-paketet, så skapar "C:\brglm2".
Lägg till den nyligen skapade mappsökvägen till lib-sökvägar:
> .libPaths("C://brglm2")
Kontrollera att den nya mappen nu är den första sökvägen i .libPaths():
> .libPaths() [1] "C:/brglm2" "C:/Program Files/R/R-3.4.4/library"
När den här installationen är klar läggs alla paket som vi installerar till i den nya mappen. Nu ska vi installera det begärda paketet och dess beroenden:
> install.packages("brglm2")
Om frågan "Vill du installera från källor de paket som behöver kompilering?" dyker upp svarar du "Y".
Kontrollera att nya mappar har lagts till i "C:\brglm2":
Markera alla objekt i mappen och zippa dem till t.ex. libs.zip (zippa inte den överordnade mappen). Du bör få en arkivstruktur som den här:
libs.zip:
- brglm2 (mapp)
- enrichwith (mapp)
- numDeriv (mapp)
Ladda upp libs.zip till blobcontainern som angavs ovan
Anropa plugin-programmet
r
.- Ange parametern
external_artifacts
med en egenskapsuppsättning med namn och referens till zip-filen (blobens URL, inklusive en SAS-token). - I din infogade r-kod importerar
zipfile
du frånsandboxutils
och anropar dessinstall()
metod med namnet på zip-filen.
- Ange parametern
Exempel
Installera brglm2-paketet:
print x=1
| evaluate r(typeof(*, ver:string),
'library(sandboxutils)\n'
'zipfile.install("brglm2.zip")\n'
'library("brglm2")\n'
'result <- df\n'
'result$ver <-packageVersion("brglm2")\n'
,external_artifacts=bag_pack(brglm2.zip', 'https://artifactswestus.blob.core.windows.net/r/libs.zip?*** REPLACE WITH YOUR SAS TOKEN ***'))
x | Ver |
---|---|
1 | 1.8.2 |
Kontrollera att arkivets namn (första värdet i paketparet) har suffixet *.zip för att förhindra kollisioner när mappar packas upp vars namn är identiskt med arkivnamnet.
Den här funktionen stöds inte.
Feedback
https://aka.ms/ContentUserFeedback.
Kommer snart: Under hela 2024 kommer vi att fasa ut GitHub-problem som feedbackmekanism för innehåll och ersätta det med ett nytt feedbacksystem. Mer information finns i:Skicka och visa feedback för