Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, hiyerarşik ad alanına sahip depolama hesaplarında dizinleri ve dosyaları oluşturmak ve yönetmek için Python'ın nasıl kullanılacağı gösterilmektedir.
Dizinlerin ve dosyaların erişim denetim listelerini (ACL) alma, ayarlama ve güncelleştirme hakkında bilgi edinmek için bkz . Azure Data Lake Storage'da ACL'leri yönetmek için Python kullanma.
Paket (PyPi) | Örnek | API başvurusu | 1. Nesil ile 2. Nesil eşlemesi | Geri Bildirim Ver
Önkoşullar
Azure aboneliği. Bkz. Azure ücretsiz deneme sürümü alma.
Hiyerarşik ad alanı etkinleştirilmiş bir depolama hesabı. Bir tane oluşturmak için bu yönergeleri izleyin.
Projenizi ayarlama
Bu bölümde, Python için Azure Data Lake Storage istemci kitaplığıyla çalışmak üzere bir proje hazırlama adımları açıklanmaktadır.
Proje dizininizden komutunu kullanarak pip install Azure Data Lake Storage ve Azure Identity istemci kitaplıkları için paketleri yükleyin.
Azure hizmetlerine parolasız bağlantılar için azure-identity paketi gereklidir.
pip install azure-storage-file-datalake azure-identity
Ardından kod dosyanızı açın ve gerekli import ifadelerini ekleyin. Bu örnekte, .py dosyamıza aşağıdakileri ekleyeceğiz:
import os
from azure.storage.filedatalake import (
DataLakeServiceClient,
DataLakeDirectoryClient,
FileSystemClient
)
from azure.identity import DefaultAzureCredential
Not
Data Lake Storage'da çoklu protokol erişimi, uygulamaların hiyerarşik ad alanı (HNS) etkinleştirilmiş depolama hesaplarındaki verilerle çalışmak için hem Blob API'lerini hem de Data Lake Storage 2. Nesil API'lerini kullanmasını sağlar. Dizin işlemleri ve ACL'ler gibi Data Lake Storage 2. Nesil benzersiz özelliklerle çalışırken, bu makalede gösterildiği gibi Data Lake Storage 2. Nesil API'lerini kullanın.
Belirli bir senaryoda kullanılacak API'leri seçerken, HNS'nin iş yükleri ve uygulamalar üzerindeki bilinen sorunları ve etkisinin yanı sıra uygulamanızın iş yükünü ve gereksinimlerini göz önünde bulundurun.
Erişimi yetkilendirme ve veri kaynaklarına bağlanma
Bu makaledeki kod örnekleriyle çalışmak için depolama hesabını temsil eden yetkili bir DataLakeServiceClient örneği oluşturmanız gerekir. Microsoft Entra ID, hesap erişim anahtarı veya paylaşılan erişim imzası (SAS) kullanarak nesneyi yetkilendirilebilirsinizDataLakeServiceClient.
Microsoft Entra ID ile uygulamanızın kimliğini doğrulamak için Python için Azure kimlik istemci kitaplığını kullanabilirsiniz.
DataLakeServiceClient sınıfının bir örneğini oluşturun ve DefaultAzureCredential nesnesini geçirin.
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
Verilere erişimi yetkilendirmek için kullanma DefaultAzureCredential hakkında daha fazla bilgi edinmek için bkz . Genel Bakış: Azure SDK'yı kullanarak Azure'da Python uygulamalarının kimliğini doğrulama.
Kapsayıcı oluşturma
Kapsayıcı, dosyalarınız için dosya sistemi görevi görür. Aşağıdaki yöntemi kullanarak kapsayıcı oluşturabilirsiniz:
Aşağıdaki kod örneği bir kapsayıcı oluşturur ve daha sonra kullanmak üzere bir FileSystemClient nesnesi döndürür:
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
Dizin oluşturma
Aşağıdaki yöntemi kullanarak kapsayıcıda dizin referansı oluşturabilirsiniz:
Aşağıdaki kod örneği kapsayıcıya bir dizin ekler ve daha sonra kullanmak üzere bir DataLakeDirectoryClient nesnesi döndürür:
def create_directory(self, file_system_client: FileSystemClient, directory_name: str) -> DataLakeDirectoryClient:
directory_client = file_system_client.create_directory(directory_name)
return directory_client
Bir dizini yeniden adlandırma veya taşıma
Aşağıdaki yöntemi kullanarak dizini yeniden adlandırabilir veya taşıyabilirsiniz:
new_name bağımsız değişkenine yeni dizin adını içeren yolu geçirin. Değer şu biçime sahip olmalıdır: {filesystem}/{directory}/{subdirectory}.
Aşağıdaki kod örneğinde bir alt dizinin nasıl yeniden adlandırılası gösterilmektedir:
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}")
Dizine dosya yükleme
Aşağıdaki yöntemi kullanarak içeriği yeni veya mevcut bir dosyaya yükleyebilirsiniz:
Aşağıdaki kod örneği, upload_data yöntemini kullanarak bir dosyanın bir dizine nasıl yüklendiğini gösterir:
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)
Bu yöntemi, yeni bir dosyada içerik oluşturup yüklemek için kullanabilir veya mevcut bir dosyanın üzerine yazmak için overwrite argümanını True olarak ayarlayabilirsiniz.
Dosyaya veri ekleme
Bir dosyaya veri eklemek için aşağıdaki yöntemi kullanın:
Aşağıdaki kod örneği, aşağıdaki adımları kullanarak dosyanın sonuna veri eklemeyi gösterir:
- Üzerinde çalıştığınız dosya kaynağını temsil eden bir DataLakeFileClient nesnesi oluşturun.
- append_data yöntemini kullanarak verileri dosyaya yükleyin.
- Daha önce karşıya yüklenen verileri dosyaya yazmak için flush_data yöntemini çağırarak karşıya yüklemeyi tamamlayın.
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))
Bu yöntemle veriler yalnızca bir dosyaya eklenebilir ve işlem istek başına 4000 MiB ile sınırlıdır.
Dizinden indirme
Aşağıdaki kod örneğinde, aşağıdaki adımları kullanarak bir dizinden yerel dosyaya dosya indirme işlemi gösterilmektedir:
- İndirmek istediğiniz dosyayı temsil eden bir DataLakeFileClient nesnesi oluşturun.
- Yazmak için yerel bir dosya açın.
- dosyadan okumak için DataLakeFileClient.download_file yöntemini çağırın ve ardından verileri yerel dosyaya yazın.
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()
Dizin içeriğini listeleme
Dizin içeriğini listelemek için aşağıdaki yöntemi kullanabilir ve sonucu numaralandırabilirsiniz:
Sonuçtaki yolların listelenmesi, değerler getirilirken hizmete birden çok istek yapılmasına neden olabilir.
Aşağıdaki kod örneği, bir dizinde bulunan her alt dizinin ve dosyanın yolunu yazdırır:
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')
Bir dizini silme
Aşağıdaki yöntemi kullanarak bir dizini silebilirsiniz:
Aşağıdaki kod örneğinde bir dizinin nasıl silineceği gösterilmektedir:
def delete_directory(self, directory_client: DataLakeDirectoryClient):
directory_client.delete_directory()