次の方法で共有


マッピング データ フローでの変換を解析する

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

データ フローは、Azure Data Factory および Azure Synapse Pipelines の両方で使用できます。 この記事は、マッピング データ フローに適用されます。 変換を初めて使用する場合は、概要の記事「マッピング データ フローを使用してデータを変換する」を参照してください。

変換解析を使用して、データ内のテキスト列を解析します。このテキスト列は、ドキュメント形式の文字列です。 現在サポートされている解析可能な埋め込みドキュメントの種類は、JSON、XML、区切りテキストです。

構成

変換解析の構成パネルで、最初に、インラインで解析する列に含まれているデータの種類を選択します。 変換解析には、次の構成設定も含まれています。

Parse settings

Column

派生列や集計と同様に、列プロパティでは、ドロップダウン ピッカーから選択して既存の列を変更できます。 または、ここに新しい列の名前を入力することもできます。 ADF により、解析されたソース データがこの列に格納されます。 ほとんどの場合は、受信する埋め込みドキュメント文字列フィールドを解析する新しい列を定義します。

Expression

式ビルダーを使用して、解析対象のソースを設定します。 ソースの設定は、解析する自己完結型データが含まれたソース列を選択するだけで簡単に行うことができます。または、解析するための複雑な式を作成することもできます。

式の例

  • ソース文字列データ: chrome|steel|plastic

    • 式: (desc1 as string, desc2 as string, desc3 as string)
  • ソース JSON データ: {"ts":1409318650332,"userId":"309","sessionId":1879,"page":"NextSong","auth":"Logged In","method":"PUT","status":200,"level":"free","itemInSession":2,"registration":1384448}

    • 式: (level as string, registration as long)
  • ソースの入れ子になった JSON データ: {"car" : {"model" : "camaro", "year" : 1989}, "color" : "white", "transmission" : "v8"}

    • 式: (car as (model as string, year as integer), color as string, transmission as string)
  • ソース XML データ: <Customers><Customer>122</Customer><CompanyName>Great Lakes Food Market</CompanyName></Customers>

    • 式: (Customers as (Customer as integer, CompanyName as string))
  • 属性データを含むソース XML: <cars><car model="camaro"><year>1989</year></car></cars>

    • 式: (cars as (car as ({@model} as string, year as integer)))
  • 予約文字を使用する数式: { "best-score": { "section 1": 1234 } }

    • best-score の '-' 文字は減算演算として解釈されるため、上記の式は機能しません。 次のような場合は、JSON エンジンにテキストを文字どおりに解釈するように指示するため、かっこ表記を含む変数を使用します。
      var bestScore = data["best-score"];
      { bestScore : { "section 1": 1234 } }
      
  • 注: 複合型からの属性 (特に、@model) の抽出でエラーが発生した場合、対応策として、複合型を文字列に変換して、@ 記号を削除 (特に、replace(toString(your_xml_string_parsed_column_name.cars.car),'@','') ) し、JSON 変換解析アクティビティを使用します。

出力列の種類

ここでは、1 つの列に書き込まれる、解析からのターゲット出力スキーマを構成します。 解析から出力のスキーマを設定する最も簡単な方法は、式ビルダーの右上にある [型の検出] ボタンを選択する方法です。 ADF は、解析する文字列フィールドからスキーマの自動検出を試み、出力式で設定しようとします。

Parse example

この例では、受信フィールド "jsonString" の解析を定義しています。これはプレーンテキストですが、JSON 構造体として書式設定されています。 次のスキーマを使用して、解析結果を JSON として "json" という名前の新しい列に格納します。

(trade as boolean, customers as string[])

[検査] タブと [データのプレビュー] を参照して、出力が適切にマッピングされていることを確認します。

派生列アクティビティを使用して階層データ (つまり、式フィールドの your_complex_column_name.car.model) を抽出します

使用例

source(output(
		name as string,
		location as string,
		satellites as string[],
		goods as (trade as boolean, customers as string[], orders as (orderId as string, orderTotal as double, shipped as (orderItems as (itemName as string, itemQty as string)[]))[])
	),
	allowSchemaDrift: true,
	validateSchema: false,
	ignoreNoFilesFound: false,
	documentForm: 'documentPerLine') ~> JsonSource
source(output(
		movieId as string,
		title as string,
		genres as string
	),
	allowSchemaDrift: true,
	validateSchema: false,
	ignoreNoFilesFound: false) ~> CsvSource
JsonSource derive(jsonString = toString(goods)) ~> StringifyJson
StringifyJson parse(json = jsonString ? (trade as boolean,
		customers as string[]),
	format: 'json',
	documentForm: 'arrayOfDocuments') ~> ParseJson
CsvSource derive(csvString = 'Id|name|year\n\'1\'|\'test1\'|\'1999\'') ~> CsvString
CsvString parse(csv = csvString ? (id as integer,
		name as string,
		year as string),
	format: 'delimited',
	columnNamesAsHeader: true,
	columnDelimiter: '|',
	nullValue: '',
	documentForm: 'documentPerLine') ~> ParseCsv
ParseJson select(mapColumn(
		jsonString,
		json
	),
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> KeepStringAndParsedJson
ParseCsv select(mapColumn(
		csvString,
		csv
	),
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> KeepStringAndParsedCsv

データ フローのスクリプト

構文

parse(json = jsonString ? (trade as boolean,
                                customers as string[]),
                format: 'json|XML|delimited',
                documentForm: 'singleDocument') ~> ParseJson

parse(csv = csvString ? (id as integer,
                                name as string,
                                year as string),
                format: 'delimited',
                columnNamesAsHeader: true,
                columnDelimiter: '|',
                nullValue: '',
                documentForm: 'documentPerLine') ~> ParseCsv