مثال‌هایی از کوئری‌ها برای گزارش‌گیری لاگ‌ها در BigQuery

نسخه‌های پشتیبانی‌شده برای این ویژگی: Frontline Standard و Frontline Plus؛ Enterprise Standard و Enterprise Plus؛ Education Standard و Education Plus؛ Enterprise Essentials Plus. نسخه خود را مقایسه کنید

این مقاله شامل مثال‌هایی از پرس‌وجوها برای گزارش‌های رایجی است که می‌توانید از BigQuery دریافت کنید. این مثال‌های پرس‌وجو فرض را بر SQL قدیمی می‌گذارند. به جای api_project_name.dataset_name نام پروژه و نام مجموعه داده خود را قرار دهید.

درباره کوئری کردن داده‌های BigQuery بیشتر بدانید.

برای فیلدهای لاگ جیمیل و معانی آنها، به Schema for Gmail activity logs در BigQuery بروید.

مثال‌های پرسشی

حساب‌ها

تعداد حساب‌های کاربری ادمین و تفویض‌شده، و تعداد حساب‌های غیرفعال‌شده، قفل‌شده و معلق‌شده بر اساس تاریخ

SELECT date,
    accounts.num_locked_users,
    accounts.num_disabled_accounts,
    accounts.num_delegated_admins,
    accounts.num_super_admins,
    accounts.num_suspended_users,
    accounts.num_users
    FROM api_project_name.dataset_name.usage
    WHERE accounts.num_users IS NOT NULL
    ORDER BY date ASC;

مدیران

رایج‌ترین رویدادهای انجام شده توسط یک مدیر

SELECT count(*) as admin_actions, event_name
    FROM api_project_name.dataset_name.activity
    WHERE email IN (
      SELECT user_email
      FROM api_project_name.dataset_name.usage
      WHERE accounts.is_super_admin = TRUE
    )
    GROUP BY 2
    ORDER BY 1 DESC;

تعداد مدیران ارشد (super admins) را در یک دامنه مشخص پیدا کنید

SELECT COUNT(DISTINCT user_email) as number_of_super_admins, date
    FROM api_project_name.dataset_name.usage
    WHERE accounts.is_super_admin = TRUE
    GROUP BY 2
    ORDER BY 2 DESC;

تقویم

فقط SQL استاندارد

نسبت کاربران فعال روزانه به کاربران فعال ۳۰ روزه در تقویم گوگل. این مثال، پرس‌وجوهایی را در چندین جدول انجام می‌دهد.

کاربران فعال روزانه

SELECT date, calendar.num_1day_active_users
    FROM api_project_name.dataset_name.usage
    WHERE calendar.num_1day_active_users IS NOT NULL
    ORDER BY date DESC

کاربران فعال ۳۰ روزه

SELECT date, calendar.num_30day_active_users
    FROM api_project_name.dataset_name.usage
    WHERE calendar.num_30day_active_users IS NOT NULL
    ORDER BY date DESC;

تعداد رویدادهای تقویم بر اساس نوع

SELECT COUNT(DISTINCT calendar.calendar_id) AS count, event_name
    FROM api_project_name.dataset_name.activity
    WHERE calendar.calendar_id IS NOT NULL
    GROUP BY 2 ORDER BY 1 DESC;

مهاجرت داده

رویدادهای ثبت وقایع انتقال داده‌ها به تدریج از ۲۶ مه ۲۰۲۵ ارائه خواهند شد. داده‌های رویدادهای ثبت وقایع قبل از آن تاریخ ممکن است دقیق نباشند.

تمام اقدامات راه‌اندازی و پیکربندی توسط یک مدیر انجام می‌شود

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, status.*, event_type, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND event_type = 'MIGRATION_SETUP' AND email = 'admin@example.com' ORDER BY timestamp desc LIMIT 1000;

تمام رویدادهای مرتبط با مهاجرت برای یک شناسه اجرایی خاص

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, event_type, status.*, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND event_type = 'MIGRATION' AND data_migration.execution_id =  'execution_id' ORDER BY timestamp desc LIMIT 1000;

همه شکست‌ها برای یک شناسه اجرایی خاص

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, event_type, status.*, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND event_type = 'MIGRATION' AND data_migration.execution_id =  'execution_id' AND status.event_status = 'FAILED' ORDER BY timestamp desc LIMIT 1000;

همه رویدادهای مربوط به یک نوع منبع خاص، مانند Microsoft Exchange Online

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, event_type, status.*, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND data_migration.migration_type = 'Exchange Online Migration' ORDER BY timestamp desc LIMIT 1000;

همه رویدادهای مربوط به یک کاربر منبع خاص در مهاجرت سازمانی جیمیل

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, event_type, status.*, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND data_migration.migration_type = 'Enterprise Gmail Migration' AND data_migration.source_identifier like '%user@example.com%' ORDER BY timestamp desc LIMIT 1000;

همه رویدادهای مربوط به یک پیام خاص با URI منبع داده شده، مانند شناسه RFC

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, event_type, status.*, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND data_migration.source_uri = 'rfc822Id' ORDER BY timestamp desc LIMIT 1000;

همه رویدادهای مربوط به یک نوع داده منبع خاص، مانند پوشه ایمیل Exchange Online

SELECT TIMESTAMP_MICROS(time_usec) as timestamp, email, event_type, status.*, event_name, data_migration.* FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' AND data_migration.source_type = 'Exchange Online Email Folder' ORDER BY timestamp desc LIMIT 1000;

تعداد رویدادهای گروه‌بندی‌شده بر اساس وضعیت و نام رویداد

SELECT status.event_status as status, event_name, count(*) AS count FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' GROUP BY 1,2 ORDER BY 1,2 limit 1000;

تعداد روزانه همه رویدادها، گروه‌بندی‌شده بر اساس وضعیت و نوع شیء

SELECT EXTRACT(DATE FROM TIMESTAMP_MICROS(time_usec)) AS date, status.event_status as status, data_migration.source_type, count(*) AS count FROM api_project_name.dataset_name.activity WHERE record_type = 'data_migration' GROUP BY 1,2,3 ORDER BY 1,2,3 limit 1000;

رانندگی

تعداد موارد به اشتراک گذاشته شده در گوگل درایو، گروه بندی شده بر اساس روش اشتراک گذاری

SELECT COUNT(DISTINCT drive.doc_id) AS count, drive.visibility
    FROM api_project_name.dataset_name.activity
    WHERE drive.doc_id IS NOT NULL
    GROUP BY 2 ORDER BY 1 DESC;

شناسه، عنوان، مالک و نوع فایل. فایل‌هایی که در بازه زمانی مشخص شده به صورت خارجی به اشتراک گذاشته شده‌اند.

SELECT TIMESTAMP_MICROS(time_usec) AS date, drive.doc_id, drive.doc_title,
    drive.owner, drive.doc_type
    FROM api_project_name.dataset_name.activity
    WHERE drive.visibility = "shared_externally"
    ORDER BY 1 DESC
    LIMIT 100;

اشتراک‌گذاری تغییرات مجوزها و نتیجه آنها. به شما این امکان را می‌دهد که بفهمید کدام تغییرات مجوز منجر به تغییر در قابلیت مشاهده فایل شده است.

SELECT TIMESTAMP_MICROS(time_usec) AS date, drive.doc_title,
    drive.visibility_change,drive.old_visibility, drive.visibility,
    FROM api_project_name.dataset_name.activity
    WHERE record_type = "drive"
    AND drive.old_visibility IS NOT NULL
    AND drive.old_visibility != "unknown";

انواع رویدادها بر اساس نوع فایل تفکیک شده‌اند. برای گزارش پذیرش بر اساس نوع فایل مفید است.

SELECT drive.doc_type, event_type, count(*)
    FROM  api_project_name.dataset_name.activity
    WHERE record_type = "DRIVE"
    GROUP by 1,2 ORDER BY 3 desc;

نوع و نام رویداد برای هر درایو مشترک

SELECT drive.shared_drive_id, event_type, event_name, record_type,
    count(distinct drive.doc_id) AS count
    FROM api_project_name.dataset_name.activity
    WHERE record_type = "drive"
    AND drive.shared_drive_id IS NOT NULL
    GROUP BY 1,2,3,4 ORDER BY 5 DESC;

اطلاعات مربوط به کاربران خارج از دامنه شما

SELECT email, event_name, count(*) AS count
    FROM api_project_name.dataset_name.activity
    WHERE email != ""
    AND email NOT LIKE "%mydomain.com%"
    GROUP BY 1,2 ORDER BY 3 DESC;

چه زمانی و چه زمانی تغییرات مجوز به کاربران خارجی اعطا شده است

SELECT drive.target_user, event_name, count(*) AS count
    FROM api_project_name.dataset_name.activity
    WHERE drive.target_user IS NOT NULL
    AND drive.target_user NOT LIKE "%mydomain.com%"
    GROUP BY 1,2 ORDER BY 3 DESC;

اطلاعات مربوط به نظارت بر ذخیره‌سازی

برای ساخت گزارش‌هایی در مورد کاربرانی که بیش از فضای ذخیره‌سازی درایو X مصرف می‌کنند، با یک آستانه‌ی تعیین‌شده (که با عبارت AND accounts.drive_used_quota_in_mb > 0 تعریف می‌شود) مفید است.

این پرس‌وجو می‌تواند به عنوان یک پرس‌وجوی زمان‌بندی‌شده تعریف شود یا مثلاً می‌تواند به صورت دوره‌ای با استفاده از API فراخوانی شود.

SELECT date,
    user_email,
    accounts.drive_used_quota_in_mb,
    FROM api_project_name.dataset_name.usage
    WHERE accounts.drive_used_quota_in_mb IS NOT NULL
    AND accounts.drive_used_quota_in_mb > 0
    AND user_email != ""
    AND date = CAST(DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY) AS STRING)
    ORDER BY 3,1 DESC;

یادداشت‌ها:

  • این مقدار را می‌توان برای مطابقت با فیلتری که مشتری تنظیم می‌کند، تغییر داد. برای مثال، بیش از ۱۵ گیگابایت: AND accounts.drive_used_quota_in_mb > 15000
  • مقایسه تاریخ با استفاده از CAST(DATE_SUB(CURRENT_DATE(), INTERVAL x DAY) AS STRING) امکان مقایسه تاریخ با فرمت موجود از مقدار تاریخ را فراهم می‌کند.
  • این کوئری برای جیمیل هم قابل استفاده است، جایی که می‌توانیم مقدار مشابهی پیدا کنیم: accounts.gmail_used_quota_in_mb

جیمیل

بهترین شیوه‌ها برای Gmail با BigQuery

  • فقط برای داده‌هایی که نیاز دارید جستجو کنید. این مثال‌ها محدودیت ۱۰۰۰ مورد مطابقت دارند، اما شما می‌توانید محدودیت خودتان را تعیین کنید.
  • برای سوالات خود یک بازه زمانی تعیین کنید. یک روز یک بازه زمانی معمول است.

تطابق موضوع
نمایش خلاصه پیام تا ۱۰۰۰ رکورد منطبق با موضوع مشخص شده

SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address,
         gmail.message_info.rfc2822_message_id
    FROM your_dataset_id.activity
    WHERE gmail.message_info.subject LIKE "%test%"
    LIMIT 1000

تطابق گیرنده
تعداد پیام‌های متمایز را برای یک گیرنده مشخص بشمارید

SELECT COUNT(DISTINCT gmail.message_info.rfc2822_message_id)
    FROM your_dataset_id.activity d
    WHERE
      EXISTS(
       SELECT 1 FROM d.gmail.message_info.destination WHERE destination.address = "recipient@example.com")

تطابق وضعیت و گیرنده

نمایش خلاصه پیام برای حداکثر ۱۰۰۰ رکورد مطابق با هر دو مورد زیر:

  • یک وضعیت مشخص (اصلاح، رد، قرنطینه)
  • گیرنده مشخص شده
SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE
         destination.address = "recipient@example.com" AND
         EXISTS(SELECT 1 FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence
              WHERE consequence.action = 17)
    LIMIT 1000

شرح قانون فعال شد
نمایش خلاصه پیام برای حداکثر ۱۰۰۰ رکورد، که باعث فعال شدن شرح قانون مشخص شده شده است

SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE
        EXISTS(SELECT 1 FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence
           WHERE consequence.reason LIKE '%description%')
    LIMIT 1000

به عنوان هرزنامه علامت‌گذاری شده است
نمایش خلاصه پیام تا سقف ۱۰۰۰ رکورد:

  • به عنوان هرزنامه علامت‌گذاری شده است
  • برای یک گیرنده مشخص
  • به همه دلایل
SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.is_spam AND
              destination.address = "recipient@example.com"
    LIMIT 1000

پروتکل رمزگذاری - رمزگذاری نشده
نمایش خلاصه پیام بر اساس پروتکل رمزگذاری - رمزگذاری نشده

SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.connection_info.smtp_tls_state = 0
    LIMIT 1000

پروتکل رمزگذاری - فقط TLS
نمایش خلاصه پیام بر اساس پروتکل رمزگذاری - فقط TLS

SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.connection_info.smtp_tls_state = 1
    LIMIT 1000

تطابق شناسه پیام
نمایش جزئیات پیام برای یک شناسه پیام داده شده (شامل "<>" در اطراف شناسه پیام)

SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.event_info.success,
         gmail.event_info.elapsed_time_usec,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         gmail.message_info.source.service as source_service,
         gmail.message_info.source.selector as source_selector,
         destination.address as destination,
         destination.service,
         destination.selector as destination_selector,
         gmail.message_info.rfc2822_message_id,
         gmail.message_info.payload_size,
         gmail.message_info.num_message_attachments,
         gmail.message_info.connection_info.smtp_tls_state,
         gmail.message_info.description
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.rfc2822_message_id = "<message id>"
    LIMIT 1000

وضعیت - پیام رد
رد پیام:

  • کدام قانون باعث رد شدن شد؟
SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id,
         (SELECT ARRAY_AGG(consequence.reason)
         FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence)
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.rfc2822_message_id = "<message id>" AND
         EXISTS(SELECT 1 FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence
            WHERE consequence.action = 17)
    LIMIT 1000

وضعیت - اصلاح پیام
اصلاح پیام:

  • کدام قانون باعث اصلاح شد؟
  • چه زیرمجموعه‌ای از اصلاحات (مثلاً سرتیترها یا موضوع)؟
SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id,
         (SELECT ARRAY_AGG((consequence.action, consequence.reason))
         FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence)
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.rfc2822_message_id = "<message id>" AND
       EXISTS(SELECT 1 FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence
           WHERE consequence.action NOT IN (0, 17, 3))
    LIMIT 1000

پیام قرنطینه
کدام قانون یک پیام را قرنطینه کرد؟

SELECT TIMESTAMP_MICROS(gmail.event_info.timestamp_usec) as timestamp,
         gmail.message_info.subject,
         gmail.message_info.source.address as source,
         destination.address as destination,
         gmail.message_info.rfc2822_message_id,
         (SELECT ARRAY_AGG(consequence.reason)
         FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence)
    FROM your_dataset_id.activity d, d.gmail.message_info.destination
    WHERE gmail.message_info.rfc2822_message_id = "<message id>" AND
         EXISTS(SELECT 1 FROM d.gmail.message_info.triggered_rule_info ri, ri.consequence
            WHERE consequence.action = 3)
    LIMIT 1000

پرس‌وجوهای مرکب
تمام پیام‌های دریافت‌شده توسط یک قانون خاص (با نام "شرح قانون") در 30 روز گذشته را بشمارید:

SELECT
      COUNT(gmail.message_info.rfc2822_message_id) AS message_cnt
    FROM
      `your_dataset_id.activity`,
    UNNEST (gmail.message_info.triggered_rule_info) AS triggered_rule
    WHERE
      _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
      AND triggered_rule.rule_name LIKE "rule description"

تمام پیام‌هایی که بدون رمزگذاری TLS در روز گذشته دریافت شده‌اند را فهرست کنید:

SELECT gmail.message_info.subject,
        gmail.message_info.rfc2822_message_id
    FROM `your_dataset_id.activity`
    WHERE
        _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) AND
        gmail.message_info.connection_info.smtp_tls_state = 0

ده دامنه‌ی برتری که حساب من در ۳۰ روز گذشته ایمیل رد و بدل کرده است را فهرست کنید:

SELECT
      COUNT(DISTINCT gmail.message_info.rfc2822_message_id) as message_cnt,
      IF(gmail.message_info.is_policy_check_for_sender,
           REGEXP_EXTRACT(gmail.message_info.source.address , "(@.*)"),
           REGEXP_EXTRACT(destination.address , "(@.*)")) AS domain
    FROM `your_dataset_id.activity` d, d.gmail.message_info.destination
    WHERE
        _PARTITIONTIME >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
    GROUP BY domain
    ORDER BY message_cnt desc
    LIMIT 10

نسبت کاربران فعال روزانه به کاربران فعال ۳۰ روزه در جیمیل

کاربران فعال روزانه:

SELECT date,
    gmail.num_1day_active_users
    FROM api_project_name.dataset_name.usage
    WHERE gmail.num_1day_active_users > 0
    ORDER BY 1 DESC;

کاربران فعال ۷ روزه:

SELECT date,
    gmail.num_7day_active_users
    FROM api_project_name.dataset_name.usage
    WHERE gmail.num_7day_active_users > 0
    ORDER BY 1 DESC;

کاربران فعال ۳۰ روزه:

SELECT date,
    gmail.num_30day_active_users
    FROM api_project_name.dataset_name.usage
    WHERE gmail.num_30day_active_users > 0
    ORDER BY 1 DESC;

۱۰۰ رویداد اخیر ثبت‌شده در جیمیل با حداقل یک برچسب طبقه‌بندی مرتبط با پیام ایمیل

SELECT
      resource_details[OFFSET(0)].id AS MESSAGE_ID,
      gmail.message_info.subject AS SUBJECT,
      gmail.event_info.mail_event_type AS MAIL_EVENT_TYPE,
      gmail.message_info.source.address AS SENDER,
      resource_details[OFFSET(0)].applied_labels AS LABELS
    FROM workspace_audit_logs.activity
    WHERE gmail.event_info.mail_event_type > 0 and ARRAY_LENGTH(resource_details) > 0
    ORDER by time_usec desc
    LIMIT 100;

همه رویدادهای ثبت وقایع موجود برای یک پیام ایمیل خاص

SELECT
      gmail.event_info,
      gmail.message_info,
      resource_details
    FROM workspace_audit_logs.activity
    WHERE gmail.message_info.rfc2822_message_id = "<XYZ>"
    ORDER by time_usec desc;

گروه‌ها

تغییرات عضویت در گروه گوگل و رفتار کاربران

SELECT TIMESTAMP_MICROS(time_usec) AS date,
      event_name,
      admin.group_email,
      event_type,
      email,
      record_type,
      admin.user_email,
      admin.new_value,
      admin.old_value,
      admin.setting_name
    FROM project_name.dataset_name.activity
    WHERE `admin`.group_email IS NOT NULL
    AND CONCAT(TIMESTAMP_MICROS(time_usec)) LIKE "%YYYY-MM-DD%"
    ORDER BY 1 DESC
    LIMIT
      1000

اگر می‌خواهید مهر زمانی YYYY-MM-DD داشته باشید، اولین عنصر دستور SELECT را می‌توان با عبارت زیر جایگزین کرد:
EXTRACT(DATE FROM TIMESTAMP_MICROS(time_usec)) AS date,

تاریخ‌ها را می‌توان در عبارت WHERE به یکی از روش‌های زیر فیلتر کرد:

SELECT TIMESTAMP_MICROS(time_usec) AS date,
      event_name,
      admin.group_email,
      event_type,
      email,
      record_type,
      admin.user_email,
      admin.new_value,
      admin.old_value,
      admin.setting_name
    FROM project_name.dataset_name.activity
    WHERE `admin`.group_email IS NOT NULL
    AND EXTRACT(DATE FROM TIMESTAMP_MICROS(time_usec)) > "2020-06-30"
    AND EXTRACT(DATE FROM TIMESTAMP_MICROS(time_usec)) < "2020-08-31"
    ORDER BY 1 DESC
    LIMIT
      1000
SELECT TIMESTAMP_MICROS(time_usec) AS date,
      event_name,
      admin.group_email,
      event_type,
      email,
      record_type,
      admin.user_email,
      admin.new_value,
      admin.old_value,
      admin.setting_name
    FROM project_name.dataset_name.activity
    WHERE `admin`.group_email IS NOT NULL
    AND TIMESTAMP_MICROS(time_usec) > TIMESTAMP("2020-07-21")
    AND TIMESTAMP_MICROS(time_usec) < TIMESTAMP("2020-07-23")
    ORDER BY 1 DESC
    LIMIT
      1000

گوگل میت

تعداد تماس‌های ویدیویی و کل دقایق تماس بر اساس تاریخ

SELECT date, meet.num_calls, meet.total_call_minutes
    FROM `api_project_name.dataset_name.usage`
    WHERE meet.num_calls IS NOT NULL
    ORDER BY date ASC

کاربران فعال روزانه

SELECT date, meet.num_1day_active_users
    FROM `api_project_name.dataset_name.usage`
    WHERE meet.num_1day_active_users IS NOT NULL
    ORDER BY date DESC

کاربران فعال ۳۰ روزه

SELECT date, meet.num_30day_active_users
    FROM `api_project_name.dataset_name.usage`
    WHERE meet.num_30day_active_users IS NOT NULL
    ORDER BY date DESC

قوانین

قوانین DLP فعال‌شده بر اساس نام، برنامه‌ی تطبیق‌یافته و اقدامات

SELECT TIMESTAMP_MICROS(time_usec) AS date, rules.rule_name, rules.application,
    rules.resource_title, rules.actions, rules.resource_owner_email,
    rules.data_source, rules.matched_trigger
    FROM api_project_name.dataset_name.activity
    WHERE rules.rule_name IS NOT NULL
    ORDER BY 1 DESC LIMIT 1000;

توکن‌ها

تعداد دفعاتی که یک برنامه شخص ثالث برای دسترسی به گوگل درایو فعال شده است

SELECT token.client_id, scope, token.app_name, count(*) AS count
    FROM api_project_name.dataset_name.activity
    LEFT JOIN UNNEST(token.scope) AS scope
    WHERE scope LIKE "%drive%"
    GROUP BY 1,2,3 ORDER BY 4 DESC;

تلاش‌های ورود به سیستم کنسول مدیریت

اطلاعات دقیق در مورد ورودهای ناموفق به کنسول مدیریت گوگل

SELECT TIMESTAMP_MICROS(time_usec) AS date, email, ip_address,
    event_name, login.login_type, login.login_failure_type
    FROM api_project_name.dataset_name.activity
    WHERE login.login_type IS NOT NULL
    AND login.login_failure_type IS NOT NULL
    AND event_type = "login"
    ORDER BY date DESC;

طرحواره برای جداول استفاده

این طرحواره می‌تواند تغییر کند. می‌توانید لیست به‌روز و کاملی از پارامترها و فیلدها را در مستندات Reports API مشاهده کنید.

فیلتر بر اساس تاریخ

شما می‌توانید هنگام جستجوی جداول فعالیت یا استفاده ، بر اساس تاریخ فیلتر کنید. هر دو هنگام ارائه تاریخ، قالب‌های متمایزی دارند:

  • جدول فعالیت ، مهرهای زمانی را بر حسب میکروثانیه یونیکس ذخیره می‌کند. این یک مقدار صحیح (عدد) است که می‌تواند با تابع TIMESTAMP_MICROS() به تاریخ تبدیل شود.
  • جدول کاربرد ، مقادیر تاریخ خود را با قالب تاریخ نمایش می‌دهد، بنابراین این تبدیل ضروری نیست.

برای هر یک از جداول، می‌توانید با استفاده از یکی از روش‌های زیر، فیلتر را بر اساس یک تاریخ خاص (یا محدوده تاریخ) انتخاب کنید.

جدول فعالیت‌ها

برای فیلتر کردن بر اساس یک تاریخ خاص با ساختار Unix Micros (جدول فعالیت )، می‌توانید عبارت WHERE و تابع TIMESTAMP() را برای انجام یک مقایسه ساده با عملگرهای بزرگتر از (>) و کوچکتر از (<) تعریف کنید:

SELECT TIMESTAMP_MICROS(time_usec) as date, record_type
    FROM api_project_name.dataset_name.activity
    WHERE TIMESTAMP_MICROS(time_usec) > TIMESTAMP("2020-07-01")
    AND TIMESTAMP_MICROS(time_usec) < TIMESTAMP("2020-07-07")
    ORDER BY 1 DESC LIMIT 1000

مفهوم اینجا، اعمال محدودیت در مقدار ورودی time_usec با مقایسه مقدار بازگشتی آن از تابع TIMESTAMP_MICROS() در مقابل مقدار بازگشتی تابع TIMESTAMP() با تاریخی که به عنوان پارامتر رشته‌ای اضافه شده است، می‌باشد. این روش از استانداردهای توابع Timestamp در SQL استاندارد پیروی می‌کند و از عملگرهای مقایسه‌ای ساده (>) و (<) به همراه بسط AND از بند WHERE برای بستن یک پنجره زمانی به طور خاص استفاده می‌کند.

جدول میزان استفاده

SELECT date, meet.num_calls,
    FROM api_project_name.dataset_name.usage
    WHERE meet.num_calls IS NOT NULL
    AND TIMESTAMP(date) > TIMESTAMP("2020-07-01")
    AND TIMESTAMP(date) < TIMESTAMP("2020-07-07")
    ORDER BY date DESC;

می‌توانیم مقدار تاریخ از نوع رشته‌ای موجود در جدول را به تابع TIMESTAMP() ارسال کنیم و از عملگرهای مقایسه‌ای (>) و (<) مانند مثال اول استفاده کنیم.

فیلتر بر اساس نام‌های مستعار دامنه و زیر دامنه‌ها: حذف و اضافه کردن

برای حذف یا اضافه کردن دامنه‌های خاص از نتایج جستجوی خود، فیلتری را برای آدرس ایمیل در عبارت WHERE اعمال کنید و از کاراکترهای wildcards (%) برای فیلتر کردن دامنه‌ها استفاده کنید.

نحوه استفاده از عبارات AND یا OR بستگی به این دارد که آیا می‌خواهید نتایج خاصی را فیلتر کنید (حذف کنید) یا فقط آنها را لحاظ کنید .

حذف دامنه‌های خاص از نتایج

WHERE email NOT LIKE ("%@sub.%")
    AND email NOT LIKE ("%@test.%")

فقط دامنه‌های خاصی را در نتایج بگنجانید

WHERE email LIKE ("%@sub.%")
    OR email LIKE ("%@test.%")

گزارش‌های حسابرسی قوانین

از این پرس‌وجو برای ردیابی تلاش‌های کاربران برای به اشتراک گذاشتن داده‌های حساس استفاده کنید

SELECT TIMESTAMP_MICROS(time_usec) AS Date,
    rules.resource_owner_email AS User,
    rules.rule_name AS ruleName,
    rules.rule_type AS ruleType,
    rules.rule_resource_name AS ruleResourceName,
    rules.resource_id AS resourceId,
    rules.resource_title AS resourceTitle,
    rules.resource_type AS resourceType,
    rules.resource_owner_email AS resourceOwner,
    CAST(recipients AS STRING) AS Recipients,
    rules.data_source AS dataSource,
    rules.actor_ip_address AS actorIpAddress,
    rules.severity AS severity,
    rules.scan_type AS scanType,
    rules.matched_trigger AS matchedTriggers,
    detect.display_name AS matchedDetectorsName,
    detect.detector_id AS matchedDetectorsId,
    detect.detector_type AS matchedDetectorsType,
    triggers.action_type AS triggeredActions,
    suppressors.action_type AS suppressedActions,
    FROM api_project_name.dataset_name.activity
    LEFT JOIN UNNEST(rules.resource_recipients) as recipients
    LEFT JOIN UNNEST(rules.matched_detectors) as detect
    LEFT JOIN UNNEST(rules.triggered_actions) as triggers
    LEFT JOIN UNNEST(rules.suppressed_actions) as suppressors
    WHERE rules.rule_name IS NOT NULL
    AND triggers.action_type != "ALERT"
    ORDER BY 1 DESC
    LIMIT 1000;


گوگل، گوگل ورک‌اسپیس و علامت‌ها و لوگوهای مرتبط، علائم تجاری شرکت گوگل هستند. سایر نام‌های شرکت‌ها و محصولات، علائم تجاری شرکت‌هایی هستند که با آنها مرتبط هستند.