Azure Synapse Link for Dataverse に関する FAQ

この記事では、Microsoft Dataverse テーブル データを Azure Synapse Analytics と Azure Data Lake にエクスポートする方法についてよく寄せられる質問について説明します。

接続されている Azure Storage 内のデータ ファイルの自動削除ポリシーの作成、更新、削除、設定などのタスクを手動で実行できますか。

顧客がデータ ファイルを変更しないでください。また、顧客ファイルをデータ フォルダーに配置しないでください。

注記

Azure Synapse Link を中断せずに古くて停滞しているデータをデータ レイクから削除するには、クエリと増分更新の分析 機能を使用することを検討してください。

テーブルリレーションシップにアクセスするためにはどうすればよいですか?

多対多リレーションシップにアクセスするには、リレーションシップをテーブルとして使用して、新しいリンクの [テーブルの追加] ページと既存のリンクの [テーブルの管理 ] から選択できます。

注記

CSV 形式で書き込まれる場合、すべてのリレーションシップ データは既定で追加専用モードになります。

Azure Synapse Link は Dataverse の無料機能です。 Azure Synapse Link for Dataverse を使用しても、Dataverse では追加料金は発生しません。 ただし、Azure サービスの潜在的なコストを考慮してください。

列を追加するとどうなりますか?

ソース内のテーブルに新しい列を追加すると、対応するファイル パーティションのコピー先のファイルの末尾にも追加されます。 列の追加前に存在していた行は新しい列には表示されませんが、新規または更新された行には新しく追加された列が表示されます。

列を削除するとどうなりますか?

ソース内のテーブルから列を削除しても、その列は変換先から削除されません。 代わりに、行は更新されなくなり、前の行を保持しながら null としてマークされます。

列のデータ型を変更するとどうなりますか?

列のデータ型を変更することは重大な変更であり、リンクを解除して再リンクする必要があります。

行を削除するとどうなりますか?

行の削除は、選択したデータ書き込みオプションによって処理が異なります。

  • CSV 形式でのインプレース更新: これが既定のモードです。 このモードでテーブル行を削除すると、Azure Data Lake の対応するデータ パーティションからも行が削除されます。 つまり、データは変換先から完全削除されます。
  • CSV 形式での追加専用と増分フォルダー更新: このモードでは、Dataverse テーブル行が削除されるとき、ターゲット先から完全に削除されることはありません。 代わりに、行が追加され、Azure Data Lake の対応するデータ パーティション内のファイルに isDeleted=True として設定されます。
  • Delta Lake 形式へのエクスポート: Azure Synapse Link は、次の差分同期サイクル中にデータに対して論理的な削除を実行し、その後 30 日後にハード削除を実行します。

エクスポートされたファイルに列ヘッダーが表示されないのはなぜですか?

Azure Synapse Link は Common Data Model に従って、Microsoft Power Apps、Power BI、Dynamics 365、Azure などのアプリケーションやビジネス プロセス間でデータとその意味を共有できるようにします。 各 CDM フォルダーでは、列ヘッダーなどのメタデータが model.json ファイルに格納されます。 詳細: Common Data Model と Azure Data Lake Storage Gen2 |Microsoft Learn

データ型の Model.json ファイルの長さが増加または変更され、Dataverse で定義されているものが保持されないのはなぜですか?

Model.json は、列のサイズのデータベース長を保持します。 Dataverse には、各列のデータベース長の概念があります。 200 のサイズの列を作成してから 100 に縮小しても、Dataverse では既存のデータがそのまま保持されます。 これは、 DBLength を 200 に、 MaxLength を 100 に維持することで行います。 Model.json に表示されるのは DBLength で、それを後続のプロセスに使用すると、Dataverse 列に対してより少ない領域がプロビジョニングされることは決してありません。

注記

メモ型フィールドは、既定の最大長が 9999 の varchar(max) として定義されます。

エクスポートされた Dataverse テーブルで必要な日付と時刻の形式は何ですか?

エクスポートされた Dataverse テーブルには、3 つの日付と時刻の形式が必要です。

列名 Format [データの種類]
SinkCreatedOnSinkModifiedOn M/d/yyyy H:mm:ss tt datetime 6/28/2021 午後 4:34:35
CreatedOn yyyy-MM-dd'T'HH:mm:ss.sssssxxx datetimeOffset 2018-05-25T16:21:09.0000000+00:00
その他のすべての列 yyyy-MM-dd'T'HH:mm:ss'Z' datetime 2021-06-25T16:21:12Z

注記

CreatedOn データ型が 2022 年 7 月 29 日に datetime から datetimeOffset に変更されました。 変更前に作成されたテーブルのデータ型形式を編集するには、テーブルを削除して再追加します。

データ型の形式を更新する Dataverse の日付と時刻の列に対して、さまざまな列の動作を選択できます。 詳細: 日時の列の動作と形式

一部の Dataverse テーブルに対して通常の日付時刻のパーティション分割されたファイル名ではなく、1.csv または 1_001.csv ファイル名が表示されるのはなぜですか?

この動作は、追加専用エクスポート モードを選択し、有効な CreatedOn 列のないテーブルがある場合に想定されます。 BLOB は、1.csv、2.csv などのファイルに編成されます (有効な作成日がないため、カスタム パーティション分割を使用します)。 任意のパーティションが MaxBlockPerBlobLimit の 95% に近づくと、システムによって新しいファイルが自動的に生成されます。1_001.csvに示されています。

年単位または月単位のパーティション戦略を使用する必要がある場合

1 年以内にデータ量が多い Dataverse テーブルの場合は、月単位のパーティションを使用することをお勧めします。 これにより、ファイルが小さくなり、パフォーマンスが向上します。 さらに、Dataverse テーブルの行が頻繁に更新される場合、複数の小さなファイルに分割すると、インプレース更新シナリオの場合のパフォーマンスが向上します。 Delta Lake は、CSV 形式と比較してパフォーマンスが優れているため、年単位のパーティションでのみ使用できます。

追加専用モードとは何か、追加のみとインプレース更新モードの違いは何ですか?

追加のみモードでは、Dataverse テーブルからの増分データが、レイク内の対応するファイル パーティションに追加されます。 詳細については、「Azure Synapse Link の高度な構成オプション」を参照してください。

変更履歴ビューに追加専用モードを使用するタイミング

追加専用モードは、特にデータが頻繁に変化するパーティション内でデータ ボリュームが多い場合に、Dataverse テーブル データをレイクに書き込む場合に推奨されるオプションです。 ここでも、これは企業のお客様に一般的に使用され、強く推奨されるオプションです。 さらに、Dataverse からの変更を段階的に確認し、ETL、AI、ML のシナリオの変更を処理することを目的とするシナリオでは、このモードを使用することもできます。 追加のみモードでは、最新の変更やインプレース更新ではなく変更の履歴が提供され、過去の値に基づく予測や予測分析など、AI シナリオからいくつかの時系列が可能になります。

追加専用モードでデータをエクスポートするときに、各レコードの最も up-to-date 行を取得し、削除された行を除外するにはどうすればよいですか?

追加専用モードでは、 VersionNumber を使用して同じ ID のレコードの最新バージョンを識別し、 SinkModifiedOn 最新バージョンに isDeleted=0 適用する必要があります。

追加専用モードを使用してデータをエクスポートするときに、重複したバージョン番号が表示されるのはなぜですか?

追加専用モードの場合、Azure Synapse Link for Dataverse がネットワーク遅延などの理由でデータがコミットされたことを Azure Data Lake から受信確認しない場合、Azure Synapse Link はこれらのシナリオで再試行し、データをもう一度コミットします。 SinkModifiedOnを使用してデータをフィルター処理することで、ダウンストリームの消費量に対してこのシナリオに対する回復性を高める必要があります。

なぜ 「SinkModifiedOn」 と 「ModifiedOn」 の列に違いがあるのでしょうか?

これは予期される動作です。 ModifiedOn は Dataverse でレコードが最後に変更された日時であり、 SinkModifiedOn はレコードがデータ レイクに書き込まれた日時です。 SinkModifiedOn は通常、 ModifiedOnよりも遅く、違いはバッチ サイズ、システム負荷、処理されるレコードの数などの要因によって異なります。

Delta Lake 形式または追加専用/増分 CSV モードでエクスポートされたテーブルの場合、 SinkCreatedOnSinkModifiedOn は同じ書き込み時間を反映します。 このため、これらのモードでの SinkCreatedOnCreatedOn の違いは、同期遅延の信頼できるインジケーターではなく、そのように解釈しないでください。

Important

財務アプリと運用アプリで実行時間の長いトランザクションが発生した場合、データ損失が発生しないようにレコードが複数回同期される可能性があります。 このシナリオでは、 SinkModifiedOn は最初ではなく最後の同期時刻を反映します。 たとえば、レコードが 1 時間以内に 10 回同期された場合、 SinkModifiedOn は、最初の同期自体からデータがレイクで使用可能であった場合でも、10 回目の同期の時刻を表示します。 実際のデータの可用性を誤解を招くような印象を与える可能性があるため、 SinkModifiedOnModifiedOnの違いに基づいて待機時間レポートを作成するときは注意が必要です。

エクスポートでサポートされていない Dataverse テーブルはどれですか?

次のシステム テーブルに加えて、変更の追跡が有効になっていないテーブルはサポートされていません。

  • 添付ファイル
  • 予定表
  • カレンダー規則

ポストコメント、ポスト無視、ポストライク、投稿、ポストロールなど、特定の Dataverse テーブルは、お客様が Azure Synapse Link を介して同期を有効にすることはできません。

場合によっては、 Dataverse の長期リテンション期間 が有効な場合に、これらのテーブルが表示されることがあります。 その場合、これらのテーブルのサブセットまたはすべてのレコードがエクスポートされる可能性があります。 これは、長期保有シナリオで想定される動作です。

Important

  • これらのテーブルは同期用に選択しないでください。
  • 彼らの存在は、増分同期を完全にサポートすることを示すものではありません。

注記

エクスポート用の監査テーブルは、Azure Synapse Link for Dataverse を使用して追加できます。 ただし、監査テーブルのエクスポートは 、Delta Lake プロファイルでのみサポートされます。

データ レイクにすべてのノート (注釈レコード) が表示されないのはなぜですか?

Azure Synapse Link では、annotation (Notes) テーブルに格納されているファイル コンテンツは同期されません。 ノート レコードでは、メモに添付されたファイルは documentbody 列に保持され、そのファイルの内容はデータ レイクと同期されません。 これは仕様上の動作です。 その結果:

  • annotation documentbody列 (添付ファイルを含むノート) の値を持つレコードは、データ レイクにエクスポートされません。
  • annotation documentbodyに値のないレコード (添付ファイルのないノート) は、想定どおりに同期されます。

デルタ レイクへのエクスポート機能を使用しています。Apache Spark ジョブを停止するか、実行時間を変更できますか?

Delta Lake 変換ジョブは、構成された時間間隔にデータ変更があったときにトリガーされます。 Apache Spark プールを停止または一時停止するオプションはありません。 ただし、[テーブルの管理] > [高度な時間間隔] で、リンクの作成後の時間間隔を変更できます。

参照列は、ID と値で構成されます。 参照値はルート テーブルでのみ変更されます。 ルックアップ列の値をより適切に反映するには、元のルート テーブルと結合して最新の値を取得することをお勧めします。

Dataverse では、計算列には数式定義のみが格納され、実際の値は基になる列から派生します。 したがって、計算列は、すべての参照先列が同じエクスポートされたテーブル内にある場合にのみサポートされます。 Azure Synapse Link は、Dataverse の変更追跡に基づいてデータを同期します。 増分同期中、レコードはバージョンが変更されたときにのみ再エクスポートされます。 計算列の値が変更されても、対応するバージョンがレコードに変更されない場合、更新された値は、レコードが更新され、そのバージョンが変更されるまでデータ レイクに同期されません。 たとえば、計算列が初期同期中に NULL と評価された場合、 NULL はデータ レイクに書き込まれます。 計算で使用される入力が後で変更されてもレコードのバージョンが変更されない場合、Azure Synapse Linkは再計算された値を検出せず、データ レイクは引き続きNULL表示されます。 レコードが更新され、そのバージョンが変更されると、Azure Synapse Link最新の計算列値を使用してレコードを再エクスポートします。

既定で追加専用モードを使用する Dataverse テーブルはどれですか?

createdOn フィールドを持たないすべてのテーブルは、既定で追加専用モードを使用して同期されます。 これには、リレーションシップ テーブルと ActivityParty テーブルが含まれます。

エラー メッセージが表示される理由 - パス上のディレクトリの内容を一覧表示できない

  • Dataverse データは、接続されたストレージ コンテナーに格納されます。 Synapse ワークスペースを介して読み取りとクエリの操作を実行するには、リンクされたストレージ アカウントに "ストレージ BLOB データ共同作成者" ロールが必要です。
  • Delta Lake 形式でデータをエクスポートする場合は、Delta Lake 変換後に CSV ファイルがクリーンアップされます。 Synapse ワークスペースを使用して 、non_partitioned テーブルを使用してデータのクエリを実行する必要があります。

エラー メッセージが表示されるのはなぜですか。 ファイルが不完全であるか、読み取れないために一括読み込みができない (CSV ファイルのみ) か。

Dataverse データは、トランザクションの作成、更新、および削除によって継続的に変化する可能性があります。 このエラーは、基になるファイルからデータを読み取るときに変更されたことが原因で発生します。 そのため、継続的な変更があるテーブルの場合は、スナップショットデータを消費するために、パーティションテーブルを利用するように消費パイプラインを変更してください。 詳細情報: サーバーレス SQL プールのトラブルシューティング

Yes. Azure Synapse Link は Dataverse を介して行を読み取るので、すべての Dataverse レコードごとの制限が同期に適用されます。最も一般的な制限は、サーバーから返される 1 つのレコードの圧縮されていないサイズに対する 200 MiB の上限です。

通常、この制限は、大きな自由形式のコンテンツまたはバイナリ データを格納するテーブルに適用されます。 例えば次が挙げられます。

  • email はメッセージ本文全体を保持します。
  • activitypointer は長い説明を保持します。
  • activitymimeattachment は、インラインファイルと添付ファイルを保持します。

これは Dataverse プラットフォームの制限であり、要求しても引き上げることはできません。 サービスは、顧客データの切り捨てや変更を行いません。 解決するには、Dataverse 内の大きすぎるレコードを、削除するか、大きなフィールドの内容をクリアするか、またはコンテンツを Dataverse の外部に移動することで縮小してください。

Azure Synapse Link for Dataverse は、分析目的で設計されています。 お客様は、アーカイブ目的で長期保有を使用することをお勧めします。 詳細情報: Dataverse での長期間のデータ保有に関する概要

Dataverse でレコードが削除されたときに、データ レイクにデータの変更が表示されないのはなぜですか?

レコードを削除する直接 SQL 呼び出しの場合、Azure Synapse Link for Dataverse サービスは BPO のためトリガーされません。Delete が呼び出されていません。 サンプル機能については、「 継承されたアクセスをクリーンアップする方法」を参照してください。

Apache Spark 3.5 以降で Parquet ファイルを読み取るときにタイムスタンプ列の型変換エラーが発生する理由

BYOL (Bring Your Own Lake) プロファイルと「マネージド データレイク」プロファイルのいずれにおいても、Parquet ファイル内のタイムスタンプは INT64 形式で保存されます。 Apache Spark 3.5 以降を使用してこれらの Parquet ファイルを読み取るときに、Azure Synapse パイプラインのコピー操作などのダウンストリーム パイプラインでエラーが発生する場合があります。 この動作は、InT96 が Spark 3.5 のタイムスタンプの既定のモードではなくなったために発生します。

次のようなエラーが表示されることがあります。

TypeConversionNotSupportedDataTypes, Exception occurred when converting value "1774478519775185" for column name 'SinkCreatedOn' from type 'Int64'

この問題を軽減するには、宛先 SQL データベースに SQL 関数を追加して、タイムスタンプ値を INT64 から適切な datetime 形式に変換します。 または、INT64 形式を使用するようにダウンストリーム パイプラインを更新します。