Címtárak és fájlok kezelése a Python használatával az Azure Data Lake Storage Gen2-ben
Ez a cikk bemutatja, hogyan hozhat létre és kezelhet címtárakat és fájlokat a Python használatával hierarchikus névtérrel rendelkező tárfiókokban.
A címtárak és fájlok hozzáférés-vezérlési listáinak (ACL) beszerzéséről, beállításáról és frissítéséről a Python használata az Azure Data Lake Storage Gen2 ACL-einek kezeléséhez című témakörben olvashat.
Package (PyPi) | Samples | API reference | Gen1 to Gen2 mapping | Give Feedback
Előfeltételek
Azure-előfizetés. Lásd: Ingyenes Azure-fiók létrehozása.
Olyan tárfiók, amely engedélyezve van a hierarchikus névtérrel . Az alábbi utasításokat követve hozzon létre egyet.
A projekt beállítása
Ez a szakasz végigvezeti egy projekt előkészítésén a Pythonhoz készült Azure Data Lake Storage-ügyfélkódtár használatához.
A projektkönyvtárból telepítse az Azure Data Lake Storage- és Az Azure Identity-ügyfélkódtárak csomagjait a pip install
parancs használatával. Az Azure-szolgáltatásokhoz való jelszó nélküli kapcsolatokhoz az Azure-identitáscsomagra van szükség.
pip install azure-storage-file-datalake azure-identity
Ezután nyissa meg a kódfájlt, és adja hozzá a szükséges importálási utasításokat. Ebben a példában a következőket adjuk hozzá a .py fájlhoz:
import os
from azure.storage.filedatalake import (
DataLakeServiceClient,
DataLakeDirectoryClient,
FileSystemClient
)
from azure.identity import DefaultAzureCredential
Feljegyzés
A Data Lake Storage többprotokollos hozzáférése lehetővé teszi az alkalmazások számára, hogy a Blob API-kat és a Data Lake Storage Gen2 API-kat is használják a hierarchikus névtérrel (HNS) rendelkező tárfiókokban lévő adatok kezeléséhez. A Data Lake Storage Gen2-ben egyedülálló képességek, például a címtárműveletek és az ACL-ek használatakor használja a Data Lake Storage Gen2 API-kat, ahogyan az ebben a cikkben látható.
Az adott forgatókönyvben használni kívánt API-k kiválasztásakor vegye figyelembe az alkalmazás számítási feladatait és igényeit, valamint a HNS ismert problémáit és a számítási feladatokra és alkalmazásokra gyakorolt hatását.
Hozzáférés engedélyezése és csatlakozás az adaterőforrásokhoz
A cikkben szereplő példakódok használatához létre kell hoznia egy hitelesített DataLakeServiceClient-példányt , amely a tárfiókot jelöli. Az objektumokat DataLakeServiceClient
a Microsoft Entra-azonosító, a fiókhozzáférés kulcsa vagy a közös hozzáférésű jogosultságkód (SAS) használatával engedélyezheti.
A PythonHoz készült Azure Identity-ügyfélkódtár használatával hitelesítheti az alkalmazást a Microsoft Entra ID azonosítójával.
Hozza létre a DataLakeServiceClient osztály egy példányát, és adjon át egy DefaultAzureCredential objektumot.
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
További információ az adatokhoz való hozzáférés engedélyezésérőlDefaultAzureCredential
: Áttekintés: Python-alkalmazások hitelesítése az Azure-ban az Azure SDK használatával.
Tároló létrehozása
A tároló fájlrendszerként működik a fájlokhoz. Tárolót a következő módszerrel hozhat létre:
Az alábbi példakód létrehoz egy tárolót, és visszaad egy FileSystemClient
objektumot későbbi használatra:
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
Címtár létrehozása
A tárolóban a következő módszerrel hozhat létre címtárhivatkozást:
Az alábbi példakód egy könyvtárat ad hozzá egy tárolóhoz, és visszaad egy DataLakeDirectoryClient
objektumot későbbi használatra:
def create_directory(self, file_system_client: FileSystemClient, directory_name: str) -> DataLakeDirectoryClient:
directory_client = file_system_client.create_directory(directory_name)
return directory_client
Címtár átnevezése vagy áthelyezése
A címtárak átnevezhetők vagy áthelyezhetők a következő módszerrel:
Adja meg az elérési utat az argumentum új new_name
könyvtárnevével. Az értéknek a következő formátummal kell rendelkeznie: {filesystem}/{directory}/{subdirectory}.
Az alábbi példakód bemutatja, hogyan nevezhet át alkönyvtárat:
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}")
Fájl feltöltése könyvtárba
A következő módszerrel tölthet fel tartalmat egy új vagy meglévő fájlba:
Az alábbi példakód bemutatja, hogyan tölthet fel fájlokat egy könyvtárba a upload_data metódus használatával:
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)
Ezzel a módszerrel tartalmakat hozhat létre és tölthet fel egy új fájlba, vagy beállíthatja az overwrite
argumentumot True
egy meglévő fájl felülírására.
Adatok hozzáfűzése fájlhoz
A fájlhoz fűzendő adatokat az alábbi módszerrel töltheti fel:
Az alábbi példakód bemutatja, hogyan fűzhet adatokat egy fájl végéhez az alábbi lépésekkel:
- Hozzon létre egy
DataLakeFileClient
objektumot, amely a használt fájlerőforrást jelöli. - Adatok feltöltése a fájlba a append_data metódussal.
- Töltse ki a feltöltést úgy, hogy meghívja a flush_data metódust a korábban feltöltött adatok fájlba írásához.
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))
Ezzel a módszerrel az adatok csak egy fájlhoz fűzhetők, és a művelet kérésenként legfeljebb 4000 MiB lehet.
Letöltés könyvtárból
Az alábbi példakód bemutatja, hogyan tölthet le egy fájlt egy könyvtárból egy helyi fájlba az alábbi lépésekkel:
- Hozzon létre egy
DataLakeFileClient
objektumot, amely a letölteni kívánt fájlt jelöli. - Nyisson meg egy helyi fájlt íráshoz.
- Hívja meg a DataLakeFileClient.download_file metódust a fájlból való olvasáshoz, majd írja be az adatokat a helyi fájlba.
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()
Könyvtár tartalmának listázása
A címtár tartalmát az alábbi módszerrel és az eredmény számbavételével listázhatja:
Az eredményben szereplő elérési utak számbavétele több kérést is eredményezhet a szolgáltatáshoz az értékek beolvasása közben.
Az alábbi példakód a könyvtárban található alkönyvtárak és fájlok elérési útját nyomtatja ki:
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')
Könyvtár törlése
A következő módszerrel törölheti a címtárat:
Az alábbi példakód bemutatja, hogyan törölhet egy könyvtárat:
def delete_directory(self, directory_client: DataLakeDirectoryClient):
directory_client.delete_directory()