Я хочу загрузить данные в хранилище MS Fabric с помощью блокнота Python без создания конвейера/потока данных. То есть подключаться с помощью Python и выдавать оттуда SQL-запросы.
Я пытался подключиться с помощью pyodbc
, следуя статье https://debruyn.dev/2023/connect-to-fabric-lakehouses-warehouses-from-python-code/, но аутентификация, похоже, не работает ( Interactive не смог найти браузер, а CLI не смог найти Azure CLI).
В идеале мне бы хотелось универсальное решение, в котором имя БД/рабочая область настраивались бы с помощью кода (работая над библиотекой).
Проблема с этой статьей в том, что она использует интерактивный поток аутентификации. Для подключения вам необходимо использовать Service Prinicpal. Поэтому обеспечьте регистрацию приложения в Entra ID и предоставьте ему доступ к вашему DW. Затем используйте это для подключения.
И нет необходимости напрямую обрабатывать AccessToken, драйвер ODBC сделает это за вас. например:
import pyodbc
import pandas as pd
server = "x6e...dedicated.windows.net"
database = "YourDatabase"
clientId = "91b...ec5"
clientSecret = mssparkutils.credentials.getSecret("https://YourKeyVault.vault.azure.net/","your-client-secret-secret-name")
sql = "select * from sys.objects"
constr = f"driver=ODBC Driver 18 for SQL Server;server = {server};database = {database};UID = {clientId};PWD = {clientSecret};Authentication=ActiveDirectoryServicePrincipal;Encrypt=yes;Timeout=60;"
con = pyodbc.connect(constr)
data = pd.read_sql(sql,con)
print(data)
Чтобы загрузить любой нетривиальный объем данных, вам нужно записать его в Lakehouse как паркет или дельта и заставить DW загружать его оттуда. Видеть
Загрузите данные в свое хранилище с помощью Transact-SQL, например, запишите таблицу в Lakehouse и запустите:
CREATE TABLE [dbo].[my_warehouse_table]
AS
SELECT *
FROM [my_lakehouse].[dbo].[my_staging_table]