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