выгода от включения условных критериев в JOIN ON или Filter - PullRequest
0 голосов
/ 28 января 2019

В запросе сиддхи с JOIN лучше указывать условные критерии в предложении ON или в критериях фильтрации.

Критерии в предложении JOIN ON

FROM Stroke_TPA_Ingest_Ras_eMar_Output_Stream as Tpa
JOIN PreAdmitADTTable as Adt
  ON str:concat(Tpa.FacilityMnemonic,"-",Tpa.AccountNumber) == str:concat(Adt.FacilityMnemonic,"-",Adt.AccountNumber)
  AND (
        (
          (str:contains(Tpa.TpaPharmacyCodesValueSet, "https://fhir.app.medcity.net/ValueSet/StrokeTpaPharmacyCodes|"))
          AND 
          (convert(Tpa.AdministrationDosageFormId, 'int') > 40 AND convert(Tpa.AdministrationDosageFormId, 'int') <= 90)
        )
        OR 
        (
          (str:contains(Tpa.TpaPharmacyCodesValueSet, "https://fhir.app.medcity.net/ValueSet/StrokeTpaBolusPharmacyCodes|"))
          AND 
          (convert(Tpa.AdministrationDosageFormId, 'int') > 0 AND convert(Tpa.AdministrationDosageFormId, 'int') <= 9)
        )
      )
SELECT  Tpa.meta_LinkId  as meta_LinkId
INSERT INTO AlertStreamIntermediary;

Критерии вФильтр

FROM Stroke_TPA_Ingest_Ras_eMar_Output_Stream[
      ((str:contains(Tpa.TpaPharmacyCodesValueSet, "https://fhir.app.medcity.net/ValueSet/StrokeTpaPharmacyCodes|"))
      AND 
      (convert(Tpa.AdministrationDosageFormId, 'int') > 40 AND convert(Tpa.AdministrationDosageFormId, 'int') <= 90))
    OR  
      ((str:contains(Tpa.TpaPharmacyCodesValueSet, "https://fhir.app.medcity.net/ValueSet/StrokeTpaBolusPharmacyCodes|"))
      AND
      (convert(Tpa.AdministrationDosageFormId, 'int') > 0 AND convert(Tpa.AdministrationDosageFormId, 'int') <= 9))
  ] as Tpa
JOIN PreAdmitADTTable as Adt
  ON str:concat(Tpa.FacilityMnemonic,"-",Tpa.AccountNumber) == str:concat(Adt.FacilityMnemonic,"-",Adt.AccountNumber)
SELECT  Tpa.meta_LinkId  as meta_LinkId
INSERT INTO AlertStreamIntermediary;

Оба запроса кажутся эквивалентными, но интересно, есть ли разница в производительности

1 Ответ

0 голосов
/ 30 января 2019

Второй запрос будет работать лучше, так как к тому времени, когда события достигнут запроса на соединение, мы удалили нежелательные события, используя запрос фильтра.Поскольку Siddhi работает как конвейер, события, которые не соответствуют фильтру, будут отброшены на этом уровне.Для получения дополнительной информации об архитектуре сиддхи вы можете обратиться к this .

...