Menggunakan Python untuk mengelola file dan folder di Microsoft OneLake

Artikel ini memperlihatkan bagaimana Anda dapat menggunakan Azure Storage Python SDK untuk mengelola file dan direktori di OneLake. Panduan ini mencakup konten yang sama dengan Gunakan Python untuk mengelola direktori dan file di ADLS Gen2 dan menyoroti perbedaan saat menyambungkan ke OneLake.

Prasyarat

Sebelum memulai proyek, pastikan Anda memiliki prasyarat berikut:

  • Ruang kerja di penyewa Fabric Anda dengan izin Kontributor.
  • Sebuah lakehouse di ruang kerja. Secara opsional, memiliki data yang telah dimuat sebelumnya untuk dibaca menggunakan Python.

Menyiapkan proyek Anda

Dari direktori proyek Anda, instal paket untuk pustaka klien Azure Data Lake Storage dan Azure Identity. OneLake mendukung SDK yang sama dengan Azure Data Lake Storage (ADLS) Gen2 dan mendukung autentikasi Microsoft Entra, yang disediakan oleh paket identitas azure.

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

Selanjutnya, tambahkan pernyataan impor yang diperlukan ke file kode Anda:

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

Mengotorisasi akses ke OneLake

Contoh berikut membuat klien layanan yang terhubung ke OneLake yang dapat Anda gunakan untuk membuat klien sistem file untuk operasi lain. Untuk mengautentikasi ke OneLake, contoh ini menggunakan DefaultAzureCredential untuk mendeteksi kredensial secara otomatis dan mendapatkan token autentikasi yang benar. Metode umum penyediaan kredensial untuk Azure SDK termasuk menggunakan perintah 'az login' di Antarmuka Baris Perintah Azure atau cmdlet 'Koneksi-AzAccount' dari Azure PowerShell.

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

Untuk mempelajari selengkapnya tentang menggunakan DefaultAzureCredential untuk mengotorisasi akses ke data, lihat Gambaran Umum: Mengautentikasi aplikasi Python ke Azure menggunakan Azure SDK.

Bekerja dengan direktori

Untuk bekerja dengan direktori di OneLake, buat klien sistem file dan klien direktori. Anda dapat menggunakan klien direktori ini untuk melakukan berbagai operasi, termasuk mengganti nama, memindahkan, atau mencantumkan jalur (seperti yang terlihat dalam contoh berikut). Anda juga dapat membuat klien direktori saat membuat direktori, menggunakan metode 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')

Mengunggah file

Anda dapat mengunggah konten ke file baru atau yang sudah ada dengan menggunakan metode 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)

Sampel

Sampel kode berikut mencantumkan konten direktori folder apa pun di 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()

Untuk menjalankan sampel ini, simpan kode sebelumnya ke dalam file listOneLakeDirectory.py dan jalankan perintah berikut di direktori yang sama. Ingatlah untuk mengganti ruang kerja dan jalur dengan nilai Anda sendiri dalam contoh.

python listOneLakeDirectory.py