Gunakan Python untuk mengelola direktori dan file di Azure Data Lake Storage Gen2

Artikel ini menunjukkan cara menggunakan Python untuk membuat dan mengelola direktori dan file di akun penyimpanan yang memiliki namespace hierarkis.

Untuk mempelajari tentang cara mendapatkan, mengatur, dan memperbarui daftar kontrol akses (ACL) direktori dan file, lihat Gunakan Python untuk mengelola ACL di Azure Data Lake Storage Gen2.

Paket (PyPi) | Sampel | referensi | API Gen1 ke pemetaan | Gen2 Beri Umpan Balik

Prasyarat

Menyiapkan proyek Anda

Bagian ini memandu Anda menyiapkan proyek untuk bekerja dengan pustaka klien Azure Data Lake Storage untuk Python.

Dari direktori proyek Anda, instal paket untuk pustaka klien Azure Data Lake Storage dan Azure Identity menggunakan pip install perintah . Paket identitas azure diperlukan untuk koneksi tanpa kata sandi ke layanan Azure.

pip install azure-storage-file-datalake azure-identity

Kemudian buka file kode Anda dan tambahkan pernyataan impor yang diperlukan. Dalam contoh ini, kami menambahkan yang berikut ke file .py kami:

import os
from azure.storage.filedatalake import (
    DataLakeServiceClient,
    DataLakeDirectoryClient,
    FileSystemClient
)
from azure.identity import DefaultAzureCredential

Catatan

Akses multi-protokol pada Data Lake Storage memungkinkan aplikasi menggunakan API Blob dan API Data Lake Storage Gen2 untuk bekerja dengan data di akun penyimpanan dengan namespace hierarkis (HNS) diaktifkan. Saat bekerja dengan kemampuan yang unik untuk Data Lake Storage Gen2, seperti operasi direktori dan ACL, gunakan API Data Lake Storage Gen2, seperti yang ditunjukkan dalam artikel ini.

Saat memilih API mana yang akan digunakan dalam skenario tertentu, pertimbangkan beban kerja dan kebutuhan aplikasi Anda, bersama dengan masalah yang diketahui dan dampak HNS pada beban kerja dan aplikasi.

Mengotorisasi akses dan menyambungkan ke sumber daya data

Untuk bekerja dengan contoh kode dalam artikel ini, Anda perlu membuat instans DataLakeServiceClient resmi yang mewakili akun penyimpanan. Anda dapat mengotorisasi DataLakeServiceClient objek menggunakan ID Microsoft Entra, kunci akses akun, atau tanda tangan akses bersama (SAS).

Anda dapat menggunakan pustaka klien identitas Azure untuk Python untuk mengautentikasi aplikasi Anda dengan ID Microsoft Entra.

Buat instans kelas DataLakeServiceClient dan teruskan objek DefaultAzureCredential .

def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
    account_url = f"https://{account_name}.dfs.core.windows.net"
    token_credential = DefaultAzureCredential()

    service_client = DataLakeServiceClient(account_url, credential=token_credential)

    return service_client

Untuk mempelajari selengkapnya tentang menggunakan DefaultAzureCredential untuk mengotorisasi akses ke data, lihat Gambaran Umum: Mengautentikasi aplikasi Python ke Azure menggunakan Azure SDK.

Membuat kontainer

Kontainer bertindak sebagai sistem file untuk file Anda. Anda dapat membuat kontainer dengan menggunakan metode berikut:

Contoh kode berikut membuat kontainer dan mengembalikan FileSystemClient objek untuk digunakan nanti:

def create_file_system(self, service_client: DataLakeServiceClient, file_system_name: str) -> FileSystemClient:
    file_system_client = service_client.create_file_system(file_system=file_system_name)

    return file_system_client

Membuat direktori

Anda dapat membuat referensi direktori dalam kontainer dengan menggunakan metode berikut:

Contoh kode berikut menambahkan direktori ke kontainer dan mengembalikan DataLakeDirectoryClient objek untuk digunakan nanti:

def create_directory(self, file_system_client: FileSystemClient, directory_name: str) -> DataLakeDirectoryClient:
    directory_client = file_system_client.create_directory(directory_name)

    return directory_client

Ganti nama atau pindahkan direktori

Anda dapat mengganti nama atau memindahkan direktori dengan menggunakan metode berikut:

Teruskan jalur dengan nama direktori baru dalam new_name argumen . Nilai harus memiliki format berikut: {filesystem}/{directory}/{subdirektori}.

Contoh kode berikut menunjukkan cara mengganti nama subdirektori:

def rename_directory(self, directory_client: DataLakeDirectoryClient, new_dir_name: str):
    directory_client.rename_directory(
        new_name=f"{directory_client.file_system_name}/{new_dir_name}")

Unggah file ke direktori

Anda dapat mengunggah konten ke file baru atau yang sudah ada dengan menggunakan metode berikut:

Contoh kode berikut menunjukkan cara mengunggah file ke direktori menggunakan metode upload_data :

def upload_file_to_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
    file_client = directory_client.get_file_client(file_name)

    with open(file=os.path.join(local_path, file_name), mode="rb") as data:
        file_client.upload_data(data, overwrite=True)

Anda dapat menggunakan metode ini untuk membuat dan mengunggah konten ke file baru, atau Anda dapat mengatur overwrite argumen untuk True menimpa file yang sudah ada.

Menambahkan data ke file

Anda dapat mengunggah data untuk ditambahkan ke file dengan menggunakan metode berikut:

  • metode DataLakeFileClient.append_data.

Contoh kode berikut menunjukkan cara menambahkan data ke akhir file menggunakan langkah-langkah berikut:

  • Buat DataLakeFileClient objek untuk mewakili sumber daya file yang sedang Anda kerjakan.
  • Unggah data ke file menggunakan metode append_data .
  • Selesaikan unggahan dengan memanggil metode flush_data untuk menulis data yang diunggah sebelumnya ke file.
def append_data_to_file(self, directory_client: DataLakeDirectoryClient, file_name: str):
    file_client = directory_client.get_file_client(file_name)
    file_size = file_client.get_file_properties().size
    
    data = b"Data to append to end of file"
    file_client.append_data(data, offset=file_size, length=len(data))

    file_client.flush_data(file_size + len(data))

Dengan metode ini, data hanya dapat ditambahkan ke file dan operasi dibatasi hingga 4000 MiB per permintaan.

Unduh dari direktori

Contoh kode berikut menunjukkan cara mengunduh file dari direktori ke file lokal menggunakan langkah-langkah berikut:

def download_file_from_directory(self, directory_client: DataLakeDirectoryClient, local_path: str, file_name: str):
    file_client = directory_client.get_file_client(file_name)

    with open(file=os.path.join(local_path, file_name), mode="wb") as local_file:
        download = file_client.download_file()
        local_file.write(download.readall())
        local_file.close()

Daftar isi direktori

Anda dapat mencantumkan konten direktori dengan menggunakan metode berikut dan menghitung hasilnya:

Menghitung jalur dalam hasil dapat membuat beberapa permintaan ke layanan sambil mengambil nilai.

Contoh kode berikut mencetak jalur setiap subdirektori dan file yang terletak di direktori:

def list_directory_contents(self, file_system_client: FileSystemClient, directory_name: str):
    paths = file_system_client.get_paths(path=directory_name)

    for path in paths:
        print(path.name + '\n')

Hapus direktori

Anda dapat menghapus direktori dengan menggunakan metode berikut:

Contoh kode berikut menunjukkan cara menghapus direktori:

def delete_directory(self, directory_client: DataLakeDirectoryClient):
    directory_client.delete_directory()

Lihat juga