インジェスト エラーまたは破損データのトラブルシューティング
Note
2023 年 9 月 1 日に、マイクロソフトは Dynamics 365 Marketing と Dynamics 365 Customer Insights を統合して名前を変更しました。 Dynamics 365 Marketing は Dynamics 365 Customer Insights - Journeys という名前に変更されました。 Dynamics 365 Customer Insights は Dynamics 365 Customer Insights - Data という名前に変更されました。 詳細については、Dynamics 365 Customer Insights のよくあるご質問 をご覧ください。
この記事では、Microsoft Dynamics 365 Customer Insights - Data で Azure Data Lake Storage または Power Query を使用する場合のデータ インジェスト エラーまたはデータの破損の一般的な理由について説明します。
Azure Data Lake Storage でのインジェスト エラーまたはデータの破損
データ取り込みの際、レコードが破損していると判断される最も一般的な理由は以下の通りです:
- データ型とフィールド値が、ソース ファイルとスキーマの間で一致しません。
- ソース ファイル内の列数がスキーマと一致しません。
- フィールドに文字が含まれているため、予想されるスキーマと比較して列が一致しない。 たとえば、正しく書式設定されていない引用符、エスケープされていない引用符、改行文字、タブ付き文字などです。
- パーティション ファイルがありません。
datetime
、date
、またはdatetimeoffset
フィールドは標準の形式に従っていません。
スキーマまたはデータ型の不一致
データがスキーマに準拠していない場合、インジェスト プロセスはエラーで完了します。
この問題を解決するには、ソース データまたはスキーマを修正し、データを再取り込みします。
パーティション ファイルがない
インジェスト プロセスが正常に実行され、破損したレコードがなくてもデータが表示されない場合は、 model.json または manifest.json ファイルを編集して、パーティションが指定されていることを確認します。 続いて、データ ソースを更新します。
自動スケジュール更新中にデータ ソースが更新されるのと同時にデータ インジェストが発生した場合、パーティション ファイルが空であるか、システム プロセスで使用できない可能性があります。 アップストリームの更新スケジュールと合わせるために、システムの更新スケジュール またはデータソースの更新スケジュールを変更します。 更新がすべて一度に行われないように、タイミングを調整します。
Datetime フィールドの形式が正しくありません
テーブル内の datetime
フィールドは、ISO 8601 または en-US
形式ではありません。 Dynamics 365 Customer Insights - Data の既定の datetime
形式は en-US
。 テーブル内のすべての datetime
フィールドは、同じ形式にする必要があります。 Customer Insights では、モデルまたは manifest.jsonのソース レベルまたはテーブル レベルで行われる、指定された他の形式の注釈または特性がサポートされます。 例:
Model.json
"annotations": [
{
"name": "ci:CustomTimestampFormat",
"value": "yyyy-MM-dd'T'HH:mm:ss:SSS"
},
{
"name": "ci:CustomDateFormat",
"value": "yyyy-MM-dd"
}
]
manifest.json ファイルでは、テーブル レベルまたは属性レベルでdatetime
形式を指定できます。 テーブル レベルでは、*.manifest.cdm.json のテーブルの"exhibitsTraits"
を使用して、datetime
形式を定義します。 属性レベルでは、tablename.cdm.jsonの属性で"appliedTraits"
を使用します。
テーブルィ レベルの Manifest.json
"exhibitsTraits": [
{
"traitReference": "is.formatted.dateTime",
"arguments": [
{
"name": "format",
"value": "yyyy-MM-dd'T'HH:mm:ss"
}
]
},
{
"traitReference": "is.formatted.date",
"arguments": [
{
"name": "format",
"value": "yyyy-MM-dd"
}
]
}
]
属性レベルの table.json
{
"name": "PurchasedOn",
"appliedTraits": [
{
"traitReference": "is.formatted.date",
"arguments" : [
{
"name": "format",
"value": "yyyy-MM-dd"
}
]
},
{
"traitReference": "is.formatted.dateTime",
"arguments" : [
{
"name": "format",
"value": "yyyy-MM-ddTHH:mm:ss"
}
]
}
],
"attributeContext": "POSPurchases/attributeContext/POSPurchases/PurchasedOn",
"dataFormat": "DateTime"
}
Power Query を使用したインジェスト エラーまたはデータの破損
Datetime 値が正しく解析されないか、解析エラーが発生する
最も一般的なデータ型の不一致は、日付フィールドに正しい日付フォーマットが設定されていない場合に発生します。 この不一致は、正しくない形式のソース データまたは不適切な localeが原因で発生する可能性があります。
ロケールの問題が正しくない場合の症状:
使用されているロケールでソース データを解析できない場合は、インジェスト エラーが発生します。 たとえば、"29/08/2023" が "MM/DD/YYYY" で解析された場合、月 29 を解析できないため、インジェストは失敗します。
正しくないロケールを使用してソース データが正常に解析されると、datetime 値が正しくありません。 たとえば、ソース データは "MM/DD/YYYY" として書式設定されますが、インジェスト中にデータを解析するために使用される既定のロケールでは "DD/MM/YYYY" が使用されます。その結果、"2023 年 12 月 8 日" は "2023 年 8 月 12 日" として取り込まれます。
解決方法
正しくない形式を修正するには、ソース データを更新して再取り込みします。
正しくないロケールを修正するには、Power Query 変換で Change type>Using locale を使用して、すべての datetime フィールドの型を正しいロケールを使用するように変更します。 例えば次が挙げられます。
詳細については、「 Document またはプロジェクトロケールを参照してください。