הצטרפו לקבוצות שלנו לקבלת עדכונים מרוכזים פעם בשבוע:

ווטסאפ:
http://wa.dwh.co.il
טלגרם:
http://telegram.dwh.co.il

הדרך הנכונה והמהירה ביותר לבצע UPSERT?

More
15 years 5 months ago #5929 by eliazu
היי אור וכל חברי הפורום.

ברצוני לדעת מהי הדרך הטובה ביותר לבצע UPSERT
(INSERT OR UPDATE).

אתאר את המצב הנוכחי:
לדוגמא, טבלת עובדים:
ברגע שמגיע עובד חדש הוא נוצר בטבלה.
אם יש עידכון ברשומה לגבי העובד (למשל, מצב משפחתי) יתבצע UPDATE.

את ההבחנה האם צריך לבצע UPDATE או INSERT אני מבצע באמצעות
dynamic lookup בו הגדרתי:
1. sequence-id עבור הרשומות החדשות
2. UPDATE else insert & INSERT else update בהגדרות שלו.
3. מוציא את ה newLookupRow אל אובייקט ה update strategy.

הגדרות ה update strategy:
מקבל את כל רשומות הטבלה עם ה newLookupRow.
בהגדרות שלו ההגדרה היא
Code:
decode(newLookupRow 1, dd_insert, 2, dd_update, dd_reject)
מלבד זאת הורדתי את ה v מ transfer rejected rows.

הגדרות ה target ב workflow manager:
insert + update as update.
מלבד זאת הגדרתי כמובן data driven.

האם זוהי הדרך הכי טובה לעשות UPSERT (עם יצירת generated key עבורו אני זקוק ל dynamic lookup)?
כמו כן, ב logs של ה session אני מקבל המון errors של dd_rejected, עבור הרשומות שקיבלו 0 ב newLookuprow. כיצד אני מבטל את ההודעות האלו ב log?

תודה רבה!
אלירן אזולאי.

Please התחברות to join the conversation.

More
15 years 5 months ago #5933 by Or Pelach
הי אלירן,
לדעתי שימוש ב-dynamic lookup בצורך שתיארת הוא מיותר.
אפשר בעזרת LKP רגיל בקלות לאתר רשומות שהשתנו ולעדכן אותן או להוסיף רשומות חדשות.
זה גם מפשט את התהליך וגם מאיץ את הביצועים.

כאשר אתה מקבל במקור מס' רשומות עבור אותו KEY
ויש חשיבות לעדכון או הוספת רשומה על פי לוגיקה
לדוגמה:
לנתוני פניות ב-Help Desk יש חשיבות לבדוק האם סטטוס עודכן ל"סגור" אזי יש להוסיף רשומה , אחרת לעדכן אותה.
במקרה כזה כן יש הצדקה ל- dynamic lookup(למרות שגם זה ניתן לפתור עם Expression פשוט)

לגבי rejected rows שנכנסות לקובץ לוג - תוכל לשים Router כדי לפלטר אותן.

בברכה,
אור

Please התחברות to join the conversation.

More
15 years 5 months ago #5934 by eliazu
היי אור,

בקשר ל ROUTER - רעיון מצוין, אבצע זאת.

טבלת היעד היא בעלת כ 20 שדות.
כיצד ניתן בעזרת lookup שהוא לא dynamic לדעת האם צריך לבצע update או insert בקלות?
הפורט newLookupRow בו אני משתמש זמין רק בתצורת dynamic lookup, לא?
(אני מצליח לחשוב איך ניתן לעשות זאת ב EXP, אך זה נראה לי מאוד מסובך. (אצטרך להגדיר את newLookupRow בעצמי באמצעות מעבר על תנאי האם השתנה משהו בין כל פורטי הכניסה) .האם אני מפספס משהו?

ולגבי sequence-id, שמוצא את ה max Key ומוסיף 1 עבור רשומות חדשות,
גם הוא זמין רק ב dynamic. כיצד ניתן ליישם אותו אחרת?

Please התחברות to join the conversation.

More
15 years 5 months ago #5935 by Or Pelach
ב-LKP רגיל - אם רשומה לא קיימת תוסיף אותה אחרת, ב-Expression תוכל לבדוק האם שדה X,Y,Z השתנו
אם כן -עדכן.
באותו-Expression תוכל לקדם את ה-sequence-id עבור כל רשומה חדשה

Please התחברות to join the conversation.

More
15 years 5 months ago #5941 by eliazu
היי אור,
אני אנסה את זה.

תודה רבה
אלירן

Please התחברות to join the conversation.

Moderators: Laromme Barr
Time to create page: 0.307 seconds