Dicas para Exportar Dados de Usuários

Quando os usuários precisam de exportações de dados personalizadas ou detalhadas que vão além das exportações básicas de dados do usuário disponíveis na página de preferências, os administradores podem realizar exportações de dados do usuário usando o plugin Data Explorer.

Esse processo envolve a escrita e execução de consultas SQL adaptadas a necessidades específicas de dados, garantindo a conformidade com as políticas do site e os regulamentos de proteção de dados.

Os administradores também podem querer exportar dados do usuário por outros motivos, como:

  • Análise de Engajamento do Usuário:
    • Analisar como os usuários interagem com o site, quais posts são populares e quais tópicos geram mais respostas.
  • Geração de Relatórios:
    • Criar relatórios personalizados para partes interessadas, fornecendo insights sobre métricas da comunidade e engajamento do usuário.
  • Backup de Dados:
    • Manter backups de dados do usuário para fins de recuperação ou análise histórica.
  • Migração de Dados:
    • Exportar dados do usuário ao migrar para outra plataforma ou criar um data warehouse.
  • Moderação de Conteúdo:
    • Investigar atividades ou conteúdo do usuário em caso de violações de políticas ou disputas.

Principais Considerações para Consultas de Exportação de Dados do Usuário

Ao escrever consultas para exportar dados do usuário, é importante considerar tanto os requisitos específicos da exportação quanto as políticas do seu site em relação às exportações de dados do usuário.

Aqui estão alguns fatores e considerações que podem influenciar como as consultas de exportação de dados do usuário são escritas:

  1. Atributos do Usuário:

    • Se você precisar de atributos específicos do usuário, como nome de usuário, e-mail ou data de registro, sua consulta deverá selecionar explicitamente essas colunas do banco de dados. Por exemplo:
    SELECT username, email, created_at AS registration_date
    FROM users
    WHERE id = :user_id
    
  2. Dados de Atividade:

    • Para exportar dados de atividade do usuário, como posts, curtidas ou histórico de login, serão necessárias junções adicionais com tabelas relacionadas (por exemplo, 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. Intervalo de Datas:

    • Se você precisar de dados de um período específico, inclua filtros de data em sua consulta para limitar os resultados ao período relevante:
    SELECT username, email, created_at AS registration_date
    FROM users
    WHERE created_at BETWEEN :start_date AND :end_date
    
  4. Privacidade de Dados:

    • Certifique-se de que os dados exportados estejam em conformidade com as leis de privacidade de dados e as políticas do site. Tenha cuidado ao incluir dados confidenciais, a menos que seja absolutamente necessário.
  5. Anonimização:

    • Em alguns casos, pode ser necessário anonimizar os dados do usuário para proteger a privacidade do usuário. Por exemplo, você pode substituir nomes por identificadores exclusivos.
  6. Consentimento do Usuário:

    • Certifique-se de que um mecanismo de consentimento explícito esteja em vigor se a exportação de dados envolver o compartilhamento de informações pessoais ou confidenciais do usuário.

Exemplos de Consultas

Abaixo estão alguns exemplos de consultas para necessidades comuns de exportação de dados. Essas consultas são projetadas para serem semelhantes à exportação de dados disponível em uma página de preferências do usuário:

Exportar Informações do Usuário:

-- [params]
-- int :user_id

SELECT id, username, email, created_at AS registration_date
FROM users
WHERE id = :user_id

Exportar Posts

-- [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

Exportar Logs de Tokens de Autenticação:

-- [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

Exportar Tokens de Autenticação:

-- [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

Exportar Emblemas do Usuário:

-- [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

Exportar Favoritos do Usuário:

-- [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

Exportar Preferências de Categoria:

-- [params]
-- int :user_id

SELECT
    category_id,
    notification_level,
    last_seen_at
FROM
    category_users
WHERE
    user_id = :user_id

Exportar Sinalizações:

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

Exportar Curtidas:

-- [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

Exportar Preferências do Usuário:

-- [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

Exportar Posts Enfileirados:

-- [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

Exportar Arquivo do Usuário:

-- [params]
-- int :user_id

SELECT
    id,
    topic_id,
    created_at,
    updated_at
FROM
    user_archived_messages
WHERE
    user_id = :user_id

Exportar Visitas do Usuário:

-- [params]
-- int :user_id

SELECT
    visited_at,
    posts_read,
    mobile,
    time_read
FROM
    user_visits
WHERE
    user_id = :user_id

Para mais informações sobre como criar e executar consultas de exportação de dados, consulte a documentação do plugin Discourse Data Explorer e a categoria Data & reporting.

7 curtidas