Esta consulta SQL do Explorador de Dados foi projetada para extrair e contar links de postagens em tópicos públicos dentro de um intervalo de datas especificado. Ela também permite a pesquisa opcional de links com base em um padrão de URL especificado.
Esta consulta pode ser útil em cenários onde a compreensão do uso de links internos ou externos em discussões públicas é importante.
--[params]
--date :start_date = 2023-12-01
--date :end_date = 2024-01-01
--text :link_pattern = %example.com%
--boolean :search = false
SELECT
p.created_at,
p.id AS post_id,
p.topic_id AS topic_id,
COUNT(DISTINCT links) AS link_count,
array_agg(DISTINCT links) AS all_links
FROM
posts p
JOIN
topics t ON p.topic_id = t.id
CROSS JOIN LATERAL
regexp_matches(p.cooked, 'href="((?:http|https)://[^"]+)"', 'g') AS links
WHERE
p.created_at >= :start_date
AND p.created_at <= :end_date
AND p.cooked ~ 'href="http[s]?://'
AND t.archetype <> 'private_message' -- Exclui mensagens privadas
AND (:search = false OR links[1] LIKE :link_pattern) -- Filtra links por padrão
GROUP BY
p.id,
p.topic_id,
p.post_number
ORDER BY
p.created_at ASC
Explicação da Consulta SQL
A consulta realiza as seguintes operações:
- Operações de Junção: Ela une a tabela
postscom a tabelatopicspara garantir que apenas postagens pertencentes a tópicos públicos sejam consideradas. Isso é feito verificando que oarchetypedo tópico não seja ‘private_message’. - Correspondência de Padrões: Utiliza uma expressão regular para extrair todos os URLs do campo
cookedde cada postagem. Este campo contém a versão renderizada em HTML do conteúdo da postagem. - Filtragem:
- Filtragem por Data: Apenas postagens criadas dentro do intervalo de datas especificado pelo usuário (
start_dateaend_date) são incluídas. - Filtragem de Links: Opcionalmente, se o parâmetro
searchestiver definido como true, apenas os links que correspondem aolink_patternsão considerados.
- Filtragem por Data: Apenas postagens criadas dentro do intervalo de datas especificado pelo usuário (
- Agregação: Para cada postagem, a consulta conta os links distintos e os agrega em um array. Isso ajuda a entender a variedade de links compartilhados em uma única postagem.
- Saída: A consulta exibe a data de criação da postagem, o ID da postagem, o ID do tópico, a contagem de links exclusivos e um array desses links.
Parâmetros
start_dateeend_date: Definem o intervalo de datas para as postagens a serem analisadas.link_pattern: Um padrão para filtrar os links. Apenas links que contêm este padrão serão incluídos sesearchfor definido como true. No parâmetro:link_pattern, os símbolos%são curingas em SQL que correspondem a zero ou mais caracteres.search: Um sinalizador booleano para ativar a filtragem do padrão de link.
Resultados
created_at: A data e hora em que a postagem foi criada.post_id: O identificador exclusivo da postagem.topic_id: O identificador exclusivo do tópico ao qual a postagem pertence.link_count: O número de links exclusivos encontrados na postagem. Isso indica quantos links externos diferentes foram incluídos na postagem.all_links: Um array de todos os links exclusivos encontrados na postagem.
Exemplo de Resultados
| created_at | post_id | topic_id | link_count | all_links |
|---|---|---|---|---|
| 2023-12-05 14:30:00 | 10234 | 543 | 2 | {“http://example.com/page1”, “http://example.com/page2”} |
| 2023-12-12 09:15:00 | 10567 | 550 | 1 | {“http://example.com/page3”} |
| 2023-12-20 16:45:00 | 10894 | 560 | 3 | {“http://example.com/page1”, “http://example.com/info”, “http://example.com/contact”} |
| … | … | … | … | … |