Я пытаюсь выполнить объединение потоковой аналитики со справочными данными.
Ниже приведен ввод из потоковых данных.
[{
"id":"111111101",
"basetime":0,
"xyz":
[
{
"xxx":1,
"yyy":2631,
"aaa":"470A01",
"id":1
},
{
"xxx":0,
"yyy":0,
"aaa":"000000",
"id":61
}
]
},
{
"id":"111111102",
"basetime":0,
"xyz":
[
{
"xxx":1,
"yyy":2631,
"aaa":"03F4EB",
"id":1
}
]
},
{
"id":"111111103",
"basetime":0,
"xyz":
[
{
"xxx":1,
"yyy":2631,
"aaa":"6706",
"id":1
}
]
}
]
Ниже приведены справочные основные данные.
[
{
"aaa": "470A01"
},
{
"aaa": "03F4EB"
},
{
"aaa": "710211"
}
]
Написанный SAQL показан ниже.
WITH INPUT1 AS (
SELECT
input.id.dateTime AS ID,
flatArrayElement as ABC,
FROM [signals2] as input
CROSS APPLY GetArrayElements(input.xyz) AS flatArrayElement
)
Я использовал CROSS APPLY, чтобы получить каждый элемент в xyz в виде разных строк.
Вывод INPUT1:как показано ниже.
+----------+------------------------------------------------------------------------+
| ID | ABC |
+----------+------------------------------------------------------------------------+
| 111111101| {"ArrayValue":{"xxx":1,"yyy":2631,"aaa":470A01,"id":1},"ArrayIndex":0} |
| 111111101| {"ArrayValue":{"xxx":0,"yyy":0,"aaa":000000,"id":61},"ArrayIndex":1} |
| 111111102| {"ArrayValue":{"xxx":1,"yyy":2631,"aaa":03F4EB,"id":1},"ArrayIndex":0} |
| 111111103| {"ArrayValue":{"xxx":1,"yyy":2631,"aaa":6706,"id":1},"ArrayIndex":0} |
+-------------------+---------------------------------------------------------------+
Теперь я пытаюсь объединить данные xyz.aaa со справочными данными, как показано ниже, где master - справочные данные.
SIGNALS AS (
SELECT * FROM INPUT1 I JOIN master M ON I.ABC.ArrayValue.aaa = M.aaa
Я получаюниже вывода, но проблема в xyz с более чем одним элементом, дублирующим в выводе.
+-------------------------------+------------------------------------------------------------------------------------------+--------+
| i___timestamp | i | m |
+-------------------------------+------------------------------------------------------------------------------------------+--------+
| "2019-11-13T03:36:22.4636494Z"| "id": "111111101",{"ArrayValue":{"xxx":1,"yyy":2631,"aaa":470A01,"id":1},"ArrayIndex":0} | 470A01 |
| "2019-11-13T03:36:22.4636494Z"| "id": "111111101",{"ArrayValue":{"xxx":1,"yyy":2631,"aaa":470A01,"id":1},"ArrayIndex":0} | 470A01 |
| "2019-11-13T03:36:22.4636494Z"| "id": "111111102",{"ArrayValue":{"xxx":1,"yyy":2631,"aaa":03F4EB,"id":1},"ArrayIndex":0} | 03F4EB |
+-------------------------------+------------------------------------------------------------------------------------------+--------+
Я запутался, почему дублируются первые две строки, это должен быть только одинзапись для этого. Из двух элементов в xyz один действителен, а другой недействителен. Но здесь действительный элемент повторяется два раза. В чем может быть причина? Как это решить?