Bagikan melalui


Memfilter data dengan menggunakan akselerasi kueri Azure Data Lake Storage

Artikel ini memperlihatkan kepada Anda cara menggunakan akselerasi kueri untuk mengambil subset data dari akun penyimpanan Anda.

Akselerasi kueri memungkinkan aplikasi dan kerangka kerja analitik untuk mengoptimalkan pemrosesan data secara dramatis dengan hanya mengambil data yang mereka butuhkan untuk melakukan operasi tertentu. Untuk mempelajari selengkapnya, lihat Akselerasi Kueri Azure Data Lake Storage.

Prasyarat

  • Untuk mengakses Azure Storage, Anda perlu berlangganan Azure. Jika Anda belum berlangganan, buat akun gratis sebelum memulai.

  • Akun penyimpanan tujuan umum v2. lihat Membuat akun penyimpanan.

  • Enkripsi ganda tidak didukung.

  • Jika Anda mengkueri file JSON, setiap ukuran rekaman dalam file ini harus lebih kecil dari 1MB.

  • Pilih tab untuk melihat prasyarat khusus SDK apa pun.

    Tidak berlaku


Siapkan lingkungan Anda

Langkah 1: Instal paket

Instal modul Az versi 4.6.0 atau yang lebih tinggi.

Install-Module -Name Az -Repository PSGallery -Force

Untuk memperbarui dari versi Az yang lebih lama, jalankan perintah berikut:

Update-Module -Name Az

Langkah 2: Tambahkan pernyataan

Tidak berlaku

Mengambil data dengan menggunakan filter

Anda dapat menggunakan SQL untuk menentukan predikat filter baris dan proyeksi kolom dalam permintaan akselerasi kueri. Kode berikut meminta file CSV di penyimpanan dan mengembalikan semua baris data di mana kolom ketiga cocok dengan nilai Hemingway, Ernest.

  • Dalam kueri SQL, kata kunci BlobStorage digunakan untuk menunjukkan file yang sedang dikueri.

  • Referensi kolom ditentukan sebagai _N tempat kolom pertama adalah _1. Jika file sumber berisi baris header, maka Anda bisa merujuk ke kolom dengan nama yang ditentukan di baris header.

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

Mengambil kolom tertentu

Anda dapat membatasi hasil Anda pada subset kolom. Dengan begitu Anda hanya mengambil kolom yang diperlukan untuk melakukan penghitungan tertentu. Ini meningkatkan performa aplikasi dan mengurangi biaya karena lebih sedikit data yang ditransfer melalui jaringan.

Nota

Jumlah maksimum kolom yang dapat Anda cakup hasilnya adalah 49. Jika Anda memerlukan hasil Anda untuk berisi lebih dari 49 kolom, gunakan karakter kartubebas (*) untuk ekspresi SELECT (Misalnya: SELECT *).

Kode ini hanya mengambil kolom BibNum untuk semua buku dalam himpunan data. Ini juga menggunakan informasi dari baris header dalam file sumber untuk mereferensikan kolom dalam kueri.

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

Kode berikut menggabungkan pemfilteran baris dan proyeksi kolom ke dalam kueri yang sama.

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')"

Langkah berikutnya