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
Langganan Azure. Lihat Mendapatkan uji coba gratis Azure.
Akun penyimpanan yang mengaktifkan namespace hierarkis. Ikuti petunjuk berikut untuk membuatnya.
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:
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:
- Buat
DataLakeFileClient
objek untuk mewakili file yang ingin Anda unduh. - Buka file lokal untuk ditulis.
- Panggil metode DataLakeFileClient.download_file untuk membaca dari file, lalu tulis data ke file lokal.
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()