توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

سائيٽ جي انگن اکرن جو تجزيو ڪندي، اسان کي هڪ خيال حاصل ٿئي ٿو ته ان سان ڇا ٿي رهيو آهي. اسان نتيجن کي پراڊڪٽ يا خدمت جي باري ۾ ٻين ڄاڻ سان مقابلو ڪريون ٿا ۽ ان سان اسان جي تجربي کي بهتر بڻائي ٿو.

جڏهن پهرين نتيجن جو تجزيو مڪمل ڪيو ويو آهي، معلومات سمجهي وئي آهي ۽ نتيجو ڪڍيا ويا آهن، ايندڙ مرحلو شروع ٿئي ٿو. خيال پيدا ٿئي ٿو: جيڪڏهن توهان ٻئي پاسي کان ڊيٽا کي ڏسو ته ڇا ٿيندو؟

ھن مرحلي تي تجزياتي اوزار جون حدون آھن. اهو هڪ سبب آهي ته گوگل تجزياتي منهنجي لاءِ ڪافي نه هئي، يعني منهنجي ڊيٽا کي ڏسڻ ۽ ان کي ترتيب ڏيڻ جي محدود صلاحيت جي ڪري.

مان هميشه بنيادي ڊيٽا (ماسٽر ڊيٽا) کي جلدي لوڊ ڪرڻ، مجموعي جي هڪ ٻي سطح شامل ڪرڻ، يا موجوده قدرن کي مختلف طرح سان تشريح ڪرڻ چاهيان ٿو.

اهو ڪم ڪرڻ ۾ آسان آهي توهان جي ننڍڙي اسٽوريج روم ۾ access.log فائل جي بنياد تي ۽ SQL ٻولي ان لاءِ ڪافي آهي.

سو، مون کي ڪهڙا سوال جواب ڏيڻ گهرجن؟

ڇا ۽ جڏهن سائيٽ تي تبديل ڪيو ويو آهي

بنيادي ڊيٽا (ماسٽر ڊيٽا) ۾ تبديلين جي تاريخ هميشه دلچسپي جي آهي.

توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

SQL رپورٽ سوال

SELECT
	1 as 'SideStackedBar: Content Updates by Months',
	strftime('%m/%Y', datetime(UPDATE_DT, 'unixepoch')) AS 'Day',
	COUNT(CASE WHEN PAGE_TITLE != 'n.a.' THEN DIM_REQUEST_ID END) AS 'Web page updates',
	COUNT(CASE WHEN PAGE_DESCR = 'IMAGES' THEN DIM_REQUEST_ID END) AS 'Image uploads',
	COUNT(CASE WHEN PAGE_DESCR = 'VIDEO' THEN DIM_REQUEST_ID END) AS 'Video uploads',
	COUNT(CASE WHEN PAGE_DESCR = 'AUDIO' THEN DIM_REQUEST_ID END) AS 'Audio uploads'
FROM DIM_REQUEST
WHERE PAGE_TITLE != 'n.a.' OR PAGE_DESCR != 'n.a.'
GROUP BY strftime('%m/%Y', datetime(UPDATE_DT, 'unixepoch'))
ORDER BY UPDATE_DT

مثال طور، ڪجهه نقطي تي، سرچ انجڻ جي اصلاح ڪئي وئي هئي يا سائيٽ تي نئون مواد شامل ڪيو ويو، ۽ تنهن ڪري ٽرئفڪ ۾ اضافو متوقع آهي.

صارفين جو گروپ

هڪ گروپ جو آسان ترين مثال صارف ايجنٽ يا آپريٽنگ سسٽم جو نالو آهي.

استعمال ڪندڙ ايجنٽ جي طول و عرض اٽڪل هڪ هزار رڪارڊ گڏ ڪري چڪو آهي ۽ مون کي گروپ جي اندر ايجنٽ جي تقسيم جي متحرڪ ڏسڻ ۾ دلچسپي هئي.

توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

SQL رپورٽ سوال

SELECT
	1 AS 'SideStackedBar: User Agents',
	AGENT_OS AS 'OS',
	SUM(CASE WHEN AGENT_BOT = 'n.a.' THEN 1 ELSE 0 END ) AS 'User Agent of Users',
	SUM(CASE WHEN AGENT_BOT != 'n.a.' THEN 1 ELSE 0 END ) AS 'User Agent of Bots'
FROM DIM_USER_AGENT
WHERE DIM_USER_AGENT_ID != -1
GROUP BY AGENT_OS
ORDER BY 3 DESC

اڪثر ايجنٽ جا مختلف مجموعا ونڊوز جي دنيا مان سائيٽ تي ايندا آهن. اڻڄاتل ماڻهن ۾ WhatsApp، PocketImageCache، PlayStation، SmartTV وغيره شامل هئا.

صارف گروپ جي سرگرمي هفتي طرفان

ڪجھ گروپن کي گڏ ڪرڻ سان، ھڪڙو انھن جي سرگرمين جي تقسيم کي ڏسي سگھي ٿو.

مثال طور، لينڪس ڪلستر استعمال ڪندڙ هر ڪنهن کان وڌيڪ ويب سائيٽ ٽرئفڪ استعمال ڪن ٿا.

توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

SQL رپورٽ سوال

SELECT
1 as 'StackedBar: Traffic Volume by User OS and by Week',
strftime('%W week', datetime(FCT.EVENT_DT, 'unixepoch')) AS 'Week',
SUM(CASE WHEN USG.AGENT_OS IN ('Android', 'Linux') THEN FCT.BYTES ELSE 0 END)/1000 AS 'Android/Linux Users',
SUM(CASE WHEN USG.AGENT_OS IN ('Windows') THEN FCT.BYTES ELSE 0 END)/1000 AS 'Windows Users',
SUM(CASE WHEN USG.AGENT_OS IN ('Macintosh', 'iOS') THEN FCT.BYTES ELSE 0 END)/1000 AS 'Mac/iOS Users',
SUM(CASE WHEN USG.AGENT_OS IN ('n.a.', 'BlackBerry') THEN FCT.BYTES ELSE 0 END)/1000 AS 'Other'
FROM
  FCT_ACCESS_USER_AGENT_DD FCT,
  DIM_USER_AGENT USG,
  DIM_HTTP_STATUS HST
WHERE FCT.DIM_USER_AGENT_ID=USG.DIM_USER_AGENT_ID
  AND FCT.DIM_HTTP_STATUS_ID = HST.DIM_HTTP_STATUS_ID
  AND USG.AGENT_BOT = 'n.a.' /* users only */
  AND HST.STATUS_GROUP IN ('Successful') /* good pages */
  AND datetime(FCT.EVENT_DT, 'unixepoch') > date('now', '-3 month')
GROUP BY strftime('%W week', datetime(FCT.EVENT_DT, 'unixepoch'))
ORDER BY FCT.EVENT_DT

تيز ٽرئفڪ واپرائڻ

ٽيبل سڀ کان وڌيڪ فعال صارف گروپ ۽ انهن جي سرگرمين جو ڏينهن ڏيکاري ٿو.
سڀ کان وڌيڪ فعال لينڪس ڪلستر سان تعلق رکن ٿا.

توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

SQL رپورٽ سوال

SELECT
1 AS 'Table: User Agent with Havy Usage',
strftime('%d.%m.%Y', datetime(FCT.EVENT_DT, 'unixepoch')) AS 'Day',
ROUND(1.0*SUM(FCT.BYTES)/1000000, 1) AS 'Traffic MB',
ROUND(1.0*SUM(FCT.IP_CNT)/SUM(1), 1) AS 'IPs',
ROUND(1.0*SUM(FCT.REQUEST_CNT)/SUM(1), 1) AS 'Requests',
USA.DIM_USER_AGENT_ID AS 'ID',
MAX(USA.USER_AGENT_NK) AS 'User Agent',
MAX(USA.AGENT_BOT) AS 'Bot'
FROM
FCT_ACCESS_USER_AGENT_DD FCT,
DIM_USER_AGENT USA
WHERE FCT.DIM_USER_AGENT_ID = USA.DIM_USER_AGENT_ID
  AND datetime(FCT.EVENT_DT, 'unixepoch') >= date('now', '-30 day')
GROUP BY USA.DIM_USER_AGENT_ID, strftime('%d.%m.%Y', datetime(FCT.EVENT_DT, 'unixepoch')) 
ORDER BY SUM(FCT.BYTES) DESC, FCT.EVENT_DT
LIMIT 10

ڏينهن ۽ ايجنٽ جي سڃاڻپ جي خاصيتن کي استعمال ڪندي، انفرادي صارف گروپن جي ڏينهن تي انگن اکرن کي جلدي ڳولڻ ۽ ٽريڪ ڪرڻ ممڪن آهي. جيڪڏھن ضروري ھجي، توھان جلدي تفصيلي ڄاڻ حاصل ڪري سگھوٿا اسٽيج ٽيبل ۾.

معلومات ڪيئن حاصل ڪجي؟

معلومات access.log فائل مان اضافي ڊيٽا ذريعن کي ضم ڪرڻ ۽ مجموعي ۽ گروهه جي نئين سطحن کي متعارف ڪرائڻ سان اڃا به وڌيڪ ڪارائتو بڻائي سگهجي ٿو.

بنيادي ڊيٽا ۽ ادارن

بنيادي ڊيٽا ۾ ادارن بابت معلومات شامل آهي: ويب صفحا، تصويرون، وڊيو ۽ آڊيو مواد، اسٽور جي صورت ۾ - مصنوعات.

ادارا پاڻ کي ماپ جو ڪم ڪن ٿا، ۽ خاصيتن ۾ تبديلين کي محفوظ ڪرڻ جي عمل کي تاريخي سڏيو ويندو آهي. ڊيٽابيس ۾، اهو عمل اڪثر ڪري سست رفتاري سان مختلف طول و عرض (SCD) جي صورت ۾ لاڳو ڪيو ويندو آهي.

ماخذ ڊيٽا مختلف سسٽم مان اچي سگهي ٿو، تنهن ڪري انهن کي تقريبا هميشه ضم ٿيڻ جي ضرورت آهي.

آهستي آهستي تبديل ٿيندڙ ماپ

DIM_REQUEST طول و عرض تاريخي شڪل ۾ سائيٽ تي درخواستن بابت معلومات تي مشتمل هوندو.

ٽيبل SCD2

CREATE TABLE DIM_REQUEST ( /* scd table for user requests */
  DIM_REQUEST_ID      INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  DIM_REQUEST_ID_HIST INTEGER NOT NULL DEFAULT -1,
  REQUEST_NK          TEXT NOT NULL DEFAULT 'n.a.', /* request without ?parameters */
  PAGE_TITLE          TEXT NOT NULL DEFAULT 'n.a.',
  PAGE_DESCR          TEXT NOT NULL DEFAULT 'n.a.',
  PAGE_KEYWORDS       TEXT NOT NULL DEFAULT 'n.a.',
  DELETE_FLAG         INTEGER NOT NULL DEFAULT 0,
  UPDATE_DT           INTEGER NOT NULL DEFAULT 0,
  UNIQUE (REQUEST_NK, DIM_REQUEST_ID_HIST)
);
INSERT INTO DIM_REQUEST (DIM_REQUEST_ID) VALUES (-1);

ان کان علاوه، اسان هڪ منظر ٺاهينداسين جيڪو هميشه سڀني رڪارڊ کي تازي حالت ۾ ڏيکاري ٿو. ماپ پاڻ کي لوڊ ڪرڻ لاء ضروري آهي.

توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

SCD2 جي موجوده نمائندگي

/* Content: actual view on scd table */
SELECT HI.DIM_REQUEST_ID,
  HI.DIM_REQUEST_ID_HIST,
  HI.REQUEST_NK,
  HI.PAGE_TITLE,
  HI.PAGE_DESCR,
  HI.PAGE_KEYWORDS,
  NK.CNT AS HIST_CNT,
  HI.DELETE_FLAG,
  strftime('%d.%m.%Y %H:%M', datetime(HI.UPDATE_DT, 'unixepoch')) AS UPDATE_DT
FROM
  ( SELECT REQUEST_NK, MAX(DIM_REQUEST_ID) AS DIM_REQUEST_ID, SUM(1) AS CNT
    FROM DIM_REQUEST
    GROUP BY REQUEST_NK
  ) NK,
  DIM_REQUEST HI
WHERE 1 = 1
  AND NK.REQUEST_NK = HI.REQUEST_NK
  AND NK.DIM_REQUEST_ID = HI.DIM_REQUEST_ID;

۽ هڪ نظارو جتي تاريخي معلومات گڏ ڪئي وئي آهي هر داخلا لاءِ. ان لاءِ ضروري آهي ته حقيقتن سان تاريخي طور صحيح لاڳاپو قائم ڪيو وڃي.

توهان جي ننڍي اسٽوريج ۾ وڌيڪ سائيٽ جا انگ اکر

SCD2 جي تاريخي پيشڪش

/* Content: actual view on scd table */
SELECT SCD.DIM_REQUEST_ID,
  SCD.DIM_REQUEST_ID_HIST,
  SCD.REQUEST_NK,
  SCD.PAGE_TITLE,
  SCD.PAGE_DESCR,
  SCD.PAGE_KEYWORDS,
  SCD.DELETE_FLAG,
  CASE
    WHEN HIS.UPDATE_DT IS NULL
    THEN 1
    ELSE 0 END ACTIVE_FLAG,
  SCD.DIM_REQUEST_ID_HIST AS ID_FROM,
  SCD.DIM_REQUEST_ID AS ID_TO,
  CASE
    WHEN SCD.DIM_REQUEST_ID_HIST=-1
    THEN 3600
    ELSE IFNULL(SCD.UPDATE_DT,3600)
  END AS TIME_FROM,
  CASE
    WHEN HIS.UPDATE_DT IS NULL
    THEN 253370764800
    ELSE HIS.UPDATE_DT
  END AS TIME_TO,
  CASE
    WHEN SCD.DIM_REQUEST_ID_HIST=-1
    THEN STRFTIME('%d.%m.%Y %H:%M', DATETIME(3600, 'unixepoch'))
    ELSE STRFTIME('%d.%m.%Y %H:%M', DATETIME(IFNULL(SCD.UPDATE_DT,3600), 'unixepoch'))
  END AS ACTIVE_FROM,
  CASE
    WHEN HIS.UPDATE_DT IS NULL
    THEN STRFTIME('%d.%m.%Y %H:%M', DATETIME(253370764800, 'unixepoch'))
    ELSE STRFTIME('%d.%m.%Y %H:%M', DATETIME(HIS.UPDATE_DT, 'unixepoch'))
  END AS ACTIVE_TO
FROM
  DIM_REQUEST SCD
  LEFT OUTER JOIN DIM_REQUEST HIS
  ON SCD.REQUEST_NK = HIS.REQUEST_NK AND SCD.DIM_REQUEST_ID = HIS.DIM_REQUEST_ID_HIST;

ڊيٽا گڏ ڪرڻ

ڪمپريشن (مجموعي) توهان کي اجازت ڏئي ٿي ڊيٽا کي اعليٰ سطح تي جائزو وٺڻ ۽ انموليز ۽ رجحانات کي ڳولڻ جي اجازت ڏئي ٿو جيڪي تفصيلي رپورٽن ۾ نظر نه ٿا اچن.

مثال طور، هڪ گروپ شامل ڪريو طول و عرض سان درخواست اسٽيٽس ڪوڊس DIM_HTTP_STATUS:

اسٽيٽس/گروپ
0xx/n.a
1xx / ڄاڻ
2xx / ڪامياب
3xx / ريڊائريشن
4xx / ڪلائنٽ جي غلطي
5xx/سرور جي غلطي

يوزر ايجنٽ جي طول و عرض DIM_USER_AGENT ۾ AGENT_OS ۽ AGENT_BOT خاصيتون هونديون جيڪي گروپن جا ذميوار آهن. اهي ETL عمل دوران آباد ٿي سگهن ٿا:

لوڊ ٿي رهيو آهي DIM_USER_AGENT

/* Propagate the user agent from access log */
INSERT INTO DIM_USER_AGENT (USER_AGENT_NK, AGENT_OS, AGENT_ENGINE, AGENT_DEVICE, AGENT_BOT, UPDATE_DT)
WITH CLS AS (
	SELECT BROWSER
	FROM STG_ACCESS_LOG WHERE LENGTH(BROWSER)>1
	GROUP BY BROWSER
)
SELECT
	CLS.BROWSER AS USER_AGENT_NK,
	CASE
	WHEN INSTR(CLS.BROWSER,'Macintosh')>0
		THEN 'Macintosh'
	WHEN INSTR(CLS.BROWSER,'iPhone')>0
			 OR INSTR(CLS.BROWSER,'iPad')>0
			 OR INSTR(CLS.BROWSER,'iPod')>0
			 OR INSTR(CLS.BROWSER,'Apple TV')>0
			 OR INSTR(CLS.BROWSER,'Darwin')>0
		THEN 'iOS'
	WHEN INSTR(CLS.BROWSER,'Android')>0
		THEN 'Android'
	WHEN INSTR(CLS.BROWSER,'X11;')>0 OR INSTR(CLS.BROWSER,'Wayland;')>0 OR INSTR(CLS.BROWSER,'linux-gnu')>0
		THEN 'Linux'
	WHEN INSTR(CLS.BROWSER,'BB10;')>0 OR INSTR(CLS.BROWSER,'BlackBerry')>0
		THEN 'BlackBerry'
	WHEN INSTR(CLS.BROWSER,'Windows')>0
		THEN 'Windows'
	ELSE 'n.a.' END AS AGENT_OS, -- OS
	CASE
	WHEN INSTR(CLS.BROWSER,'AppleCoreMedia')>0
		THEN 'AppleWebKit'
	WHEN INSTR(CLS.BROWSER,') ')>1 AND LENGTH(CLS.BROWSER)>INSTR(CLS.BROWSER,') ')
		THEN COALESCE(SUBSTR(CLS.BROWSER, INSTR(CLS.BROWSER,') ')+2, LENGTH(CLS.BROWSER) - INSTR(CLS.BROWSER,') ')-1), 'N/A')
	ELSE 'n.a.' END AS AGENT_ENGINE, -- Engine
	CASE
	WHEN INSTR(CLS.BROWSER,'iPhone')>0
		THEN 'iPhone'
	WHEN INSTR(CLS.BROWSER,'iPad')>0
		THEN 'iPad'
	WHEN INSTR(CLS.BROWSER,'iPod')>0
		THEN 'iPod'
	WHEN INSTR(CLS.BROWSER,'Apple TV')>0
		THEN 'Apple TV'
	WHEN INSTR(CLS.BROWSER,'Android ')>0 AND INSTR(CLS.BROWSER,'Build')>0
		THEN COALESCE(SUBSTR(CLS.BROWSER, INSTR(CLS.BROWSER,'Android '), INSTR(CLS.BROWSER,'Build')-INSTR(CLS.BROWSER,'Android ')), 'n.a.')
	WHEN INSTR(CLS.BROWSER,'Android ')>0 AND INSTR(CLS.BROWSER,'MIUI')>0
		THEN COALESCE(SUBSTR(CLS.BROWSER, INSTR(CLS.BROWSER,'Android '), INSTR(CLS.BROWSER,'MIUI')-INSTR(CLS.BROWSER,'Android ')), 'n.a.')
	ELSE 'n.a.' END AS AGENT_DEVICE, -- Device
	CASE
	WHEN INSTR(LOWER(CLS.BROWSER),'yandex.com')>0
		THEN 'yandex'
	WHEN INSTR(LOWER(CLS.BROWSER),'googlebot')>0
		THEN 'google'
	WHEN INSTR(LOWER(CLS.BROWSER),'bingbot')>0
		THEN 'microsoft'
	WHEN INSTR(LOWER(CLS.BROWSER),'ahrefsbot')>0
		THEN 'ahrefs'
	WHEN INSTR(LOWER(CLS.BROWSER),'jobboersebot')>0 OR INSTR(LOWER(CLS.BROWSER),'jobkicks')>0
		THEN 'job.de'
	WHEN INSTR(LOWER(CLS.BROWSER),'mail.ru')>0
		THEN 'mail.ru'
	WHEN INSTR(LOWER(CLS.BROWSER),'baiduspider')>0
		THEN 'baidu'
	WHEN INSTR(LOWER(CLS.BROWSER),'mj12bot')>0
		THEN 'majestic-12'
	WHEN INSTR(LOWER(CLS.BROWSER),'duckduckgo')>0
		THEN 'duckduckgo'
	WHEN INSTR(LOWER(CLS.BROWSER),'bytespider')>0
		THEN 'bytespider'
	WHEN INSTR(LOWER(CLS.BROWSER),'360spider')>0
		THEN 'so.360.cn'
	WHEN INSTR(LOWER(CLS.BROWSER),'compatible')>0 OR INSTR(LOWER(CLS.BROWSER),'http')>0
		OR INSTR(LOWER(CLS.BROWSER),'libwww')>0 OR INSTR(LOWER(CLS.BROWSER),'spider')>0
		OR INSTR(LOWER(CLS.BROWSER),'java')>0 OR INSTR(LOWER(CLS.BROWSER),'python')>0
		OR INSTR(LOWER(CLS.BROWSER),'robot')>0 OR INSTR(LOWER(CLS.BROWSER),'curl')>0 OR INSTR(LOWER(CLS.BROWSER),'wget')>0
		THEN 'other'
	ELSE 'n.a.' END AS AGENT_BOT, -- Bot
	STRFTIME('%s','now') AS UPDATE_DT
FROM CLS
LEFT OUTER JOIN DIM_USER_AGENT TRG
ON CLS.BROWSER = TRG.USER_AGENT_NK
WHERE TRG.DIM_USER_AGENT_ID IS NULL

ڊيٽا انضمام

آپريٽنگ سسٽم کان رپورٽنگ سسٽم تائين ڊيٽا جي منتقلي کي منظم ڪرڻ شامل آهي. هن کي ڪرڻ لاء، توهان کي هڪ اسٽيج ٽيبل ٺاهڻ جي ضرورت آهي هڪ ڍانچي سان گڏ ذريعو سان.

ويب صفحن بابت معلومات داخل ٿيڻ جي درخواستن جي صورت ۾ CMS بيڪ اپ مان اسٽيج تي پهچي ٿي.

بنيادي ڊيٽا سان گڏ تاريخي جدول DIM_REQUEST کي لوڊ ڪرڻ ٽن مرحلن ۾ ٿئي ٿو: نيون ڪي ۽ خاصيتون لوڊ ڪرڻ، موجوده کي تازه ڪاري ڪرڻ، ۽ ڊليٽ ٿيل رڪارڊ کي ڪم ڪرڻ.

نئين SCD2 رڪارڊنگ لوڊ ڪندي

/* Load request table SCD from master data */
INSERT INTO DIM_REQUEST (DIM_REQUEST_ID_HIST, REQUEST_NK, PAGE_TITLE, PAGE_DESCR, PAGE_KEYWORDS, DELETE_FLAG, UPDATE_DT)
WITH CLS  AS ( -- prepare keys
	SELECT
	'/' || NAME AS REQUEST_NK,
	TITLE       AS PAGE_TITLE,
	CASE WHEN DESCRIPTION = '' OR DESCRIPTION IS NULL
	     THEN 'n.a.' ELSE DESCRIPTION
	END AS PAGE_DESCR,
	CASE WHEN KEYWORDS = '' OR KEYWORDS IS NULL
	     THEN 'n.a.' ELSE KEYWORDS
	END AS PAGE_KEYWORDS
	FROM STG_CMS_MENU
	WHERE CONTENT_TYPE != 'folder' -- only web pages
	  AND PAGE_TITLE != 'n.a.' -- master data which make sense
)
/* new records from stage: CLS */
SELECT
	-1 AS DIM_REQUEST_ID_HIST,
	CLS.REQUEST_NK,
	CLS.PAGE_TITLE,
	CLS.PAGE_DESCR,
	CLS.PAGE_KEYWORDS,
	0 AS DELETE_FLAG,
	STRFTIME('%s','now') AS UPDATE_DT
FROM CLS
LEFT OUTER JOIN
 (
	SELECT
	DIM_REQUEST_ID,
	REQUEST_NK,
	PAGE_TITLE,
	PAGE_DESCR,
	PAGE_KEYWORDS
	FROM DIM_REQUEST_V_ACT
) TRG ON CLS.REQUEST_NK = TRG.REQUEST_NK
WHERE TRG.REQUEST_NK IS NULL -- no such record in data mart

تازه ڪاري SCD2 خاصيتون

/* Load request table SCD from master data */
INSERT INTO DIM_REQUEST (DIM_REQUEST_ID_HIST, REQUEST_NK, PAGE_TITLE, PAGE_DESCR, PAGE_KEYWORDS, DELETE_FLAG, UPDATE_DT)
WITH CLS  AS ( -- prepare keys
	SELECT
	'/' || NAME AS REQUEST_NK,
	TITLE       AS PAGE_TITLE,
	CASE WHEN DESCRIPTION = '' OR DESCRIPTION IS NULL
	     THEN 'n.a.' ELSE DESCRIPTION
	END AS PAGE_DESCR,
	CASE WHEN KEYWORDS = '' OR KEYWORDS IS NULL
	     THEN 'n.a.' ELSE KEYWORDS
	END AS PAGE_KEYWORDS
	FROM STG_CMS_MENU
	WHERE CONTENT_TYPE != 'folder' -- only web pages
	  AND PAGE_TITLE != 'n.a.' -- master data which make sense
)
/* updated records from stage: CLS and build reference to history: HIST */
SELECT
	HIST.DIM_REQUEST_ID AS DIM_REQUEST_ID_HIST,
	HIST.REQUEST_NK,
	CLS.PAGE_TITLE,
	CLS.PAGE_DESCR,
	CLS.PAGE_KEYWORDS,
	0 AS DELETE_FLAG,
	STRFTIME('%s','now') AS UPDATE_DT
FROM CLS,
     DIM_REQUEST_V_ACT TRG,
     DIM_REQUEST HIST
WHERE CLS.REQUEST_NK = TRG.REQUEST_NK
  AND TRG.DIM_REQUEST_ID = HIST.DIM_REQUEST_ID
  AND ( CLS.PAGE_TITLE != HIST.PAGE_TITLE /* changes only */
     OR CLS.PAGE_DESCR != HIST.PAGE_DESCR
     OR CLS.PAGE_KEYWORDS != HIST.PAGE_KEYWORDS )

ختم ٿيل SCD2 رڪارڊنگ

/* Load request table SCD from master data */
INSERT INTO DIM_REQUEST (DIM_REQUEST_ID_HIST, REQUEST_NK, PAGE_TITLE, PAGE_DESCR, PAGE_KEYWORDS, DELETE_FLAG, UPDATE_DT)
WITH CLS  AS ( -- prepare keys
	SELECT
	'/' || NAME AS REQUEST_NK,
	TITLE       AS PAGE_TITLE
	FROM STG_CMS_MENU
	WHERE CONTENT_TYPE != 'folder' -- only web pages
	  AND PAGE_TITLE != 'n.a.' -- master data which make sense
)
/*  deleted records in data mart: TRG */
SELECT
	TRG.DIM_REQUEST_ID AS DIM_REQUEST_ID_HIST,
	TRG.REQUEST_NK,
	TRG.PAGE_TITLE,
	TRG.PAGE_DESCR,
	TRG.PAGE_KEYWORDS,
	1 AS DELETE_FLAG,
	STRFTIME('%s','now') AS UPDATE_DT
FROM (
	SELECT
	DIM_REQUEST_ID,
	REQUEST_NK,
	PAGE_TITLE,
	PAGE_DESCR,
	PAGE_KEYWORDS
	FROM DIM_REQUEST_V_ACT
	WHERE PAGE_TITLE != 'n.a.' -- track master data only
	  AND DELETE_FLAG = 0 -- not already deleted
) TRG
LEFT OUTER JOIN CLS ON TRG.REQUEST_NK = CLS.REQUEST_NK
WHERE CLS.REQUEST_NK IS NULL -- no such record in stage

هر ڊيٽا جو ذريعو هڪ رسمي وضاحت سان گڏ هجڻ گهرجي، مثال طور، readme.txt فائل ۾:

وصول ڪندڙ ڊيٽا جو رسمي طور تي / ٽيڪنيڪل طور تي: نالو، اي ميل پتو
ڊيٽا فراهم ڪندڙ رسمي طور تي / ٽيڪنيڪل طور تي: نالو، اي ميل پتو
ڊيٽا جو ذريعو: فائل جو رستو، خدمت جا نالا
ڊيٽا جي رسائي جي معلومات: استعمال ڪندڙ ۽ پاسورڊ

ڊيٽا جي وهڪري جو نقشو سار سنڀال ۽ تازه ڪاري جي عمل ۾ مدد ڪندو، مثال طور، ٽيڪسٽ فارم ۾:

فائل منتقل ڪرڻ. ذريعو: ftp.domain.net: /logs/access.log ھدف: /var/www/access.log
اسٽيج تي پڙهڻ. ھدف: STG_ACCESS_LOG
لوڊشيڊنگ ۽ تبديلي. ھدف: FCT_ACCESS_REQUEST_REF_HH
لوڊشيڊنگ ۽ تبديلي. ھدف: FCT_ACCESS_USER_AGENT_DD
رپورٽ. ھدف: /var/www/report.html

ٿڪل

ان ڪري، آرٽيڪل بيان ڪري ٿو ميڪانيزم جهڙوڪ بنيادي ڊيٽا جي انضمام ۽ مجموعي جي نئين سطحن جو تعارف. انهن جي ضرورت هوندي آهي جڏهن ڊيٽا گودام تعمير ڪرڻ لاء اضافي ڄاڻ حاصل ڪرڻ ۽ معلومات جي معيار کي بهتر بڻائڻ لاء.

جو ذريعو: www.habr.com

تبصرو شامل ڪريو