Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De klasse sentinel_graph biedt een manier om te communiceren met de Microsoft Sentinel-grafiek, zodat u uw grafiekschema kunt definiëren, gegevens van de Microsoft Sentinel Data Lake kunt transformeren in knooppunten en randen, een grafiek kunt publiceren, een query kunt uitvoeren op grafiek en geavanceerde grafiekalgoritmen kunt uitvoeren. Deze klasse is ontworpen voor gebruik met de Spark-sessies in Jupyter-notebooks die worden uitgevoerd op Microsoft Sentinel Spark-berekening.
GraphSpecBuilder
De GraphSpecBuilder-klasse biedt een vloeiende opbouwfunctie voor het maken van grafiekspecificaties met gegevenspijplijnen en schema-integratie.
Belangrijk
De GraphBuilder alias voor deze klasse is afgeschaft en wordt in een toekomstige versie verwijderd. Gebruik GraphSpecBuilder in alle nieuwe code.
# Deprecated — emits DeprecationWarning
from sentinel_graph.builders.graph_builder import GraphBuilder
# Recommended
from sentinel_graph import GraphSpecBuilder
Constructor
GraphSpecBuilder(context: ExecutionContext)
Parameters:
-
context(ExecutionContext): Uitvoeringscontext met Spark-sessie en -configuratie
Verhoogt:
-
ValueError: Als de context Geen of grafieknaam is, kan niet worden bepaald
Statische methoden
start
GraphSpecBuilder.start(context: Optional[ExecutionContext] = None) -> GraphSpecBuilder
Definieer een nieuwe opbouwfunctie voor Fluent Graph.
Parameters:
-
context(ExecutionContext, optioneel): ExecutionContext-exemplaar. Als geen, gebruikt standaardcontext.
Retourneert:
-
GraphSpecBuilder: Nieuw builder-exemplaar
Voorbeeld:
builder = GraphSpecBuilder.start(context=context)
Exemplaarmethoden
add_node
def add_node(alias: str) -> NodeBuilderInitial
Begin met het bouwen van een knooppuntdefinitie.
Parameters:
-
alias(str): unieke id voor dit knooppunt in de grafiek
Retourneert:
-
NodeBuilderInitial: Opbouwfunctie voor knooppunten in initiële status
Voorbeeld:
builder.add_node("user")
add_edge
def add_edge(alias: str) -> EdgeBuilderInitial
Begin met het bouwen van een edge-definitie.
Parameters:
-
alias(str): id voor deze rand in de grafiek (kan worden gedeeld over meerdere randen)
Retourneert:
-
EdgeBuilderInitial: Edge Builder in initiële status
Voorbeeld:
builder.add_edge("accessed")
done
def done() -> GraphSpec
Grafiekspecificatie voltooien en GraphSpec-exemplaar retourneren.
Retourneert:
-
GraphSpec: Volledige grafiekspecificatie met gegevenspijplijn en schema
Verhoogt:
-
ValueError: Als de grafiek geen knooppunten of randen heeft of als de validatie mislukt
Voorbeeld:
graph_spec = builder.done()
GraphSpec
Grafiekspecificatie met gegevenspijplijn, schema en weergavemogelijkheden.
Constructor
GraphSpec(
name: str,
context: ExecutionContext,
graph_schema: GraphSchema,
etl_pipeline: Optional[ETLPipeline] = None
)
Parameters:
-
name(str): Grafieknaam -
context(ExecutionContext): Uitvoeringscontext -
graph_schema(GraphSchema): Grafiekschemadefinitie -
etl_pipeline(ETLPipeline, optioneel): Gegevenspijplijn voor graafvoorbereiding
Eigenschappen
nodes
def nodes() -> DataFrame
DataFrame-knooppunten ophalen (luie, in de cache). Bepaalt automatisch de bron van de gegevenspijplijn of lake-tabel.
Retourneert:
-
DataFrame: Spark DataFrame met alle knooppunten
Verhoogt:
-
ValueError: als er context ontbreekt of als DataFrames niet kunnen worden geladen
edges
def edges() -> DataFrame
Edges DataFrame ophalen (lui, in cache opgeslagen). Bepaalt automatisch de bron van de gegevenspijplijn of lake-tabel.
Retourneert:
-
DataFrame: Spark DataFrame met alle randen
Verhoogt:
-
ValueError: als er context ontbreekt of als DataFrames niet kunnen worden geladen
Methoden
build_graph_with_data
Opmerking
build_graph_with_data is afgeschaft en wordt verwijderd in een toekomstige versie.
Gebruik Graph.build(spec) in plaats hiervan.
def build_graph_with_data() -> Dict[str, Any]
Voer de gegevenspijplijn uit en publiceer de grafiek.
Roept intern aan Graph.build(self), past de geretourneerde Graphaan en retourneert een achterwaarts compatibele woordenlijst.
Retourneert:
-
Dict[str, Any]: Woordenlijst met:-
etl_result: Resultaten van gegevensvoorbereiding -
api_result: Resultaten publiceren (indien geslaagd) -
api_error: Fouttekenreeks (als publiceren is mislukt) -
instance_name: Naam van graph-exemplaar -
status:"published"of"prepared"
-
Voorbeeld:
graph = Graph.build(spec)
print(f"Status: {graph.build_status.status}")
get_schema
def get_schema() -> GraphSchema
Haal het grafiekschema op.
Retourneert:
-
GraphSchema: Grafiekschemadefinitie
get_pipeline
Opmerking
Deze methode is afgeschaft en wordt verwijderd in een toekomstige versie. De gegevenspijplijn is een interne implementatiedetails en mag niet rechtstreeks worden geopend.
def get_pipeline() -> Optional[ETLPipeline]
Haal de gegevenspijplijn op (Geen voor bestaande grafieken).
Retourneert:
-
ETLPipelineofNone: gegevenspijplijn indien beschikbaar
to_graphframe
def to_graphframe(column_mapping: Optional[Dict[str, str]] = None) -> GraphFrame
Converteer de hele grafiek naar GraphFrame voor het uitvoeren van grafiekalgoritmen. Werkt alleen op lokale gegevens (uit de gegevenspijplijn of lake-tabel).
Parameters:
-
column_mapping(Dict[str, str], optioneel): Aangepaste kolomtoewijzing met sleutels:-
"id": Kolomnaam van hoekpunt-id -
"source_id": Kolomnaam van edge-bron-id -
"target_id": Kolomnaam van Edge-doel-id
-
Retourneert:
-
GraphFrame: GraphFrame-object met alle hoekpunten en randen
Verhoogt:
-
ValueError: Als ExecutionContext niet beschikbaar is
Voorbeeld:
gf = graph_spec.to_graphframe()
pagerank = gf.pageRank(resetProbability=0.15, maxIter=10)
show
def show(limit: int = 100, viz_format: str = "visual") -> None
Grafiekgegevens weergeven in verschillende indelingen.
Parameters:
-
limit(int, default=100): maximum aantal knooppunten/randen dat moet worden weergegeven -
viz_format(str, default="visual"): uitvoerindeling-
"table": Volledige DataFrame-tabellen (alle kolommen) -
"visual": Interactieve grafiekvisualisatie -
"all": Alle indelingen weergeven
-
Verhoogt:
-
ValueError: Als de indeling niet een van de ondersteunde waarden is
Voorbeeld:
graph_spec.show(limit=50, viz_format="table")
show_schema
def show_schema() -> None
Het grafiekschema weergeven als een interactieve grafiekvisualisatie.
Voorbeeld:
spec.show_schema()
Grafiek
Querybare grafiekexemplaren. Gemaakt via Graph.get() (bestaande grafiek) of Graph.build() (van een GraphSpec).
Constructor
Graph(
name: str,
context: ExecutionContext,
spec: Optional[GraphSpec] = None,
build_status: Optional[BuildStatus] = None,
)
Parameters:
-
name(str): Grafieknaam -
context(ExecutionContext): Uitvoeringscontext -
spec(GraphSpec, optioneel): Bijgevoegde grafiekspecificatie (ingesteld doorGraph.build()) -
build_status(BuildStatus, optioneel): Metagegevens van buildresultaten (ingesteld doorGraph.build())
Verhoogt:
-
ValueError: Als ExecutionContext geen is
Statische methoden
get
Graph.get(name: str, context: Optional[ExecutionContext] = None) -> Graph
Haal een grafiekexemplaren op uit een bestaande grafiek.
De geretourneerde Graph heeft spec=None en build_status=None.
Parameters:
-
name(str): Naam van graph-exemplaar -
context(ExecutionContext, optioneel): Uitvoeringscontext (standaard executionContext.default())
Retourneert:
-
Graph: Graph-exemplaar
Verhoogt:
-
ValueError: als de grafieknaam leeg is of als het grafiekexemplaren niet bestaat
Voorbeeld:
graph = Graph.get("my_graph", context=context)
graph.query("MATCH (n) RETURN n")
prepare
Graph.prepare(spec: GraphSpec) -> Graph
Voer de fase voor gegevensvoorbereiding uit voor een GraphSpeczonder te publiceren. Gebruik publish() daarna om de grafiek te registreren en er query's op uit te voeren.
Parameters:
-
spec(GraphSpec): Grafiekspecificatie om voor te bereiden
Retourneert:
-
Graph: Graph-exemplaar metspecgekoppelde enbuild_status.status == "prepared"
Verhoogt:
-
ValueError: Als de specificatie geen gegevenspijplijn of uitvoeringscontext heeft -
RuntimeError: Als uitvoering van gegevenspijplijn mislukt
Voorbeeld:
spec = GraphSpecBuilder.start(context=ctx).add_node(...).done()
graph = Graph.prepare(spec)
# Inspect results before publishing
graph.nodes.show()
graph.publish()
graph.query("MATCH (n) RETURN n")
build
Graph.build(spec: GraphSpec) -> Graph
Bouw een grafiek van een GraphSpec door gegevens voor te bereiden en te publiceren. Roept intern aan Graph.prepare(spec) en probeert graph.publish()vervolgens . In tegenstelling tot het afzonderlijk aanroepen van deze twee methoden, worden publicatiefouten opgevangen: de geretourneerde grafiek heeft build_status.status == "prepared" en build_status.api_error ingesteld in plaats van omhoog te gaan.
Parameters:
-
spec(GraphSpec): Graph-specificatie om van te bouwen
Retourneert:
-
Graph: Graph-exemplaar metspecgekoppelde enbuild_statusingevulde
Verhoogt:
-
ValueError: Als de specificatie geen gegevenspijplijn of uitvoeringscontext heeft -
RuntimeError: Als uitvoering van gegevenspijplijn mislukt
Voorbeeld:
spec = GraphSpecBuilder.start(context=ctx).add_node(...).done()
graph = Graph.build(spec)
print(graph.build_status.status) # "published" or "prepared" (None if neither ran)
graph.query("MATCH (n) RETURN n")
Eigenschappen
nodes
def nodes() -> Optional[DataFrame]
DataFrame voor knooppunten ophalen. Delegert naar self.spec.nodes wanneer een specificatie is gekoppeld; retourneert None anders.
edges
def edges() -> Optional[DataFrame]
Get edges DataFrame. Delegert naar self.spec.edges wanneer een specificatie is gekoppeld; retourneert None anders.
schema
def schema() -> Optional[GraphSchema]
Grafiekschema ophalen. Delegert naar self.spec.get_schema() wanneer een specificatie is gekoppeld; retourneert None anders.
Methoden
query
def query(query_string: str, query_language: str = "GQL") -> QueryResult
Voer een query uit op het grafiekexemplaren met behulp van GQL.
Parameters:
-
query_string(str): Grafiekquerytekenreeks (GQL-taal) -
query_language(str, default="GQL"): Querytaal
Retourneert:
-
QueryResult: Object met knooppunten, randen en metagegevens
Verhoogt:
-
ValueError: Als ExecutionContext of Spark-sessie ontbreekt -
RuntimeError: als de initialisatie van de client of het uitvoeren van query's mislukt
Voorbeeld:
result = graph.query("MATCH (u:user) WHERE u.age > 30 RETURN u")
result.show()
reachability
def reachability(
*,
source_property_value: str = None,
target_property_value: str = None,
source_property: Optional[str] = None,
participating_source_node_labels: Optional[List[str]] = None,
target_property: Optional[str] = None,
participating_target_node_labels: Optional[List[str]] = None,
participating_edge_labels: Optional[List[str]] = None,
is_directional: bool = True,
min_hop_count: int = 1,
max_hop_count: int = 4,
shortest_path: bool = False,
max_results: int = 500
) -> QueryResult
[! OPMERKING]
reachability(query_input=ReachabilityQueryInput(...))wordt nog steeds geaccepteerd, maar wordt verzondenDeprecationWarningen wordt verwijderd in een toekomstige versie.
Een bereikbaarheidsanalyse uitvoeren tussen bron- en doelknooppunten.
Parameters:
-
source_property_value(str): waarde die overeenkomt met de broneigenschap (gevalideerd tijdens runtime. Moet worden opgegeven wanneer u niet gebruikmaakt vanquery_input) -
target_property_value(str): waarde die overeenkomt met de doeleigenschap (gevalideerd tijdens runtime. Moet worden opgegeven wanneer u niet gebruikmaakt vanquery_input) -
source_property(Optioneel[str]): eigenschapsnaam om bronknooppunten te filteren -
participating_source_node_labels(Optioneel[List[str]]): Knooppuntlabels te beschouwen als bronnen -
target_property(Optioneel[str]): eigenschapsnaam om doelknooppunten te filteren -
participating_target_node_labels(Optioneel[List[str]]): Knooppuntlabels te beschouwen als doelen -
participating_edge_labels(Optioneel[List[str]]): Edge-labels om door te bladeren -
is_directional(bool): of de randen richting hebben (standaard:True) -
min_hop_count(int): Minimale hops (standaard:1) -
max_hop_count(int): Maximum aantal hops (standaard:4) -
shortest_path(bool): retourneer alleen de kortste paden (standaard:False) -
max_results(int): Maximale resultaten (standaard:500)
Verhoogt:
-
ValueError: Alssource_property_valueoftarget_property_valueontbreekt,min_hop_count < 1,max_hop_count < min_hop_countofmax_results < 1 -
RuntimeError: als de initialisatie van de client of het uitvoeren van query's mislukt
Retourneert:
-
QueryResult: Bevat de bereikbaarheidspaden
Voorbeeld:
result = graph.reachability(
source_property_value="user-001",
target_property_value="device-003")
result.show()
k_hop
def k_hop(
*,
source_property: Optional[str] = None,
source_property_value: Optional[str] = None,
participating_source_node_labels: Optional[List[str]] = None,
target_property: Optional[str] = None,
target_property_value: Optional[str] = None,
participating_target_node_labels: Optional[List[str]] = None,
participating_edge_labels: Optional[List[str]] = None,
is_directional: bool = True,
min_hop_count: int = 1,
max_hop_count: int = 4,
shortest_path: bool = False,
max_results: int = 500
) -> QueryResult
Opmerking
k_hop(query_input=K_HopQueryInput(...)) wordt nog steeds geaccepteerd, maar wordt verzonden DeprecationWarning en wordt verwijderd in een toekomstige versie.
K-hopanalyse uitvoeren vanaf een bepaald bronknooppunt.
Parameters:
- Hetzelfde als
reachability
Validatie:
- Ten minste één van
source_property_valueoftarget_property_valuemoet worden opgegeven
Verhoogt:
-
ValueError: Als nochsource_property_valuetarget_property_valuewordt opgegeven, of als numerieke beperkingen worden geschonden (hetzelfde alsreachability) -
RuntimeError: als de initialisatie van de client of het uitvoeren van query's mislukt
Retourneert:
-
QueryResult: Bevat de k-hop resultaten
Voorbeeld:
result = graph.k_hop(source_property_value="user-001")
result.show()
blast_radius
def blast_radius(
*,
source_property_value: str = None,
target_property_value: str = None,
source_property: Optional[str] = None,
participating_source_node_labels: Optional[List[str]] = None,
target_property: Optional[str] = None,
participating_target_node_labels: Optional[List[str]] = None,
participating_edge_labels: Optional[List[str]] = None,
is_directional: bool = True,
min_hop_count: int = 1,
max_hop_count: int = 4,
shortest_path: bool = False,
max_results: int = 500
) -> QueryResult
Opmerking
blast_radius(query_input=BlastRadiusQueryInput(...)) wordt nog steeds geaccepteerd, maar wordt verzonden DeprecationWarning en wordt verwijderd in een toekomstige versie.
Straalanalyse uitvoeren van bronknooppunt naar doelknooppunt.
Parameters:
-
source_property_value(str): waarde ter identificatie van het bronknooppunt (gevalideerd tijdens runtime). Moet worden opgegeven wanneer u niet gebruikmaakt vanquery_input) -
target_property_value(str): waarde waarmee het doelknooppunt wordt geïdentificeerd (gevalideerd tijdens runtime. Moet worden opgegeven wanneer u niet gebruikmaakt vanquery_input) - Andere parameters: hetzelfde als
reachability
Verhoogt:
-
ValueError: Alssource_property_valueoftarget_property_valueontbreekt of als numerieke beperkingen worden geschonden (hetzelfde alsreachability) -
RuntimeError: als de initialisatie van de client of het uitvoeren van query's mislukt
Retourneert:
-
QueryResult: Bevat de straalresultaten van de ontploffing
Voorbeeld:
result = graph.blast_radius(
source_property_value="user-003",
target_property_value="device-003",
min_hop_count=1)
result.show()
centrality
def centrality(
*,
participating_source_node_labels: Optional[List[str]] = None,
participating_target_node_labels: Optional[List[str]] = None,
participating_edge_labels: Optional[List[str]] = None,
threshold: int = 3,
centrality_type: CentralityType = None,
max_paths: int = 1000000,
is_directional: bool = True,
min_hop_count: int = 1,
max_hop_count: int = 4,
shortest_path: bool = False,
max_results: int = 500
) -> QueryResult
Opmerking
centrality(query_input=CentralityQueryInput(...)) wordt nog steeds geaccepteerd, maar wordt verzonden DeprecationWarning en wordt verwijderd in een toekomstige versie.
Centraliteitsanalyse uitvoeren op de grafiek.
Parameters:
-
participating_source_node_labels(Optioneel[List[str]]): Bronknooppuntlabels -
participating_target_node_labels(Optioneel[List[str]]): Doelknooppuntlabels -
participating_edge_labels(Optioneel[List[str]]): Edge-labels om door te bladeren -
threshold(int): minimale centraliteitsscore (standaard:3); moet niet-negatief zijn -
centrality_type(CentralityType):CentralityType.NodeofCentralityType.Edge(standaard:None, valt terug opCentralityType.Node) -
max_paths(int): het maximum aantal paden dat moet worden overwogen (standaard:1000000;0= alle paden); moet niet-negatief zijn -
is_directional(bool): of de randen richting hebben (standaard:True) -
min_hop_count(int): minimale hops (standaard:1); moeten ≥ 1 zijn -
max_hop_count(int): Maximum aantal hops (standaard:4); moet ≥min_hop_count -
shortest_path(bool): retourneer alleen de kortste paden (standaard:False) -
max_results(int): Maximale resultaten (standaard:500); moeten ≥ 1 zijn
Verhoogt:
-
ValueError: Alsthreshold < 0,max_paths < 0,min_hop_count < 1,max_hop_count < min_hop_countofmax_results < 1 -
RuntimeError: als de initialisatie van de client of het uitvoeren van query's mislukt
Retourneert:
-
QueryResult: bevat de metrische gegevens voor centraliteit
Voorbeeld:
result = graph.centrality(
participating_source_node_labels=["user", "device"],
participating_target_node_labels=["device", "user"],
participating_edge_labels=["sign_in"],
is_directional=False)
result.show()
ranked
def ranked(
*,
rank_property_name: str = None,
threshold: int = 0,
max_paths: int = 1000000,
decay_factor: float = 1,
is_directional: bool = True,
min_hop_count: int = 1,
max_hop_count: int = 4,
shortest_path: bool = False,
max_results: int = 500
) -> QueryResult
Opmerking
ranked(query_input=RankedQueryInput(...)) wordt nog steeds geaccepteerd, maar wordt verzonden DeprecationWarning en wordt verwijderd in een toekomstige versie.
Een gerangschikte analyse uitvoeren op de grafiek.
Parameters:
-
rank_property_name(str): eigenschapsnaam die moet worden gebruikt voor classificatie (gevalideerd tijdens runtime. Moet worden opgegeven wanneer u niet gebruikmaakt vanquery_input) -
threshold(int): alleen paden retourneren boven dit gewicht (standaard:0); mogen niet-negatief zijn -
max_paths(int): het maximum aantal paden dat moet worden overwogen (standaard:1000000;0= alle paden); moet niet-negatief zijn -
decay_factor(float): Rangschikking verval per stap; 2 betekent halvering (standaard:1); moet niet-negatief zijn -
is_directional(bool): of de randen richting hebben (standaard:True) -
min_hop_count(int): minimale hops (standaard:1); moeten ≥ 1 zijn -
max_hop_count(int): Maximum aantal hops (standaard:4); moet ≥min_hop_count -
shortest_path(bool): retourneer alleen de kortste paden (standaard:False) -
max_results(int): Maximale resultaten (standaard:500); moeten ≥ 1 zijn
Verhoogt:
-
ValueError: Alsrank_property_nameontbreekt,threshold < 0,max_paths < 0,decay_factor < 0,min_hop_count < 1,max_hop_count < min_hop_count, ofmax_results < 1 -
RuntimeError: als de initialisatie van de client of het uitvoeren van query's mislukt
Retourneert:
-
QueryResult: Bevat de gerangschikte knooppunten/randen
Voorbeeld:
result = graph.ranked(
rank_property_name="risk_score",
threshold=5,
decay_factor=2)
result.show()
to_graphframe
def to_graphframe(column_mapping: Optional[Dict[str, str]] = None) -> GraphFrame
Volledige grafiek converteren naar GraphFrame. Maakt gebruik van spec-gegevens indien beschikbaar; leest anders uit lake-tabellen.
Parameters:
-
column_mapping(Dict[str, str], optioneel): Aangepaste kolomtoewijzing
Retourneert:
-
GraphFrame: GraphFrame-object met alle hoekpunten en randen
Voorbeeld:
gf = graph.to_graphframe()
show
def show() -> None
Grafiekgegevens weergeven. Delegert naar spec.show() voor uitgebreide weergave wanneer een specificatie is gekoppeld; anders wordt minimale informatie afgedrukt.
show_schema
def show_schema() -> None
Grafiekschema weergeven. Delegeren naar spec.show_schema() wanneer een specificatie is bijgevoegd; er wordt een bericht afgedrukt dat aangeeft dat er anders geen schema beschikbaar is.
publish
(nieuw in v0.3.3)
def publish() -> Graph
Registreer de grafiek bij de API, zodat er query's kunnen worden uitgevoerd. Roep dit aan na Graph.prepare() (of op een willekeurige met Graph een specificatie) om het grafiekexemplaren te publiceren.
Retourneert:
-
Graph: Zelf voor methode chaining
Verhoogt:
-
ValueError: als er geen specificatie is gekoppeld of als de context ontbreekt -
RuntimeError: Als publiceren mislukt
Voorbeeld:
graph = Graph.prepare(spec)
graph.publish()
# Now the graph is queryable
graph.query("MATCH (n) RETURN n")
BuildStatus
Gegevensklasse die metagegevens van een Graph.build() bewerking bevat.
Velden
| Veld | Type | Beschrijving |
|---|---|---|
etl_result |
Any |
Resultaat van de prepare fase (uitvoering van gegevenspijplijn) |
api_result |
Optional[Dict] |
Resultaat van de publicatiefase (None als het publiceren is mislukt) |
api_error |
Optional[str] |
Foutbericht als publiceren is mislukt (None als publiceren is geslaagd) |
instance_name |
str |
Naam van het grafiekexemplaren |
status |
Optional[BuildStatusKind] |
None, "published"of "prepared" |
Bouwpaden
GraphSpecBuilder.start(...).done() → GraphSpec (spec only, no graph yet)
Graph.get(name, context) → Graph (spec=None, build_status=None)
Graph.prepare(spec) → Graph (spec=spec, build_status.status="prepared")
graph.publish() → Graph (build_status.status="published")
Graph.build(spec) → Graph (prepare + publish in one step)
Voorbeeld:
graph = Graph.build(spec)
if graph.build_status.status == "published":
print("Graph prepared and published successfully")
elif graph.build_status.status == "prepared":
print(f"Prepare succeeded but publish failed: {graph.build_status.api_error}")
elif graph.build_status.status is None:
print("Neither prepare nor publish has run")
Opbouwfuncties voor knooppunten
NodeBuilderInitial
Initiële status voor knooppuntbouwer: alleen gegevensbronmethoden beschikbaar.
Constructor
NodeBuilderInitial(alias: str, graph_builder: GraphSpecBuilder)
Opmerking: Meestal gemaakt via GraphSpecBuilder.add_node(), niet rechtstreeks geïnstantieerd.
Methoden
Opmerking
Het gebruik van onderstrepingstekens _ bij het benoemen van knooppunten, randen of eigenschappen in een aangepaste grafiek wordt niet ondersteund. Er wordt een ongeldige aanvraagfout geretourneerd wanneer onderstrepingstekens worden gebruikt.
from_table
def from_table(table_name: str, database: Optional[str] = None) -> NodeBuilderSourceSet
Stel de tabel in als gegevensbron met intelligente databaseomzetting.
Parameters:
-
table_name(str): naam van de tabel (vereist) -
database(str, optioneel): expliciete databasenaam (heeft voorrang op standaardcontext)
Retourneert:
-
NodeBuilderSourceSet: Opbouwfunctie voor verdere configuratie
Verhoogt:
-
ValueError: Als de tabel niet is gevonden of als er meerdere conflicterende tabellen zijn gevonden
Databaseomzettingsvolgorde:
- Expliciete
databaseparameter (hoogste prioriteit) - ExecutionContext.default_database
- Zoeken in alle databases (met conflictdetectie)
Voorbeeld:
builder.add_node("user").from_table("SigninLogs", database="security_db")
from_dataframe
def from_dataframe(dataframe: DataFrame) -> NodeBuilderSourceSet
Stel Spark DataFrame in als gegevensbron.
Parameters:
-
dataframe(DataFrame): Spark DataFrame
Retourneert:
-
NodeBuilderSourceSet: Opbouwfunctie voor verdere configuratie
Voorbeeld:
df = spark.read.table("users")
builder.add_node("user").from_dataframe(df)
NodeBuilderSourceSet
Opbouwfunctie voor knooppunten nadat de gegevensbron is ingesteld: configuratiemethoden beschikbaar.
Constructor
NodeBuilderSourceSet(alias: str, graph_builder: GraphSpecBuilder, source_step: DataInputETLStep)
Opmerking: Intern gemaakt door NodeBuilderInitial-bronmethoden.
Methoden
with_time_range
def with_time_range(
time_column: str,
start_time: Optional[Union[str, datetime]] = None,
end_time: Optional[Union[str, datetime]] = None,
lookback_hours: Optional[float] = None
) -> NodeBuilderSourceSet
Tijdsbereikfilter toepassen op de gegevensbron van het knooppunt.
Parameters:
-
time_column(str): kolomnaam met tijdstempelgegevens (vereist) -
start_time(str of datetime, optioneel): Begindatum ('20-10-25', '2025-10-20', of datetime-object) -
end_time(str of datetime, optioneel): Einddatum (dezelfde notaties als start_time) -
lookback_hours(float, optioneel): uren om vanaf nu terug te kijken
Retourneert:
-
NodeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als de tijdkolom niet is gevonden in het bronschema
Tijdsbereiklogica:
- Als start_time en end_time opgegeven: gebruik deze rechtstreeks
- Als lookback_hours opgegeven: end=now, start=now-lookback_hours
- Als er niets is opgegeven: geen tijdfilter
- Als begin/einde EN lookback_hours: begin/einde hebben voorrang
Voorbeeld:
# Explicit date range
builder.add_node("user").from_table("SigninLogs") \
.with_time_range(time_column="TimeGenerated", start_time="2025-01-01", end_time="2025-01-31")
# Lookback window
builder.add_node("user").from_table("SigninLogs") \
.with_time_range(time_column="TimeGenerated", lookback_hours=24)
with_label
def with_label(label: str) -> NodeBuilderSourceSet
Stel het knooppuntlabel in (wordt standaard ingesteld op alias als deze niet wordt aangeroepen).
Parameters:
-
label(str): Knooppuntlabel
Retourneert:
-
NodeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als label al is ingesteld
Voorbeeld:
builder.add_node("u").from_table("Users").with_label("user")
with_columns
def with_columns(
*columns: str,
key: str,
display: str
) -> NodeBuilderSourceSet
Kolommen configureren met de vereiste sleutel- en weergaveaanduiding.
Parameters:
-
*columns(str): op te nemen kolomnamen (ten minste één vereist) -
key(str): Kolomnaam om als sleutel te markeren (vereist, moet in kolommen staan) -
display(str): Kolomnaam die moet worden gemarkeerd als weergavewaarde (vereist, moet in kolommen staan, kan hetzelfde zijn als de sleutel)
Retourneert:
-
NodeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als validatie mislukt (dubbele kolommen, ontbrekende sleutel/weergave, enzovoort)
Opmerkingen:
Eigenschappen worden automatisch gebouwd op basis van kolomtypen
De kolom Tijdfilter wordt automatisch toegevoegd als deze is opgegeven
Eigenschapstypen worden automatisch afgeleid uit het bronschema
Zie Beperkingen
Voorbeeld:
builder.add_node("user").from_table("Users") \
.with_columns("id", "name", "email", "created_at", key="id", display="name")
add_node
def add_node(alias: str) -> NodeBuilderInitial
Voltooi dit knooppunt en begin met het bouwen van een ander knooppunt.
Parameters:
-
alias(str): alias voor het nieuwe knooppunt
Retourneert:
-
NodeBuilderInitial: Nieuwe opbouwfunctie voor knooppunten
Voorbeeld:
builder.add_node("user").from_table("Users") \
.with_columns("id", "name", key="id", display="name") \
.add_node("device")
add_edge
def add_edge(alias: str) -> EdgeBuilderInitial
Voltooi dit knooppunt en begin met het bouwen van een edge.
Parameters:
-
alias(str): alias voor de rand
Retourneert:
-
EdgeBuilderInitial: Nieuwe edge builder
Voorbeeld:
builder.add_node("user").from_table("Users") \
.with_columns("id", "name", key="id", display="name") \
.add_edge("accessed")
done
def done() -> GraphSpec
Voltooi dit knooppunt en voltooi de grafiekspecificatie.
Retourneert:
-
GraphSpec: Grafiekspecificatie voltooien
Voorbeeld:
graph_spec = builder.add_node("user").from_table("Users") \
.with_columns("id", "name", key="id", display="name") \
.done()
Edge Builders
EdgeBuilderInitial
Initiële status voor Edge Builder: alleen gegevensbronmethoden beschikbaar.
Constructor
EdgeBuilderInitial(alias: str, graph_builder: GraphSpecBuilder)
Opmerking: Meestal gemaakt via GraphSpecBuilder.add_edge(), niet rechtstreeks geïnstantieerd.
Methoden
Opmerking
Het gebruik van onderstrepingstekens _ bij het benoemen van knooppunten, randen of eigenschappen in een aangepaste grafiek wordt niet ondersteund. Er wordt een ongeldige aanvraagfout geretourneerd wanneer onderstrepingstekens worden gebruikt.
from_table
def from_table(table_name: str, database: Optional[str] = None) -> EdgeBuilderSourceSet
Stel de tabel in als gegevensbron met intelligente databaseomzetting.
Parameters:
-
table_name(str): naam van de tabel (vereist) -
database(str, optioneel): Expliciete databasenaam
Retourneert:
-
EdgeBuilderSourceSet: Opbouwfunctie voor verdere configuratie
Verhoogt:
-
ValueError: Als de tabel niet is gevonden of als er meerdere conflicterende tabellen zijn gevonden
Voorbeeld:
builder.add_edge("accessed").from_table("AccessLogs")
from_dataframe
def from_dataframe(dataframe: DataFrame) -> EdgeBuilderSourceSet
Stel Spark DataFrame in als gegevensbron.
Parameters:
-
dataframe(DataFrame): Spark DataFrame
Retourneert:
-
EdgeBuilderSourceSet: Opbouwfunctie voor verdere configuratie
Voorbeeld:
df = spark.read.table("access_logs")
builder.add_edge("accessed").from_dataframe(df)
EdgeBuilderSourceSet
Edge Builder nadat de gegevensbron is ingesteld: configuratiemethoden beschikbaar.
Constructor
EdgeBuilderSourceSet(alias: str, graph_builder: GraphSpecBuilder, source_step: DataInputETLStep)
Opmerking: Intern gemaakt door EdgeBuilderInitial-bronmethoden.
Methoden
with_label
def with_label(label: str) -> EdgeBuilderSourceSet
Stel het type/label van de randrelatie in (wordt standaard ingesteld op alias als deze niet wordt aangeroepen).
Parameters:
-
label(str): Edge-label
Retourneert:
-
EdgeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als label al is ingesteld
Voorbeeld:
builder.add_edge("rel").from_table("AccessLogs").with_label("ACCESSED")
edge_label
Opmerking
Gebruik with_label() in plaats hiervan. Deze methode wordt verwijderd in een toekomstige versie.
def edge_label(label: str) -> EdgeBuilderSourceSet
Stel het type/label van de randrelatie in (wordt standaard ingesteld op alias als deze niet wordt aangeroepen).
Parameters:
-
label(str): Edge-label
Retourneert:
-
EdgeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als label al is ingesteld
Voorbeeld:
builder.add_edge("acc").from_table("AccessLogs").edge_label("accessed")
source
def source(id_column: str, node_type: str) -> EdgeBuilderSourceSet
Stel bronknooppunt in met id-kolom en label.
Parameters:
-
id_column(str): Kolomnaam met bronknooppunt-id -
node_type(str): Bronknooppuntlabel
Retourneert:
-
EdgeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als de bron al is ingesteld
Voorbeeld:
builder.add_edge("accessed").from_table("AccessLogs") \
.source(id_column="user_id", node_type="user")
target
def target(id_column: str, node_type: str) -> EdgeBuilderSourceSet
Doelknooppunt instellen met id-kolom en label.
Parameters:
-
id_column(str): kolomnaam met doelknooppunt-id -
node_type(str): doelknooppuntlabel
Retourneert:
-
EdgeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als het doel al is ingesteld
Voorbeeld:
builder.add_edge("accessed").from_table("AccessLogs") \
.source(id_column="user_id", node_type="user") \
.target(id_column="device_id", node_type="device")
with_time_range
def with_time_range(
time_column: str,
start_time: Optional[Union[str, datetime]] = None,
end_time: Optional[Union[str, datetime]] = None,
lookback_hours: Optional[float] = None
) -> EdgeBuilderSourceSet
Tijdsbereikfilters toepassen op de gegevensbron van de edge.
Parameters:
-
time_column(str): kolomnaam met tijdstempelgegevens (vereist) -
start_time(str of datetime, optioneel): Begindatum -
end_time(str of datetime, optioneel): Einddatum -
lookback_hours(float, optioneel): uren om vanaf nu terug te kijken
Retourneert:
-
EdgeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als de tijdkolom niet is gevonden in het bronschema
Voorbeeld:
builder.add_edge("accessed").from_table("AccessLogs") \
.with_time_range(time_column="TimeGenerated", lookback_hours=48)
with_columns
def with_columns(
*columns: str,
key: str,
display: str
) -> EdgeBuilderSourceSet
Kolommen configureren met de vereiste sleutel- en weergaveaanduiding.
Parameters:
-
*columns(str): op te nemen kolomnamen (ten minste één vereist) -
key(str): Kolomnaam om als sleutel te markeren (vereist, moet in kolommen staan) -
display(str): Kolomnaam die moet worden gemarkeerd als weergavewaarde (vereist, moet in kolommen staan)
Retourneert:
-
EdgeBuilderSourceSet: Zelf voor methode chaining
Verhoogt:
-
ValueError: Als de validatie mislukt
Voorbeeld:
builder.add_edge("accessed").from_table("AccessLogs") \
.source(id_column="user_id", node_type="user") \
.target(id_column="device_id", node_type="device") \
.with_columns("id", "location", "status", key="id", display="location")
add_node
def add_node(alias: str) -> NodeBuilderInitial
Voltooi deze rand en begin met het bouwen van een knooppunt.
Parameters:
-
alias(str): alias voor het nieuwe knooppunt
Retourneert:
-
NodeBuilderInitial: Nieuwe opbouwfunctie voor knooppunten
add_edge
def add_edge(alias: str) -> EdgeBuilderInitial
Voltooi deze rand en begin met het bouwen van een andere rand.
Parameters:
-
alias(str): alias voor de nieuwe rand
Retourneert:
-
EdgeBuilderInitial: Nieuwe edge builder
Voorbeeld:
builder.add_edge("accessed").from_table("AccessLogs") \
.source(id_column="user_id", node_type="user") \
.target(id_column="device_id", node_type="device") \
.with_columns("id", "location", key="id", display="location") \
.add_edge("connected_to")
done
def done() -> GraphSpec
Voltooi deze rand en voltooi de grafiekspecificatie.
Retourneert:
-
GraphSpec: Grafiekspecificatie voltooien
Schemaklassen
GraphDefinitionReference
Verwijzing naar een grafiekdefinitie met naam en versie.
Constructor
GraphDefinitionReference(
fully_qualified_name: str,
version: str
)
Parameters:
-
fully_qualified_name(str): Volledig gekwalificeerde naam van de grafiek waarnaar wordt verwezen -
version(str): versie van de grafiek waarnaar wordt verwezen
Verhoogt:
-
ValueError: Als fully_qualified_name of versie leeg is
Methoden
to_dict
def to_dict() -> Dict[str, Any]
Serialiseren naar woordenlijst.
Retourneert:
-
Dict[str, Any]: Geserialiseerde verwijzing
Eigenschap
Eigenschapsdefinitie met typeveilige interface.
Constructor
Property(
name: str,
property_type: PropertyType,
is_non_null: bool = False,
description: str = "",
is_key: bool = False,
is_display_value: bool = False,
is_internal: bool = False
)
Parameters:
-
name(str): Eigenschapsnaam -
property_type(PropertyType): Gegevenstype eigenschap -
is_non_null(bool, default=False): of de eigenschap vereist is -
description(str, default=""): Beschrijving van eigenschap -
is_key(bool, default=False): of de eigenschap een sleutel is -
is_display_value(bool, default=False): of de eigenschap weergavewaarde is -
is_internal(bool, default=False): of de eigenschap intern is
Verhoogt:
-
ValueError: als de naam leeg is of de validatie mislukt
Klassemethoden
key
@classmethod
Property.key(
name: str,
property_type: PropertyType,
description: str = "",
is_non_null: bool = False
) -> Property
Maak een sleuteleigenschap met algemene instellingen (is_key=True, is_display_value=True).
display
@classmethod
Property.display(
name: str,
property_type: PropertyType,
description: str = "",
is_non_null: bool = False
) -> Property
Maak een eigenschap weergavewaarde (is_display_value=Waar).
Methoden
describe
def describe(text: str) -> Property
Voeg de beschrijving vloeiend toe.
Parameters:
-
text(str): Beschrijvingstekst
Retourneert:
-
Property: Zelf voor methode chaining
to_dict
def to_dict() -> Dict[str, Any]
De eigenschap serialiseren naar woordenlijst met @-voorvoegsel annotatiesleutels.
Retourneert:
-
Dict[str, Any]: Geserialiseerde eigenschap
to_gql
def to_gql() -> str
GQL-eigenschapsdefinitie genereren.
Retourneert:
-
str: GQL-tekenreeksweergave
EdgeNode
Verwijzing naar knooppunten die worden gebruikt in edge-definities.
Constructor
EdgeNode(
alias: Optional[str] = None,
labels: List[str] = []
)
Parameters:
-
alias(str, optioneel): Knooppuntalias (automatisch ingesteld op eerste label als geen of leeg) -
labels(Lijst[str]): Knooppuntlabels (ten minste één vereist)
Verhoogt:
-
ValueError: Als de lijst met labels leeg is -
TypeError: Als labels geen tekenreeksen zijn
Automatische mutatie:
- Als alias Geen of leeg is, wordt deze ingesteld op het eerste label
Methoden
to_dict
def to_dict() -> Dict[str, Any]
Serialiseren naar woordenlijst.
Retourneert:
-
Dict[str, Any]: Verwijzing naar geserialiseerde edge-knooppunten
Knooppunt
Knooppuntdefinitie met typeveilige interface.
Constructor
Node(
alias: str = "",
labels: List[str] = [],
implies_labels: List[str] = [],
properties: List[Property] = [],
description: str = "",
entity_group: str = "",
dynamic_labels: bool = False,
abstract_edge_aliases: bool = False
)
Parameters:
-
alias(str, default=""): Knooppuntalias (automatisch ingesteld op eerste label indien leeg) -
labels(Lijst[str]): Knooppuntlabels (ten minste één vereist) -
implies_labels(List[str], default=[]): Impliciete labels -
properties(List[Property], default=[]): Knooppunteigenschappen -
description(str, default=""): Knooppuntbeschrijving -
entity_group(str, default=""): Naam van entiteitsgroep -
dynamic_labels(bool, default=False): of het knooppunt dynamische labels heeft -
abstract_edge_aliases(bool, default=False): of knooppunt abstracte edge-aliassen gebruikt
Verhoogt:
-
ValueError: Als validatie mislukt (geen labels, geen sleuteleigenschap, geen weergave-eigenschap, enzovoort)
Automatische mutatie:
- Als de alias leeg is, wordt deze ingesteld op het eerste label
- Als entity_group leeg is, wordt deze ingesteld op het primaire label
Methoden
get_primary_label
def get_primary_label() -> Optional[str]
Haal het primaire (eerste) label op.
Retourneert:
-
strofNone: Primair label of Geen als er geen labels zijn
get_entity_group_name
def get_entity_group_name() -> str
Haal de naam van de entiteitsgroep op of terugval naar het primaire label.
Retourneert:
-
str: Naam van entiteitsgroep
get_primary_key_property_name
def get_primary_key_property_name() -> Optional[str]
Haal de naam op van de primaire sleuteleigenschap.
Retourneert:
-
strofNone: naam van primaire sleuteleigenschap
get_properties
def get_properties() -> Dict[str, Property]
Eigenschappen ophalen als een woordenlijst voor eenvoudige toegang.
Retourneert:
-
Dict[str, Property]: Eigenschappen op naam
get_property
def get_property(name: str) -> Optional[Property]
Een specifieke eigenschap ophalen op naam.
Parameters:
-
name(str): Eigenschapsnaam
Retourneert:
-
PropertyofNone: eigenschap indien gevonden
add_property
def add_property(prop: Property) -> None
Voeg een eigenschap toe aan dit knooppunt.
Parameters:
-
prop(Eigenschap): eigenschap om toe te voegen
Verhoogt:
-
ValueError: Als de eigenschapsnaam dubbel is
is_dynamically_labeled
def is_dynamically_labeled() -> bool
Controleer of het knooppunt dynamische labels heeft.
Retourneert:
-
bool: Waar als dynamische labels zijn ingeschakeld
is_abstract_edge_node_aliases
def is_abstract_edge_node_aliases() -> bool
Controleer of het knooppunt abstracte edge-knooppuntaliassen gebruikt.
Retourneert:
-
bool: Waar als abstracte edge-aliassen zijn ingeschakeld
describe
def describe(text: str) -> Node
Voeg de beschrijving vloeiend toe.
Parameters:
-
text(str): Beschrijvingstekst
Retourneert:
-
Node: Zelf voor methode chaining
to_dict
def to_dict() -> Dict[str, Any]
Serialiseer knooppunt naar woordenlijst.
Retourneert:
-
Dict[str, Any]: Geserialiseerd knooppunt
to_gql
def to_gql() -> str
Genereer GQL-knooppuntdefinitie.
Retourneert:
-
str: GQL-tekenreeksweergave
Verhoogt:
-
ValueError: Als het knooppunt geen vereiste velden voor GQL bevat
Klassemethoden
create
@classmethod
Node.create(
alias: str,
labels: List[str],
properties: List[Property],
description: str = "",
entity_group: str = "",
**kwargs
) -> Node
Maak een knooppunt met alle vereiste velden.
Parameters:
-
alias(str): Knooppuntalias -
labels(Lijst[str]): Knooppuntlabels -
properties(List[Property]): Knooppunteigenschappen -
description(str, default=""): Knooppuntbeschrijving -
entity_group(str, default=""): Naam van entiteitsgroep
Retourneert:
-
Node: Nieuw knooppuntexemplaren
Rand
Edge-definitie met typeveilige interface.
Constructor
Edge(
relationship_type: str,
source_node_label: str,
target_node_label: str,
direction: EdgeDirection = EdgeDirection.DIRECTED_RIGHT,
properties: List[Property] = [],
description: str = "",
entity_group: str = "",
dynamic_type: bool = False
)
Parameters:
-
relationship_type(str): Edge-relatietype (bijvoorbeeld 'VOLGT', 'EIGEN') -
source_node_label(str): Bronknooppuntlabel -
target_node_label(str): doelknooppuntlabel -
direction(EdgeDirection, default=DIRECTED_RIGHT): Edge direction -
properties(List[Property], default=[]): Edge-eigenschappen -
description(str, default=""): Edge-beschrijving -
entity_group(str, default=""): Naam van entiteitsgroep -
dynamic_type(bool, default=False): of edge dynamisch type heeft
Verhoogt:
-
ValueError: Als de validatie mislukt
Automatische mutatie:
-
labelslijst wordt automatisch ingevuld met[relationship_type] - Als entity_group leeg is, wordt deze ingesteld op relationship_type
Eigenschappen
edge_type
def edge_type() -> str
Achterwaartse compatibiliteitsalias voor relationship_type.
Retourneert:
-
str: Relatietype
Methoden
get_entity_group_name
def get_entity_group_name() -> str
Haal de naam van de entiteitsgroep op of terugval op relatietype.
Retourneert:
-
str: Naam van entiteitsgroep
is_dynamic_type
def is_dynamic_type() -> bool
Controleer of edge een dynamisch type heeft.
Retourneert:
-
bool: Waar als dynamisch type
add_property
def add_property(edge_property: Property) -> None
Voeg een eigenschap toe aan deze rand.
Parameters:
-
edge_property(Eigenschap): eigenschap om toe te voegen
describe
def describe(text: str) -> Edge
Voeg de beschrijving vloeiend toe.
Parameters:
-
text(str): Beschrijvingstekst
Retourneert:
-
Edge: Zelf voor methode chaining
to_dict
def to_dict() -> Dict[str, Any]
Edge serialiseren naar woordenlijst.
Retourneert:
-
Dict[str, Any]: Geserialiseerde rand
to_gql
def to_gql() -> str
Genereer GQL edge-definitie.
Retourneert:
-
str: GQL-tekenreeksweergave
Klassemethoden
create
Edge.create(
relationship_type: str,
source_node_label: str,
target_node_label: str,
properties: List[Property] = None,
description: str = "",
entity_group: str = "",
**kwargs
) -> Edge
Maak een rand met alle vereiste velden.
Parameters:
-
relationship_type(str): Type edge-relatie -
source_node_label(str): Bronknooppuntlabel -
target_node_label(str): doelknooppuntlabel -
properties(List[Property], optioneel): Edge-eigenschappen -
description(str, default=""): Edge-beschrijving -
entity_group(str, default=""): Naam van entiteitsgroep
Retourneert:
-
Edge: Nieuw edge-exemplaar
GraphSchema
Grafiekschemadefinitie met typeveilige interface.
Constructor
GraphSchema(
name: str,
nodes: List[Node] = [],
edges: List[Edge] = [],
base_graphs: List[GraphSchema] = [],
description: str = "",
version: str = "1.0",
fully_qualified_name: str = "",
namespace: str = ""
)
Parameters:
-
name(str): Grafiekschemanaam -
nodes(List[Node], default=[]): Knooppuntdefinities -
edges(List[Edge], default=[]): Edge-definities -
base_graphs(List[GraphSchema], default=[]): Basisgrafiekschema's -
description(str, default=""): Schemabeschrijving -
version(str, default="1.0"): Schemaversie -
fully_qualified_name(str, default=""): Volledig gekwalificeerde naam -
namespace(str, default=""): naamruimte
Verhoogt:
-
ValueError: als de validatie mislukt (dubbele aliassen, randen verwijzen naar niet-bestaande knooppunten, enzovoort)
Methoden
get_fully_qualified_name
def get_fully_qualified_name() -> str
Volledig gekwalificeerde naam ophalen.
Retourneert:
-
str: Volledig gekwalificeerde naam
get_namespace
def get_namespace() -> str
Haal de naamruimte op van volledig gekwalificeerde naam of retourneer standaard.
Retourneert:
-
str:Naamruimte
get_version
def get_version() -> str
Versie ophalen.
Retourneert:
-
str: Versietekenreeks
get_node
def get_node(label_or_alias: str) -> Optional[Node]
Knooppunt ophalen op label of alias.
Parameters:
-
label_or_alias(str): Knooppuntlabel of alias
Retourneert:
-
NodeofNone: Knooppunt indien gevonden
get_edge
def get_edge(name: str) -> Optional[Edge]
Edge ophalen op naam/type.
Parameters:
-
name(str): Type edge-relatie
Retourneert:
-
EdgeofNone: Edge indien gevonden
add_node
def add_node(node: Node) -> None
Voeg een knooppunt toe aan deze grafiek.
Parameters:
-
node(Knooppunt): toe te voegen knooppunt
Verhoogt:
-
ValueError: Als de knooppuntalias dubbel is
add_edge
def add_edge(edge: Edge) -> None
Voeg een rand toe aan deze grafiek.
Parameters:
-
edge(Edge): Edge om toe te voegen
Verhoogt:
-
ValueError: Als het randtype dubbel is
include_graph
def include_graph(fully_qualified_name: str, version: str) -> GraphSchema
Voeg een grafiektoevoeging toe (Fluent API).
Parameters:
-
fully_qualified_name(str): Volledig gekwalificeerde naam van grafiek om op te nemen -
version(str): versie van grafiek die moet worden opgenomen
Retourneert:
-
GraphSchema: Zelf voor methode chaining
get_included_graph_references
def get_included_graph_references() -> List[GraphDefinitionReference]
Lijst met opgenomen grafiekverwijzingen ophalen.
Retourneert:
-
List[GraphDefinitionReference]: Lijst met grafiekdefinitieverwijzingen
describe
def describe(text: str) -> GraphSchema
Voeg de beschrijving vloeiend toe.
Parameters:
-
text(str): Beschrijvingstekst
Retourneert:
-
GraphSchema: Zelf voor methode chaining
to_dict
def to_dict() -> Dict[str, Any]
Schema serialiseren naar woordenlijst.
Retourneert:
-
Dict[str, Any]: Geserialiseerd schema
to_json
def to_json(indent: int = 2) -> str
JSON-weergave genereren.
Parameters:
-
indent(int, default=2): JSON-inspringingsniveau
Retourneert:
-
str: JSON-tekenreeks
to_gql
def to_gql() -> str
GQL-schemadefinitie genereren.
Retourneert:
-
str: GQL-tekenreeksweergave
Klassemethoden
create
@classmethod
GraphSchema.create(
name: str,
nodes: List[Node] = None,
edges: List[Edge] = None,
description: str = "",
version: str = "1.0",
**kwargs
) -> GraphSchema
Maak een grafiekschema met alle vereiste velden.
Parameters:
-
name(str): Grafiekschemanaam -
nodes(Lijst[Knooppunt], optioneel): Knooppuntdefinities -
edges(List[Edge], optioneel): Edge-definities -
description(str, default=""): Schemabeschrijving -
version(str, default="1.0"): Schemaversie
Retourneert:
-
GraphSchema: Nieuw grafiekschema-exemplaar
Queryinvoerklassen
Gegevensklassen die invoerparameters vertegenwoordigen voor vooraf gedefinieerde grafiekquery's.
Opmerking
Het rechtstreeks doorgeven van QueryInput objecten aan Graph querymethoden is afgeschaft en wordt in toekomstige versies verwijderd.
Gebruik in plaats hiervan trefwoordargumenten. De Graph methoden (reachability, k_hop, blast_radius, centrality, ) rankedaccepteren alle parameters als trefwoordargumenten en maken de invoerobjecten intern. Deze klassen blijven voorlopig in de codebasis, maar mogen niet worden gebruikt in nieuwe code.
QueryInputBase
Basisklasse voor alle queryinvoerparameters.
Methoden
to_json_payload
def to_json_payload() -> Dict[str, Any]
Converteer de invoerparameters naar een woordenlijst voor API-verzending.
Retourneert:
-
Dict[str, Any]: Woordenlijstweergave van de invoerparameters
validate
def validate() -> None
Valideer de invoerparameters.
Verhoogt:
-
ValueError: Als de invoerparameters ongeldig zijn
ReachabilityQueryInput
Invoerparameters voor een bereikbaarheidsquery tussen bron- en doelknooppunten.
Neemt over van ReachabilityQueryInputBase waarvan wordt overgenomen van QueryInputBase.
Velden
| Veld | Type | Standaard | Omschrijving |
|---|---|---|---|
source_property_value |
str |
(vereist) | Overeenkomende waarde voor de broneigenschap |
target_property_value |
str |
(vereist) | Overeenkomende waarde voor de doeleigenschap |
source_property |
Optional[str] |
None |
Eigenschapsnaam om bronknooppunten te filteren |
participating_source_node_labels |
Optional[List[str]] |
None |
Knooppuntlabels om te beschouwen als bronknooppunten |
target_property |
Optional[str] |
None |
Eigenschapsnaam om doelknooppunten te filteren |
participating_target_node_labels |
Optional[List[str]] |
None |
Knooppuntlabels om als doelknooppunten te beschouwen |
participating_edge_labels |
Optional[List[str]] |
None |
Edge-labels die in het pad moeten worden doorlopen |
is_directional |
Optional[bool] |
True |
Of de randen richting hebben |
min_hop_count |
Optional[int] |
1 |
Minimumaantal hops in het pad |
max_hop_count |
Optional[int] |
4 |
Maximum aantal hops in het pad |
shortest_path |
Optional[bool] |
False |
Alleen het kortste pad zoeken |
max_results |
Optional[int] |
500 |
Maximum aantal resultaten dat moet worden geretourneerd |
Validatie:
-
source_property_valueis vereist -
target_property_valueis vereist
Voorbeeld:
# Preferred: keyword arguments (no import needed)
result = graph.reachability(
source_property="UserId",
source_property_value="user123",
target_property="DeviceId",
target_property_value="device456",
participating_edge_labels=["accessed", "connected_to"],
shortest_path=True
)
# DEPRECATED — will be removed in a future version. Use keyword arguments above.
from sentinel_graph.builders.query_input import ReachabilityQueryInput
result = graph.reachability(query_input=ReachabilityQueryInput(
source_property_value="user123",
target_property_value="device456"
))
K_HopQueryInput
Invoerparameters voor een k-hopquery van een bepaald bronknooppunt.
Neemt over van ReachabilityQueryInputBase.
Neemt alle velden over van ReachabilityQueryInput.
Validatie:
- Ten minste één van
source_property_valueoftarget_property_valuemoet worden opgegeven
Voorbeeld:
# Preferred: keyword arguments
result = graph.k_hop(
source_property_value="user123",
max_hop_count=3,
participating_edge_labels=["accessed"]
)
# DEPRECATED — will be removed in a future version. Use keyword arguments above.
from sentinel_graph.builders.query_input import K_HopQueryInput
result = graph.k_hop(query_input=K_HopQueryInput(source_property_value="user123"))
BlastRadiusQueryInput
Invoerparameters voor een straalquery van bron naar doelknooppunten.
Neemt over van ReachabilityQueryInputBase.
Neemt alle velden over van ReachabilityQueryInput, met de volgende vereiste velden:
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
source_property_value |
str |
Ja | Waarde voor het identificeren van het bronknooppunt |
target_property_value |
str |
Ja | Waarde voor het identificeren van het doelknooppunt |
Validatie:
-
source_property_valueis vereist -
target_property_valueis vereist
Voorbeeld:
# Preferred: keyword arguments
result = graph.blast_radius(
source_property_value="user123",
target_property_value="device456",
participating_edge_labels=["accessed", "connected_to"]
)
# DEPRECATED — will be removed in a future version. Use keyword arguments above.
from sentinel_graph.builders.query_input import BlastRadiusQueryInput
result = graph.blast_radius(query_input=BlastRadiusQueryInput(
source_property_value="user123",
target_property_value="device456"
))
CentralityQueryInput
Invoerparameters voor een centrale analysequery.
Neemt over van QueryInputBase.
CentralityType Enum
| Waarde | Beschrijving |
|---|---|
CentralityType.Node |
Centraliteit van rekenknooppunt |
CentralityType.Edge |
Centraalheid van compute edge |
Velden
| Veld | Type | Standaard | Omschrijving |
|---|---|---|---|
threshold |
Optional[int] |
3 |
Minimale centraliteitsscore om rekening mee te houden |
centrality_type |
CentralityType |
CentralityType.Node |
Type centrale plaats om te berekenen |
max_paths |
Optional[int] |
1000000 |
Maximum aantal paden om rekening mee te houden (0 = alle) |
participating_source_node_labels |
Optional[List[str]] |
None |
Bronknooppuntlabels |
participating_target_node_labels |
Optional[List[str]] |
None |
Doelknooppuntlabels |
participating_edge_labels |
Optional[List[str]] |
None |
Edge-labels om door te bladeren |
is_directional |
Optional[bool] |
True |
Of randen richting hebben |
min_hop_count |
Optional[int] |
1 |
Minimale hops |
max_hop_count |
Optional[int] |
4 |
Maximum aantal hops |
shortest_path |
Optional[bool] |
False |
Alleen de kortste paden |
max_results |
Optional[int] |
500 |
Maximum aantal resultaten |
Voorbeeld:
# Preferred: keyword arguments (works for all centrality types)
result = graph.centrality(
centrality_type=CentralityType.Edge, # or CentralityType.Node (default)
participating_edge_labels=["accessed", "connected_to"],
threshold=5,
max_results=100
)
# DEPRECATED — will be removed in a future version. Use keyword arguments above.
from sentinel_graph.builders.query_input import CentralityQueryInput, CentralityType
result = graph.centrality(query_input=CentralityQueryInput(
centrality_type=CentralityType.Edge,
participating_edge_labels=["accessed"]
))
RankedQueryInput
Invoerparameters voor een geclassificeerde analysequery.
Neemt over van QueryInputBase.
Velden
| Veld | Type | Standaard | Omschrijving |
|---|---|---|---|
rank_property_name |
str |
(vereist) | Eigenschapsnaam voor classificatiepaden |
threshold |
Optional[int] |
0 |
Alleen paden retourneren met gewichten boven deze waarde |
max_paths |
Optional[int] |
1000000 |
Maximum aantal paden om rekening mee te houden (0 = alle) |
decay_factor |
Optional[float] |
1 |
Hoeveel elke grafiekstap de rangschikking vermindert (2 = halveert elke stap) |
is_directional |
Optional[bool] |
True |
Of randen richting hebben |
min_hop_count |
Optional[int] |
1 |
Minimale hops |
max_hop_count |
Optional[int] |
4 |
Maximum aantal hops |
shortest_path |
Optional[bool] |
False |
Alleen de kortste paden |
max_results |
Optional[int] |
500 |
Maximum aantal resultaten |
Voorbeeld:
# Preferred: keyword arguments
result = graph.ranked(
rank_property_name="risk_score",
threshold=5,
decay_factor=2,
max_results=50
)
# DEPRECATED — will be removed in a future version. Use keyword arguments above.
from sentinel_graph.builders.query_input import RankedQueryInput
result = graph.ranked(query_input=RankedQueryInput(
rank_property_name="risk_score",
threshold=5
))
Queryresultaten
QueryResult
Resultaat van een grafiekquery met luie DataFrame-toegang.
Constructor
QueryResult(raw_response: Dict[str, Any], graph: Graph)
Parameters:
-
raw_response(Dict[str, Any]): Onbewerkte API-antwoordwoordenlijst -
graph(Graph): verwijzing naar bovenliggende Graph
Opmerking: Meestal gemaakt door Graph.query(), niet rechtstreeks geïnstantieerd.
Methoden
to_dataframe
def to_dataframe() -> DataFrame
Converteert het queryresultaat naar een Spark DataFrame.
Retourneert:
-
DataFrame: Queryresultaat als Spark DataFrame
Verhoogt:
-
ValueError: Als de conversie mislukt
Voorbeeld:
result = graph.query("MATCH (u:user) RETURN u")
df = result.to_dataframe()
df.show()
get_raw_data
def get_raw_data() -> Dict[str, Any]
Haal de sectie RawData op uit het antwoord.
Retourneert:
-
Dict[str, Any]: Woordenlijst met onbewerkte metagegevens of leeg dicteren als deze niet aanwezig is
Voorbeeld:
result = graph.query("MATCH (u:user) RETURN u")
metadata = result.get_raw_data()
show
def show(format: str = "visual") -> None
Queryresultaten weergeven in verschillende indelingen.
Parameters:
-
format(str, default="visual"): uitvoerindeling-
"table": Volledige DataFrame-tabellen (alle kolommen) -
"visual": Interactieve grafiekvisualisatie met VSC-invoegtoepassing -
"all": Alle indelingen weergeven
-
Verhoogt:
-
ValueError: Als de indeling niet een van de ondersteunde waarden is
Voorbeeld:
result = graph.query("MATCH (u:user)-[r:accessed]->(d:device) RETURN u, r, d")
result.show() # Visual by default
result.show(format="table") # Table format
Volledig voorbeeld (aanbevolen : v0.3+)
# 0. Imports
from sentinel_graph import GraphSpecBuilder, Graph
# 1. Define graph specification
spec = (
GraphSpecBuilder.start()
.add_node("User")
.from_dataframe(user_nodes) # native Spark DF from groupBy → no .df
.with_columns(
"UserId", "UserDisplayName", "UserPrincipalName",
"DistinctLocationCount", "DistinctIPCount", "DistinctAppCount",
"TotalSignIns", "RiskySignInCount", "ImpossibleTravelFlag",
key="UserId", display="UserDisplayName"
)
.add_node("IPAddress")
.from_dataframe(ip_nodes) # native Spark DF from groupBy → no .df
.with_columns(
"IPAddress", "UniqueUsers", "UniqueLocations",
"SignInCount", "RiskySignInCount", "SharedIPFlag",
key="IPAddress", display="IPAddress"
)
.add_edge("UsedIP")
.from_dataframe(edge_used_ip) # native Spark DF → no .df
.source(id_column="UserId", node_type="User")
.target(id_column="IPAddress", node_type="IPAddress")
.with_columns(
"SignInCount", "FirstSeen", "LastSeen", "EdgeKey",
key="EdgeKey", display="EdgeKey"
)
.done()
)
# 2. Inspect schema before building (GraphSpec owns this)
spec.show_schema()
# 3. Build: prepares data + publishes graph → returns Graph
graph = Graph.build(spec)
print(f"Build status: {graph.build_status.status}")
# 4. Query the graph (query lives on Graph)
result = graph.query("MATCH (u:user)-[used:UsedIP]->(ip:IPAddress) RETURN * LIMIT 100")
result.show()
# 5. Access data via delegation
df = result.to_dataframe()
df.printSchema()
# 6. Graph algorithms
gf = graph.to_graphframe()
pagerank_result = gf.pageRank(resetProbability=0.15, maxIter=10)
pagerank_result.vertices.select("id", "pagerank").show()
# 7. Fetch an existing graph (no spec needed)
graph = Graph.get("my_existing_graph", context=context)
graph.query("MATCH (n) RETURN n LIMIT 10").show()
Notities over ontwerppatronen
Fluent-API
Alle opbouwfuncties ondersteunen methodekoppeling voor leesbare, declaratieve grafiekdefinities:
builder.add_node("user") \
.from_table("Users") \
.with_columns("id", "name", key="id", display="name") \
.add_edge("follows")
Union-schema's
Meerdere randen met dezelfde alias worden automatisch samengevoegd met samengevoegde eigenschappen:
# Both edges use alias "sign_in" - they will be merged into one schema edge
builder.add_edge("sign_in") \
.from_table("AzureSignins") \
.source(id_column="UserId", node_type="AZuser") \
.target(id_column="DeviceId", node_type="device")
builder.add_edge("sign_in") \
.from_table("EntraSignins") \
.source(id_column="UserId", node_type="EntraUser") \
.target(id_column="DeviceId", node_type="device")
Automatische configuratie
Veel velden hebben verstandige standaardwaarden:
- Knooppunt-/edge-labels zijn standaard ingesteld op hun aliassen
- Eigenschappen worden automatisch afgeleid uit bronschema's
- Entiteitsgroepen zijn standaard ingesteld op primaire labels/relatietypen
Luie evaluatie
DataFrames en resources worden lui geladen en in de cache opgeslagen:
-
graph_spec.nodesengraph_spec.edgesworden geladen bij de eerste toegang - Queryresultaten maken alleen DataFrames wanneer daarom wordt gevraagd