A pesquisa vetorial procura vetores ou pontos de dados semelhantes em um conjunto de dados com base em suas representações vetoriais. Ao contrário dos bancos de dados vetoriais proprietários, como Pinecone, Milvus, Qdrant e Weaviate, o MyScale é construído no banco de dados ClickHouse de código aberto e compatível com SQL.
SQL é uma ferramenta eficaz para gerenciar bancos de dados relacionais. A combinação de SQL e vetores fornece uma abordagem poderosa para lidar com questões complexas relacionadas à IA. Os usuários podem executar consultas SQL e vetoriais tradicionais em dados estruturados e incorporações de vetores (dados) para abordar consultas complexas e analisar dados de alta dimensão de maneira unificada e eficiente.
Técnicas SQL avançadas para consultas complexas
Consultas SQL simples são comandos que realizam recuperação direta de dados, geralmente de apenas uma tabela por vez. Consultas SQL complexas vão além das solicitações padrão, recuperando dados de diversas tabelas e limitando o conjunto de resultados com diversas condições.
Uma consulta complexa pode incluir recursos como:
Expressões de tabela comuns
Subconsultas
Unindo-se a muitas tabelas e usando diferentes tipos de junção
Expressões de tabela comuns
Uma expressão de tabela comum (CTE) é um nome que você atribui a uma subconsulta em sua consulta principal. O principal motivo para fazer isso é simplificar sua consulta, facilitando a leitura e a depuração. Às vezes, pode melhorar o desempenho, o que é outro benefício, mas trata-se principalmente de legibilidade e simplificação.
Considere um cenário no qual você deseja determinar a idade média dos clientes que compraram um determinado produto. Você tem uma tabela de dados do cliente, incluindo nome, idade e os produtos que compraram.
Aqui está um exemplo de consulta para realizar este cálculo usando um CTE:
Este CTE – um conjunto de resultados nomeado temporário (subconsulta) que pode ser referenciado em uma única consulta – é nomeado product_customers. Ele é criado usando um SELECT instrução que recupera as colunas nome e idade do customer_data tabela para clientes que compraram o produto 'widget'.
Mover a subconsulta para o topo da consulta e dar-lhe um nome facilita a compreensão do que a consulta faz. Se sua subconsulta selecionar um vetor de incorporação de amostra, você poderá nomear sua subconsulta como target_vector_embed. Ao se referir a isso na consulta principal, você verá esse nome e saberá a que ele se refere.
Isso também é útil se você tiver uma consulta longa e precisar da mesma lógica em vários lugares. Você pode defini-lo no topo da consulta e consultá-lo várias vezes durante a consulta principal.
Portanto, considere usar CTEs quando ter uma subconsulta melhora a legibilidade da sua consulta.
Subconsultas
Uma subconsulta é um comando SQL simples incorporado em outra consulta. Ao aninhar consultas, você pode configurar restrições maiores nos dados incluídos no conjunto de resultados.
As subconsultas podem ser usadas em vários locais de uma consulta, mas é mais fácil começar com o FROM declaração. Aqui está um exemplo de uma subconsulta básica:
Vou detalhar o que acontece quando você executa a consulta acima:
Primeiro, o banco de dados executa a “consulta interna” – a parte entre parênteses. Se você executar isso de forma independente, produzirá um conjunto de resultados como qualquer outra consulta. No entanto, após a execução da consulta interna, a consulta externa é executada usando os resultados da consulta interna como tabela subjacente:
As subconsultas devem ter nomes, que são adicionados após parênteses (da mesma forma que você adicionaria um alias a uma tabela normal). Esta consulta usa o nome sub.
Usando subconsultas em lógica condicional
Você pode usar subconsultas em lógica condicional (em conjunto com WHERE, JOIN/ON ou CASE). A consulta a seguir retorna todas as entradas da mesma data da entrada especificada no conjunto de dados:
Esta consulta funciona porque o resultado da subconsulta é apenas uma célula. A maior parte da lógica condicional funcionará com subconsultas contendo resultados de uma célula. No entanto, IN é o único tipo de lógica condicional que funcionará quando a consulta interna contiver vários resultados:
Observe que você não deve incluir um alias ao escrever uma subconsulta em uma instrução condicional. Isso ocorre porque a subconsulta é tratada como um valor individual (ou conjunto de valores na IN cláusula) e não como uma tabela.
Unindo Tabelas
join produz uma nova tabela combinando colunas de uma ou várias tabelas usando valores comuns a cada uma. Diferentes tipos de junções são:
INNER JOIN: somente as linhas correspondentes são retornadas.
LEFT JOIN: linhas não correspondentes da tabela esquerda e linhas correspondentes são retornadas.
RIGHT JOIN: linhas não correspondentes da tabela correta e linhas correspondentes são retornadas.
FULL JOIN: linhas não correspondentes de ambas as tabelas e linhas correspondentes são retornadas.
CROSS JOIN: Produz o produto cartesiano de tabelas inteiras, pois as “chaves de junção” não são especificadas.
Usando consultas complexas SQL e vetoriais no MyScale
O banco de dados vetorial SQL MyScale inclui vários recursos que ajudam em consultas SQL e vetoriais complexas.
Expressões de tabela comuns
MyScale suporta CTE e substitui o código nele definido WITH cláusula para o resto do SELECT consulta. Subconsultas nomeadas podem ser incluídas no contexto de consulta atual e filho em qualquer lugar onde objetos de tabela sejam permitidos.
A pesquisa vetorial é um método de pesquisa que representa dados como vetores. É comumente usado em aplicativos como pesquisa de imagens, vídeos e texto. MyScale usa o distance() função para realizar pesquisas vetoriais. Ele calcula a distância entre um vetor especificado e todos os dados vetoriais em uma coluna especificada e retorna os principais candidatos.
Em alguns casos, se o vetor especificado for obtido de outra tabela ou se a dimensão do vetor especificado for grande e inconveniente de representar, você poderá usar CTE ou subconsulta.
Suponha que você tenha uma tabela de vetores chamada photos que armazena informações de metadados vinculadas às imagens da sua biblioteca de fotos, com id, photo_id e photo_embed para o vetor de incorporação.
O exemplo a seguir trata o resultado de uma seleção em CTE como um vetor alvo para executar a pesquisa vetorial:
Junções e subconsultas
Há suporte limitado no MyScale para joine o uso de subconsulta é recomendado como solução alternativa. No MyScale, a pesquisa vetorial é baseada no índice vetorial de uma tabela com uma coluna vetorial. Apesar de distance() função aparece no SELECT cláusula, seu valor é calculado durante a pesquisa vetorial na tabela, não após join. O join resultado pode não ser o resultado esperado.
A seguir estão possíveis soluções alternativas:
Você pode usar o distance()...WHERE...ORDER BY...LIMIT padrão de consulta em subconsultas que utilizam índices vetoriais e obtêm resultados esperados em tabelas vetoriais.
Você também pode usar subconsultas no WHERE cláusula para reescrever a junção.
Suponha que você tenha outra mesa, photo_metaque armazena informações sobre as imagens da fototeca com photo_id, photo_author, year e title. O exemplo a seguir recupera fotos relevantes tiradas em 2023 de uma coleção de imagens:
Aqui está o que acontece quando você executa a consulta acima:
Primeiro, MyScale executa uma pesquisa vetorial na tabela photos para obter a coluna necessária photo_id e o valor do distance() função para os cinco principais registros relevantes:
Então o join é executado usando os resultados da tabela de vetores como tabela subjacente:
Como a pesquisa vetorial não considera o ano em que as fotos foram tiradas, o resultado pode estar incorreto. Para obter o resultado correto, reescreva o join consulta usando uma subconsulta:
Melhore a análise de dados
Técnicas avançadas de SQL, como CTEs, subconsultas e junções, podem ajudá-lo a realizar análises e manipulações complexas de dados com maior precisão e eficiência. MyScale combina o poder do SQL e dos vetores para fornecer uma abordagem poderosa para lidar com questões complexas relacionadas à IA. Com o MyScale, você pode executar com eficiência consultas SQL e vetoriais tradicionais em dados estruturados e vetoriais para abordar consultas complexas e analisar dados de alta dimensão de maneira unificada e eficiente.
Se você estiver interessado em saber mais, siga-nos no X (Twitter) ou junte-se à nossa comunidade Discord. Vamos construir juntos o futuro dos dados e da IA!
YOUTUBE.COM/THENEWSTACK
A tecnologia avança rápido, não perca um episódio. Inscreva-se em nosso canal no YouTube para transmitir todos os nossos podcasts, entrevistas, demonstrações e muito mais.
SE INSCREVER
Jianmei Zhang, engenheiro de software sênior da MyScale, é apaixonado por otimizar o desempenho e garantir armazenamento e recuperação eficientes de dados vetoriais. Com uma sólida experiência em design e desenvolvimento de banco de dados, Jianmei se concentra no desenvolvimento e otimização de desempenho de vetores…
Este site utiliza cookies para melhorar sua experiência de navegação. Ao continuar, você concorda com o uso de cookies. Para mais informações, consulte nossa Política de Privacidade.
Funcional
Sempre ativo
O armazenamento ou acesso técnico é estritamente necessário para a finalidade legítima de permitir a utilização de um serviço específico explicitamente solicitado pelo assinante ou utilizador, ou com a finalidade exclusiva de efetuar a transmissão de uma comunicação através de uma rede de comunicações eletrónicas.
Preferências
O armazenamento ou acesso técnico é necessário para o propósito legítimo de armazenar preferências que não são solicitadas pelo assinante ou usuário.
Estatísticas
O armazenamento ou acesso técnico que é usado exclusivamente para fins estatísticos.O armazenamento técnico ou acesso que é usado exclusivamente para fins estatísticos anônimos. Sem uma intimação, conformidade voluntária por parte de seu provedor de serviços de Internet ou registros adicionais de terceiros, as informações armazenadas ou recuperadas apenas para esse fim geralmente não podem ser usadas para identificá-lo.
Marketing
O armazenamento ou acesso técnico é necessário para criar perfis de usuário para enviar publicidade ou para rastrear o usuário em um site ou em vários sites para fins de marketing semelhantes.