Megosztás a következőn keresztül:


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

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:

  • DataLakeFileClient.append_data metódus.

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()

Lásd még