У меня есть простой файл FD_GROUP.TXT с содержанием:Azure Factory Data - Массовый импорт из Blob в Azure SQL
~ 0100 ~^~ Молочные и яичные продукты ~
~ 0200 ~^~ Специи и травы ~
~ 0300 ~^~ детское питание ~
~ 0400 ~^~ Жиры и масла ~
~ 0500 ~^~ Птица Продукты ~
Я пытаюсь массового импорта этих файлов (некоторые с 700000 строк) в базу данных SQL с Azure Data Factory.
Стратегия состоит в том, чтобы сначала разграничивать столбцы с ^, затем я заменяю тильды (~) пустым символом, поэтому я теряю тильды (~), затем происходит вставка.
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
Плоский исходный файл разграничить с ^ и производной преобразования столбца заменить ненужные тильды (~), как показано на фотографии выше.
Как вы это делаете с 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
}
}
}
FoodGroupDescriptionsPipeline настройки
{
"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 Factory Data + я понятия не имею, как использовать заменить в этом контексте. Любая помощь оценивается.
Что вы подразумеваете под «Не работает», вы получаете конкретную ошибку? Это одноразовый импорт или что-то, что вы планируете запланировать? – JustLogic
Только один раз. Я имею в виду, что ничего не происходит. –