Преобразование известных свойств из записи в результат верхнего уровня в Stream Analytics Query
У меня есть ряд динамических данных, обрабатываемых заданием Stream Analytics. Есть несколько однородных свойств, к которым я могу явно запросить, но основная часть полезной нагрузки имеет неизвестный тип во время запроса. Моя цель - взять эти неизвестные данные (запись) и перенести все свойства в поля верхнего уровня в результирующем запросе, который записывается в таблицу Azure.
Я могу сгладить свойства записи, она всегда добавляется в запрос как дочерний объект. GetRecordProperties()
не помогает, так как я не хочу, чтобы для каждого свойства возвращалась отдельная запись.
Мой запрос выглядит так:
WITH
[custom_events_temp] AS
(
SELECT
[magellan].[context].[data].[eventTime] as [event_time],
[flat_event].ArrayValue.name as [event_name],
udf.FlattenCustomDimensions([magellan].[context].[custom].[dimensions]) as [flat_custom_dim]
FROM [Magellan--AI-CustomEvents] magellan
TIMESTAMP BY [magellan].[context].[data].[eventTime]
CROSS APPLY GetElements([magellan].[event]) as [flat_event]
),
-- create table with extracted webhook data
[all_webhooks] AS
(
SELECT
[flat_custom_dim].[hook_event_source] as PartitionKey,
udf.CreateGuid('') as RowKey,
-- event data
[custom_events_temp].[event_time],
[custom_events_temp].[flat_custom_dim].[hook_event_name] as [event_name],
-- webhook payload data
udf.FlattenWebhookPayload(udf.ExtractJsonWebhookPayload([custom_events_temp].[flat_custom_dim].[webhook_payload])) AS [payload]
FROM [custom_events_temp]
)
SELECT * INTO [TrashTableOut] FROM [all_webhooks]
И полученная запись у меня выглядит вот так. Идея состоит в том, чтобы взять все в payload
вложенный объект не должен быть вложенным, поэтому у каждого свойства есть свой столбец в таблице Azure.
{
"partitionkey": "zzzzzzzzz",
"rowkey": "8beeb783-b07f-8a98-ef56-71c43378a5fc",
"event_time": "2017-10-15T05:37:06.3240000Z",
"event_name": "subscriber.updated_lead_score",
"payload": {
"event": "subscriber.updated_custom_field",
"data.subscriber.id": "...",
"occurred_at": "2017-10-15T05:36:57.000Z",
"data.account_id": "11111",
"data.subscriber.status": "active",
"data.subscriber.custom_fields.coupon": "xxxxxxx",
"data.subscriber.custom_fields.coupon_discounted_price": "11111",
"data.subscriber.custom_fields.coupon_pre_discount_price": "11111",
"data.subscriber.custom_fields.name": "John Doe",
"data.subscriber.custom_fields.first_name": "John",
"data.subscriber.custom_fields.ip_address": "0.0.0.0",
"data.subscriber.tags": "tag1,tag2,tag3",
"data.subscriber.time_zone": "Europe/Berlin",
"data.subscriber.utc_offset": 120,
"data.subscriber.created_at": "2017-03-27T18:19:35.000Z"
}
}
Это возможно? UDF FlattenCustomDimensions
берет массив элементов и выставляет их как свойства. UDF ExtractJsonWebhookPayload
берет строку и преобразует ее в JSON, в то время как UDF FlattenWebhookPayload
принимает сложный объект JSON и создает синтаксис точки, который вы видите в payload
объект в результатах.
Моя конечная цель - получить набор результатов, который выглядит следующим образом:
{
"partitionkey": "zzzzzzzzz",
"rowkey": "8beeb783-b07f-8a98-ef56-71c43378a5fc",
"event_time": "2017-10-15T05:37:06.3240000Z",
"event_name": "subscriber.updated_lead_score",
"payload.event": "subscriber.updated_custom_field",
"payload.data.subscriber.id": "...",
"payload.occurred_at": "2017-10-15T05:36:57.000Z",
"payload.data.account_id": "11111",
"payload.data.subscriber.status": "active",
"payload.data.subscriber.custom_fields.coupon": "xxxxxxx",
"payload.data.subscriber.custom_fields.coupon_discounted_price": "11111",
"payload.data.subscriber.custom_fields.coupon_pre_discount_price": "11111",
"payload.data.subscriber.custom_fields.name": "John Doe",
"payload.data.subscriber.custom_fields.first_name": "John",
"payload.data.subscriber.custom_fields.ip_address": "0.0.0.0",
"payload.data.subscriber.tags": "tag1,tag2,tag3",
"payload.data.subscriber.time_zone": "Europe/Berlin",
"payload.data.subscriber.utc_offset": 120,
"payload.data.subscriber.created_at": "2017-03-27T18:19:35.000Z"
}
Если у кого-то нет лучшей идеи / варианта.
1 ответ
Если вы добавите точечный синтаксис в запрос, в котором вы выберете * в последнюю строку, то вы можете запросить столбцы, которые вы развернули в temp, к определенным столбцам в главной таблице