Aracılığıyla paylaş


Yapı Kullanıcı verisi işlevleri programlama modeline genel bakış

Doku Kullanıcısı veri işlevleri programlama modeli, Doku'da işlev yazma desenlerini ve kavramlarını tanımlar.

fabric-user-data-functions SDK, çalıştırılabilir işlevleri yazmak ve yayımlamak için gerekli işlevleri sağlayarak bu programlama modelini uygular. SDK ayrıca Doku ekosistemindeki Doku veri kaynakları gibi diğer öğelerle sorunsuz bir şekilde tümleştirmenizi sağlar. Bu kitaplık PyPI'de genel kullanıma açıktır ve kullanıcı verileri işlevleri öğelerinizde önceden yüklenmiştir.

Bu makalede, REST API kullanılarak Doku portalından, diğer Doku öğelerinden veya dış uygulamalardan çağrılabilen işlevler oluşturmak için SDK'nın nasıl kullanılacağı açıklanmaktadır. Programlama modelini ve temel kavramları pratik örneklerle öğrenirsiniz.

Tavsiye

Tüm sınıflar, yöntemler ve parametrelerle ilgili tüm ayrıntılar için SDK başvuru belgelerine bakın.

SDK ile çalışmaya başlama

Bu bölümde, Kullanıcı Verileri İşlevleri SDK'sının temel bileşenleri tanıtılarak işlevlerinizin nasıl yapılandırılması açıklanır. Gerekli içeri aktarmalar, dekoratörler ve işlevlerinizin işleyebileceği giriş ve çıkış veri türleri hakkında bilgi ediniyorsunuz.

Kullanıcı verileri işlevleri SDK'sı

SDK, fabric-user-data-functions Python'da kullanıcı verileri işlevleri oluşturmak için ihtiyacınız olan temel bileşenleri sağlar.

Gerekli importlar ve başlatma işlemleri

Her kullanıcı veri işlevleri dosyasının fabric.functions modülünü içe aktarması ve yürütme bağlamını başlatması gerekir.

import datetime
import fabric.functions as fn
import logging

udf = fn.UserDataFunctions()

Dekoratör @udf.function()

Dekoratörle @udf.function() işaretlenmiş işlevler Doku portalından, başka bir Doku öğesinden veya bir dış uygulamadan çağrılabilir. Bu dekoratöre sahip işlevler bir dönüş türü belirtmelidir.

Örnek:

@udf.function()
def hello_fabric(name: str) -> str:
    logging.info('Python UDF trigger function processed a request.')
    logging.info('Executing hello fabric function.')
    
    return f"Welcome to Fabric Functions, {name}, at {datetime.datetime.now()}!"

Yardımcı işlevler

Dekoratör olmadan @udf.function() Python yöntemleri doğrudan çağrılamaz. Bunlar yalnızca dekore edilmiş işlevlerden çağrılabilir ve yardımcı işlevler olarak görev yapabilir.

Örnek:

def uppercase_name(name: str) -> str:
    return name.upper()

Desteklenen giriş türleri

str, int, float gibi ilkel veri türleri gibi işlev için giriş parametreleri tanımlayabilirsiniz. Desteklenen giriş veri türleri şunlardır:

JSON Türü Python Veri Türü
Dizgi str
Tarih saat dizesi tarih/zaman
Boolean Boole
Sayılar int (tamsayı), float (kesirli sayı)
Dizi list[], örnek liste[int]
Nesne Dict
Nesne pandas DataFrame
Nesne veya Nesne Dizisi pandas Serisi

Uyarı

pandas DataFrame ve Series türlerini kullanmak için Doku portalına gidin, çalışma alanınızı bulun ve kullanıcı verileri işlevleri öğenizi açın. Kitaplık yönetimi'nifabric-user-data-functions seçin, paketi arayın ve 1.0.0 veya sonraki bir sürüme güncelleştirin.

Desteklenen giriş türleri için istek gövdesi örneği:

{
  "name": "Alice",                          // String (str)
  "signup_date": "2025-11-08T13:44:40Z",    // Datetime string (datetime)
  "is_active": true,                        // Boolean (bool)
  "age": 30,                                // Number (int)
  "height": 5.6,                            // Number (float)
  "favorite_numbers": [3, 7, 42],           // Array (list[int])
  "profile": {                              // Object (dict)
    "email": "alice@example.com",
    "location": "Sammamish"
  },
  "sales_data": {                           // Object (pandas DataFrame)
    "2025-11-01": {"product": "A", "units": 10},
    "2025-11-02": {"product": "B", "units": 15}
  },
  "weekly_scores": [                        // Object or Array of Objects (pandas Series)
    {"week": 1, "score": 88},
    {"week": 2, "score": 92},
    {"week": 3, "score": 85}
  ]
}

Desteklenen çıkış türleri

Desteklenen çıkış veri türleri şunlardır:

Python Veri Türü
str
tarih/zaman
Boole
int (tamsayı), float (kesirli sayı)
list[data-type], örneğin list[int]
Dict
Hiç kimse
pandas Serisi
pandas DataFrame

İşlev yazma

Söz dizimi gereksinimleri ve sınırlamaları

Kullanıcı Verileri İşlevleri yazarken, işlevlerinizin düzgün çalıştığından emin olmak için belirli söz dizimi kurallarına uymanız gerekir.

Parametre adlandırma

  • camelCase kullan: Parametre adları camelCase adlandırma kuralını kullanmalıdır ve alt çizgi içeremez. Örneğin, productName yerine product_name kullanın.
  • Ayrılmış anahtar sözcükler: Ayrılmış Python anahtar sözcüklerini veya dokuya özgü şu anahtar sözcükleri parametre adları veya işlev adları olarak kullanamazsınız: req, contextve reqInvocationId.

Parametre gereksinimleri

  • Varsayılan değer yok: Varsayılan parametre değerleri desteklenmez. Bir işlev çağrılırken tüm parametreler gereklidir. Örneğin, aşağıdaki işlev bir söz dizimi hatası oluşturur:
    # The default value for the argument called 'name' is not supported and treated like a syntax error.
    @udf.function()
    def goodbye_fabric(name: str = "N/A") -> str:
        return f"Goodbye, {name}."
    
  • Tür ek açıklamaları gerekli: Tüm parametreler tür ek açıklamalarını içermelidir (örneğin, name: str).

İşlev gereksinimleri

  • Dönüş türü gerekli: Dekoratörlü @udf.function() işlevler bir dönüş türü belirtimi yapılmalıdır (örneğin, -> str).
  • Gerekli içeri aktarmalar: import fabric.functions as fn deyimi ve udf = fn.UserDataFunctions() başlatma işlevlerinizin çalışması için gereklidir.

Doğru söz dizimi örneği

@udf.function()
def process_order(orderNumber: int, customerName: str, orderDate: str) -> dict:
    return {
        "order_id": orderNumber,
        "customer": customerName,
        "date": orderDate,
        "status": "processed"
    }

Asenkron işlev yazma

Kodunuzda fonksiyon tanımınızda asenkron dekoratör ekleyin. Bir async işlevle, birden çok görevi aynı anda işleyerek uygulamanızın yanıt hızını ve verimliliğini geliştirebilirsiniz. Yüksek hacimli G/Ç bağlantılı işlemleri yönetmek için idealdir. Bu örnek işlev, pandas kullanarak bir göl evinden CSV dosyasını okur. İşlev, giriş parametresi olarak dosya adını alır.

import pandas as pd 

# Replace the alias "<My Lakehouse alias>" with your connection alias.
@udf.connection(argName="myLakehouse", alias="<My Lakehouse alias>")
@udf.function()
async def read_csv_from_lakehouse(myLakehouse: fn.FabricLakehouseClient, csvFileName: str) -> str:

    # Connect to the Lakehouse
    connection = myLakehouse.connectToFilesAsync()   

    # Download the CSV file from the Lakehouse
    csvFile = connection.get_file_client(csvFileName)

    downloadFile = await csvFile.download_file()
    csvData = await downloadFile.readall()
    
    # Read the CSV data into a pandas DataFrame
    from io import StringIO
    df = pd.read_csv(StringIO(csvData.decode('utf-8')))

    # Display the DataFrame    
    result="" 
    for index, row in df.iterrows():
        result=result + "["+ (",".join([str(item) for item in row]))+"]"
    
    # Close the connection
    csvFile.close()
    connection.close()

    return f"CSV file read successfully.{result}"

Verilerle çalışma

Fabric veri kaynaklarına veri bağlantıları

SDK, kodunuzda bağlantı dizeleri yazmaya gerek kalmadan veri bağlantılarına başvurmanızı sağlar. fabric.functions kitaplığı, veri bağlantılarını işlemek için iki yol sunar.

  • fabric.functions.FabricSqlConnection: SQL Analytics uç noktaları ve Doku ambarları dahil olmak üzere Doku'daki SQL veritabanlarıyla çalışmanıza olanak tanır.
  • fabric.functions.FabricLakehouseClient: Lakehouse tablolarına ve dosyalarına bağlanmanıza olanak tanıyarak Lakehouse'larla çalışmanıza imkan tanır.

Bir veri kaynağına referansta bulunmak için @udf.connection dekoratörünü kullanmanız gerekir. Aşağıdaki biçimlerden herhangi birinde uygulayabilirsiniz:

  • @udf.connection(alias="<alias for data connection>", argName="sqlDB")
  • @udf.connection("<alias for data connection>", "<argName>")
  • @udf.connection("<alias for data connection>")

@udf.connection için bağımsız değişkenler şunlardır:

  • argName, bağlantının işlevinizde kullandığı değişkenin adı.
  • alias, Bağlantıları Yönet menüsüyle eklediğiniz bağlantının takma adıdır.
  • ve argName aynı değere sahipse alias kullanabilirsiniz@udf.connection("<alias and argName for the data connection>").

Örnek

# Where demosqldatabase is the argument name and the alias for my data connection used for this function
@udf.connection("demosqldatabase")
@udf.function()
def read_from_sql_db(demosqldatabase: fn.FabricSqlConnection)-> list:
  # Connect to the SQL database
  connection = demosqldatabase.connect()
  cursor = connection.cursor()
  
  # Replace with the query you want to run
  query = "SELECT * FROM (VALUES ('John Smith', 31), ('Kayla Jones', 33)) AS Employee(EmpName, DepID);"
  
  # Execute the query
  cursor.execute(query)
  
  # Fetch all results
  results = cursor.fetchall()
  
  # Close the cursor and connection
  cursor.close()
  connection.close()
  
  return results

Fabric öğeleri veya Azure kaynakları için genel bağlantılar

SDK, Kullanıcı Verileri İşlevleri öğe sahibi kimliğinizi kullanarak Doku öğelerine veya Azure kaynaklarına bağlantı oluşturmanıza olanak sağlayan genel bağlantıları destekler. Bu özellik, öğe sahibinin kimliğine ve sağlanan hedef kitle türüne sahip bir Microsoft Entra Id belirteci oluşturur. Bu belirteç, bu hedef kitle türünü destekleyen Doku öğeleri veya Azure kaynaklarıyla kimlik doğrulaması yapmak için kullanılır. Bu yaklaşım, Bağlantıları Yönet özelliğinden yönetilen bağlantılar nesnelerini kullanmaya benzer bir programlama deneyimi sağlar, ancak yalnızca bağlantıda sağlanan hedef kitle türü için kullanılır.

Bu özellik aşağıdaki @udf.generic_connection() parametrelerle dekoratör kullanır:

Parametre Açıklama Değer
argName İşleve geçirilen değişkenin adı. Kullanıcının işlevinin bağımsız değişkenlerinde bu değişkeni belirtmesi ve bunun için türünü fn.FabricItem kullanması gerekir Örneğin, eğer argName=CosmosDb ise işlevi bu bağımsız değişkeni içermelidir. cosmosDb: fn.FabricItem
audienceType Bağlantının oluşturulduğu hedef kitle türü. Bu parametre Doku öğesi veya Azure hizmeti türüyle ilişkilendirilir ve bağlantı için kullanılan istemciyi belirler. Bu parametre için izin verilen değerler CosmosDb veya KeyVault şeklindedir.

Genel bağlantı kullanarak Fabric Cosmos DB kapsayıcısına bağlanın

Genel bağlantılar, CosmosDB izleyici türünü kullanarak özgün Fabric Cosmos DB öğelerini destekler. Dahil edilen Kullanıcı Verileri İşlevleri SDK'sı, her çağrı için tek bir Cosmos DB istemcisi getiren adlı get_cosmos_client bir yardımcı yöntem sağlar.

Şu adımları izleyerek genel bir bağlantı kullanarak bir Fabric Cosmos DB öğesine bağlanabilirsiniz:

  1. Fabric portalına gidin, çalışma alanınızı bulun ve kullanıcı veri fonksiyonları öğesini açın. Kitaplık yönetimi'niazure-cosmos seçin, kitaplığı arayın ve yükleyin. Daha fazla bilgi için bkz. Kitaplıkları yönetme.

  2. Fabric Cosmos DB öğesi ayarlarınıza gidin.

    Fabric Cosmos DB ayarları düğmesi konumunu gösteren ekran görüntüsü.

  3. Fabric Cosmos DB uç noktasının URL'sini alın.

    Fabric Cosmos DB uç nokta URL'sini gösteren ekran görüntüsü.

  4. Kullanıcı Verileri İşlevleri öğenize gidin. Doku Cosmos DB kapsayıcınıza bağlanmak ve Cosmos DB örnek veri kümesini kullanarak bir okuma sorgusu çalıştırmak için aşağıdaki örnek kodu kullanın. Aşağıdaki değişkenlerin değerlerini değiştirin:

    • COSMOS_DB_URI kullanarak Fabric Cosmos DB uç noktanızı kullanın.
    • DB_NAME ifadesini, Doku Cosmos DB öğenizin adıyla değiştirin.
    from fabric.functions.cosmosdb import get_cosmos_client
    import json
    
    @udf.generic_connection(argName="cosmosDb", audienceType="CosmosDB")
    @udf.function()
    def get_product_by_category(cosmosDb: fn.FabricItem, category: str) -> list:
    
        COSMOS_DB_URI = "YOUR_COSMOS_DB_URL"
        DB_NAME = "YOUR_COSMOS_DB_NAME" # Note: This is the Fabric item name
        CONTAINER_NAME = "SampleData" # Note: This is your container name. In this example, we are using the SampleData container.
    
        cosmosClient = get_cosmos_client(cosmosDb, COSMOS_DB_URI)
    
        # Get the database and container
        database = cosmosClient.get_database_client(DB_NAME)
        container = database.get_container_client(CONTAINER_NAME)
    
        query = 'select * from c WHERE c.category=@category' #"select * from c where c.category=@category"
        parameters = [
            {
                "name": "@category", "value": category
            }
        ]
        results = container.query_items(query=query, parameters=parameters)
        items = [item for item in results]
    
        logging.info(f"Found {len(items)} products in {category}")
    
        return json.dumps(items)
    
  5. Çağırma parametrelerinde olduğu gibi bir kategori adı sağlayarak Accessory.

Uyarı

Hesap URL'sini ve veritabanı adlarını kullanarak bir Azure Cosmos DB veritabanına bağlanmak için de bu adımları kullanabilirsiniz. Kullanıcı Veri İşlevleri sahip hesabının bu Azure Cosmos DB hesabı için erişim izinleri olması gerekir.

Genel bir bağlantı kullanarak Azure Key Vault'a bağlanma

Genel bağlantılar, KeyVault dinleyici türünü kullanarak Azure Key Vault'a bağlanmayı destekler. Bu tür bir bağlantı, Doku Kullanıcı Verileri İşlevleri sahibinin Azure Key Vault'a bağlanma izinlerine sahip olmasını gerektirir. Anahtarları, gizli dizileri veya sertifikaları ada göre almak için bu bağlantıyı kullanabilirsiniz.

Genel bir bağlantı kullanarak API çağrılarını yapmak için bir istemci sırrını almak üzere Azure Key Vault'a aşağıdaki adımları izleyerek bağlanabilirsiniz:

  1. Fabric portalına gidin, çalışma alanınızı bulun ve kullanıcı verileri fonksiyonları öğenizi açın. Kitaplık yönetimi'ni seçin, ardından requests ve azure-keyvault-secrets kitaplıklarını arayıp yükleyin. Daha fazla bilgi için bkz. Kitaplıkları yönetme.

  2. Azure portalında AzureKey Vault kaynağınıza gidin ve anahtarınızın, gizli dizinizin veya sertifikanızın adını alınVault URI.

    Azure Key Vault uç nokta URL'sini ve değerlerini gösteren ekran görüntüsü.

  3. Doku Kullanıcı Verileri İşlevleri öğenize dönün ve bu örneği kullanın. Bu örnekte, genel API'ye bağlanmak için Azure Key Vault'tan bir gizli dizi alıyoruz. Aşağıdaki değişkenlerin değerini değiştirin:

    • KEY_VAULT_URL ile önceki adımda aldığınız Vault URI öğesini kullanın.
    • KEY_VAULT_SECRET_NAME gizlinizin adıyla.
    • API_URL değişkenine bağlanmak istediğiniz API'nin URL'sini ekleyin. Bu örnekte GET isteklerini kabul eden ve aşağıdaki parametreleri api-key ve request-bodyalan bir genel API'ye bağlandığınız varsayılır.
    from azure.keyvault.secrets import SecretClient
    from azure.identity import DefaultAzureCredential
    import requests
    
    @udf.generic_connection(argName="keyVaultClient", audienceType="KeyVault")
    @udf.function()
    def retrieveNews(keyVaultClient: fn.FabricItem, requestBody:str) -> str:
        KEY_VAULT_URL = 'YOUR_KEY_VAULT_URL'
        KEY_VAULT_SECRET_NAME= 'YOUR_SECRET'
        API_URL = 'YOUR_API_URL'
    
        credential = keyVaultClient.get_access_token()
    
        client = SecretClient(vault_url=KEY_VAULT_URL, credential=credential)
    
        api_key = client.get_secret(KEY_VAULT_SECRET_NAME).value
    
        api_url = API_URL
        params = {
            "api-key": api_key,
            "request-body": requestBody
        }
    
        response = requests.get(api_url, params=params)
    
        data = "" 
    
        if response.status_code == 200:
            data = response.json()
        else:
            print(f"Error {response.status_code}: {response.text}")
    
        return f"Response: {data}"
    
  4. Kodunuzda bir istek gövdesi sağlayarak bu işlevi test edin veya çalıştırın.

Gelişmiş özellikler

Programlama modeli, işlevleriniz üzerinde daha fazla denetim sağlayan gelişmiş desenleri tanımlar. SDK, aşağıdaki işlemleri yapmanızı sağlayan sınıflar ve yöntemler aracılığıyla bu desenleri uygular:

  • İşlevinizi kimlerin çağırıp çağırma şekliyle ilgili çağrı meta verilerine erişme
  • Yapılandırılmış hata yanıtlarıyla özel hata senaryolarını işleme
  • Merkezi yapılandırma yönetimi için Fabric değişken kitaplıklarıyla tümleştirme yapın.

Uyarı

Kullanıcı Verileri İşlevleri istek boyutu, yürütme zaman aşımı ve yanıt boyutu için hizmet sınırlarına sahiptir. Bu sınırlar ve bunların nasıl zorunlu kılındıkları hakkında ayrıntılı bilgi için bkz. Hizmet ayrıntıları ve sınırlamaları.

UserDataFunctionContext kullanarak çağırma özelliklerini al

SDK nesnesini içerir UserDataFunctionContext . Bu nesne işlev çağırma meta verilerini içerir ve farklı çağırma mekanizmaları için (portal çağrısı ve REST API çağrısı gibi) belirli uygulama mantığı oluşturmak için kullanılabilir.

Aşağıdaki tabloda UserDataFunctionContext nesnesinin özellikleri gösterilmektedir.

Özellik Adı Veri Türü Açıklama
çağrı_kimliği String Kullanıcı veri işlevlerinin öğesinin çağrılmasıyla ilişkili benzersiz GUID.
çalıştıran_kullanıcı nesne Çağrıyı yetkilendirmek için kullanılan kullanıcının bilgilerinin meta verileri.

executing_user nesnesi aşağıdaki bilgileri içerir:

Özellik Adı Veri Türü Açıklama
Oıd dize (GUID) İstek sahibi için sabit bir tanımlayıcı olan kullanıcının nesne kimliği. Bu, uygulamalar arasında bu işlevi çağırmak için kullanılan kullanıcı veya hizmet sorumlusunun doğrulanmış kimliğidir.
KiracıID dize (GUID) Kullanıcının oturum açtığı kiracının kimliği.
Tercih Edilen Kullanıcı Adı String Kullanıcı tarafından belirlenen, çağıran kullanıcının tercih edilen kullanıcı adı. Bu değer değişebilir.

parametresine UserDataFunctionContext erişmek için işlev tanımının en üstünde aşağıdaki dekoratörü kullanmanız gerekir: @udf.context(argName="<parameter name>")

Örnek

@udf.context(argName="myContext")
@udf.function()
def getContext(myContext: fabric.functions.UserDataFunctionContext)-> str:
    logging.info('Python UDF trigger function processed a request.')
    return f"Hello oid = {myContext.executing_user['Oid']}, TenantId = {myContext.executing_user['TenantId']}, PreferredUsername = {myContext.executing_user['PreferredUsername']}, InvocationId = {myContext.invocation_id}"

UserThrownError ile işlenen bir hata atın

İşlevinizi geliştirirken, SDK'da mevcut olan UserThrownError sınıfını kullanarak beklenen bir hata yanıtı atabilirsiniz. Bu sınıfın bir kullanımı, kullanıcı tarafından sağlanan girişlerin iş doğrulama kurallarını geçememesi durumlarını yönetmektir.

Örnek

import datetime

@udf.function()
def raise_userthrownerror(age: int)-> str:
    if age < 18:
        raise fn.UserThrownError("You must be 18 years or older to use this service.", {"age": age})

    return f"Welcome to Fabric Functions at {datetime.datetime.now()}!"

UserThrownError Sınıf oluşturucu iki parametre alır:

  • Message: Bu dize, bu işlevi çağıran uygulamaya hata iletisi olarak döndürülür.
  • Bu işlevi çağıran uygulamaya bir özellik sözlüğü döndürülür.

Fabric değişken kütüphanelerinden değişkenleri alma

Microsoft Fabric'teki Fabric değişken kitaplığı , çalışma alanı içindeki farklı öğeler arasında kullanılabilecek değişkenleri yönetmeye yönelik merkezi bir depodur. Geliştiricilerin öğe yapılandırmalarını verimli bir şekilde özelleştirmesine ve paylaşmasına olanak tanır. Henüz bir değişken kitaplığınız yoksa bkz. Değişken kitaplıkları oluşturma ve yönetme.

İşlevlerinizde değişken kitaplığı kullanmak için, kullanıcı verileri işlevleri öğenizden bu kitaplığa bir bağlantı eklersiniz. Değişken kütüphaneleri OneLake kataloğunda SQL veritabanları ve lakehouse'lar gibi veri kaynaklarıyla birlikte görünür.

İşlevlerinizde değişken kitaplıkları kullanmak için şu adımları izleyin:

  1. Kullanıcı verileri işlevleri öğenize değişken kitaplığınıza bir bağlantı ekleyin . OneLake kataloğunda değişken kitaplığınızı bulup seçin, ardından Bağlan'ı seçin. Fabric'in bağlantı için oluşturduğu Alias'a dikkat edin.
  2. Değişken kitaplığı öğesi için bir bağlantı dekoratörü ekleyin. Örneğin, @udf.connection(argName="varLib", alias="<My Variable Library Alias>") değişken kitaplık öğesi için yeni eklenen bağlantının diğer adını değiştirin.
  3. İşlev tanımına türüne fn.FabricVariablesClientsahip bir bağımsız değişken ekleyin. Bu istemci, değişkenler kitaplığı öğesiyle çalışmak için ihtiyacınız olan yöntemleri sağlar.
  4. Değişken kitaplığındaki tüm değişkenleri almak için yöntemini kullanın getVariables() .
  5. Değişkenlerin değerlerini okumak için, ya ["variable-name"] ya da .get("variable-name") kullanın.

Örnek

Bu örnekte bir üretim ve geliştirme ortamı için yapılandırma senaryosu simülasyonu yapıyoruz. Bu işlev, Değişken Kitaplığı'ndan alınan bir değeri kullanarak seçili ortama bağlı olarak bir depolama yolu ayarlar. Değişken Kitaplığı, kullanıcıların ENV veya dev değerini ayarlayabildiği prod adlı bir değişken içerir.

@udf.connection(argName="varLib", alias="<My Variable Library Alias>")
@udf.function()
def get_storage_path(dataset: str, varLib: fn.FabricVariablesClient) -> str:
    """
    Description: Determine storage path for a dataset based on environment configuration from Variable Library.
    
    Args:
        dataset_name (str): Name of the dataset to store.
        varLib (fn.FabricVariablesClient): Fabric Variable Library connection.
    
    Returns:
        str: Full storage path for the dataset.
    """
    # Retrieve variables from Variable Library
    variables = varLib.getVariables()
    
    # Get environment and base paths
    env = variables.get("ENV")    
    dev_path = variables.get("DEV_FILE_PATH")
    prod_path = variables.get("PROD_FILE_PATH")
    
    # Apply environment-specific logic
    if env.lower() == "dev":
        return f"{dev_path}{dataset}/"
    elif env.lower() == "prod":
        return f"{prod_path}{dataset}/"
    else:
        return f"incorrect settings define for ENV variable"