Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Ka ho sekaseka lipalo-palo tsa sebaka sa marang-rang, re fumana mohopolo oa se etsahalang ka eona. Re bapisa liphetho le tsebo e 'ngoe mabapi le sehlahisoa kapa tšebeletso, kahoo re ntlafatsa boiphihlelo ba rona.

Ha tlhahlobo ea liphetho tsa pele e phethiloe, lintlha li se li utloisisoa 'me ho entsoe liqeto, mohato o latelang oa qala. Mehopolo e hlaha: ho tla etsahala'ng haeba u sheba lintlha tse tsoang ka lehlakoreng le leng?

Ho na le mefokolo ea lisebelisoa tsa tlhahlobo nakong ena. Lena ke le leng la mabaka ao Google Analytics e neng e sa lekana ho 'na, e leng ka lebaka la bokhoni bo fokolang ba ho bona le ho laola lintlha tsa ka.

Kamehla ke ne ke batla ho kenya data ea mantlha (data ea master), ho eketsa boemo bo bong ba ho kopanya, kapa ho toloka boleng bo teng ka tsela e fapaneng.

Sena se bonolo ho se etsa ka kamoreng ea hau ea polokelo e nyane ho itšetlehile ka faele ea access.log le puo ea SQL e lekane bakeng sa sena.

Joale, ke lipotso life tseo ke neng ke batla hore li arajoe?

Eng le neng e fetotsoe setšeng

Nalane ea liphetoho ho data e ka tlase (data ea master) e lula e khahla.

Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Potso ea tlaleho ea 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

Mohlala, ka nako e 'ngoe, ntlafatso ea enjine ea patlo e ile ea etsoa kapa litaba tse ncha li ile tsa eketsoa sebakeng sa marang-rang, ka hona ho lebelletsoe keketseho ea sephethephethe.

Sehlopha sa basebelisi

Mohlala o bonolo oa sehlopha ke moemeli oa mosebelisi kapa lebitso la sistimi e sebetsang.

Boemo ba moemeli oa mosebelisi bo bokelletse lirekoto tse ka bang sekete mme ke ne ke thahasella ho bona matla a kabo ea liakhente ka har'a sehlopha.

Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Potso ea tlaleho ea 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

Mefuta e mengata e fapaneng ea liakhente e tla sebakeng sa marang-rang ho tsoa lefats'eng la Windows. Har'a tse sa tsejoeng ke WhatsApp, PocketImageCache, PlayStation, SmartTV, joalo-joalo.

Mosebetsi oa sehlopha sa basebelisi ka beke

Ka ho kopanya lihlopha tse ling, motho a ka bona kabo ea mosebetsi oa bona.

Ka mohlala, basebelisi ba lihlopha tsa Linux ba sebelisa sephethephethe sa marang-rang ho feta motho e mong le e mong.

Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Potso ea tlaleho ea 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

Tšebeliso e matla ea sephethephethe

Tafole e bonts'a lihlopha tse sebetsang ka ho fetisisa tsa basebelisi le letsatsi la ts'ebetso ea tsona.
Tse sebetsang ka ho fetisisa ke tsa sehlopha sa Linux.

Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Potso ea tlaleho ea 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

U sebelisa letsatsi le litšoaneleho tsa ID tsa moemeli, hoa khoneha ho fumana le ho latela lipalo-palo ka potlako matsatsing a lihlopha tsa basebelisi ka bomong. Haeba ho hlokahala, o ka fumana lintlha tse qaqileng kapele tafoleng ea sethala.

Mokhoa oa ho fumana litaba?

Lintlha tse tsoang faeleng ea access.log e ka etsoa hantle le ho feta ka ho kopanya mehloli e meng ea data le ho hlahisa maemo a macha a ho kopanya le ho kopanya.

Lintlha tsa mantlha le mekhatlo

Lintlha tsa mantlha li kenyelletsa lintlha tse mabapi le mekhatlo: maqephe a sebaka sa marang-rang, litšoantšo, livideo le litaba tsa molumo, molemong oa lebenkele - lihlahisoa.

Mekhatlo ka boeona e sebetsa e le litekanyo, 'me mokhoa oa ho boloka liphetoho ho litšoaneleho o bitsoa historicization. Ka polokelongtshedimosetso, tshebetso ena hangata e kenngwa tshebetsong ka mokgwa wa butle-butle barying dimensions (SCD).

Lintlha tsa mohloli li ka tsoa mefuteng e fapaneng ea mekhoa, kahoo hoo e ka bang kamehla li hloka ho kopanngoa.

Butle-butle fetola dimension

Boemo ba DIM_REQUEST bo tla ba le lintlha tse mabapi le likopo tsa sebaka sena ka mokhoa oa nalane.

Lethathamo la 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);

Ntle le eona, re tla theha pono e le 'ngoe e lulang e bonts'a lirekoto tsohle maemong a morao-rao. Ho hlokahala bakeng sa ho kenya tekanyo ka boeona.

Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Kemelo ea hajoale ea 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;

Le pono moo boitsebiso ba histori bo bokelloang bakeng sa ho kena ka 'ngoe. Hoa hlokahala ho haha ​​kamano e nepahetseng ea histori le lintlha.

Lipalopalo tse ling tsa sebaka polokelong ea hau e nyane

Tlhahiso ea nalane ea 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;

Khokahano ea Lintlha

Compression (aggregation) e u lumella ho lekola lintlha maemong a holimo le ho bona liphapang le mekhoa e sa bonahaleng litlalehong tse qaqileng.

Ka mohlala, kenya sehlopha boemong bo nang le likhoutu tsa boemo ba kopo DIM_HTTP_STATUS:

BOEMO/ SEHLOPHA
0xx/n.a.
1xx/Boitsebiso
2xx/E atlehile
3xx/Tsamaiso e nngwe
Phoso ea 4xx/Client
Phoso ea 5xx/Seva

Boemo ba mosebedisi DIM_USER_AGENT bo tla ba le AGENT_OS le AGENT_BOT litšobotsi tse ikarabellang ho lihlopha. Tsena li ka ba le baahi nakong ea ts'ebetso ea ETL:

E ea kenya 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

Ho kopanya lintlha

E kenyelletsa ho hlophisa phetiso ea data ho tsoa ho sistimi ea ts'ebetso ho ea ho sistimi ea tlaleho. Ho etsa sena, o hloka ho etsa tafole ea sethala e nang le sebopeho se ts'oanang le mohloli.

Lintlha tse mabapi le maqephe a webo li fihla sethaleng ho tsoa ho bekapo ea CMS ka mokhoa oa ho kenya kopo.

Ho kenya tafole ea nalane ea DIM_REQUEST e nang le lintlha tsa mantlha ho etsahala ka mehato e meraro: ho kenya linotlolo le lintlha tse ncha, ho nchafatsa tse seng li ntse li le teng, le ho etsa lirekoto tse tlositsoeng.

E kenya lirekoto tse ncha tsa 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

Ho nchafatsa Litšobotsi tsa 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 )

Re hlakotsoe lirekoto tsa 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

Mohloli o mong le o mong oa data o tlameha ho tsamaea le tlhaloso e hlophisitsoeng, mohlala, faeleng ea readme.txt:

Motho ea amohelang data ka mokhoa o hlophisitsoeng/ka botekgeniki: lebitso, aterese ea lengolo-tsoibila
Mofani oa data ka mokhoa / ka botekgeniki: lebitso, aterese ea lengolo-tsoibila
Mohloli oa data: tsela ea faele, mabitso a lits'ebeletso
Lintlha tsa phihlello ea data: basebelisi le li-password

Setšoantšo sa phallo ea data se tla thusa ts'ebetsong ea tlhokomelo le ntlafatso, mohlala, ka mokhoa oa mongolo:

Ho tsamaisa faele. Mohloli: ftp.domain.net: /logs/access.log Target: /var/www/access.log
Ho bala sethaleng. Sepheo: STG_ACCESS_LOG
Ho kenya le ho fetola. Sepheo: FCT_ACCESS_REQUEST_REF_HH
Ho kenya le ho fetola. Sepheo: FCT_ACCESS_USER_AGENT_DD
Tlaleho. Sepheo: /var/www/report.html

fihlela qeto e

Ka hona, sehlooho sena se hlalosa mekhoa e kang ho kopanngoa ha lintlha tse ka tlaase le ho kenngoa ha maemo a macha a ho bokellana. Lia hlokahala ha ho hahoa matlo a polokelo ea boitsebiso e le ho fumana tsebo e eketsehileng le ho ntlafatsa boleng ba boitsebiso.

Source: www.habr.com

Eketsa ka tlhaloso