Я пытаюсь проанализировать данные дедупликации, которые хранятся в формате Json в базе данных.Я использую приведенный ниже запрос для получения необходимых данных из базы данных и создал фрейм данных, который выглядит следующим образом.
Запрос:
SELECT ID,Result,Remark,Json,Date
FROM Table1
WHERE DATE(Date)>='2019-01-01'
AND DATE(Date)<='2019-05-31';
Фрейм данных:
ID Result Remark Json Date
XTR-1 Pass Matched {Json} 2019-01-01 18:25:12
XTR-4 Failed No Match {Json} 2019-01-01 13:20:23
XTR-7 InProgress Matched {Json} 2019-02-01 15:23:10
Пример файла JSON
{
"title": [
{
"category": "Category A",
"uniqueId": "XRT-1",
"status": [
{
"field": "E1",
"value": "xdrts",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category A",
"Name": "AFFH",
"targetField": "l.ce",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category B",
"Name": "AFFH",
"targetField": "u.vE1",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "Category Cs.E1",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
},
{
"field": "E2",
"matchingApp": []
},
{
"field": "E3",
"value": "9191919191",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category A",
"Name": "AFFH",
"targetField": "l.cE2yM",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "C C.m",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Marc D",
"Name": "AFFH",
"targetField": "cb.E3s",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
}
]
},
{
"category": "Category B",
"uniqueId": "b6ae",
"status": [
{
"field": "E1",
"value": "xdrts",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category B",
"Name": "AFFH",
"targetField": "u.vE1",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category A",
"Name": "AFFH",
"targetField": "l.ce",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "Category Cs.E1",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
},
{
"field": "E3",
"value": "9191919191",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category B",
"Name": "AFFH",
"targetField": "u.uE3",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
}
]
},
{
"category": "Ref",
"uniqueId": "b18b",
"status": [
{
"field": "E3",
"value": "7800252426",
"matchingApp": []
},
{
"field": "E1",
"matchingApp": []
}
]
},
{
"category": "Ref",
"uniqueId": "8698",
"status": [
{
"field": "E3",
"value": "1282",
"matchingApp": []
},
{
"field": "E1",
"matchingApp": []
}
]
},
{
"category": "BeDet",
"uniqueId": "707126",
"status": [
{
"field": "E4",
"value": "4519",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E4",
"flag": false,
"Id": "765djhf45",
"category": "E4s",
"Name": "AFFH",
"targetField": "xcdetails.accNumber",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
}
]
},
{
"category": "Marc D",
"uniqueId": "88d6",
"status": [
{
"field": "E3",
"value": "0552,9415,9125",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category A",
"Name": "AFFH",
"targetField": "l.cE2yM",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "C C.m",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Marc D",
"Name": "AFFH",
"targetField": "cb.E3s",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Marc D",
"Name": "AFFH",
"targetField": "cb.E3s",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
},
{
"field": "E2",
"value": "AY2218Z",
"matchingApp": []
},
{
"field": "E1",
"matchingApp": []
}
]
},
{
"category": "Category C",
"uniqueId": "88d6",
"status": [
{
"field": "E1",
"value": "xdrts",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category A",
"Name": "AFFH",
"targetField": "l.ce",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category B",
"Name": "AFFH",
"targetField": "u.vE1",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E1",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "Category Cs.E1",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
},
{
"field": "E2",
"value": "AY2218Z",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E2",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "Category Cs.E2Hash",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E2",
"flag": false,
"Id": "765djhf45",
"category": "Marc D",
"Name": "AFFH",
"targetField": "cd.jsE2H",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
},
{
"field": "E3",
"value": "9191919191",
"matchingApp": [
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category A",
"Name": "AFFH",
"targetField": "l.cE2yM",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Category C",
"Name": "AFFH",
"targetField": "C C.m",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
},
{
"appId": "XRT-2",
"field": "E3",
"flag": false,
"Id": "765djhf45",
"category": "Marc D",
"Name": "AFFH",
"targetField": "cb.E3s",
"lastUpdateDate": "Jul 29, 2019 5:04:56 AM",
"as": "A R",
"AART": "B C"
}
]
}
]
}
],
"restrictedIdentities": []
}
Структура файла Json содержит нижеуказанные параметры.
Поле Category
в json содержит следующую категорию:
Category field
Category A E1,E2,E3
Category B E1,E2,E3
Category C E1,E2,E3
Marc D E1,E2,E3
ref E1,E2,E3
BeDet E4
Каждый Category
содержит три field
, за исключением категории BeDet
, которая содержит только один field
E4.Теперь я хочу извлечь информацию из JSON по месяцам, а также по датам, исходя из того, сколько для каждого поля найдено совпадений для каждого поля в другой категории.
Мой ожидаемый результат выглядит примерно так:
Jan-19 E1 E2 E3 E4 Result
T1 T2 C1 C2 C3 C4 C5 C1 C2 C3 C4 C5 C1 C2 C3 C4 C5 C6 Pass Failed InProgress Total
Matched 1 1 1 1 0 0 0 0 1 1 1 0 0 0 0 0 0 1 1 0 0 1
No Match 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
Pending
Где,
T1
: общее количество отдельных ID
в конкретном месяце (то есть 2 в месяце с 19 января) T2
: Общее количество различных ID
совпадений с различными ID
в JSON (т. Е. В образце json XTR-1
совпадение только с XTR-2
, существуют сценарии, в которых один отличный ID
может быть сопоставлен с n числом ID
s) E1
до E4
: Это просто сокращение поля, предположим, что значение E1
совпадает со значением Category A
, после чего счетчик появится в столбце C1
.Аналогичный процесс продолжается для разных field
и Category
. Matched
/ No Match
: совокупное количество совпадений и совпадений ID
по столбцу данных группы Remark
по месяцам Pass
/ Failed
/ InProgress
: совокупный счет той же группы по месяцам в выходном фрейме данных Total
: всего группы ID
по Remark
.
Для сценариев, в которых нет совпадения для какого-либо конкретного поля, тогда переменная matchingApp
в JSON будет []
Примечание: E1
- E4
являются правильным текстом в оригинальном JSON, я обозначил здесь знаком для простоты.И счет должен быть синхронизирован с группой по месяцу, результату и примечанию
Для другого Month
(т.е. Feb-19
) та же таблица добавляется под таблицей Jan-19
в том же порядке и
. Result
и Remarks
являются статическими значениями и больше, чем я упомянул в вопросе. Это должно быть жестко закодировано в коде