من خلال تحليل إحصائيات الموقع ، لدينا فكرة عما يحدث به. نقوم بمقارنة النتائج بمعرفة أخرى حول المنتج أو الخدمة وبالتالي تحسين تجربتنا.
عند اكتمال تحليل النتائج الأولى ، تم فهم المعلومات واستخلاص النتائج ، تبدأ المرحلة التالية. تنشأ الأفكار: ماذا سيحدث إذا نظرت إلى البيانات من منظور آخر؟
في هذه المرحلة ، هناك قيود على أدوات التحليل. هذا أحد الأسباب التي تجعل أداة Google Analytics غير كافية بالنسبة لي ، أي بسبب القدرة المحدودة على رؤية بياناتي ومعالجتها.
أردت دائمًا تحميل البيانات الأساسية (البيانات الرئيسية) بسرعة ، أو إضافة مستوى آخر من التجميع ، أو تفسير القيم الحالية بطريقة أخرى.
من السهل القيام بذلك في
المستودع الصغير الخاص بك استنادًا إلى ملف access.log ولغة SQL كافية لذلك.
لذا ، ما هي الأسئلة التي أردت إيجاد الإجابة عليها؟
ماذا ومتى تغير على الموقع
تاريخ التغييرات في البيانات الأساسية (البيانات الرئيسية) هو دائما موضع اهتمام.

طلب تقرير SQLSELECT 1 as 'SideStackedBar: Content Updates by Months', strftime('%m/%Y', datetime(UPDATE_DT, 'unixepoch')) AS 'Day', COUNT(CASE WHEN PAGE_TITLE != 'na' 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 != 'na' OR PAGE_DESCR != 'na' 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 = 'na' THEN 1 ELSE 0 END ) AS 'User Agent of Users', SUM(CASE WHEN AGENT_BOT != 'na' 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
تأتي معظم المجموعات المتنوعة من الوكلاء إلى الموقع من عالم Windows. من بين الأشياء غير المؤكدة مثل WhatsApp و PocketImageCache و PlayStation و SmartTV ، إلخ.
نشاط مجموعة المستخدم الأسبوعي
من خلال الجمع بين بعض المجموعات ، يمكننا ملاحظة توزيع نشاطهم.
على سبيل المثال ، يستهلك مستخدمو نظام مجموعة Linux حركة مرور أكثر على أي شخص آخر.

طلب تقرير 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 ('na', '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 = 'na' AND HST.STATUS_GROUP IN ('Successful') 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 ( DIM_REQUEST_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, DIM_REQUEST_ID_HIST INTEGER NOT NULL DEFAULT -1, REQUEST_NK TEXT NOT NULL DEFAULT 'na', PAGE_TITLE TEXT NOT NULL DEFAULT 'na', PAGE_DESCR TEXT NOT NULL DEFAULT 'na', PAGE_KEYWORDS TEXT NOT NULL DEFAULT 'na', 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 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 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 / na
1xx / المعلوماتية
2xx / ناجحة
3xx / إعادة التوجيه
خطأ 4xx / عميل
خطأ 5xx / الخادم
سيحتوي بُعد وكيل المستخدم DIM_USER_AGENT على سمات AGENT_OS و AGENT_BOT للمجموعات. يمكن ملؤها خلال عملية ETL:
تنزيل DIM_USER_AGENT 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 'na' END AS AGENT_OS,
تكامل البيانات
ويشمل تنظيم نقل البيانات من نظام التشغيل إلى الإبلاغ واحد. للقيام بذلك ، قم بإنشاء جدول مرحلة بهيكل مشابه للمصدر.
تصل معلومات صفحات الويب إلى مرحلة النسخ الاحتياطي لنظام إدارة المحتوى (CMS) في شكل طلبات إدراج.
يستغرق تحميل جدول DIM_REQUEST التاريخي مع البيانات الأساسية ثلاث خطوات: تحميل مفاتيح وسمات جديدة وتحديث المفاتيح الموجودة وإصلاح السجلات المحذوفة.
قم بتنزيل إدخالات SCD2 جديدة INSERT INTO DIM_REQUEST (DIM_REQUEST_ID_HIST, REQUEST_NK, PAGE_TITLE, PAGE_DESCR, PAGE_KEYWORDS, DELETE_FLAG, UPDATE_DT) WITH CLS AS (
تحديث سمات SCD2 INSERT INTO DIM_REQUEST (DIM_REQUEST_ID_HIST, REQUEST_NK, PAGE_TITLE, PAGE_DESCR, PAGE_KEYWORDS, DELETE_FLAG, UPDATE_DT) WITH CLS AS (
تم حذف إدخالات SCD2 INSERT INTO DIM_REQUEST (DIM_REQUEST_ID_HIST, REQUEST_NK, PAGE_TITLE, PAGE_DESCR, PAGE_KEYWORDS, DELETE_FLAG, UPDATE_DT) WITH CLS AS (
يجب أن يكون كل مصدر بيانات مصحوبًا بوصف رسمي ، على سبيل المثال ، في ملف 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
استنتاج
وهكذا ، تصف المقالة آليات مثل تكامل البيانات الأساسية وإدخال مستويات جديدة من التجميع. هناك حاجة إليها عند بناء مستودعات البيانات من أجل الحصول على معرفة إضافية وتحسين جودة المعلومات.