Consigli per l'esportazione dei dati utente

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:

  1. 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
    
  2. 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
    
  3. 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
    
  4. 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.
  5. 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.
  6. 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.

7 Mi Piace