Aracılığıyla paylaş


Azure Data Lake Storage sorgu hızlandırmasını kullanarak verileri filtreleme

Bu makalede, depolama hesabınızdan bir veri alt kümesini almak için sorgu hızlandırmanın nasıl kullanılacağı gösterilmektedir.

Sorgu hızlandırma, uygulamaların ve analiz çerçevelerinin yalnızca belirli bir işlemi gerçekleştirmek için ihtiyaç duydukları verileri alarak veri işlemeyi önemli ölçüde iyileştirmesini sağlar. Daha fazla bilgi edinmek için bkz. Azure Data Lake Storage Sorgu Hızlandırma.

Önkoşullar

  • Azure Depolama'ya erişmek için bir Azure aboneliğiniz olmalıdır. Henüz aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

  • Genel amaçlı v2 depolama hesabı. Bkz. Depolama hesabı oluşturma.

  • Çift şifreleme desteklenmez.

  • Bir JSON dosyasını sorgulıyorsanız, bu dosyadaki her kayıt boyutu 1 MB'tan küçük olmalıdır.

  • SDK'ya özgü önkoşulları görüntülemek için bir sekme seçin.

    Uygulanamaz


Ortamınızı ayarlama

1. Adım: Paketleri yükleme

Az modülünün 4.6.0 veya sonraki bir sürümünü yükleyin.

Install-Module -Name Az -Repository PSGallery -Force

Az'nin eski bir sürümünden güncelleştirmek için aşağıdaki komutu çalıştırın:

Update-Module -Name Az

2. Adım: Deyim ekleme

Uygulanamaz

Filtre kullanarak veri alma

Sorgu hızlandırma isteğinde satır filtresi koşullarını ve sütun projeksiyonlarını belirtmek için SQL kullanabilirsiniz. Aşağıdaki kod, depolamadaki bir CSV dosyasını sorgular ve üçüncü sütunun değeriyle Hemingway, Ernesteşleştiği tüm veri satırlarını döndürür.

  • SQL sorgusunda anahtar sözcüğü BlobStorage sorgulanan dosyayı belirtmek için kullanılır.

  • Sütun başvuruları, ilk sütunun _N olduğu yer olarak _1 belirtilir. Kaynak dosya üst bilgi satırı içeriyorsa, sütunlara üst bilgi satırında belirtilen isimlere göre referans alabilirsiniz.

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders -RecordSeparator "`n" -ColumnSeparator "," -QuotationCharacter """" -EscapeCharacter "\"
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader -RecordSeparator "`n" -ColumnSeparator "," -QuotationCharacter """" -EscapeCharacter "\") -ResultFile $tempfile.FullName -QueryString $query -Force
    Get-Content $tempfile.FullName
}

$container = "data"
$blob = "csv/csv-general/seattle-library.csv"
Get-QueryCsv $ctx $container $blob "SELECT * FROM BlobStorage WHERE _3 = 'Hemingway, Ernest, 1899-1961'" $false

Belirli sütunları alma

Sonuçlarınızın kapsamını bir sütun alt kümesi olarak belirleyebilirsiniz. Bu şekilde yalnızca belirli bir hesaplamayı gerçekleştirmek için gereken sütunları alırsınız. Bu, ağ üzerinden daha az veri aktarıldığı için uygulama performansını artırır ve maliyeti azaltır.

Uyarı

Sonuçlarınızı kapsam olarak kullanabileceğiniz en fazla sütun sayısı 49'dur. Sonuçlarınızın 49'dan fazla sütun içermesi gerekiyorsa, SELECT ifadesi için bir joker karakter (*) kullanın (Örneğin: SELECT *).

Bu kod yalnızca veri kümesindeki BibNum tüm kitapların sütununu alır. Ayrıca, sorgudaki sütunlara başvurmak için kaynak dosyadaki üst bilgi satırındaki bilgileri kullanır.

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader) -ResultFile $tempfile.FullName -QueryString $query -Force
    Get-Content $tempfile.FullName
}

$container = "data"
$blob = "csv/csv-general/seattle-library-with-headers.csv"
Get-QueryCsv $ctx $container $blob "SELECT BibNum FROM BlobStorage" $true

Aşağıdaki kod, satır filtreleme ve sütun projeksiyonlarını aynı sorguda birleştirir.

Get-QueryCsv $ctx $container $blob $query $true

Function Get-QueryCsv($ctx, $container, $blob, $query, $hasheaders) {
    $tempfile = New-TemporaryFile
    $informat = New-AzStorageBlobQueryConfig -AsCsv -HasHeader:$hasheaders
    Get-AzStorageBlobQueryResult -Context $ctx -Container $container -Blob $blob -InputTextConfiguration $informat -OutputTextConfiguration (New-AzStorageBlobQueryConfig -AsCsv -HasHeader) -ResultFile $tempfile.FullName -QueryString $query -Force
    Get-Content $tempfile.FullName
}

$container = "data"
$query = "SELECT BibNum, Title, Author, ISBN, Publisher, ItemType
            FROM BlobStorage
            WHERE ItemType IN
                ('acdvd', 'cadvd', 'cadvdnf', 'calndvd', 'ccdvd', 'ccdvdnf', 'jcdvd', 'nadvd', 'nadvdnf', 'nalndvd', 'ncdvd', 'ncdvdnf')"

Sonraki adımlar