معيار SQL في BigQuery من Google: مزايا وأمثلة للاستخدام في التسويق

نشرت: 2022-04-12

في عام 2016 ، قدم Google BigQuery طريقة جديدة للتواصل باستخدام الجداول: معيار SQL. حتى ذلك الحين ، كان لدى BigQuery لغة استعلام منظمة خاصة به تسمى BigQuery SQL (تسمى الآن Legacy SQL).

للوهلة الأولى ، لا يوجد فرق كبير بين Legacy و Standard SQL: تتم كتابة أسماء الجداول بشكل مختلف قليلاً ؛ المعيار لديه متطلبات نحوية أكثر صرامة (على سبيل المثال ، لا يمكنك وضع فاصلة قبل FROM) والمزيد من أنواع البيانات. ولكن إذا نظرت عن كثب ، فهناك بعض التغييرات الطفيفة في البنية التي تمنح جهات التسويق العديد من المزايا.

في هذه المقالة ، ستحصل على إجابات للأسئلة التالية:

  • ما هي مزايا Standard SQL على Legacy SQL؟
  • ما هي قدرات معيار SQL وكيف يتم استخدامه؟
  • كيف يمكنني الانتقال من Legacy إلى Standard SQL؟
  • ما هي الخدمات الأخرى ، وميزات بناء الجملة ، والمشغلين ، والوظائف التي يتوافق معها معيار SQL؟
  • كيف يمكنني استخدام استعلامات SQL لتقارير التسويق؟

ما هي مزايا Standard SQL على Legacy SQL؟

أنواع البيانات الجديدة: المصفوفات والحقول المتداخلة

يدعم معيار SQL أنواع البيانات الجديدة: ARRAY و STRUCT (المصفوفات والحقول المتداخلة). هذا يعني أنه في BigQuery ، أصبح من الأسهل العمل مع الجداول التي تم تحميلها من ملفات JSON / Avro ، والتي غالبًا ما تحتوي على مرفقات متعددة المستويات.

الحقل المتداخل هو جدول صغير داخل جدول أكبر:

في الرسم التخطيطي أعلاه ، تمثل الأشرطة الزرقاء والصفراء الخطوط التي يتم تضمين الجداول المصغرة بها. كل سطر هو جلسة واحدة. تحتوي الجلسات على معلمات مشتركة: التاريخ ورقم المعرف وفئة جهاز المستخدم والمتصفح ونظام التشغيل وما إلى ذلك. بالإضافة إلى المعلمات العامة لكل جلسة ، يتم إرفاق جدول النتائج بالسطر.

يضرب الجدول

يحتوي جدول النتائج على معلومات حول إجراءات المستخدم على الموقع. على سبيل المثال ، إذا نقر المستخدم على لافتة ، أو قلب الكتالوج ، أو فتح صفحة منتج ، أو وضع منتجًا في السلة ، أو وضع طلبًا ، فسيتم تسجيل هذه الإجراءات في جدول الزيارات.

إذا قدم المستخدم طلبًا على الموقع ، فسيتم أيضًا إدخال معلومات حول الطلب في جدول الزيارات:

  • معرف المعاملة (الرقم الذي يحدد المعاملة)
  • transactionRevenue (إجمالي قيمة الطلب)
  • transactionShipping (تكاليف الشحن)

جداول بيانات الجلسات التي تم جمعها باستخدام OWOX BI لها هيكل مماثل.

لنفترض أنك تريد معرفة عدد الطلبات من المستخدمين في مدينة نيويورك خلال الشهر الماضي. لمعرفة ذلك ، تحتاج إلى الرجوع إلى جدول النتائج وحساب عدد معرّفات المعاملات الفريدة. لاستخراج البيانات من هذه الجداول ، تحتوي لغة SQL القياسية على وظيفة UNNEST:

    #standardSQL SELECT COUNT (DISTINCT hits.transaction.transactionId) -- count the number of unique order numbers; DISTINCT helps to avoid duplication FROM `project_name.dataset_name.owoxbi_sessions_*` -- refer to the table group (wildcard tables) WHERE ( _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTHS)) -- if we don't know which dates we need, it's better to use the function FORMAT_DATE INTERVAL AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) ) AND geoNetwork.city = 'New York' -- choose orders made in New York City
#standardSQL SELECT COUNT (DISTINCT hits.transaction.transactionId) -- count the number of unique order numbers; DISTINCT helps to avoid duplication FROM `project_name.dataset_name.owoxbi_sessions_*` -- refer to the table group (wildcard tables) WHERE ( _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 MONTHS)) -- if we don't know which dates we need, it's better to use the function FORMAT_DATE INTERVAL AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) ) AND geoNetwork.city = 'New York' -- choose orders made in New York City

إذا تم تسجيل معلومات الطلب في جدول منفصل وليس في جدول متداخل ، فسيتعين عليك استخدام JOIN لدمج الجدول مع معلومات الطلب والجدول ببيانات الجلسة من أجل معرفة أي أوامر الجلسات تم إصدارها.

المزيد من خيارات الاستعلام الفرعي

إذا كنت بحاجة إلى استخراج البيانات من الحقول المتداخلة متعددة المستويات ، فيمكنك إضافة استعلامات فرعية باستخدام SELECT و WHERE. على سبيل المثال ، في جداول تدفق جلسة OWOX BI ، يتم كتابة جدول فرعي آخر ، منتج ، إلى جدول النتائج الفرعي. يجمع الجدول الفرعي للمنتج بيانات المنتج التي يتم إرسالها باستخدام مصفوفة التجارة الإلكترونية المحسّنة. إذا تم إعداد التجارة الإلكترونية المحسّنة على الموقع ونظر المستخدم إلى صفحة منتج ، فسيتم تسجيل خصائص هذا المنتج في الجدول الفرعي للمنتج.

للحصول على خصائص المنتج هذه ، ستحتاج إلى استعلام فرعي داخل الاستعلام الرئيسي. لكل خاصية منتج ، يتم إنشاء استعلام SELECT فرعي منفصل بين قوسين:

    SELECT column_name1, -- list the other columns you want to receive column_name2, (SELECT productBrand FROM UNNEST(hits.product)) AS hits_product_productBrand, (SELECT productRevenue FROM UNNEST(hits.product)) AS hits_product_productRevenue, -- list product features (SELECT localProductRevenue FROM UNNEST(hits.product)) AS hits_product_localProductRevenue, (SELECT productPrice FROM UNNEST(hits.product)) AS hits_product_productPrice, FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD`
SELECT column_name1, -- list the other columns you want to receive column_name2, (SELECT productBrand FROM UNNEST(hits.product)) AS hits_product_productBrand, (SELECT productRevenue FROM UNNEST(hits.product)) AS hits_product_productRevenue, -- list product features (SELECT localProductRevenue FROM UNNEST(hits.product)) AS hits_product_localProductRevenue, (SELECT productPrice FROM UNNEST(hits.product)) AS hits_product_productPrice, FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD`

بفضل إمكانات معيار SQL ، أصبح من السهل إنشاء منطق الاستعلام وكتابة التعليمات البرمجية. للمقارنة ، في Legacy SQL ، ستحتاج إلى كتابة هذا النوع من السلم:

    SELECT column_name1, column_name2, column_name3 FROM ( SELECT table_name.some_column AS column1… FROM table_name )
SELECT column_name1, column_name2, column_name3 FROM ( SELECT table_name.some_column AS column1… FROM table_name )

طلبات لمصادر خارجية

باستخدام Standard SQL ، يمكنك الوصول إلى جداول BigQuery مباشرةً من Google Bigtable و Google Cloud Storage و Google Drive و Google Sheets.
أي ، بدلاً من تحميل الجدول بأكمله في BigQuery ، يمكنك حذف البيانات باستعلام واحد ، وتحديد المعلمات التي تحتاجها ، وتحميلها إلى التخزين السحابي.

المزيد من وظائف المستخدم (UDF)

إذا كنت بحاجة إلى استخدام صيغة غير موثقة ، فستساعدك الوظائف المحددة بواسطة المستخدم (UDF). في ممارستنا ، نادرًا ما يحدث هذا ، نظرًا لأن وثائق SQL القياسية تغطي جميع مهام التحليلات الرقمية تقريبًا.

في معيار SQL ، يمكن كتابة الوظائف المعرفة من قبل المستخدم بلغة SQL أو JavaScript ؛ لغة SQL القديمة تدعم فقط JavaScript. وسيطات هذه الوظائف هي أعمدة ، والقيم التي تأخذها هي نتيجة معالجة الأعمدة. في معيار SQL ، يمكن كتابة الوظائف في نفس نافذة الاستعلامات.

المزيد من شروط الانضمام

في Legacy SQL ، يمكن أن تستند شروط JOIN إلى المساواة أو أسماء الأعمدة. بالإضافة إلى هذه الخيارات ، تدعم لهجة SQL القياسية JOIN عن طريق عدم المساواة والتعبير التعسفي.

على سبيل المثال ، لتحديد شركاء CPA غير المنصفين ، يمكننا تحديد الجلسات التي تم فيها استبدال المصدر خلال 60 ثانية من المعاملة. للقيام بذلك في Standard SQL ، يمكننا إضافة عدم المساواة إلى شرط JOIN:

    #standardSQL SELECT * FROM ( SELECT traff.clientId AS clientId, traff.page_path AS pagePath, traff.traffic_source AS startSource, traff.traffic_medium AS startMedium, traff.time AS startTime, aff.evAction AS evAction, aff.evSource AS finishSource, aff.evMedium AS finishMedium, aff.evCampaign AS finishCampaign, aff.time AS finishTime, aff.isTransaction AS isTransaction, aff.pagePath AS link, traff.time-aff.time AS diff FROM ( SELECT fullVisitorID AS clientId, h.page.pagePath AS page_path, trafficSource.source AS traffic_source, trafficSource.medium AS traffic_medium, trafficSource.campaign AS traffic_campaign, date, SAFE_CAST(visitStartTime+h.time/1000 AS INT64) AS time FROM `demoproject.google_analytics_sample.ga_sessions_20190301`, UNNEST (hits) AS h WHERE trafficSource.medium != 'cpa' ) AS traff JOIN ( SELECT total.date date, total.time time, total.clientId AS clientId, total.eventAction AS evAction, total.source AS evSource, total.medium AS evMedium, total.campaign AS evCampaign, tr.eventAction AS isTransaction, total.page_path AS pagePath FROM ( SELECT fullVisitorID AS clientId, h.page.pagePath AS page_path, h.eventInfo.eventAction AS eventAction, trafficSource.source AS source, trafficSource.medium AS medium, trafficSource.campaign AS campaign, date, SAFE_CAST(visitStartTime+h.time/1000 AS INT64) AS time FROM `demoproject.google_analytics_sample.ga_sessions_20190301`, UNNEST(hits) AS h WHERE trafficSource.medium ='cpa' ) AS total LEFT JOIN ( SELECT fullVisitorID AS clientId, date, h.eventInfo.eventAction AS eventAction, h.page.pagePath pagePath, SAFE_CAST(visitStartTime+h.time/1000 AS INT64) AS time FROM `demoproject.google_analytics_sample.ga_sessions_20190301`, UNNEST(hits) AS h WHERE h.eventInfo.eventAction = 'typ_page' AND h.type = 'EVENT' GROUP BY 1, 2, 3, 4, 5 ) AS tr ON total.clientId=tr.clientId AND total.date=tr.date AND tr.time>total.time -- JOIN tables by inequality. Pass the additional WHERE clause that was needed in Legacy SQL WHERE tr.eventAction = 'typ_page' ) AS aff ON traff.clientId = aff.clientId ) WHERE diff> -60 AND diff<0 GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ORDER BY clientId, finishTime
#standardSQL SELECT * FROM ( SELECT traff.clientId AS clientId, traff.page_path AS pagePath, traff.traffic_source AS startSource, traff.traffic_medium AS startMedium, traff.time AS startTime, aff.evAction AS evAction, aff.evSource AS finishSource, aff.evMedium AS finishMedium, aff.evCampaign AS finishCampaign, aff.time AS finishTime, aff.isTransaction AS isTransaction, aff.pagePath AS link, traff.time-aff.time AS diff FROM ( SELECT fullVisitorID AS clientId, h.page.pagePath AS page_path, trafficSource.source AS traffic_source, trafficSource.medium AS traffic_medium, trafficSource.campaign AS traffic_campaign, date, SAFE_CAST(visitStartTime+h.time/1000 AS INT64) AS time FROM `demoproject.google_analytics_sample.ga_sessions_20190301`, UNNEST (hits) AS h WHERE trafficSource.medium != 'cpa' ) AS traff JOIN ( SELECT total.date date, total.time time, total.clientId AS clientId, total.eventAction AS evAction, total.source AS evSource, total.medium AS evMedium, total.campaign AS evCampaign, tr.eventAction AS isTransaction, total.page_path AS pagePath FROM ( SELECT fullVisitorID AS clientId, h.page.pagePath AS page_path, h.eventInfo.eventAction AS eventAction, trafficSource.source AS source, trafficSource.medium AS medium, trafficSource.campaign AS campaign, date, SAFE_CAST(visitStartTime+h.time/1000 AS INT64) AS time FROM `demoproject.google_analytics_sample.ga_sessions_20190301`, UNNEST(hits) AS h WHERE trafficSource.medium ='cpa' ) AS total LEFT JOIN ( SELECT fullVisitorID AS clientId, date, h.eventInfo.eventAction AS eventAction, h.page.pagePath pagePath, SAFE_CAST(visitStartTime+h.time/1000 AS INT64) AS time FROM `demoproject.google_analytics_sample.ga_sessions_20190301`, UNNEST(hits) AS h WHERE h.eventInfo.eventAction = 'typ_page' AND h.type = 'EVENT' GROUP BY 1, 2, 3, 4, 5 ) AS tr ON total.clientId=tr.clientId AND total.date=tr.date AND tr.time>total.time -- JOIN tables by inequality. Pass the additional WHERE clause that was needed in Legacy SQL WHERE tr.eventAction = 'typ_page' ) AS aff ON traff.clientId = aff.clientId ) WHERE diff> -60 AND diff<0 GROUP BY 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 ORDER BY clientId, finishTime

القيد الوحيد لـ Standard SQL فيما يتعلق بـ JOIN هو أنه لا يسمح بربط شبه مع الاستعلامات الفرعية للنموذج WHERE العمود IN (SELECT ...):

    #legacySQL SELECT mother_age, COUNT(mother_age) total FROM [bigquery-public-data:samples.natality] WHERE -- such a construction cannot be used in Standard SQL state IN (SELECT state FROM (SELECT state, COUNT(state) total FROM [bigquery-public-data:samples.natality] GROUP BY state ORDER BY total DESC LIMIT 10)) AND mother_age > 50 GROUP BY mother_age ORDER BY mother_age DESC
#legacySQL SELECT mother_age, COUNT(mother_age) total FROM [bigquery-public-data:samples.natality] WHERE -- such a construction cannot be used in Standard SQL state IN (SELECT state FROM (SELECT state, COUNT(state) total FROM [bigquery-public-data:samples.natality] GROUP BY state ORDER BY total DESC LIMIT 10)) AND mother_age > 50 GROUP BY mother_age ORDER BY mother_age DESC

فرصة أقل للخطأ

تقوم بعض الدالات في Legacy SQL بإرجاع NULL إذا كانت الحالة غير صحيحة. على سبيل المثال ، إذا تسللت عملية القسمة على صفر إلى حساباتك ، فسيتم تنفيذ الاستعلام وستظهر إدخالات NULL في الصفوف الناتجة من الجدول. قد يخفي هذا مشاكل في الاستعلام أو في البيانات.

يعتبر منطق SQL القياسي أكثر وضوحًا. إذا كان الشرط أو بيانات الإدخال غير صحيحة ، فسيقوم الاستعلام بإنشاء خطأ ، على سبيل المثال "القسمة على صفر" حتى تتمكن من تصحيح الاستعلام بسرعة. عمليات التحقق التالية مضمنة في معيار SQL:

  • قيم صالحة لـ + ، - ، × ، SUM ، AVG ، STDEV
  • القسمة على صفر

يتم تشغيل الطلبات بشكل أسرع

تعد استعلامات JOIN المكتوبة بلغة Standard SQL أسرع من تلك المكتوبة في Legacy SQL بفضل التصفية الأولية للبيانات الواردة. أولاً ، يحدد الاستعلام الصفوف التي تطابق شروط JOIN ، ثم يعالجها.
في المستقبل ، سيعمل Google BigQuery على تحسين سرعة وأداء الاستعلامات فقط لـ Standard SQL.

يمكن تحرير الجداول: إدراج الصفوف وحذفها ، والتحديث

تتوفر وظائف لغة معالجة البيانات (DML) في معيار SQL. هذا يعني أنه يمكنك تحديث الجداول وإضافة صفوف أو إزالتها منها من خلال نفس النافذة التي تكتب فيها الاستعلامات. على سبيل المثال ، باستخدام DML ، يمكنك دمج البيانات من جدولين في جدول واحد:

    #standardSQL MERGE dataset.Inventory AS T USING dataset.NewArrivals AS S ON T.ProductID = S.ProductID WHEN MATCHED THEN UPDATE SET quantity = T.quantity + S.quantity WHEN NOT MATCHED THEN INSERT (ProductID, quantity) VALUES (ProductID, quantity)
#standardSQL MERGE dataset.Inventory AS T USING dataset.NewArrivals AS S ON T.ProductID = S.ProductID WHEN MATCHED THEN UPDATE SET quantity = T.quantity + S.quantity WHEN NOT MATCHED THEN INSERT (ProductID, quantity) VALUES (ProductID, quantity)

الكود أسهل للقراءة والتحرير

باستخدام معيار SQL ، يمكن بدء الاستعلامات المعقدة ليس فقط باستخدام SELECT ولكن أيضًا باستخدام WITH ، مما يسهل قراءة التعليمات البرمجية والتعليق عليها وفهمها. هذا يعني أيضًا أنه من الأسهل تجنب أخطاء الآخرين وتصحيحها.

    #standardSQL WITH total_1 AS ( -- the first subquery in which the intermediate indicator will be calculated SELECT id, metric1, SUM(metric2) AS total_sum1 FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD` GROUP BY id, metric ), total_2 AS ( -- the second subquery SELECT id, metric1, SUM(metric2) AS total_sum2 FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD` GROUP BY id, metric1 ), total_3 AS ( -- the third subquery SELECT id, metric, SUM(metric2) AS total_sum3 FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD` GROUP BY id, metric ) SELECT *, ROUND(100*( total_2.total_sum2 - total_3.total_sum3) / total_3.total_sum3, 3) AS difference -- get the difference index: subtract the value of the second subquery from the value of the third; divide by the value of the third FROM total_1 ORDER BY 1, 2
#standardSQL WITH total_1 AS ( -- the first subquery in which the intermediate indicator will be calculated SELECT id, metric1, SUM(metric2) AS total_sum1 FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD` GROUP BY id, metric ), total_2 AS ( -- the second subquery SELECT id, metric1, SUM(metric2) AS total_sum2 FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD` GROUP BY id, metric1 ), total_3 AS ( -- the third subquery SELECT id, metric, SUM(metric2) AS total_sum3 FROM `project_name.dataset_name.owoxbi_sessions_YYYYMMDD` GROUP BY id, metric ) SELECT *, ROUND(100*( total_2.total_sum2 - total_3.total_sum3) / total_3.total_sum3, 3) AS difference -- get the difference index: subtract the value of the second subquery from the value of the third; divide by the value of the third FROM total_1 ORDER BY 1, 2

من الملائم العمل مع عامل التشغيل WITH إذا كان لديك حسابات تتم على عدة مراحل. أولاً ، يمكنك جمع المقاييس الوسيطة في الاستعلامات الفرعية ، ثم إجراء الحسابات النهائية.

Google Cloud Platform (GCP) ، التي تتضمن BigQuery ، عبارة عن نظام أساسي كامل الدورة للعمل مع البيانات الضخمة ، بدءًا من تنظيم مستودع البيانات أو سحابة البيانات إلى تشغيل التجارب العلمية والتحليلات التنبؤية والتعليمية. مع تقديم معيار SQL ، يعمل BigQuery على توسيع نطاق جمهوره. أصبح العمل مع GCP أكثر إثارة للاهتمام لمحللي التسويق ومحللي المنتجات وعلماء البيانات وفرق المتخصصين الآخرين.

قدرات معيار SQL وأمثلة لحالات الاستخدام

في OWOX BI ، غالبًا ما نعمل مع جداول مجمعة باستخدام تصدير Google Analytics 360 القياسي إلى Google BigQuery أو OWOX BI Pipeline. في الأمثلة أدناه ، سننظر في تفاصيل استعلامات SQL لهذه البيانات.

إذا لم تكن تجمع البيانات بالفعل من موقعك في BigQuery ، فيمكنك محاولة القيام بذلك مجانًا باستخدام الإصدار التجريبي من OWOX BI.

احصل على المحاكمة

1. حدد البيانات لفترة زمنية

في Google BigQuery ، يتم تخزين بيانات سلوك المستخدم لموقعك في جداول أحرف بدل (جداول بها علامة النجمة) ؛ يتم تشكيل جدول منفصل لكل يوم. هذه الجداول لها نفس الاسم: فقط اللاحقة مختلفة. اللاحقة هي التاريخ بتنسيق YYYYMMDD. على سبيل المثال ، يحتوي الجدول owoxbi_sessions_20190301 على بيانات عن الجلسات ليوم 1 آذار (مارس) 2019.

يمكننا الرجوع مباشرة إلى مجموعة من هذه الجداول في طلب واحد للحصول على البيانات ، على سبيل المثال ، من 1 فبراير حتى 28 فبراير 2019. للقيام بذلك ، نحتاج إلى استبدال YYYYMMDD بعلامة * في FROM وفي أين ، نحتاج إلى تحديد لاحقات الجدول لبداية ونهاية الفاصل الزمني:

    #standardSQL SELECT sessionId, FROM `project_name.dataset_name.owoxbi_sessions_*` WHERE _TABLE_SUFFIX BETWEEN �' AND �'
#standardSQL SELECT sessionId, FROM `project_name.dataset_name.owoxbi_sessions_*` WHERE _TABLE_SUFFIX BETWEEN �' AND �'

التواريخ المحددة التي نريد جمع البيانات الخاصة بها غير معروفة لنا دائمًا. على سبيل المثال ، قد نحتاج كل أسبوع إلى تحليل بيانات الأشهر الثلاثة الماضية. للقيام بذلك ، يمكننا استخدام دالة FORMAT_DATE:

    #standardSQL SELECT <enumerate field names> FROM `project_name.dataset_name.owoxbi_sessions_*` WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 3 MONTHS)) AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
#standardSQL SELECT <enumerate field names> FROM `project_name.dataset_name.owoxbi_sessions_*` WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 3 MONTHS)) AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))

بعد BETWEEN ، نسجل لاحقة الجدول الأول. العبارة CURRENT_DATE () ، INTERVAL 3 MONTHS تعني «تحديد البيانات لآخر 3 أشهر من التاريخ الحالي.» تم تنسيق لاحقة الجدول الثانية بعد AND. من الضروري وضع علامة على نهاية الفاصل الزمني بالأمس: CURRENT_DATE () ، INTERVAL 1 DAY.

2. استرداد معلمات المستخدم والمؤشرات

تتم كتابة معلمات المستخدم والمقاييس في جداول تصدير Google Analytics في جدول النتائج المتداخل وإلى الجداول الفرعية المخصصة والأبعاد والمقاييس المخصصة. يتم تسجيل جميع الأبعاد المخصصة في عمودين: أحدهما لعدد المعلمات التي تم جمعها على الموقع ، والثاني لقيمها. إليك ما تبدو عليه جميع المعلمات التي يتم إرسالها بضربة واحدة:

جداول تصدير Google Analytics

لفك حزمها وكتابة المعلمات الضرورية في أعمدة منفصلة ، نستخدم استعلام SQL التالي:

    -- Custom Dimensions (in the line below index - the number of the user variable, which is set in the Google Analytics interface; dimension1 is the name of the custom parameter, which you can change as you like. For each subsequent parameter, you need to write the same line: (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customDimensions)) AS dimension1, -- Custom Metrics: the index below is the number of the user metric specified in the Google Analytics interface; metric1 is the name of the metric, which you can change as you like. For each of the following metrics, you need to write the same line: (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customMetrics)) AS metric1
-- Custom Dimensions (in the line below index - the number of the user variable, which is set in the Google Analytics interface; dimension1 is the name of the custom parameter, which you can change as you like. For each subsequent parameter, you need to write the same line: (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customDimensions)) AS dimension1, -- Custom Metrics: the index below is the number of the user metric specified in the Google Analytics interface; metric1 is the name of the metric, which you can change as you like. For each of the following metrics, you need to write the same line: (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customMetrics)) AS metric1

هذا ما يبدو عليه في الطلب:

    #standardSQL SELECT <column name1>, <column_name2>, -- list column names (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customDimensions)) AS page_type, (SELECT MAX(IF(index=2, value, NULL)) FROM UNNEST(hits.customDimensions)) AS visitor_type, -- produce the necessary custom dimensions (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customMetrics)) AS metric1 -- produce the necessary custom metrics <column_name3> -- if you need more columns, continue to list FROM `project_name.dataset_name.owoxbi_sessions_20190201`
#standardSQL SELECT <column name1>, <column_name2>, -- list column names (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customDimensions)) AS page_type, (SELECT MAX(IF(index=2, value, NULL)) FROM UNNEST(hits.customDimensions)) AS visitor_type, -- produce the necessary custom dimensions (SELECT MAX(IF(index=1, value, NULL)) FROM UNNEST(hits.customMetrics)) AS metric1 -- produce the necessary custom metrics <column_name3> -- if you need more columns, continue to list FROM `project_name.dataset_name.owoxbi_sessions_20190201`

في لقطة الشاشة أدناه ، اخترنا المعلمتين 1 و 2 من بيانات Google Analytics 360 التجريبية في Google BigQuery وأطلقنا عليها اسم page_type و client_id. يتم تسجيل كل معلمة في عمود منفصل:

بيانات عرض GA 360 في Google BigQuery

3. احسب عدد الجلسات حسب مصدر الزيارات والقناة والحملة والمدينة وفئة الجهاز

هذه الحسابات مفيدة إذا كنت تخطط لتصور البيانات في Google Data Studio والتصفية حسب المدينة وفئة الجهاز. من السهل القيام بذلك باستخدام وظيفة النافذة COUNT:

    #standardSQL SELECT <column_name 1>, -- choose any columns COUNT (DISTINCT sessionId) AS total_sessions, -- summarize the session IDs to find the total number of sessions COUNT(DISTINCT sessionId) OVER(PARTITION BY date, geoNetwork.city, session.device.deviceCategory, trafficSource.source, trafficSource.medium, trafficSource.campaign) AS part_sessions -- summarize the number of sessions by campaign, channel, traffic source, city, and device category FROM `project_name.dataset_name.owoxbi_sessions_20190201`
#standardSQL SELECT <column_name 1>, -- choose any columns COUNT (DISTINCT sessionId) AS total_sessions, -- summarize the session IDs to find the total number of sessions COUNT(DISTINCT sessionId) OVER(PARTITION BY date, geoNetwork.city, session.device.deviceCategory, trafficSource.source, trafficSource.medium, trafficSource.campaign) AS part_sessions -- summarize the number of sessions by campaign, channel, traffic source, city, and device category FROM `project_name.dataset_name.owoxbi_sessions_20190201`

4. اجمع البيانات نفسها من عدة جداول

لنفترض أنك تجمع بيانات عن الطلبات المكتملة في العديد من جداول BigQuery: أحدها يجمع كل الطلبات من المتجر أ ، والآخر يجمع الطلبات من المتجر ب. وتريد دمجها في جدول واحد باستخدام هذه الأعمدة:

  • client_id - رقم يحدد مشترًا فريدًا
  • transaction_created - وقت إنشاء الطلب بتنسيق TIMESTAMP
  • transaction_id - رقم الطلب
  • موافق عليه - سواء تم تأكيد الطلب
  • transaction_revenue - مبلغ الأمر

في مثالنا ، يجب أن تكون الطلبات من 1 يناير 2018 إلى يوم أمس في الجدول. للقيام بذلك ، حدد الأعمدة المناسبة من كل مجموعة جداول ، وقم بتعيين نفس الاسم لها ، واجمع النتائج مع UNION ALL:

    #standardSQL SELECT cid AS client_id, order_time AS transaction_created, order_status AS is_approved, order_number AS transaction_id FROM `project_name.dataset_name.table1_*` WHERE ( _TABLE_SUFFIX BETWEEN �' AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) ) UNION ALL SELECT userId AS client_id, created_timestamp AS transaction_created, operator_mark AS is_approved, transactionId AS transaction_id FROM `project_name.dataset_name.table1_*` WHERE ( _TABLE_SUFFIX BETWEEN �' AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) ) ORDER BY transaction_created DESC
#standardSQL SELECT cid AS client_id, order_time AS transaction_created, order_status AS is_approved, order_number AS transaction_id FROM `project_name.dataset_name.table1_*` WHERE ( _TABLE_SUFFIX BETWEEN �' AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) ) UNION ALL SELECT userId AS client_id, created_timestamp AS transaction_created, operator_mark AS is_approved, transactionId AS transaction_id FROM `project_name.dataset_name.table1_*` WHERE ( _TABLE_SUFFIX BETWEEN �' AND FORMAT_DATE('%Y%m%d',DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)) ) ORDER BY transaction_created DESC

5. قم بإنشاء قاموس لمجموعات قنوات المرور

عند دخول البيانات إلى Google Analytics ، يحدد النظام تلقائيًا المجموعة التي ينتمي إليها انتقال معين: البحث المباشر ، والبحث المجاني ، والبحث المدفوع ، وما إلى ذلك. لتحديد مجموعة من القنوات ، يبحث Google Analytics في علامات UTM للانتقالات ، وبالتحديد utm_source و utm_medium. يمكنك قراءة المزيد حول مجموعات القنوات وقواعد التعريف في تعليمات Google Analytics.

إذا أراد عملاء OWOX BI تعيين أسمائهم الخاصة لمجموعات القنوات ، فإننا ننشئ قاموسًا ينتمي إلى قناة معينة. للقيام بذلك ، نستخدم عامل CASE الشرطي ووظيفة REGEXP_CONTAINS. تحدد هذه الوظيفة القيم التي يحدث فيها التعبير العادي المحدد.

نوصي بأخذ الأسماء من قائمة المصادر في Google Analytics. فيما يلي مثال على كيفية إضافة مثل هذه الشروط إلى نص الطلب:

    #standardSQL SELECT CASE WHEN (REGEXP_CONTAINS (source, 'yandex') AND medium = 'referral' THEN 'Organic Search' WHEN (REGEXP_CONTAINS (source, 'yandex.market')) AND medium = 'referral' THEN 'Referral' WHEN (REGEXP_CONTAINS (source, '^(go.mail.ru|google.com)$') AND medium = 'referral') THEN 'Organic Search' WHEN medium = 'organic' THEN 'Organic Search' WHEN (medium = 'cpc') THEN 'Paid Search' WHEN REGEXP_CONTAINS (medium, '^(sending|email|mail)$') THEN 'Email' WHEN REGEXP_CONTAINS (source, '(mail|email|Mail)') THEN 'Email' WHEN REGEXP_CONTAINS (medium, '^(cpa)$') THEN 'Affiliate' WHEN medium = 'social' THEN 'Social' WHEN source = '(direct)' THEN 'Direct' WHEN REGEXP_CONTAINS (medium, 'banner|cpm') THEN 'Display' ELSE 'Other' END channel_group -- the name of the column in which the channel groups are written FROM `project_name.dataset_name.owoxbi_sessions_20190201`
#standardSQL SELECT CASE WHEN (REGEXP_CONTAINS (source, 'yandex') AND medium = 'referral' THEN 'Organic Search' WHEN (REGEXP_CONTAINS (source, 'yandex.market')) AND medium = 'referral' THEN 'Referral' WHEN (REGEXP_CONTAINS (source, '^(go.mail.ru|google.com)$') AND medium = 'referral') THEN 'Organic Search' WHEN medium = 'organic' THEN 'Organic Search' WHEN (medium = 'cpc') THEN 'Paid Search' WHEN REGEXP_CONTAINS (medium, '^(sending|email|mail)$') THEN 'Email' WHEN REGEXP_CONTAINS (source, '(mail|email|Mail)') THEN 'Email' WHEN REGEXP_CONTAINS (medium, '^(cpa)$') THEN 'Affiliate' WHEN medium = 'social' THEN 'Social' WHEN source = '(direct)' THEN 'Direct' WHEN REGEXP_CONTAINS (medium, 'banner|cpm') THEN 'Display' ELSE 'Other' END channel_group -- the name of the column in which the channel groups are written FROM `project_name.dataset_name.owoxbi_sessions_20190201` 

كيفية التبديل إلى معيار SQL

إذا لم تقم بالتبديل إلى Standard SQL حتى الآن ، فيمكنك القيام بذلك في أي وقت. الشيء الرئيسي هو تجنب خلط اللهجات في طلب واحد.

الخيار 1. التبديل في واجهة Google BigQuery

يتم استخدام لغة SQL القديمة بشكل افتراضي في واجهة BigQuery القديمة. للتبديل بين اللهجات ، انقر فوق إظهار الخيارات أسفل حقل إدخال الاستعلام وقم بإلغاء تحديد المربع استخدام لغة SQL القديمة بجوار لهجة SQL.

كيفية التبديل بين اللهجات

تستخدم الواجهة الجديدة Standard SQL بشكل افتراضي. هنا ، تحتاج إلى الانتقال إلى علامة التبويب "المزيد" للتبديل بين اللهجات:

الخيار 2. اكتب البادئة في بداية الطلب

إذا لم تقم بتحديد إعدادات الطلب ، يمكنك البدء بالبادئة المطلوبة (#standardSQL أو #legacySQL):

    #standardSQL SELECT weight_pounds, state, year, gestation_weeks FROM `bigquery-public-data.samples.natality` ORDER BY weight_pounds DESC LIMIT 10;
#standardSQL SELECT weight_pounds, state, year, gestation_weeks FROM `bigquery-public-data.samples.natality` ORDER BY weight_pounds DESC LIMIT 10;

في هذه الحالة ، سيتجاهل Google BigQuery الإعدادات في الواجهة ويقوم بتشغيل الاستعلام باستخدام اللهجة المحددة في البادئة.

إذا كانت لديك مشاهدات أو استعلامات محفوظة تم إطلاقها وفقًا لجدول زمني باستخدام Apps Script ، فلا تنس تغيير قيمة useLegacySql إلى false في النص البرمجي:

    var job = { configuration: { query: { query: 'INSERT INTO MyDataSet.MyFooBarTable (Id, Foo, Date) VALUES (1, \'bar\', current_Date);', useLegacySql: false }
var job = { configuration: { query: { query: 'INSERT INTO MyDataSet.MyFooBarTable (Id, Foo, Date) VALUES (1, \'bar\', current_Date);', useLegacySql: false }

الخيار 3. الانتقال إلى معيار SQL لطرق العرض

إذا كنت تعمل مع Google BigQuery ليس باستخدام الجداول ولكن مع طرق العرض ، فلا يمكن الوصول إلى طرق العرض هذه بلهجة SQL القياسية. بمعنى ، إذا كان العرض التقديمي مكتوبًا بلغة Legacy SQL ، فلا يمكنك كتابة الطلبات إليه في Standard SQL.

لنقل طريقة عرض إلى معيار SQL ، تحتاج إلى إعادة كتابة الاستعلام الذي تم إنشاؤه بواسطته يدويًا. أسهل طريقة للقيام بذلك هي من خلال واجهة BigQuery.

1. افتح العرض:

واجهة BigQuery

2. انقر فوق "تفاصيل". يجب فتح نص الاستعلام ، وسيظهر زر تحرير الاستعلام أدناه:

يمكنك الآن تعديل الطلب وفقًا لقواعد معيار SQL.
إذا كنت تخطط لمواصلة استخدام الطلب كعرض تقديمي ، فانقر فوق حفظ طريقة العرض بعد الانتهاء من التحرير.

التوافق ، وميزات النحو ، والمشغلين ، والوظائف

التوافق

بفضل تطبيق Standard SQL ، يمكنك الوصول مباشرةً إلى البيانات المخزنة في الخدمات الأخرى مباشرةً من BigQuery:

  • ملفات سجل Google Cloud Storage
  • سجلات المعاملات في Google Bigtable
  • بيانات من مصادر أخرى

يتيح لك ذلك استخدام منتجات Google Cloud Platform لأية مهام تحليلية ، بما في ذلك التحليلات التنبؤية والتعليمية القائمة على خوارزميات التعلم الآلي.

بناء جملة الاستعلام

بنية الاستعلام في اللهجة القياسية هي نفسها تقريبًا في Legacy:

يتم فصل أسماء الجداول وطريقة العرض بنقطة (نقطة توقف كاملة) ، ويتم وضع الاستعلام بالكامل في علامات الخطورة: `اسم_المشروع_اسم_اسم_اسم.

يتم تجميع البنية الكاملة لطلب البحث ، مع تفسيرات لما يمكن تضمينه في كل عامل تشغيل ، كمخطط في وثائق BigQuery.

ميزات بناء جملة SQL القياسي:

  • الفواصل مطلوبة لسرد الحقول في جملة SELECT.
  • إذا كنت تستخدم عامل التشغيل UNNEST بعد FROM ، فسيتم وضع فاصلة أو JOIN قبل UNNEST.
  • لا يمكنك وضع فاصلة قبل FROM.
  • الفاصلة بين استعلامين تساوي CROSS JOIN ، لذا كن حذرًا معها.
  • يمكن أن يتم JOIN ليس فقط عن طريق العمود أو المساواة ولكن من خلال التعبيرات التعسفية وعدم المساواة.
  • من الممكن كتابة استعلامات فرعية معقدة في أي جزء من تعبير SQL (في SELECT ، FROM ، WHERE ، إلخ). من الناحية العملية ، ليس من الممكن بعد استخدام تعبيرات مثل WHERE column_name IN (SELECT ...) كما يمكنك في قواعد البيانات الأخرى.

العاملين

في معيار SQL ، يحدد العاملون نوع البيانات. على سبيل المثال ، المصفوفة تُكتب دائمًا بين قوسين []. تُستخدم عوامل التشغيل للمقارنة ومطابقة التعبير المنطقي (NOT و OR و AND) وفي العمليات الحسابية.

المهام

يدعم معيار SQL ميزات أكثر من Legacy: التجميع التقليدي (المجموع ، العدد ، الحد الأدنى ، الحد الأقصى) ؛ وظائف رياضية وسلسلة وإحصائية ؛ وتنسيقات نادرة مثل HyperLogLog ++.

في اللهجة القياسية ، هناك المزيد من الوظائف للعمل مع التواريخ و TIMESTAMP. يتم توفير قائمة كاملة بالميزات في وثائق Google. الوظائف الأكثر استخدامًا هي للعمل مع التواريخ والسلاسل والتجميع والنافذة.

1. وظائف التجميع

تحسب COUNT (DISTINCT اسم العمود) عدد القيم الفريدة في العمود. على سبيل المثال ، لنفترض أننا بحاجة إلى حساب عدد الجلسات من أجهزة الجوّال في 1 آذار (مارس) 2019. وبما أنه يمكن تكرار رقم الجلسة على أسطر مختلفة ، فنحن نريد حساب قيم رقم الجلسة الفريدة فقط:

    #standardSQL SELECT COUNT (DISTINCT sessionId) AS sessions FROM `project_name.dataset_name.owoxbi_sessions_20190301` WHERE device.deviceCategory = 'mobile'
#standardSQL SELECT COUNT (DISTINCT sessionId) AS sessions FROM `project_name.dataset_name.owoxbi_sessions_20190301` WHERE device.deviceCategory = 'mobile'

SUM (اسم_العمود) - مجموع القيم في العمود

    #standardSQL SELECT SUM (hits.transaction.transactionRevenue) AS revenue FROM `project_name.dataset_name.owoxbi_sessions_20190301`, UNNEST (hits) AS hits -- unpacking the nested field hits WHERE device.deviceCategory = 'mobile'
#standardSQL SELECT SUM (hits.transaction.transactionRevenue) AS revenue FROM `project_name.dataset_name.owoxbi_sessions_20190301`, UNNEST (hits) AS hits -- unpacking the nested field hits WHERE device.deviceCategory = 'mobile'

MIN (اسم_العمود) | MAX (اسم_العمود) - الحد الأدنى والحد الأقصى للقيمة في العمود. هذه الوظائف ملائمة للتحقق من انتشار البيانات في الجدول.

2. وظائف النافذة (التحليلية)

تأخذ الدالات التحليلية في الاعتبار القيم ليس للجدول بأكمله ولكن لنافذة معينة - مجموعة من الصفوف التي تهتم بها. أي يمكنك تحديد المقاطع داخل الجدول. على سبيل المثال ، يمكنك حساب SUM (الإيرادات) ليس لجميع البنود ولكن للمدن وفئات الأجهزة وما إلى ذلك. يمكنك تحويل الدالات التحليلية SUM و COUNT و AVG بالإضافة إلى وظائف التجميع الأخرى عن طريق إضافة شرط OVER (الجزء حسب اسم العمود) إليها.

على سبيل المثال ، تحتاج إلى حساب عدد الجلسات حسب مصدر الزيارات والقناة والحملة والمدينة وفئة الجهاز. في هذه الحالة ، يمكننا استخدام التعبير التالي:

    SELECT date, geoNetwork.city, t.device.deviceCategory, trafficSource.source, trafficSource.medium, trafficSource.campaign, COUNT(DISTINCT sessionId) OVER(PARTITION BY date, geoNetwork.city, session.device.deviceCategory, trafficSource.source, trafficSource.medium, trafficSource.campaign) AS segmented_sessions FROM `project_name.dataset_name.owoxbi_sessions_20190301` t
SELECT date, geoNetwork.city, t.device.deviceCategory, trafficSource.source, trafficSource.medium, trafficSource.campaign, COUNT(DISTINCT sessionId) OVER(PARTITION BY date, geoNetwork.city, session.device.deviceCategory, trafficSource.source, trafficSource.medium, trafficSource.campaign) AS segmented_sessions FROM `project_name.dataset_name.owoxbi_sessions_20190301` t

يحدد OVER النافذة التي سيتم إجراء الحسابات لها. يشير PARTITION BY إلى الصفوف التي يجب تجميعها للحساب. في بعض الوظائف ، من الضروري تحديد ترتيب التجميع باستخدام ORDER BY.

للحصول على قائمة كاملة بوظائف النافذة ، راجع وثائق BigQuery.

3. وظائف السلسلة

هذه مفيدة عندما تحتاج إلى تغيير النص أو تنسيق النص في سطر أو لصق قيم الأعمدة. على سبيل المثال ، تعتبر وظائف السلسلة رائعة إذا كنت تريد إنشاء معرف جلسة فريد من بيانات تصدير Google Analytics 360 القياسية. لنأخذ في الاعتبار وظائف السلسلة الأكثر شيوعًا.

يقطع SUBSTR جزءًا من السلسلة. في الطلب ، تتم كتابة هذه الوظيفة كـ SUBSTR (string_name، 0.4). يشير الرقم الأول إلى عدد الأحرف التي يجب تخطيها من بداية السطر ، ويشير الرقم الثاني إلى عدد الأرقام المطلوب قطعها. على سبيل المثال ، لنفترض أن لديك عمود تاريخ يحتوي على تواريخ بتنسيق STRING. في هذه الحالة ، تبدو التواريخ على النحو التالي: 20190103. إذا كنت تريد استخراج سنة من هذا السطر ، فستساعدك SUBSTR:

    #standardSQL SELECT SUBSTR(date,0,4) AS year FROM `project_name.dataset_name.owoxbi_sessions_20190301`
#standardSQL SELECT SUBSTR(date,0,4) AS year FROM `project_name.dataset_name.owoxbi_sessions_20190301`

CONCAT (اسم_العمود ، إلخ) قيم الغراء. دعنا نستخدم عمود التاريخ من المثال السابق. افترض أنك تريد تسجيل جميع التواريخ على النحو التالي: 2019-03-01. لتحويل التواريخ من تنسيقها الحالي إلى هذا التنسيق ، يمكن استخدام وظيفتين من وظائف السلسلة: أولاً ، قص الأجزاء الضرورية من السلسلة باستخدام SUBSTR ، ثم الصقها من خلال الواصلة:

    #standardSQL SELECT CONCAT(SUBSTR(date,0,4),"-",SUBSTR(date,5,2),"-",SUBSTR(date,7,2)) AS date FROM `project_name.dataset_name.owoxbi_sessions_20190301`
#standardSQL SELECT CONCAT(SUBSTR(date,0,4),"-",SUBSTR(date,5,2),"-",SUBSTR(date,7,2)) AS date FROM `project_name.dataset_name.owoxbi_sessions_20190301`

تُرجع REGEXP_CONTAINS قيم الأعمدة التي يظهر فيها التعبير العادي:

    #standardSQL SELECT CASE WHEN REGEXP_CONTAINS (medium, '^(sending|email|mail)$') THEN 'Email' WHEN REGEXP_CONTAINS (source, '(mail|email|Mail)') THEN 'Email' WHEN REGEXP_CONTAINS (medium, '^(cpa)$') THEN 'Affiliate' ELSE 'Other' END Channel_groups FROM `project_name.dataset_name.owoxbi_sessions_20190301`
#standardSQL SELECT CASE WHEN REGEXP_CONTAINS (medium, '^(sending|email|mail)$') THEN 'Email' WHEN REGEXP_CONTAINS (source, '(mail|email|Mail)') THEN 'Email' WHEN REGEXP_CONTAINS (medium, '^(cpa)$') THEN 'Affiliate' ELSE 'Other' END Channel_groups FROM `project_name.dataset_name.owoxbi_sessions_20190301`

يمكن استخدام هذه الوظيفة في كل من SELECT و WHERE. على سبيل المثال ، في WHERE ، يمكنك تحديد صفحات معينة معها:

    WHERE REGEXP_CONTAINS(hits.page.pagePath, 'land[123]/|/product-order')
WHERE REGEXP_CONTAINS(hits.page.pagePath, 'land[123]/|/product-order')

4. وظائف التاريخ

في كثير من الأحيان ، يتم تسجيل التواريخ في الجداول بتنسيق STRING. إذا كنت تخطط لتصور النتائج في Google Data Studio ، فيجب تحويل التواريخ الموجودة في الجدول إلى تنسيق DATE باستخدام وظيفة PARSE_DATE.

يحول PARSE_DATE سلسلة من تنسيق 1900-01-01 إلى تنسيق DATE.
إذا كانت التواريخ في جداولك تبدو مختلفة (على سبيل المثال ، 19000101 أو 01_01_1900) ، يجب عليك أولاً تحويلها إلى التنسيق المحدد.

    #standardSQL SELECT PARSE_DATE('%Y-%m-%d', date) AS date_new FROM `project_name.dataset_name.owoxbi_sessions_20190301`
#standardSQL SELECT PARSE_DATE('%Y-%m-%d', date) AS date_new FROM `project_name.dataset_name.owoxbi_sessions_20190301`

يحسب DATE_DIFF مقدار الوقت المنقضي بين تاريخين في الأيام أو الأسابيع أو الأشهر أو السنوات. إنه مفيد إذا كنت بحاجة إلى تحديد الفترة الفاصلة بين وقت مشاهدة المستخدم للإعلان وتقديم الطلب. إليك كيف تبدو الوظيفة في الطلب:

    #standardSQL SELECT DATE_DIFF( PARSE_DATE('%Y%m%d', date1), PARSE_DATE('%Y%m%d', date2), DAY ) days -- convert the date1 and date2 lines to the DATE format; choose units to show the difference (DAY, WEEK, MONTH, etc.) FROM `project_name.dataset_name.owoxbi_sessions_20190301`
#standardSQL SELECT DATE_DIFF( PARSE_DATE('%Y%m%d', date1), PARSE_DATE('%Y%m%d', date2), DAY ) days -- convert the date1 and date2 lines to the DATE format; choose units to show the difference (DAY, WEEK, MONTH, etc.) FROM `project_name.dataset_name.owoxbi_sessions_20190301`

إذا كنت تريد معرفة المزيد حول الوظائف المدرجة ، فاقرأ BigQuery Google Features - مراجعة مفصلة.

استعلامات SQL لتقارير التسويق

تسمح لهجة SQL القياسية للشركات باستخراج أقصى قدر من المعلومات من البيانات مع التقسيم العميق ، والتدقيق الفني ، وتحليل KPI التسويقي ، وتحديد المقاولين غير المنصفين في شبكات CPA. فيما يلي أمثلة لمشاكل العمل التي تساعدك فيها استعلامات SQL حول البيانات التي تم جمعها في Google BigQuery.

1. تحليل ROPO: تقييم مساهمة الحملات عبر الإنترنت في المبيعات خارج الإنترنت. لإجراء تحليل ROPO ، تحتاج إلى دمج البيانات حول سلوك المستخدم عبر الإنترنت مع البيانات من CRM ونظام تتبع المكالمات وتطبيق الهاتف المحمول.

إذا كان هناك مفتاح في القاعدة الأولى والثانية - معلمة مشتركة فريدة لكل مستخدم (على سبيل المثال ، User ID) - يمكنك تتبع:
التي زارها المستخدمون الموقع قبل شراء البضائع في المتجر
كيف يتصرف المستخدمون على الموقع
المدة التي يستغرقها المستخدمون في اتخاذ قرار الشراء
ما الحملات التي شهدت أكبر زيادة في عمليات الشراء بلا اتصال بالإنترنت.

2. قسّم العملاء حسب أي مجموعة من المعلمات ، من السلوك على الموقع (الصفحات التي تمت زيارتها ، والمنتجات التي تم عرضها ، وعدد الزيارات إلى الموقع قبل الشراء) إلى رقم بطاقة الولاء والعناصر المشتراة.

3. اكتشف شركاء CPA الذين يعملون بسوء نية واستبدال علامات UTM.

4. تحليل تقدم المستخدمين من خلال مسار المبيعات.

لقد قمنا بإعداد مجموعة مختارة من الاستعلامات بلهجة SQL القياسية. إذا كنت تجمع بالفعل بيانات من موقعك ومن مصادر الإعلان ومن نظام CRM في Google BigQuery ، فيمكنك استخدام هذه القوالب لحل مشكلات عملك. ما عليك سوى استبدال اسم المشروع ومجموعة البيانات والجدول في BigQuery باسمك. ستتلقى في المجموعة 11 استعلامًا عن SQL.

بالنسبة للبيانات التي تم جمعها باستخدام التصدير القياسي من Google Analytics 360 إلى Google BigQuery:

  • إجراءات المستخدم في سياق أي معلمات
  • إحصائيات عن إجراءات المستخدم الرئيسية
  • المستخدمون الذين شاهدوا صفحات منتج معين
  • إجراءات المستخدمين الذين اشتروا منتجًا معينًا
  • قم بإعداد القمع بأي خطوات ضرورية
  • فاعلية موقع البحث الداخلي

بالنسبة إلى البيانات التي تم جمعها في Google BigQuery باستخدام OWOX BI:

  • يعزى الاستهلاك حسب المصدر والقناة
  • متوسط ​​تكلفة جذب الزائر حسب المدينة
  • عائد النفقات الإعلانية لإجمالي الربح حسب المصدر والقناة
  • عدد الطلبات في CRM حسب طريقة الدفع وطريقة التسليم
  • متوسط ​​وقت التسليم حسب المدينة

إذا كانت لديك أسئلة حول الاستعلام عن بيانات Google BigQuery ولم تجد إجابات لها في هذه المقالة ، فاسأل في التعليقات. سنحاول مساعدتك.