1

コンテンツを含む単純なファイルFD_GROUP.TXTがあります。

~0100~^~乳製品・卵製品~
~0200~^~スパイス・ハーブ~
~0300~^~ベビーフード~
~0400~^~油脂~
~0500~^~鶏肉製品~

これらのファイル (一部は 700,000 行) を Azure Data Factory を使用して SQL データベースに一括インポートしようとしています。

戦略は、最初に列を^で区切ることです。次に、チルダ (~) を空の文字に置き換えるため、チルダ (~) が失われ、挿入が行われます。

1. SQL ソリューション:

DECLARE @CsvFilePath NVARCHAR(1000) = 'D:\CodePurehope\Dev\NutrientData\FD_GROUP.txt';

CREATE TABLE #TempTable
 (
    [FoodGroupCode] VARCHAR(666) NOT NULL, 
    [FoodGroupDescription] VARCHAR(60) NOT NULL
 )

DECLARE @sql NVARCHAR(4000) = 'BULK INSERT #TempTable FROM ''' + @CsvFilePath + ''' WITH ( FIELDTERMINATOR =''^'', ROWTERMINATOR =''\n'' )';
EXEC(@sql);

UPDATE #TempTable
   SET [FoodGroupCode] = REPLACE([FoodGroupCode], '~', ''),
       [FoodGroupDescription] = REPLACE([FoodGroupDescription], '~', '')
GO

INSERT INTO [dbo].[FoodGroupDescriptions]
(
    [FoodGroupCode],
    [FoodGroupDescription]
)
SELECT
    [FoodGroupCode],
    [FoodGroupDescription]
FROM
    #TempTable
GO

DROP TABLE #TempTable

2. SSIS ETL パッケージ ソリューション: ここに画像の説明を入力

上の写真に見られるように、^で区切るフラット ファイル ソースと、不要なチルダ (~) を置き換える派生列変換。

Microsoft Azure Data Factory でどのように行うのですか? FD_GROUP.TXT
をAzure Storage Blob に入力としてアップロードし、テーブルを Azure SQL Server で出力用に準備しました。

-
2 つのリンクされたサービス: AzureStorage と AzureSQL。
- 2 つのデータセット: BLOB を入力として、SQL を出力として
- 1 つのパイプライン

ここに画像の説明を入力

FoodGroupDescriptionsAzureBlob設定

{
    "name": "FoodGroupDescriptionsAzureBlob",
    "properties": {
        "structure": [
            {
                "name": "FoodGroupCode",
                "type": "Int32"
            },
            {
                "name": "FoodGroupDescription",
                "type": "String"
            }
        ],
        "published": false,
        "type": "AzureBlob",
        "linkedServiceName": "AzureStorageLinkedService",
        "typeProperties": {
            "fileName": "FD_GROUP.txt",
            "folderPath": "nutrition-data/NutrientData/",
            "format": {
                "type": "TextFormat",
                "rowDelimiter": "\n",
                "columnDelimiter": "^"
            }
        },
        "availability": {
            "frequency": "Minute",
            "interval": 15
        }
    }
}

FoodGroupDescriptionsSQLAzureの設定

{
    "name": "FoodGroupDescriptionsSQLAzure",
    "properties": {
        "structure": [
            {
                "name": "FoodGroupCode",
                "type": "Int32"
            },
            {
                "name": "FoodGroupDescription",
                "type": "String"
            }
        ],
        "published": false,
        "type": "AzureSqlTable",
        "linkedServiceName": "AzureSqlLinkedService",
        "typeProperties": {
            "tableName": "FoodGroupDescriptions"
        },
        "availability": {
            "frequency": "Minute",
            "interval": 15
        }
    }
}

FoodGroupDescriptionsパイプライン設定

{
    "name": "FoodGroupDescriptionsPipeline",
    "properties": {
        "description": "Copy data from a blob to Azure SQL table",
        "activities": [
            {
                "type": "Copy",
                "typeProperties": {
                    "source": {
                        "type": "BlobSource"
                    },
                    "sink": {
                        "type": "SqlSink",
                        "writeBatchSize": 10000,
                        "writeBatchTimeout": "60.00:00:00"
                    }
                },
                "inputs": [
                    {
                        "name": "FoodGroupDescriptionsAzureBlob"
                    }
                ],
                "outputs": [
                    {
                        "name": "FoodGroupDescriptionsSQLAzure"
                    }
                ],
                "policy": {
                    "timeout": "01:00:00",
                    "concurrency": 1,
                    "executionPriorityOrder": "NewestFirst"
                },
                "scheduler": {
                    "frequency": "Minute",
                    "interval": 15
                },
                "name": "CopyFromBlobToSQL",
                "description": "Bulk Import FoodGroupDescriptions"
            }
        ],
        "start": "2015-07-13T00:00:00Z",
        "end": "2015-07-14T00:00:00Z",
        "isPaused": false,
        "hubName": "gymappdatafactory_hub",
        "pipelineMode": "Scheduled"
    }
}

これは Azure Data Factory では機能しません + このコンテキストで置換を使用する方法がわかりません。どんな助けでも感謝します。

4

1 に答える 1

1

私はあなたのコードを使用していますが、次のようにして動作させることができました:

FoodGroupDescriptionsAzureBlob json 定義では、プロパティ ノードに "external": true を追加する必要があります。BLOB 入力ファイルは、Azure データ ファクトリ パイプラインではなく、外部ソースから作成されました。これを true に設定すると、この入力を使用する準備ができていることが Azure データ ファクトリに通知されます。

また、ブロブ入力定義で、「format」ノードに「quoteChar」:「~」を追加します。データが「~」でラップされているように見えるため、定義したINTが適切に挿入されるように、データからそれらを削除しますあなたのSQLテーブルに。

完全なブロブの定義:

{
"name": "FoodGroupDescriptionsAzureBlob",
"properties": {
    "structure": [
        {
            "name": "FoodGroupCode",
            "type": "Int32"
        },
        {
            "name": "FoodGroupDescription",
            "type": "String"
        }
    ],
    "published": false,
    "type": "AzureBlob",
    "linkedServiceName": "AzureStorageLinkedService",
    "typeProperties": {
        "fileName": "FD_Group.txt",
        "folderPath": "nutrition-data/NutrientData/",
        "format": {
            "type": "TextFormat",
            "rowDelimiter": "\n",
            "columnDelimiter": "^",
            "quoteChar": "~"
        }
    },
    "availability": {
        "frequency": "Minute",
        "interval": 15
    },
    "external": true,
    "policy": {}
}

}

15 分ごとに間隔を設定し、パイプラインの開始日と終了日を丸 1 日設定しているため、パイプラインの実行期間全体にわたって 15 分ごとにスライスが作成されます。これがあります:

  "start": "2015-07-13T00:00:00Z",
  "end": "2015-07-13T00:15:00Z",

これにより、1 つのスライスが作成されます。

お役に立てれば。

于 2016-03-13T02:07:08.083 に答える