Implémentation de K-mer / n-gram dans SQL

Je veux implémenter k-mer / n-gram algoirthm dans SQL Server. ( https://en.wikipedia.org/wiki/N-gram ). Dans les bases de données, j'ai des millions de séquences de protéines et je veux find des k-mers en tant que tableau.

Par exemple; Pour ATATAGGTCGT | k=5 ATATAGGTCGT | k=5 résultat sera

 1 | ATATA 2 | TATAG 3 | ATAGG 4 | TAGGT 5 | AGGTC 6 | GGTCG 7 | GTCGT 

Merci pour l'attention.

En ce qui concerne https://en.wikipedia.org/wiki/N-gram k ou n est une variable. La fonction user sera alors la meilleure solution en prenant k ou n comme paramètre d'input.

 IF object_id('dbo.nGram','IF') IS NOT NULL DROP FUNCTION dbo.nGram; GO CREATE FUNCTION dbo.nGram(@s nvarchar(max),@ int) RETURNS TABLE AS RETURN WITH value AS( SELECT 2 p,LEFT(@s,@)g WHERE LEN(@s)>=@ UNION ALL SELECT p+1,SUBSTRING(@s,p,@)FROM value WHERE LEN(@s)>p-2+@) SELECT g FROM value GO WITH t AS( SELECT s FROM(values('ATCGAAGGTCGT'),('AT'))t(s) ) SELECT s,g FROM t OUTER APPLY dbo.nGram(s,2) 

Je pense que cette requête fonctionne pour vous.

Compte tenu de votre volume de données, peut-être que cela peut être plus performant.

Exemple

 Declare @YourTable table (ID int,SomeCol varchar(50)) Insert Into @YourTable values (1,'ATATAGGTCGT') Declare @K int =5 Declare @MaxNGram int = 10 ;with cte as ( Select Top (@MaxNGram) N = Row_Number() over (Order By (Select NULL)) From master..spt_values n1 ) Select A.ID ,B.* From @YourTable A Cross Apply ( Select N ,S=Subssortingng(A.SomeCol,N,@K) From cte ) B Where len(S)=@K 

Résultats

entrez la description de l'image ici