Quando gli utenti necessitano di esportazioni di dati personalizzate o dettagliate che vanno oltre le funzionalità di base disponibili dalla loro pagina delle preferenze, gli amministratori possono eseguire esportazioni di dati utente utilizzando il plugin Data Explorer.
Questo processo prevede la scrittura e l’esecuzione di query SQL personalizzate per esigenze di dati specifiche, garantendo al contempo la conformità alle policy del sito e alle normative sulla protezione dei dati.
Gli amministratori potrebbero anche voler esportare i dati utente per altri motivi, ad esempio:
- Analisi del Coinvolgimento degli Utenti:
- Analizzare come gli utenti interagiscono con il sito, quali post sono popolari e quali argomenti generano più risposte.
- Generazione di Report:
- Creare report personalizzati per gli stakeholder per fornire informazioni sulle metriche della community e sul coinvolgimento degli utenti.
- Backup dei Dati:
- Conservare backup dei dati utente per scopi di ripristino o analisi storiche.
- Migrazione dei Dati:
- Esportare i dati utente durante la migrazione verso un’altra piattaforma o la creazione di un data warehouse.
- Moderazione dei Contenuti:
- Indagare sulle attività o sui contenuti degli utenti in caso di violazioni delle policy o controversie.
Considerazioni Chiave per le Query di Esportazione Dati Utente
Quando si scrivono query per esportare dati utente, è importante considerare sia i requisiti specifici dell’esportazione sia le policy del proprio sito in materia di esportazioni di dati utente.
Ecco alcuni fattori e considerazioni che possono influenzare la scrittura delle query di esportazione dati utente:
-
Attributi Utente:
- Se sono necessari attributi utente specifici come nome utente, email o data di registrazione, la query dovrebbe selezionare esplicitamente queste colonne dal database. Ad esempio:
SELECT username, email, created_at AS registration_date FROM users WHERE id = :user_id -
Dati di Attività:
- Per esportare dati di attività utente come post, like o cronologia di accesso, saranno necessarie join aggiuntive con tabelle correlate (ad esempio,
posts,likes,user_actions):
SELECT p.id AS post_id, p.topic_id, p.created_at AS post_date, u.username FROM posts p JOIN users u ON u.id = p.user_id WHERE u.id = :user_id - Per esportare dati di attività utente come post, like o cronologia di accesso, saranno necessarie join aggiuntive con tabelle correlate (ad esempio,
-
Intervallo di Date:
- Se sono necessari dati da un periodo specifico, includere filtri di data nella query per limitare i risultati al periodo pertinente:
SELECT username, email, created_at AS registration_date FROM users WHERE created_at BETWEEN :start_date AND :end_date -
Privacy dei Dati:
- Assicurarsi che i dati esportati siano conformi alle leggi sulla privacy dei dati e alle policy del sito. Prestare attenzione nell’includere dati sensibili a meno che non sia assolutamente necessario.
-
Anonimizzazione:
- In alcuni casi, potrebbe essere necessario anonimizzare i dati utente per proteggere la privacy degli utenti. Ad esempio, si potrebbero sostituire i nomi con identificatori univoci.
-
Consenso dell’Utente:
- Assicurarsi che sia presente un meccanismo di consenso esplicito se l’esportazione dei dati comporta la condivisione di informazioni personali o sensibili dell’utente.
Esempi di Query
Di seguito sono riportati alcuni esempi di query per esigenze comuni di esportazione dati. Queste query sono progettate per essere simili all’esportazione dati disponibile dalla pagina delle preferenze di un utente:
Esporta Informazioni Utente:
-- [params]
-- int :user_id
SELECT id, username, email, created_at AS registration_date
FROM users
WHERE id = :user_id
Esporta Post
-- [params]
-- int :user_id
SELECT
id,
topic_id,
post_number,
created_at,
updated_at,
reply_to_post_number,
reply_count,
quote_count,
deleted_at,
like_count,
incoming_link_count,
bookmark_count,
score,
reads,
post_type,
sort_order,
last_editor_id,
hidden,
hidden_reason_id,
notify_moderators_count,
spam_count,
illegal_count,
inappropriate_count,
last_version_at,
user_deleted,
reply_to_user_id,
percent_rank,
notify_user_count,
like_score,
deleted_by_id,
word_count,
version,
cook_method,
wiki,
baked_at,
baked_version,
hidden_at,
self_edits,
reply_quoted,
via_email,
public_version,
locked_by_id,
image_upload_id,
qa_vote_count,
raw,
cooked,
edit_reason,
raw_email,
action_code,
outbound_message_id
FROM
posts
WHERE
user_id = :user_id
ORDER BY
created_at DESC
Esporta Log Token di Autenticazione:
-- [params]
-- int :user_id
SELECT
path,
action,
user_auth_token_id,
client_ip,
user_agent,
auth_token,
created_at
FROM
user_auth_token_logs
WHERE
user_id = :user_id
Esporta Token di Autenticazione:
-- [params]
-- int :user_id
SELECT
auth_token,
client_ip,
rotated_at,
created_at,
updated_at,
seen_at,
auth_token_seen,
user_agent,
prev_auth_token
FROM
user_auth_tokens
WHERE
user_id = :user_id
Esporta Badge Utente:
-- [params]
-- int :user_id
SELECT
notification_id,
badge_id,
granted_at,
granted_by_id,
post_id,
seq,
featured_rank,
created_at,
is_favorite
FROM
user_badges
WHERE
user_id = :user_id
Esporta Segnalibri Utente:
-- [params]
-- int :user_id
SELECT
name,
reminder_at,
created_at,
updated_at,
reminder_last_sent_at,
reminder_set_at,
auto_delete_preference,
pinned,
bookmarkable_id,
bookmarkable_type
FROM
bookmarks
WHERE
user_id = :user_id
Esporta Preferenze Categoria:
-- [params]
-- int :user_id
SELECT
category_id,
notification_level,
last_seen_at
FROM
category_users
WHERE
user_id = :user_id
Esporta Flag:
-- [params]
-- int :user_id
SELECT
id,
name,
name_key,
description,
notify_type,
auto_action_type,
custom_type,
applies_to,
position,
enabled,
created_at,
updated_at,
score_type
FROM
flags
WHERE
id IN (
SELECT
post_action_type_id
FROM
post_actions
WHERE
user_id = :user_id
)
Esporta Like:
-- [params]
-- int :user_id
SELECT
post_id,
post_action_type_id,
created_at,
updated_at,
deleted_at,
deleted_by_id,
related_post_id,
staff_took_action,
deferred_by_id,
targets_topic,
agreed_at,
agreed_by_id,
deferred_at,
disagreed_at,
disagreed_by_id
FROM
post_actions
WHERE
user_id = :user_id
AND post_action_type_id = 1
Esporta Preferenze Utente:
-- [params]
-- int :user_id
SELECT
mailing_list_mode,
email_digests,
external_links_in_new_tab,
enable_quoting,
dynamic_favicon,
automatically_unpin_topics,
digest_after_minutes,
auto_track_topics_after_msecs,
new_topic_duration_minutes,
last_redirected_to_top_at,
email_previous_replies,
email_in_reply_to,
like_notification_frequency,
include_tl0_in_digests,
mailing_list_mode_frequency,
notification_level_when_replying,
theme_key_seq,
allow_private messages,
homepage_id,
theme_ids,
hide_profile_and_presence,
text_size_key,
text_size_seq,
email_level,
email_messages_level,
title_count_mode_key,
enable_defer,
timezone,
enable_allowed_pm_users,
dark_scheme_id,
skip_new_user_tips,
color_scheme_id,
default_calendar,
chat_enabled,
only_chat_push_notifications,
oldest_search_log_date,
chat_sound,
dismissed_channel_retention_reminder,
dismissed_dm_retention_reminder,
bookmark_auto_delete_preference,
ignore_channel_wide_mention,
chat_email_frequency,
enable_experimental_sidebar,
seen_popups,
chat_header_indicator_preference,
sidebar_link_to_filtered_list,
sidebar_show_count_of_new_items,
watched_precedence_over_muted,
chat_separate_sidebar_mode,
topics_unread_when_closed,
policy_email_frequency,
show_thread_title_prompts,
auto_image_caption
FROM
user_options
WHERE
user_id = :user_id
Esporta Post in Coda:
-- [params]
-- int :user_id
SELECT
id,
user_id,
topic_id,
post_number,
raw,
created_at,
updated_at,
state,
error,
queue
FROM
queued_posts
WHERE
user_id = :user_id
Esporta Archivio Utente:
-- [params]
-- int :user_id
SELECT
id,
topic_id,
created_at,
updated_at
FROM
user_archived_messages
WHERE
user_id = :user_id
Esporta Visite Utente:
-- [params]
-- int :user_id
SELECT
visited_at,
posts_read,
mobile,
time_read
FROM
user_visits
WHERE
user_id = :user_id
Per ulteriori informazioni sulla creazione ed esecuzione di query di esportazione dati, fare riferimento alla documentazione del plugin Discourse Data Explorer e alla categoria Data & reporting.