Utgåvor som stöds för den här funktionen: Frontline Standard, Enterprise Standard och Enterprise Plus. Education Standard och Education Plus, Enterprise Essentials Plus. Jämför utgåvor
Den här artikeln innehåller exempelfrågor för vanliga rapporter som du kan få från BigQuery. Dessa exempel på sökfrågor förutsätter äldre SQL. Ersätt api_project_name.dataset_name
med ditt eget projektnamn och datasetnamn.
Läs mer om att söka i BigQuery-data.
Loggfält för Gmail och deras innebörd finns i Schema för Gmail-aktivitetsloggar i BigQuery.
Exempelsökningar
KontonAntalet administratörskonton och delegerade konton och antalet konton som är inaktiverade, spärrade och avstängda efter datum
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;
De vanligaste händelserna som en administratör har utfört
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;
Hitta antalet avancerade administratörer på en bestämd domän
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;
Endast standard-SQL
Förhållandet mellan antalet aktiva användare per dag och antalet användare som har varit aktiva under de senaste 30 dagarna i Google Kalender. Frågan i detta exempel omfattar flera tabeller.
Dagliga aktiva användare
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
Aktiva användare under 30 dagar
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;
Antal kalenderhändelser per typ
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;
Antal Google Drive-objekt som delats, grupperade efter delningsmetod
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;
Filers id, namn, ägare och typ. Filer som delats externt under tidsperioden.
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;
Ändringar av delningsbehörighet och resultatet av detta. Ger möjlighet att se vilka ändringar av behörigheten som ledde till att filers synlighet ändrades.
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";
Händelsetyper uppdelade efter filtyp. Användbart för övertagningsrapport efter filtyp.
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;
Händelsetyp och händelsenamn per delad enhet
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;
Information om användare utanför domänen
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;
Vilka behörighetsändringar som gäller externa användare och när de gjordes
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;
Information om övervakning av lagringsutrymme
Användbart för att skapa rapporter om användare som förbrukar mer än X lagringsutrymme med en fast tröskel (definieras med AND accounts.drive_used_quota_in_mb > 0
-satsen).
Den här sökfrågan kan definieras som en schemalagd fråga eller så kan den anropas regelbundet via 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;
Obs!
- Detta värde kan ändras så att det matchar filtret som kunden ställer in. Till exempel över 15 GB:
AND accounts.drive_used_quota_in_mb > 15000
- Datumjämförelsen med
CAST(DATE_SUB(CURRENT_DATE(), INTERVAL x DAY) AS STRING)
gör det möjligt att göra en datumjämförelse med det tillgängliga formatet från värdet datum. -
Denna fråga gäller även Gmail där vi kan hitta ett liknande värde:
accounts.gmail_used_quota_in_mb
Metodtips för Gmail med BigQuery
- Sök enbart efter de data du behöver. I de här exemplen används en gräns på 1 000 matchningar, men du kan ange en egen gräns.
- Ange en tidsram för sökfrågorna. En dag är en vanlig tidsram.
Ämnesmatchning
Meddelandeöversikt för upp till 1 000 poster som matchar ett angivet ämne
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
Mottagarmatchning
Antal unika meddelanden för en viss mottagare
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")
Matchning av disposition och mottagare
Meddelandeöversikt för upp till 1 000 objekt som matchar båda:
- En angiven disposition (Modifiera, Avvisa, Karantänplacera)
- En angiven mottagare
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
Regelbeskrivning har aktiverats
Meddelandeöversikt för upp till 1 000 poster, vilket aktiverade den angivna regelbeskrivningen
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
Markerat som skräppost
Meddelandeöversikt för upp till 1 000 poster:
- Markerat som spam
- För en angiven mottagare
- Av alla orsaker
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
Krypteringsprotokoll – inte krypterad
Meddelandeöversikt per krypteringsprotokoll – ej krypterad
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
Krypteringsprotokoll – enbart TLS
Meddelandeöversikt per meddelande efter krypteringsprotokoll – endast 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
Matchning av meddelande-id
Vyn Meddelandeinformation för ett visst meddelande-id (inkludera ”<>” runt meddelande-id:t)
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 = ""
LIMIT 1000
Disposition – avvisa meddelande
Avvisa meddelande:
- Vilken regel orsakade avvisandet?
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
Disposition – ändra meddelande
Ändra meddelande:
- Vilken regel orsakade modifieringen?
- Vilken underkategori av modifiering (exempelvis rubriker, ämne)?
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
Karantänmeddelande
Vilken regel har karantänplacerat ett meddelande?
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
Sammansatta sökningar
Räkna alla meddelanden som fångats av en specifik regel (rule description) under de senaste 30 dagarna:
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"
Lista alla meddelanden som tagits emot utan TLS-kryptering under det senaste dygnet:
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
Lista de 10 toppdomänerna som mitt konto har utbytt e-post med under de senaste 30 dagarna:
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
Förhållandet mellan antalet aktiva användare per dag och antalet användare som varit aktiva under de senaste 30 dagarna i Gmail
Dagliga aktiva användare:
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;
Aktiva användare under 7 dagar:
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;
Aktiva användare under 30 dagar:
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;
Ändrat medlemskap och användarbeteende i Google Grupper
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
Om du vill ha en tidsstämpel av typen ÅÅÅÅ-MM-DD kan det första SELECT-uttryckselementet ersättas med:
EXTRACT(DATE FROM TIMESTAMP_MICROS(time_usec)) AS date,
Datumen kan filtreras i WHERE-satsen på något av följande sätt:
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
Antal videosamtal och totalt antal minuter efter datum
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
Dagliga aktiva användare
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
Aktiva användare under 30 dagar
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-regler som utlösts efter namn, matchad app och åtgärd
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;
Antal gånger en app från tredje part har getts åtkomstbehörighet till Google Drive
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;
Detaljerad information om misslyckade inloggningsförsök på Googles administratörskonsol
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;
Schemat kan ändras. En uppdaterad och fullständig lista över parametrar och fält finns i dokumentationen till Reports API.
Du kan filtrera efter datum när du söker i tabellerna Aktivitet eller Användning. De har olika format när datumet presenteras:
- I aktivitetstabellen visas tidsstämplarna i Unix-mikrosekunder. Detta är ett heltal (en siffra) som kan konverteras till ett datum med funktionen TIMESTAMP_MICROSS().
- I användningstabellen visas värdena för date i datumformat, så denna konvertering är inte nödvändig.
För båda tabellerna kan du välja att filtrera efter ett visst datum (eller datumintervall) med hjälp av en av följande metoder.
Aktivitetstabellen
Du kan filtrera efter ett visst datum i tabellen Unix Micros (aktivitetstabell) genom att definiera WHERE-satsen och TIMESTAMP()-funktionen och göra en enkel jämförelse med operatorerna mer än (>) och mindre än (<):
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
Konceptet här gäller att sätta gränser för indatavärdet time_usec genom att jämföra returvärdet från funktionen TIMESTAMP_MICRO() med returvärdet för funktionen TIMESTAMP() med ett datum som läggs till som en strängtypparameter. Detta följer standarderna i Timeline-funktioner i standard-SQL och använder enkla jämförelseoperatorer (>) och (<), tillsammans med AND-tillägget för WHERE-satsen för att stänga ett särskilt tidsfönster.
Användningstabellen
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;
Vi kan skicka strängtypvärdet date i tabellen till funktionen TIMESTAMP() och använda jämförelseoperatorerna (>) och (<) på samma sätt som i det första exemplet.
Inkludera eller exkludera vissa domäner från dina sökresultat genom att använda ett filter för e-postadressen på WHERE-satsen med hjälp av jokertecken (%) för att filtrera domänerna.
Hur du använder AND- eller OR-uttrycket beror på om du filtrerar bort (exkluderar) eller enbart inkluderar vissa resultat.
Uteslut vissa domäner från resultat
WHERE email NOT LIKE ("%@sub.%")
AND email NOT LIKE ("%@test.%")
Inkludera enbart vissa domäner i resultaten
WHERE email LIKE ("%@sub.%")
OR email LIKE ("%@test.%")
Använd den här sökfrågan för att spåra användarnas försök att dela känslig data
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;