Как объединить 2 одинаковые строки в одну строку с разницей только в один столбец с помощью потоков данных Azure

#azure-data-factory #azure-data-flow

Вопрос:

Как объединить ниже 2 записей в одну строку с помощью потоков данных Azure

номер счета Тип телефона Домашний Номер Номер Мобильного телефона
1234 Главная 989 324 1234
1234 Мобильный 9893238893

Требуемая производительность

номер счета Домашний Номер Номер Мобильного телефона
1234 989 324 1234 989 323 8893

Ответ №1:

Предполагая NULL , что значения будут храниться в пустых столбцах, вы можете просто использовать max функцию в aggregate действии для достижения ожидаемого поведения.

Тестовый пример, который я использовал, встроенный набор данных:

 SELECT 1234 AS accountNumber, 'Home' AS phoneType, '989 324 1234' AS homeNumber, null AS mobileNumber UNION ALL SELECT 1234 AS accountNumber, 'Mobile' AS phoneType, null AS homeNumber, '9893238893' AS mobileNumber  

Стадия агрегирования: введите описание изображения здесь

введите описание изображения здесь

Результат предварительного просмотра данных: введите описание изображения здесь

Полный json для потока данных:

 {  "name": "dataflow1",  "properties": {  "type": "MappingDataFlow",  "typeProperties": {  "sources": [  {  "linkedService": {  "referenceName": "azuresqluat1",  "type": "LinkedServiceReference"  },  "name": "source1"  }  ],  "sinks": [],  "transformations": [  {  "name": "Aggregate1"  }  ],  "script": "source(output(nttaccountNumber as integer,nttphoneType as string,ntthomeNumber as string,nttmobileNumber as stringnt),ntallowSchemaDrift: true,ntvalidateSchema: false,ntformat: 'query',ntstore: 'sqlserver',ntquery: 'SELECT 1234 AS accountNumber, \'Home\' AS phoneType, \'989 324 1234\' AS homeNumber, \'\' AS mobileNumber\nUNION ALL\nSELECT 1234 AS accountNumber, \'Mobile\' AS phoneType, \'\' AS homeNumber, \'9893238893\' AS mobileNumber',ntisolationLevel: 'READ_UNCOMMITTED') ~gt; source1nsource1 aggregate(groupBy(accountNumber),nthomeNumber = max(homeNumber),nttmobileNumber = max(mobileNumber)) ~gt; Aggregate1"  }  } }  

Комментарии:

1. ПРИВЕТ, Рэй, я пытался воспользоваться твоим предложением, но у меня ничего не вышло. Входные значения-это строковый тип данных, и я преобразовал его в целое число и применил Max() поверх него, но не привел к каким-либо значениям.

2. Можете ли вы обновить свой вопрос с помощью текущей пробной версии? Вам не нужно сначала преобразовывать его в целое число перед применением max, так как параметры сортировки должны иметь возможность обрабатывать телефонные номера, превышающие значения null