Kategorien:

Datenmetrikfunktionen

REFERENTIAL_INTEGRITY_COUNT (System-Datenmetrikfunktion)

Gibt die Anzahl der Zeilen in der Quelltabelle zurück, bei denen für den Spaltenwert keine entsprechende Übereinstimmung in der referenzierten Tabelle vorhanden ist. Diese nicht übereinstimmenden Zeilen werden als verwaiste Zeilen bezeichnet und stellen Verstöße gegen die referenzielle Integrität dar.

Wenn Sie mehr als ein Spaltenargument angeben, wird die Anzahl der Zeilen zurückgegeben, in denen die Kombination der angegebenen Quellspalten mit keiner Zeile in der referenzierten Tabelle basierend auf den entsprechenden Referenzspalten übereinstimmt.

Syntax

SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT ON ( <column>, TABLE(<ref_table>(<ref_column>)) )

Für zusammengesetzte (mehrspaltige) Schlüssel:

SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT ON (
  <column1>, <column2>, ...,
  TABLE(<ref_table>(<ref_column1>, <ref_column2>, ...))
)

Argumente

column

Gibt eine oder mehrere Spalten in der Quelltabelle an, deren Werte auf referenzielle Integrität mit der referenzierten Tabelle überprüft werden. Wenn mehrere Quellspalten angegeben werden, bilden sie einen zusammengesetzten Schlüssel.

TABLE(ref_table(ref_column))

Gibt die referenzierte (übergeordnete) Tabelle und Spalte(n) an, anhand derer unter Verwendung der TABLE(...)-Syntax validiert werden soll:

  • ref_table – Der vollqualifizierte Name der referenzierten Tabelle (z. B. my_db.my_schema.my_table).

  • ref_column – Eine oder mehrere Spalten in der referenzierten Tabelle, die den Quellspalten entsprechen.

Die Anzahl und Reihenfolge der Quellspalten muss mit der Anzahl und Reihenfolge der Referenzspalten übereinstimmen.

Zulässige Datentypen

Die in den Argumenten column und ref_column angegebenen Spalten können die folgenden Datentypen enthalten:

  • DATE

  • FLOAT

  • NUMBER

  • TIMESTAMP_LTZ

  • TIMESTAMP_NTZ

  • TIMESTAMP_TZ

  • VARCHAR

Rückgabewerte

Die Funktion gibt einen NUMBER-Wert zurück.

  • Ein Rückgabewert von 0 bedeutet, dass jede Zeile in der Quelltabelle eine entsprechende Übereinstimmung in der referenzierten Tabelle hat. Die referenzielle Integrität ist vollständig erfüllt.

  • Ein Rückgabewert von N > 0 bedeutet, dass es N Zeilen in der Quelltabelle gibt, für die in der referenzierten Tabelle keine übereinstimmende Zeile vorhanden ist. Diese N Zeilen gelten als verwaist.

Nutzungshinweise

  • Sie können diese Funktion nicht direkt aufrufen. Wie Sie die Funktion mit einer Tabelle oder Ansicht verknüpfen, sodass sie in regelmäßigen Abständen ausgeführt wird, erfahren Sie unter Verknüpfen einer DMF. Sie können die SYSTEM$DATA_METRIC_SCAN-Funktion verwenden, um die REFERENTIAL_INTEGRITY_COUNT-Funktion für eine Tabelle auszuführen, ohne sie zu verknüpfen.

  • NULL-Werte in der Quellspalte werden nicht als Verstöße angesehen. Zeilen, in denen der Wert der Quellspalte NULL ist, sind von der Prüfung der referenziellen Integrität ausgeschlossen. Dies folgt der Standard-Einschränkungssemantik für Fremdschlüssel (FK), wobei ein NULL-Fremdschlüssel als gültig angesehen wird. Wenn Sie NULL-Werte in der Quellspalte überwachen müssen, verwenden Sie :doc:`NULL_COUNT</sql-reference/functions/dmf_null_count>`DMF zusätzlich zu dieser Funktion.

  • Die Anzahl und Reihenfolge der Quellspalten muss mit den Referenzspalten übereinstimmen. Dies wird validiert, wenn Sie die Funktion zuordnen.

  • Durch das Umbenennen einer Spalte, die in der REFERENTIAL_INTEGRITY_COUNT-Funktion angegeben ist, wird die Zuordnung zwischen der Funktion und der Tabelle oder Ansicht der Spalte unterbrochen. Wenn Sie die Spalte umbenennen, müssen Sie die Funktion neu zu der Tabelle oder Ansicht zuordnen.

  • Sie können diese Funktion nicht mehr als einmal mit derselben Kombination aus Spalte und Referenztabelle verknüpfen.

Beispiele

Einspaltige referenzielle Integritätsprüfung

Verknüpfen Sie die Funktion mit der Tabelle salesorders, sodass sie die Anzahl der Zeilen zurück, in denen``sp_id`` nicht in der sp_id-Spalte der Tabelle salespeople existiert:

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)));

Überprüfung der referenziellen Integrität von zusammengesetzten Schlüsseln

Verknüpfen Sie die Funktion mit der Tabelle order_items, sodass sie die Anzahl der Zeilen zurückgibt, in denen die Kombination aus order_id und product_id keine übereinstimmende Zeile in der Tabelle order_products hat:

ALTER TABLE order_items
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (order_id, product_id, TABLE(my_db.sch1.order_products(order_id, product_id)));

Löschen der Verknüpfung

Entfernen Sie die referenzielle Integritätsprüfung aus der Tabelle salesorders:

ALTER TABLE salesorders
  DROP DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)));

Verknüpfen mit einer Erwartung

Verknüpfen Sie die Funktion und definieren Sie eine Erwartung, dass die referenzielle Integrität vollständig erfüllt sein sollte (null verwaiste Zeilen):

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)))
    EXPECTATION no_orphans (VALUE = 0);

Eine Erwartung zu einer bestehenden Zuordnung hinzufügen

Wenn DMF bereits zugeordnet ist, fügen Sie mit MODIFY eine Erwartung hinzu:

ALTER TABLE salesorders
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)))
    ADD EXPECTATION no_orphans (VALUE = 0);