다음을 통해 공유


Python을 사용하여 Microsoft OneLake에서 파일 및 폴더 관리

이 문서에서는 Azure Storage Python SDK를 사용하여 OneLake에서 파일과 디렉터리를 관리하는 방법을 보여줍니다. 이 연습에서는 Python을 사용하여 ADLS Gen2에서 디렉터리 및 파일 관리와 동일한 내용을 다루고, OneLake에 연결할 때의 차이점을 강조합니다.

필수 조건

시작하기 전에 다음 필수 구성 요소가 있는지 확인합니다.

  • 기여자 권한이 있는 Fabric 테넌트의 작업 영역
  • 작업 영역의 레이크하우스. 필요에 따라 Python을 사용하여 읽을 수 있도록 데이터를 미리 로드합니다.

프로젝트 설정

프로젝트 디렉터리에서 Azure Data Lake Storage 및 Azure Identity 클라이언트 라이브러리에 대한 패키지를 설치합니다. OneLake는 ADLS(Azure Data Lake Storage) Gen2와 동일한 SDK를 지원하고, azure-identity 패키지에서 제공하는 Microsoft Entra 인증을 지원합니다.

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

다음으로, 필요한 import 문을 코드 파일에 추가합니다.

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

OneLake에 대한 액세스 권한 부여

다음 예제에서는 다른 작업에 대한 파일 시스템 클라이언트를 만드는 데 사용할 수 있는 OneLake에 연결된 서비스 클라이언트를 만듭니다. OneLake에 인증하기 위해 이 예제에서는 DefaultAzureCredential을 사용하여 자격 증명을 자동으로 검색하고 올바른 인증 토큰을 가져옵니다. Azure SDK에 대한 자격 증명을 제공하는 일반적인 방법은 Azure 명령줄 인터페이스에서 'az login' 명령을 사용하거나 Azure PowerShell에서 'Connect-AzAccount' cmdlet을 사용하는 것입니다.

def get_service_client_token_credential(self, account_name) -> DataLakeServiceClient:
    account_url = f"https://{account_name}.dfs.fabric.microsoft.com"
    token_credential = DefaultAzureCredential()

    service_client = DataLakeServiceClient(account_url, credential=token_credential)

    return service_client

DefaultAzureCredential을 사용하여 데이터에 대한 액세스 권한을 부여하는 방법에 대한 자세한 내용은 개요: Azure SDK를 사용하여 Azure에 Python 앱 인증을 참조하세요.

디렉터리 작업

OneLake에서 디렉터리 작업을 수행하려면 파일 시스템 클라이언트와 디렉터리 클라이언트를 만듭니다. 이 디렉터리 클라이언트를 사용하여 경로 이름 바꾸기, 이동 또는 나열(다음 예제와 같이)을 포함한 다양한 작업을 수행할 수 있습니다. FileSystemClient.create_directory 메서드를 사용하여 디렉터리를 만들 때 디렉터리 클라이언트를 만들 수도 있습니다.

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

def create_directory_client(self, file_system_client : FileSystemClient, path: str) -> DataLakeDirectoryClient: directory_client 
    directory_client = file_system_client.GetDirectoryClient(path)
    return directory_client


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

파일 업로드하기

DataLakeFileClient.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(dataW, overwrite=True)

Sample

다음 코드 샘플에서는 OneLake에 있는 폴더의 디렉터리 항목을 나열합니다.

#Install the correct packages first in the same folder as this file. 
#pip install azure-storage-file-datalake azure-identity

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

# Set your account, workspace, and item path here
ACCOUNT_NAME = "onelake"
WORKSPACE_NAME = "<myWorkspace>"
DATA_PATH = "<myLakehouse>.Lakehouse/Files/<path>"

def main():
    #Create a service client using the default Azure credential

    account_url = f"https://{ACCOUNT_NAME}.dfs.fabric.microsoft.com"
    token_credential = DefaultAzureCredential()
    service_client = DataLakeServiceClient(account_url, credential=token_credential)

    #Create a file system client for the workspace
    file_system_client = service_client.get_file_system_client(WORKSPACE_NAME)
    
    #List a directory within the filesystem
    paths = file_system_client.get_paths(path=DATA_PATH)

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

if __name__ == "__main__":
    main()

이 샘플을 실행하려면 위의 코드를 listOneLakeDirectory.py 파일에 저장하고 동일한 디렉터리에서 다음 명령을 실행합니다. 이 예제에서 작업 영역과 경로를 사용자 고유의 값으로 바꾸세요.

python listOneLakeDirectory.py