Fabric ユーザー データ関数は、Fabric ポータルの 接続の管理 機能を使用して、サポートされているファブリック データ ソースとアイテムへの接続を提供します。 この機能を使用すると、接続文字列の作成やアクセス資格情報の管理を行わずに、Fabric データ ソースに接続できます。 データ ソースではないファブリックアイテムの場合は、関数内のそれらの項目に安全に接続できます。
この記事では、次の方法について説明します。
- ユーザー データ関数項目の新しい接続を作成します。
- 関数コードで新たな接続を使用します。
- データ接続を変更または削除します。
Fabric ユーザー データ関数でサポートされている項目
現在、Fabric ユーザー データ関数では次の項目がサポートされています。
- 読み取り/書き込み操作用の Fabric SQL データベース
- 読み取り/書き込み操作用のファブリック倉庫
- Lakehouse ファイルの読み取り/書き込み操作と SQL エンドポイントの読み取り専用操作用の Fabric Lakehouse。
- 読み取り専用操作用のファブリック ミラー化されたデータベース
- 構成設定を変数として定義するためのファブリック変数ライブラリ。 詳細については、こちらを参照してください。
ユーザー データ関数項目の新しいデータ接続を作成する
追加するすべてのデータ接続は、ユーザー データ関数項目に関連付けられ、任意の関数のコードで参照できます。 このガイドに従うには、既存の Fabric ユーザー データ関数項目と既存の Fabric データ ソースが必要です。
1.Functions ポータルから接続の管理機能にアクセスする
開発モードで、Functions ポータル エディターのリボンで [接続の管理] を見つけて選択します。
開いたウィンドウには、作成したすべてのデータ接続が含まれています。 新しい接続を作成するには、[データ接続の追加] を選択します。
2.OneLake カタログからデータ接続を選択する
[データ接続の追加] を選択すると、OneLake カタログが開き、ユーザー アカウントがアクセスできるすべてのデータ ソースの一覧が表示されます。 この一覧は、サポートされているデータ ソースのみを含むようにフィルター処理され、その一部は他のワークスペースにある可能性があります。
データ ソースを選択し、[接続] を選択します。
注
探しているデータ ソースが見つからない場合は、そのデータ ソースに接続するための適切なアクセス許可があることを確認してください。 または、この記事の冒頭に記載されている、サポートされているデータ ソースを使用していることを確認します。
作成すると、選択したデータ ソースへの新しい接続が、[接続] タブの作業ウィンドウに表示されます。接続が表示されたら、接続用に生成された[エイリアス] フィールドを書き留めておきます。 ユーザー データ関数項目内の任意の関数から接続を参照するには、このエイリアスが必要です。
3.関数コードで接続エイリアスを使用する
ポータル エディターに戻ったら、Manage Connections タブで作成した接続のエイリアスをコードに追加する必要があります。 このエイリアスは、接続先の Fabric アイテムの名前に基づいて自動的に作成されます。
この場合は、"SQL Database のテーブルからデータを読み取る" というコード サンプルを使用します。 [編集] タブをクリックし、[サンプルの挿入] ボタンをクリックして、"SQL Database" に移動すると、このサンプルを見つけることができます。
挿入されたサンプル コードを次に示します。
@udf.connection(argName="sqlDB",alias="<alias for sql database>")
@udf.function()
def read_from_sql_db(sqlDB: fn.FabricSqlConnection)-> list:
# Replace with the query you want to run
query = "SELECT * FROM (VALUES ('John Smith', 31), ('Kayla Jones', 33)) AS Employee(EmpName, DepID);"
# Establish a connection to the SQL database
connection = sqlDB.connect()
cursor = connection.cursor()
query.capitalize()
# Execute the query
cursor.execute(query)
# Fetch all results
results = []
for row in cursor.fetchall():
results.append(row)
# Close the connection
cursor.close()
connection.close()
return results
注
このサンプルは SQL Database に接続しますが、データベース内のスキーマやデータを実行する必要はありません。
作成したデータ接続を使用するには、このサンプルの @udf.connection(argName="sqlDB",alias="<alias for sql database>") の行を、alias メニューから取得した Manage Connections の値に置き換えて変更します。 次のコードは、値 ContosoSalesDat を使った例を示しています。
@udf.connection(argName="sqlDB",alias="ContosoSalesDat")
@udf.function()
def read_from_sql_db(sqlDB: fn.FabricSqlConnection)-> list:
[...]
コードを変更した後は、開発モードの テスト機能 を使用して変更をテストできます。 準備ができたら、ツール バーの [発行] ボタンを使用して関数を発行できます。 この操作には数分かかる場合があります。
公開が完了したら、Functions エクスプローラーの一覧でその名前をポイントし、サイド パネルの [実行] ボタンをクリックすると、関数を実行できます。 下部のパネル "出力" には、関数を実行した結果が表示されます。
Fabric ユーザー データ関数のデータ ソースに接続するために必要な作業は以上です。
Fabric 変数ライブラリから変数を取得する
Microsoft Fabric の Fabric 変数ライブラリ は、ワークスペース内のさまざまな項目で使用できる変数を管理するための一元化されたリポジトリです。 これにより、開発者は項目の構成を効率的にカスタマイズして共有できます。 関数で変数ライブラリを使用するには、次の手順に従います。
- [接続の管理] を使用して変数ライブラリへの 接続 を追加し、変数ライブラリ項目の エイリアス を取得します。
- 変数ライブラリ項目の接続デコレーターを追加します。 たとえば、変数ライブラリ項目の新しく追加された接続にエイリアスを
@udf.connection(argName="varLib", alias="<My Variable Library Alias>")して置き換えます。 - 関数定義に、
fn.FabricVariablesClient型の引数を含めます。 このクライアントには、変数ライブラリ項目を操作するために必要なメソッドが用意されています。 -
getVariables()メソッドを使用して、変数ライブラリからすべての変数を取得します。 - 変数の値を読み取る場合は、
["variable-name"]または.get("variable-name")を使用します。
例 この例では、運用環境と開発環境の構成シナリオをシミュレートします。 この関数は、変数ライブラリから取得した値を使用して、選択した環境に応じてストレージ パスを設定します。 変数ライブラリには、ユーザーがENVまたはdevの値を設定できるprodと呼ばれる変数が含まれています。
@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"