  RDF has seen increased adoption in recent years, prompting the
standardization of the SPARQL query language for RDF, and the development of
local and distributed engines for processing SPARQL queries. This survey paper
provides a comprehensive review of techniques and systems for querying RDF
knowledge graphs. While other reviews on this topic tend to focus on the
distributed setting, the main focus of the work is on providing a comprehensive
survey of state-of-the-art storage, indexing and query processing techniques
for efficiently evaluating SPARQL queries in a local setting (on one machine).
To keep the survey self-contained, we also provide a short discussion on graph
partitioning techniques used in the distributed setting. We conclude by
discussing contemporary research challenges for further improving SPARQL query
engines. This extended version also provides a survey of over one hundred
SPARQL query engines and the techniques they use, along with twelve benchmarks
and their features.
