BigQuery'de raporlama günlükleri için örnek sorgular

Bu özelliğin desteklendiği sürümler: Frontline Standard ve Frontline Plus; Enterprise Standard ve Enterprise Plus; Education Standard ve Education Plus; Enterprise Essentials Plus. Sürümünüzü karşılaştırın

Bu makalede, BigQuery'den alabileceğiniz genel raporlar için örnek sorgular yer almaktadır. Bu sorgu örneklerinde, eski SQL'in bulunduğu varsayılır. api_project_name.dataset_name ifadesini kendi proje adınız ve veri kümesi adınızla değiştirin.

BigQuery verilerini sorgulama hakkında daha fazla bilgi edinin.

Gmail günlük alanları ve anlamları için BigQuery'deki Gmail etkinlik günlükleri şeması başlıklı makaleye bakın.

Örnek sorgular

Hesaplar

Yönetici hesapları ile yetki verilen hesapların sayısı ve devre dışı bırakılan, kilitlenen ve tarihe göre askıya alınan hesapların sayısı

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;

Yöneticiler

Bir yönetici tarafından en sık yapılan işlemler

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;

Belirli bir alandaki süper yöneticilerin sayısını bulma

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;

Takvim

Yalnızca standart SQL

Google Takvim'de günlük etkin kullanıcı sayısının, 30 gün boyunca etkin olan kullanıcı sayısına oranı. Bu örnekte, birden çok tablo sorgulanır.

Günlük etkin kullanıcı sayısı

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

30 gün boyunca etkin olan kullanıcılar

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;

Türe göre takvim etkinliklerinin sayısı

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;

Veri taşıma

Veri taşıma günlüğü etkinlikleri 26 Mayıs 2025'ten itibaren kademeli olarak kullanıma sunulacaktır. Bu tarihten önceki günlük etkinliği verileri doğru olmayabilir.

Yönetici tarafından gerçekleştirilen tüm kurulum ve yapılandırma işlemleri

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;

Belirli bir yürütme kimliğiyle ilgili tüm taşımayla ilgili etkinlikler

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;

Belirli bir yürütme kimliği için tüm hatalar

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 gibi belirli bir kaynak türüne ait tüm etkinlikler

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;

Enterprise Gmail Taşıma'da belirli bir kaynak kullanıcıya ait tüm etkinlikler

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;

Belirli bir kaynak URI'ye (ör. RFC kimliği) sahip belirli bir ileti için tüm etkinlikler

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;

Belirli bir kaynak veri türüne (ör. Exchange Online e-posta klasörü) ait tüm etkinlikler

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;

Duruma ve etkinlik adına göre gruplandırılmış etkinlik sayısı

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;

Duruma ve nesne türüne göre gruplandırılmış tüm etkinliklerin günlük sayısı

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;

Drive

Paylaşılan Google Drive öğelerinin, paylaşım yöntemine göre gruplandırılmış halde sayısı

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;

Dosya kimliği, başlık, sahip ve tür. Belirli bir zaman aralığında harici olarak paylaşılan dosyaların sayısı.

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;

Paylaşım izni değişiklikleri ve sonuçları. Dosya görünürlüğündeki değişikliğe hangi izin değişikliklerinin neden olduğunu anlamanızı sağlar.

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";

Dosya türüne göre gruplandırılmış etkinlik türleri. Dosya türüne göre benimseme raporu için kullanışlıdır.

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;

Her ortak Drive için etkinlik türü ve adı

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;

Alanınızın dışından kullanıcılarla ilgili bilgiler

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;

Harici kullanıcılara hangi izin değişikliklerinin ne zaman verildiği

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;

Depolama alanı izlemeyle ilgili bilgiler

Belirlenmiş bir eşikle (AND accounts.drive_used_quota_in_mb > 0 ibaresiyle tanımlanır) X üzerinde Drive depolama alanı kullanan kullanıcılar hakkında rapor oluşturmak için kullanışlıdır.

Bu sorgu, planlanmış bir sorgu olarak tanımlanabilir ya da periyodik olarak çağrılabilir (örneğin API kullanılarak).

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;

Notlar:

  • Bu değer, müşterinin ayarladığı filtreyle eşleşecek şekilde değiştirilebilir. Örneğin, 15 GB'tan fazla: AND accounts.drive_used_quota_in_mb > 15000
  • CAST(DATE_SUB(CURRENT_DATE(), INTERVAL x DAY) AS STRING) ile yapılan tarih karşılaştırması, date değerindeki mevcut biçimle tarih karşılaştırması yapılmasına olanak tanır.
  • Bu sorgu, benzer bir değer bulabileceğimiz Gmail için de geçerlidir: accounts.gmail_used_quota_in_mb

Gmail

BigQuery ile Gmail için en iyi uygulamalar

  • Yalnızca ihtiyacınız olan verileri sorgulayın. Buradaki örneklerde 1.000 eşleşme sınırı vardır,ancak kendi sınırınızı belirlemeniz de mümkündür.
  • Sorgularınız için bir zaman aralığı belirleyin. Genel olarak bir günlük zaman dilimi kullanılır.

Konu eşleşmesi
Belirli bir konuyla eşleşen 1.000'e kadar kaydın ileti özeti görünümü

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

Alıcı eşleşmesi
Belirtilen bir alıcı için farklı iletilerin sayısı

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")

Elden çıkarma işlemi ve alıcı eşleşmesi

Aşağıdaki sorguların ikisiyle de eşleşen 1.000'e kadar kayıt için ileti özeti görünümü:

  • Belirtilen elden çıkarma işlemi (Değiştir, Reddet, Karantinaya al)
  • Belirtilen alıcı
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

Kural açıklaması tetiklendi
Belirtilen kural açıklamasını tetikleyen 1.000'e kadar kayıt için ileti özeti görünümü

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

Spam olarak işaretlendi
1.000'e kadar kayıt için ileti özeti görünümü:

  • Spam olarak işaretlenenler
  • Belirtilen alıcı için
  • Tüm nedenler için
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

Şifreleme protokolü (şifrelenmemiş)
Şifreleme protokolüne göre ileti özeti görünümü (şifrelenmemiş)

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

Şifreleme protokolü (yalnızca TLS)
Şifreleme protokolüne göre ileti özeti görünümü (yalnızca 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

İleti kimliği eşleşmesi
Belirli bir ileti kimliği için ileti ayrıntıları görünümü (mesaj kimliğini "<>" içine alın)

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

Elden çıkarma: İletiyi reddet
İletiyi reddet:

  • Hangi kural nedeniyle reddetme kararı verildi?
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

Elden çıkarma: İletiyi değiştir
İletiyi değiştir:

  • Hangi kural nedeniyle değişiklik yapıldı?
  • Hangi değiştirme alt kategorisi (ör. üstbilgi veya konu) kullanılıyor?
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

İletiyi karantinaya al
Hangi kural nedeniyle ileti karantinaya alındı?

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

Bileşik sorgular
Son 30 gün içinde belirli bir kural tarafından ("kural açıklaması" adlı kural) yakalanan tüm iletilerin sayısı:

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"

Son günde TLS şifrelemesi olmadan alınan tüm iletileri listeler:

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

Son 30 gün içinde hesabımın en çok posta alışverişi yaptığı 10 alanı listeler:

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

Gmail'de günlük etkin kullanıcı sayısının, 30 gün boyunca etkin olan kullanıcı sayısına oranı

Günlük etkin kullanıcı sayısı:

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;

Son 7 gün içinde etkin kullanıcı sayısı:

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;

Son 30 gün içinde etkin olan kullanıcı sayısı:

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;

E-posta iletisiyle ilişkili en az bir sınıflandırma etiketi içeren en yeni 100 Gmail günlük etkinliği

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;

Belirli bir e-posta iletisi için mevcut tüm günlük etkinlikleri

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;

Gruplar

Google Grubu üyelik değişiklikleri ve kullanıcı davranışı

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-AA-GG zaman damgası kullanmak istiyorsanız ilk SELECT ifadesi şununla değiştirilebilir:
EXTRACT(DATE FROM TIMESTAMP_MICROS(time_usec)) AS date,

Tarihler, WHERE ibaresinde aşağıdaki yöntemlerden biriyle filtrelenebilir:

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

Google Meet

Tarihe göre görüntülü görüşme sayısı ve toplam görüşme dakikası

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

Günlük etkin kullanıcı sayısı

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

30 gün boyunca etkin olan kullanıcılar

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

Kurallar

Ada, eşleşen uygulamaya ve işlemlere göre tetiklenen Veri Kaybını Önleme kurallarının sayısı

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;

Token'lar

Bir üçüncü taraf uygulamasının Google Drive'a erişmesine kaç kez izin verildiği

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;

Yönetici Konsolu'nda oturum açma girişimleri

Google Yönetici Konsolu'nda başarısız oturum açma işlemleriyle ilgili ayrıntılı bilgi

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;

Kullanım tabloları şeması

Şema değişebilir. Parametre ve alanların güncel, tam listesini Reports API dokümanlarında bulabilirsiniz.

Tarihe göre filtrele

Etkinlik veya kullanım tablolarını sorgularken tarihe göre filtreleme yapabilirsiniz. Her iki yöntem de tarihi sunarken farklı biçimler kullanır:

  • Etkinlik tablosunda zaman damgaları Unix mikrosaniye cinsinden depolanır. Bu, TIMESTAMP_MICROS() işleviyle tarihe dönüştürülebilen bir tam sayı değeridir (rakamdır).
  • Kullanım tablosunda tarih değerleri tarih biçiminde olduğundan böyle bir dönüştürmeye gerek yoktur.

Her iki tabloda da, aşağıdaki yöntemlerden birini kullanarak belirli bir tarihe (veya tarih aralığına) göre filtreleme yapmayı tercih edebilirsiniz.

Etkinlik tablosu

Unix Micros (etkinlik tablosu) yapısıyla belirli bir tarihe göre filtrelemek için WHERE ibaresini ve TIMESTAMP() işlevini tanımlayarak büyüktür (>) ve küçüktür (<) operatörleriyle basit bir karşılaştırma yapabilirsiniz:

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

Buradaki amaç, girilen time_usec değerine sınır getirmektir. Bunun için TIMESTAMP_MICROS() işlevinden döndürülen değer, dize türü parametresi olarak eklenen bir tarihle birlikte TIMESTAMP() işlevinden döndürülen değerle karşılaştırılır. Bu kod, Timestamp functions in Standard SQL (Standart SQL'deki zaman damgası işlevleri) sayfasında anlatılan standartlara uygundur ve hem basit karşılaştırma operatörleri olan (>) ve (<) işaretlerini hem de WHERE ibaresinin AND uzantısını kullanarak belli bir zaman aralığının sınırlarını belirler.

Kullanım tablosu

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;

Tabloda mevcut olan tarih dize türü değerini TIMESTAMP() işlevine iletebilir ve (>) ile (<) karşılaştırma operatörlerini ilk örnektekiyle aynı şekilde kullanabiliriz.

Alan takma adlarına ve alt alan adlarına göre filtreleme: Hariç tutma ve dahil etme

Belirli alan adlarını sorgu sonuçlarınıza dahil etmek veya hariç tutmak için, alan adını filtrelemek üzere joker karakter (%) kullanarak WHERE ibaresinde e-posta adresi için bir filtre uygulayın.

AND veya OR ifadesini kullanma biçiminiz, belirli sonuçları filtreleme (hariç tutma) veya dahil etme yönündeki tercihinize bağlı olarak farklılık gösterir.

Belirli alanları sonuçlardan hariç tutma

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

Sonuçlara yalnızca belirli alanları dahil etme

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

Kural denetleme günlükleri

Kullanıcıların hassas verileri paylaşma girişimlerini izlemek için bu sorguyu kullanın

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;


Google, Google Workspace ve ilgili markalar ile logolar Google LLC şirketinin ticari markalarıdır. Diğer tüm şirket ve ürün adları, ilişkili oldukları şirketlerin ticari markalarıdır.