Как мне вернуть значение элемента массива в одном из моих входов, в котором постоянно изменяется индекс, в котором он находится?
Я почти уверен, что структура моего запроса правильная.У меня есть два входа, и я использую соединение, и я успешно получаю некоторые данные из обеих таблиц.Тем не менее, мне нужно получить RemoteIpAddress из таблицы B, но он находится в массиве в формате JSON.
Мой запрос
Здесь это в тексте, если вы хотитечтобы легко скопировать, вставить и / или отредактировать его:
SELECT
A.context.data.eventTime as eventTime,
A.context.device.type as deviceType,
A.context.[user].anonId as userId,
A.context.device.roleInstance as machineName,
B.context.operation.name as eventName,
B.context.custom.dimensions[0],
--B.GetRecordPropertyValue(GetArrayElement(B.context.custom.dimensions,7), B.RemoteIpAddress) as remoteIpAddress,
--GetArrayElement(B.context.custom.dimensions,3),
--B.GetRecordPropertyValue(GetArrayElement(B.context.custom.dimensions,3), B.userName) as userName,
DATEDIFF(minute,A.context.data.eventTime,B.context.data.eventTime) as durationInMinutes
INTO DevUserlgnsOutput
FROM DevUserlgnsInput A TIMESTAMP BY A.context.data.eventTime
JOIN DevUserlgnsInput2 B TIMESTAMP BY B.context.data.eventTime
ON DATEDIFF(minute,A,B) BETWEEN 0 AND 5
Закомментированные строки не работают, поэтому я закомментировал их.
Я посмотрел это иувидел рекомендации по использованию GetRecordPropertyValue и GetArrayElement, так что я сделал.Я не получаю ошибок, но он возвращает ноль.
Я также обнаружил, что если я сделаю B.context.custom.dimensions [0], будет возвращен полный массив, включая элемент, который я хочу видеть.
Чтобы еще больше усложнить ситуацию, я понял, что положение элемента, который я хочу в массиве, не всегда одинаково.В некоторых примерах данных это 7, в других - 3.
Заранее спасибо.
ОБНОВЛЕНИЕ после прочтения ответа:
Мой новый запрос:
SELECT
Events.context.data.eventTime as eventTime,
Events.context.device.type as deviceType,
mDim.ArrayValue.MachineName as machineName,
mDim.ArrayValue.UserId as userID,
mDim.ArrayValue.RemoteIpAddress as remoteIpAddress,
mDim.ArrayValue.UserName as userName,
mDim.ArrayValue.EventName as eventName
INTO DevUserlgnsOutput
FROM DevUserlgnsInput2 Events
CROSS APPLY GetArrayElements(Events.context.custom.dimensions) AS mDim
Проблема: Теперь у меня есть несколько строк для одного события, каждая из которых отображает 1 атрибут, который я хочу отслеживать (остальные столбцы в каждой строке, относящиеся к массиву,НОЛЬ).Есть мысли, как это исправить?