使用 Azure PowerShell 管理 Azure Data Lake Analytics

重要

Azure Data Lake Analytics 於 2024 年 2 月 29 日淘汰。 使用此公告深入瞭解。

針對數據分析,您的組織可以使用 Azure Synapse AnalyticsMicrosoft Fabric

本文說明如何使用 Azure PowerShell 來管理 Azure Data Lake Analytics 帳戶、資料來源、使用者和作業。

必要條件

注意

建議您使用 Azure Az PowerShell 模組來與 Azure 互動。 請參閱安裝 Azure PowerShell 以開始使用。 若要瞭解如何遷移至 Az PowerShell 模組,請參閱將 Azure PowerShell 從 AzureRM 遷移至 Az。

若要搭配使用 PowerShell 與 Data Lake Analytics,請收集下列幾項資訊:

  • 訂用帳戶識別碼:Data Lake Analytics 帳戶所在 Azure 訂用帳戶的識別碼。
  • 資源群組:包含您 Data Lake Analytics 帳戶的 Azure 資源群組名稱。
  • Data Lake Analytics 帳戶名稱:Data Lake Analytics 帳戶的名稱。
  • 預設 Data Lake Store 帳戶名稱:每個 Data Lake Analytics 帳戶都有一個預設的 Data Lake Store 帳戶。
  • 位置:您 Data Lake Analytics 帳戶的位置,例如「美國東部 2」或其他支援的位置。

本教學課程中的 PowerShell 程式碼片段會使用這些變數來儲存此資訊

$subId = "<SubscriptionId>"
$rg = "<ResourceGroupName>"
$adla = "<DataLakeAnalyticsAccountName>"
$adls = "<DataLakeStoreAccountName>"
$location = "<Location>"

登入 Azure

使用互動式使用者驗證來登入

使用訂用帳戶識別碼或以訂用帳戶名稱來登入

# Using subscription id
Connect-AzAccount -SubscriptionId $subId

# Using subscription name
Connect-AzAccount -SubscriptionName $subname

儲存驗證內容

Connect-AzAccount Cmdlet 一律會提示輸入認證。 您可以使用下列 Cmdlet 來避免出現提示:

# Save login session information
Save-AzAccounts -Path D:\profile.json  

# Load login session information
Select-AzAccounts -Path D:\profile.json

使用服務主體身分識別 (SPI) 來登入

$tenantid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"  
$spi_appname = "appname"
$spi_appid = "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"
$spi_secret = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"

$pscredential = New-Object System.Management.Automation.PSCredential ($spi_appid, (ConvertTo-SecureString $spi_secret -AsPlainText -Force))
Login-AzAccount -ServicePrincipal -TenantId $tenantid -Credential $pscredential -Subscription $subid

管理帳戶

列出帳戶

# List Data Lake Analytics accounts within the current subscription.
Get-AdlAnalyticsAccount

# List Data Lake Analytics accounts within a specific resource group.
Get-AdlAnalyticsAccount -ResourceGroupName $rg

建立帳戶

每個 Data Lake Analytics 帳戶都需要預設 Data Lake Store 帳戶,用於儲存記錄。 您可以重複使用現有的帳戶,或建立一個帳戶。

# Create a data lake store if needed, or you can re-use an existing one
New-AdlStore -ResourceGroupName $rg -Name $adls -Location $location
New-AdlAnalyticsAccount -ResourceGroupName $rg -Name $adla -Location $location -DefaultDataLake $adls

取得帳戶資訊

取得帳戶的相關詳細資料。

Get-AdlAnalyticsAccount -Name $adla

檢查帳戶是否存在

Test-AdlAnalyticsAccount -Name $adla

管理資料來源

Azure Data Lake Analytics 目前支援下列資料來源:

每個 Data Lake Analytics 帳戶都有預設 Data Lake Store 帳戶。 預設的資料湖存放區帳戶是用來儲存工作中繼資料與工作稽核記錄。

尋找預設的 Data Lake Store 帳戶

$adla_acct = Get-AdlAnalyticsAccount -Name $adla
$dataLakeStoreName = $adla_acct.DefaultDataLakeAccount

您可以用 IsDefault 屬性篩選資料來源清單,藉此方式尋找預設的 Data Lake Store 帳戶:

Get-AdlAnalyticsDataSource -Account $adla  | ? { $_.IsDefault }

新增資料來源


# Add an additional Storage (Blob) account.
$AzureStorageAccountName = "<AzureStorageAccountName>"
$AzureStorageAccountKey = "<AzureStorageAccountKey>"
Add-AdlAnalyticsDataSource -Account $adla -Blob $AzureStorageAccountName -AccessKey $AzureStorageAccountKey

# Add an additional Data Lake Store account.
$AzureDataLakeStoreName = "<AzureDataLakeStoreAccountName"
Add-AdlAnalyticsDataSource -Account $adla -DataLakeStore $AzureDataLakeStoreName

列出資料來源

# List all the data sources
Get-AdlAnalyticsDataSource -Account $adla

# List attached Data Lake Store accounts
Get-AdlAnalyticsDataSource -Account $adla | where -Property Type -EQ "DataLakeStore"

# List attached Storage accounts
Get-AdlAnalyticsDataSource -Account $adla | where -Property Type -EQ "Blob"

提交 U-SQL 作業

以 U-SQL 作業的形式提交字串

$script = @"
@a  =
    SELECT * FROM
        (VALUES
            ("Contoso", 1500.0),
            ("Woodgrove", 2700.0)
        ) AS D( customer, amount );
OUTPUT @a
    TO "/data.csv"
    USING Outputters.Csv();
"@

$scriptpath = "d:\test.usql"
$script | Out-File $scriptpath

Submit-AdlJob -AccountName $adla -Script $script -Name "Demo"

以 U-SQL 作業的形式提交檔案

$scriptpath = "d:\test.usql"
$script | Out-File $scriptpath
Submit-AdlJob -AccountName $adla –ScriptPath $scriptpath -Name "Demo"

列出工作

輸出包含目前執行中作業和最近完成的作業。

Get-AdlJob -Account $adla

列出前 N 個作業

預設會在提交時排序作業清單。 因此,最新提交的作業會顯示在最前面。 根據預設,ADLA 帳戶會記住 180 天內的作業,但 Ge-AdlJob Cmdlet 預設只會傳回前 500 個作業。 請使用 -Top 參數來列出特定數目的作業。

$jobs = Get-AdlJob -Account $adla -Top 10

依作業狀態列出作業

使用 -State 參數。 您可以結合以下這些值:

  • Accepted
  • Compiling
  • Ended
  • New
  • Paused
  • Queued
  • Running
  • Scheduling
  • Start
# List the running jobs
Get-AdlJob -Account $adla -State Running

# List the jobs that have completed
Get-AdlJob -Account $adla -State Ended

# List the jobs that have not started yet
Get-AdlJob -Account $adla -State Accepted,Compiling,New,Paused,Scheduling,Start

依作業結果列出作業

使用 -Result 參數來偵測已結束的工作是否順利完成。 它有下列值:

  • 已取消
  • Failed
  • None
  • 成功
# List Successful jobs.
Get-AdlJob -Account $adla -State Ended -Result Succeeded

# List Failed jobs.
Get-AdlJob -Account $adla -State Ended -Result Failed

依作業提交者列出作業

-Submitter 參數可協助您識別由誰提交工作。

Get-AdlJob -Account $adla -Submitter "joe@contoso.com"

依提交時間列出作業

-SubmittedAfter 用於篩選時間範圍。

# List  jobs submitted in the last day.
$d = [DateTime]::Now.AddDays(-1)
Get-AdlJob -Account $adla -SubmittedAfter $d

# List  jobs submitted in the last seven day.
$d = [DateTime]::Now.AddDays(-7)
Get-AdlJob -Account $adla -SubmittedAfter $d

取得作業狀態

取得特定作業的狀態。

Get-AdlJob -AccountName $adla -JobId $job.JobId

取消工作

Stop-AdlJob -Account $adla -JobID $jobID

等候作業結束

您可以不重複執行 Get-AdlAnalyticsJob 直到作業結束,而是使用 Wait-AdlJob Cmdlet 來等候作業結束。

Wait-AdlJob -Account $adla -JobId $job.JobId

列出作業管線和週期

使用 Get-AdlJobPipeline Cmdlet 來查看先前提交作業的管線資訊。

$pipelines = Get-AdlJobPipeline -Account $adla
$pipeline = Get-AdlJobPipeline -Account $adla -PipelineId "<pipeline ID>"

使用 Get-AdlJobRecurrence Cmdlet 來查看先前提交作業的週期資訊。

$recurrences = Get-AdlJobRecurrence -Account $adla

$recurrence = Get-AdlJobRecurrence -Account $adla -RecurrenceId "<recurrence ID>"

管理計算原則

列出現有的計算原則

Get-AdlAnalyticsComputePolicy Cmdlet 會擷取 Data Lake Analytics 帳戶的計算原則清單。

$policies = Get-AdlAnalyticsComputePolicy -Account $adla

建立計算原則

New-AdlAnalyticsComputePolicy Cmdlet 會為 Data Lake Analytics 帳戶建立新的計算原則。 這個範例會將指定使用者的可用 AU 上限設定為 50,將最低作業優先權設為 250。

$userObjectId = (Get-AzAdUser -SearchString "garymcdaniel@contoso.com").Id

New-AdlAnalyticsComputePolicy -Account $adla -Name "GaryMcDaniel" -ObjectId $objectId -ObjectType User -MaxDegreeOfParallelismPerJob 50 -MinPriorityPerJob 250

管理檔案

檢查檔案是否存在

Test-AdlStoreItem -Account $adls -Path "/data.csv"

上傳和下載

上傳檔案。

Import-AdlStoreItem -AccountName $adls -Path "c:\data.tsv" -Destination "/data_copy.csv"

以遞迴方式上傳整個資料夾。

Import-AdlStoreItem -AccountName $adls -Path "c:\myData\" -Destination "/myData/" -Recurse

下載檔案。

Export-AdlStoreItem -AccountName $adls -Path "/data.csv" -Destination "c:\data.csv"

以遞迴方式下載整個資料夾。

Export-AdlStoreItem -AccountName $adls -Path "/" -Destination "c:\myData\" -Recurse

注意

如果上傳或下載程序中斷,您可以搭配 -Resume 旗標來重新執行該 Cmdlet,以嘗試繼續該程序。

管理 U-SQL 目錄

U-SQL 目錄是用來建構資料和程式碼,讓 U-SQL 指令碼可以共用它們。 目錄可以讓 Azure Data Lake 中的資料具有可能的最高效能。 如需詳細資訊,請參閱 使用 U-SQL 目錄

列出 U-SQL 目錄中的項目

# List U-SQL databases
Get-AdlCatalogItem -Account $adla -ItemType Database

# List tables within a database
Get-AdlCatalogItem -Account $adla -ItemType Table -Path "database"

# List tables within a schema.
Get-AdlCatalogItem -Account $adla -ItemType Table -Path "database.schema"

列出所有組件 U-SQL 目錄

$dbs = Get-AdlCatalogItem -Account $adla -ItemType Database

foreach ($db in $dbs)
{
    $asms = Get-AdlCatalogItem -Account $adla -ItemType Assembly -Path $db.Name

    foreach ($asm in $asms)
    {
        $asmname = "[" + $db.Name + "].[" + $asm.Name + "]"
        Write-Host $asmname
    }
}

取得目錄項目的相關詳細資料

# Get details of a table
Get-AdlCatalogItem  -Account $adla -ItemType Table -Path "master.dbo.mytable"

# Test existence of a U-SQL database.
Test-AdlCatalogItem  -Account $adla -ItemType Database -Path "master"

將認證儲存在目錄中

在 U-SQL 資料庫內,為裝載於 Azure 中的資料庫建立認證物件。 目前,U-SQL 認證是您可以透過 PowerShell 建立的唯一目錄項目類型。

$dbName = "master"
$credentialName = "ContosoDbCreds"
$dbUri = "https://contoso.database.windows.net:8080"

New-AdlCatalogCredential -AccountName $adla `
          -DatabaseName $db `
          -CredentialName $credentialName `
          -Credential (Get-Credential) `
          -Uri $dbUri

管理防火牆規則

列出防火牆規則

Get-AdlAnalyticsFirewallRule -Account $adla

新增防火牆規則

$ruleName = "Allow access from on-prem server"
$startIpAddress = "<start IP address>"
$endIpAddress = "<end IP address>"

Add-AdlAnalyticsFirewallRule -Account $adla -Name $ruleName -StartIpAddress $startIpAddress -EndIpAddress $endIpAddress

修改防火牆規則

Set-AdlAnalyticsFirewallRule -Account $adla -Name $ruleName -StartIpAddress $startIpAddress -EndIpAddress $endIpAddress

移除防火牆規則

Remove-AdlAnalyticsFirewallRule -Account $adla -Name $ruleName

允許 Azure IP 位址

Set-AdlAnalyticsAccount -Name $adla -AllowAzureIpState Enabled
Set-AdlAnalyticsAccount -Name $adla -FirewallState Enabled
Set-AdlAnalyticsAccount -Name $adla -FirewallState Disabled

使用 Azure

取得錯誤詳細資料

Resolve-AzError -Last

確認您在 Windows 機器上是否以系統管理員的身分執行

function Test-Administrator  
{  
    $user = [Security.Principal.WindowsIdentity]::GetCurrent();
    $p = New-Object Security.Principal.WindowsPrincipal $user
    $p.IsInRole([Security.Principal.WindowsBuiltinRole]::Administrator)  
}

尋找 TenantID

從訂用帳戶名稱:

function Get-TenantIdFromSubscriptionName( [string] $subname )
{
    $sub = (Get-AzSubscription -SubscriptionName $subname)
    $sub.TenantId
}

Get-TenantIdFromSubscriptionName "ADLTrainingMS"

從訂用帳戶識別碼:

function Get-TenantIdFromSubscriptionId( [string] $subid )
{
    $sub = (Get-AzSubscription -SubscriptionId $subid)
    $sub.TenantId
}

$subid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
Get-TenantIdFromSubscriptionId $subid

從網域位址 (例如 "contoso.com")

function Get-TenantIdFromDomain( $domain )
{
    $url = "https://login.windows.net/" + $domain + "/.well-known/openid-configuration"
    return (Invoke-WebRequest $url|ConvertFrom-Json).token_endpoint.Split('/')[3]
}

$domain = "contoso.com"
Get-TenantIdFromDomain $domain

列出您的所有訂用帳戶和租用戶識別碼

$subs = Get-AzSubscription
foreach ($sub in $subs)
{
    Write-Host $sub.Name "("  $sub.Id ")"
    Write-Host "`tTenant Id" $sub.TenantId
}

下一步