Когда пользователям требуются кастомизированные или детализированные экспорты данных, выходящие за рамки базового экспорта данных пользователя, доступного на странице их настроек, администраторы могут выполнять экспорт данных пользователей с помощью плагина Data Explorer.
Этот процесс включает написание и выполнение SQL-запросов, адаптированных под конкретные потребности в данных, при обеспечении соблюдения политики сайта и нормативных требований по защите данных.
Администраторы также могут захотеть экспортировать данные пользователей по другим причинам, например:
- Анализ вовлеченности пользователей:
- Анализ взаимодействия пользователей с сайтом, определение популярных постов и тем, получающих наибольшее количество ответов.
- Генерация отчетов:
- Создание кастомных отчетов для заинтересованных лиц для предоставления информации о метриках сообщества и вовлеченности пользователей.
- Резервное копирование данных:
- Сохранение резервных копий данных пользователей для целей восстановления или исторического анализа.
- Миграция данных:
- Экспорт данных пользователей при переходе на другую платформу или создании хранилища данных.
- Модерация контента:
- Расследование активности пользователей или контента в случае нарушений политики или споров.
Ключевые соображения при написании запросов для экспорта данных пользователей
При написании запросов для экспорта данных пользователей важно учитывать как конкретные требования экспорта, так и политику вашего сайта в отношении экспорта данных пользователей.
Вот некоторые факторы и соображения, которые могут повлиять на то, как пишутся запросы для экспорта данных пользователей:
- Атрибуты пользователя:
- Если вам нужны конкретные атрибуты пользователя, такие как имя пользователя, электронная почта или дата регистрации, ваш запрос должен явно выбирать эти столбцы из базы данных. Например:
SELECT username, email, created_at AS registration_date
FROM users
WHERE id = :user_id
- Данные активности:
- Для экспорта данных активности пользователей, таких как посты, лайки или история входов, потребуются дополнительные соединения с соответствующими таблицами (например,
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
- Диапазон дат:
- Если вам нужны данные за определенный период времени, включите фильтры по датам в ваш запрос, чтобы ограничить результаты соответствующим периодом:
SELECT username, email, created_at AS registration_date
FROM users
WHERE created_at BETWEEN :start_date AND :end_date
- Конфиденциальность данных:
- Убедитесь, что экспортируемые данные соответствуют законам о защите данных и политике сайта. Будьте осторожны при включении конфиденциальных данных, если это не абсолютно необходимо.
- Анонимизация:
- В некоторых случаях может потребоваться анонимизация данных пользователей для защиты их конфиденциальности. Например, вы можете заменить имена на уникальные идентификаторы.
- Согласие пользователя:
- Убедитесь, что существует механизм явного согласия, если экспорт данных включает обмен личной или конфиденциальной информацией пользователей.
Примеры запросов
Ниже приведены примеры запросов для распространенных потребностей в экспорте данных. Эти запросы разработаны так, чтобы быть похожими на экспорт данных, доступный со страницы настроек пользователя:
Экспорт информации о пользователе:
-- [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.