O tym, że Microsoft postanowił zamordować usługę Dynamics 365 Export Service pozwalającą na jednokierunkową synchronizację danych między Dataverse i Azure SQL słyszeli już pewnie wszyscy czytelnicy bloga. Organizacje wykorzystujące omawianą usługę powinny (wg. ewangelistów z Redmond) przełączyć się i zacząć wykorzystywać natywną integrację swoich instancji Dataverse z usługą Azure Synapse. W tym miejscu pojawiają się jednak schody. Systemem docelowym w ww. integracji nie jest bowiem baza transakcyjna, lecz usługa typu Data Lake. Natomiast dane pochodzące z Dataverse składowane są tam w postaci plików.
Powyższą sytuację ratuję dostępna w ramach Azure Synapse serverlessowa pula SQL[1]. W praktyce możemy więc dostać się do danych plikowych nawet za pomocą kodu wykorzystującego klasyczne ADO.NET:
using (SqlConnection conn = new SqlConnection(ConnectionString)) // ConnectionString to Synapse Data Lake Workspace { conn.Open(); Console.WriteLine("Connection succesfull"); var command = conn.CreateCommand(); command.CommandText = "SELECT Id, Name FROM account"; var dataReader = command.ExecuteReader(); while (dataReader.Read()) { Console.WriteLine($"{ dataReader.GetValue(0).ToString() } : { dataReader.GetValue(1) }"); } Console.WriteLine("Read operation completed"); }
Powyższy mechanizm działa bez konieczności wykonywania jakichkolwiek czynności konfiguracyjnych. Na kłopot napotkałem w momencie, w którym zamiast zintegrowanego uwierzytelniania Azure Active Directory chciałem skorzystać z uwierzytelniania bazodanowego SQL Server wewnątrz procesów starego dobrego SQL Server Integration Services.
Repozytorium danych uraczyło mnie wówczas następującym błędem:
Cannot find the CREDENTIAL '<sqladminuser>’, because it does not exist, or you do not have permission.
Wprowadzona nazwa użytkownika oraz hasło na pewno były prawidłowe. „Ki diabeł?” – pomyślałem. Na szczęście z pomocą przyszła natychmiast internetowa społeczność i dzięki niej udało mi się rozwiązać napotkany problem.
W jaki sposób to zrobić?
Otóż w Azure Storage Account należy utworzyć nową sygnaturę współdzielonego dostępu (Shared Access Signature, więcej nt. tego mechanizmu znajdziecie pod adresem: https://docs.microsoft.com/en-us/rest/api/storageservices/delegate-access-with-shared-access-signature).
Następnie z poziomu edytora języka U-SQL w aplikacji Synapse Studio należy uruchomić poniższy skrypt:
CREATE CREDENTIAL [https://mystorageaccount.dfs.core.windows.net/dataversefiles/**/*.csv] WITH IDENTITY='SHARED ACCESS SIGNATURE' , SECRET = 'mysecret'; GO
Gdzie:
- mystorageaccount – nazwa naszego konta Azure Storage
- dataversefiles – nazwa folderu, w którym przechowywane są pliki zawierające dane z Dataverse
- mysecret – klucz SAS wygenerowany w poprzednim kroku
Po tej operacji uwierzytelnienie SQL Server powinno zadziałać prawidłowo.
To wszystko na dziś. Sayonara!
[1] Wybaczcie mi powyższe kalki z języka mieszkańców Brytanii.
Be the first to comment