Міндет және алғышарттар
Сандық кілтпен сатылымдарға баға қосып, бағасы жоқ жолдарды сақтау.
Бұл мысал демонстрациялық деректер мен баптауларды қолданады. Өндірістік қабылдаушыларды қоспас бұрын күтілетін нәтижені өз ортаңызда тексеріңіз. Мына идентификаторлар: demo_* мысал ретінде берілген: редакторда өз оқу қосылымдарыңызды немесе дереккөздеріңізді таңдаңыз. Төмендегі JSON дайын тасымалдау архивін емес, блоктар мен байланыстар құрылымын көрсетеді.
Оқу кіріс деректері
sales.csv
ID;Qty
1;2
2.0;5
4;1
prices.csv
ID;Price
1.0;5
2;3
3;4
Блоктар, байланыстар және нақты баптаулар
08-мысал құрылымы: 4 блок, 3 байланыс. Бапталған графтың түйін идентификаторлары мен порттары сақталған.
Конструкторға көрсетілген блоктарды қосып, әрқайсының қасиеттерін ашыңыз және осы мәндерді орнатыңыз. Мына атаулар: demo_* оқу дереккөздері мен қосылымдарын анықтайды.
| Блок | Баптау |
|---|---|
| 1 Файл sales |
|
| 2 Файл prices |
|
| 3 Join — кілт бойынша біріктіру join |
|
| 4 Деректер экспорты out |
|
Порт байланыстары
- sales
out→ joinsales - prices
out→ joinprices - join
out→ outin
JSON түріндегі толық граф конфигурациясы
{
"version": 3,
"nodes": [
{
"id": "sales",
"type": "file",
"label": "sales",
"config": {
"role": "source",
"source_id": "demo_join_sales",
"options": {
"sheet": "CSV",
"range": "A1:B4",
"header": true,
"delimiter": ";"
}
}
},
{
"id": "prices",
"type": "file",
"label": "prices",
"config": {
"role": "source",
"source_id": "demo_join_prices",
"options": {
"sheet": "CSV",
"range": "A1:B4",
"header": true,
"delimiter": ";"
}
}
},
{
"id": "join",
"type": "join",
"label": "join",
"config": {
"inputs": [
{
"id": "sales",
"alias": "sales"
},
{
"id": "prices",
"alias": "prices",
"how": "left",
"cardinality": "many_to_one",
"keys": [
{
"left": "sales.ID",
"right": "ID",
"numeric": true
}
]
}
],
"nulls_equal": false,
"decimal": "."
}
},
{
"id": "out",
"type": "export",
"label": "out",
"config": {
"format": "json",
"filename": "sales_with_prices",
"destination": "download",
"delimiter": ";",
"timezone": "Europe/Kyiv"
}
}
],
"edges": [
{
"source": "sales",
"target": "join",
"source_port": "out",
"target_port": "sales"
},
{
"source": "prices",
"target": "join",
"source_port": "out",
"target_port": "prices"
},
{
"source": "join",
"target": "out",
"source_port": "out",
"target_port": "in"
}
]
}Күтілетін нәтиже
| sales.ID | sales.Qty | prices.ID | prices.Price |
|---|---|---|---|
| 1 | 2 | 1.0 | 5 |
| 2.0 | 5 | 2 | 3 |
| 4 | 1 | NULL | NULL |
Сандық салыстыру 1 және 1.0 мәндерін тең деп есептейді. LEFT JOIN ID=4 жолын бос бағамен сақтайды.
Іске қосу және тексеру
- Екі дереккөзді қосып, бөлек атаулы Join кірістеріне жалғаңыз.
- sales бірінші кірісін кілтсіз орнатыңыз; екінші prices кірісіне кілттерді анықтаңыз.
- Орындап, 3 жолды тексеріңіз; ID=4 үшін кездейсоқ қойылған баға емес, NULL болуы керек.
Жиі қателер
- Сол кілт бүркеншік атауды қамтуы керек: жай ID емес, sales.ID.
- Бір ID үшін екі баға many_to_one талабын бұзады және анықтамалықта түзетілуі керек.
- numeric өшірулі болса, "2.0" және "2" мәтіндік мәндері тең емес.