사용자 데이터 내보내기 팁

사용자가 기본 사용자 데이터 내보내기 설정 페이지에서 제공되는 기능을 넘어선 맞춤형 또는 상세한 데이터 내보내기가 필요할 경우, 관리자는 Data Explorer 플러그인을 사용하여 사용자 데이터를 내보낼 수 있습니다.

이 과정은 사이트 정책 및 데이터 보호 규정 준수를 보장하면서 특정 데이터 요구 사항에 맞게 SQL 쿼리를 작성하고 실행하는 것을 포함합니다.

관리자는 다음과 같은 다른 목적으로 사용자 데이터를 내보내고자 할 수도 있습니다:

  • 사용자 참여도 분석:
    • 사용자가 사이트와 상호작용하는 방식, 인기 있는 게시글, 가장 많은 답변을 받는 주제를 분석합니다.
  • 보고서 생성:
    • 이해관계자에게 커뮤니티 지표 및 사용자 참여도에 대한 통찰력을 제공하기 위해 맞춤형 보고서를 생성합니다.
  • 데이터 백업:
    • 복구 목적이나 역사적 분석을 위해 사용자 데이터의 백업을 유지합니다.
  • 데이터 마이그레이션:
    • 다른 플랫폼으로 이관하거나 데이터 웨어하우스를 생성할 때 사용자 데이터를 내보냅니다.
  • 콘텐츠 조정:
    • 정책 위반 또는 분쟁 발생 시 사용자 활동이나 콘텐츠를 조사합니다.

사용자 데이터 내보내기 쿼리를 작성할 때의 주요 고려 사항

사용자 데이터를 내보내기 위한 쿼리를 작성할 때는 내보내기 요구 사항과 사이트의 사용자 데이터 내보내기 정책 모두를 고려하는 것이 중요합니다.

다음은 사용자 데이터 내보내기 쿼리 작성에 영향을 미칠 수 있는 요인과 고려 사항입니다:

  1. 사용자 속성:
  • 사용자 이름, 이메일, 가입 날짜 등 특정 사용자 속성이 필요하면 쿼리에서 데이터베이스의 해당 컬럼을 명시적으로 선택해야 합니다. 예를 들어:
SELECT username, email, created_at AS registration_date
FROM users
WHERE id = :user_id
  1. 활동 데이터:
  • 게시글, 좋아요, 로그인 기록과 같은 사용자 활동 데이터를 내보내려면 관련 테이블(예: 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
  1. 날짜 범위:
  • 특정 시간 범위의 데이터가 필요하면 쿼리에 날짜 필터를 포함하여 결과를 해당 기간으로 제한합니다:
SELECT username, email, created_at AS registration_date
FROM users
WHERE created_at BETWEEN :start_date AND :end_date
  1. 데이터 프라이버시:
  • 내보낸 데이터가 데이터 프라이버시 법규와 사이트 정책을 준수하는지 확인합니다. 민감한 데이터를 포함할 때는 신중해야 합니다.
  1. 익명화:
  • 일부 경우에는 사용자 프라이버시를 보호하기 위해 사용자 데이터를 익명화해야 할 수 있습니다. 예를 들어, 이름을 고유 식별자로 대체할 수 있습니다.
  1. 사용자 동의:
  • 데이터 내보내기에 개인 정보나 민감한 사용자 정보 공유가 포함되는 경우 명시적인 동의 메커니즘이 마련되어 있는지 확인합니다.

예시 쿼리

아래에는 일반적인 데이터 내보내기 요구 사항에 대한 예시 쿼리가 있습니다. 이 쿼리들은 사용자 설정 페이지에서 제공되는 데이터 내보내기 기능과 유사하도록 설계되었습니다:

사용자 정보 내보내기:

-- [params]
-- int :user_id

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

게시글 내보내기

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

인증 토큰 로그 내보내기:

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

인증 토큰 내보내기:

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

사용자 배지 내보내기:

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

사용자 북마크 내보내기:

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

카테고리 설정 내보내기:

-- [params]
-- int :user_id

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

플래그 내보내기:

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

좋아요 내보내기:

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

사용자 설정 내보내기:

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

대기 중인 게시글 내보내기:

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

사용자 아카이브 내보내기:

-- [params]
-- int :user_id

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

사용자 방문 기록 내보내기:

-- [params]
-- int :user_id

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

데이터 내보내기 쿼리 작성 및 실행에 대한 자세한 내용은 Discourse Data Explorer 문서 및 #data-reporting::category 카테고리를 참조하십시오.

7개의 좋아요