#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