Στήλες IDENTITY στο Fabric αποθήκη δεδομένων

Ισχύει για:✅ Warehouse στο Microsoft Fabric

Στο Fabric αποθήκη δεδομένων, IDENTITY οι στήλες δημιουργούν αυτόματα νέες αριθμητικές τιμές όταν εισάγετε νέες γραμμές σε έναν πίνακα.

Τα υποκατάστατα κλειδιά είναι αναγνωριστικά που χρησιμοποιούνται στην αποθήκευση δεδομένων για τη μοναδική διάκριση σειρών, ανεξάρτητα από τα φυσικά τους κλειδιά. Αυτό το άρθρο εξηγεί πώς μπορείτε να δημιουργήσετε και να διαχειριστείτε υποκατάστατα κλειδιά χρησιμοποιώντας IDENTITYτο , συμπεριλαμβανομένης της εισαγωγής ρητών τιμών και της επανασποράς.

Γιατί να χρησιμοποιήσετε μια στήλη ΤΑΥΤΟΤΗΤΑ;

IDENTITY Οι στήλες εξαλείφουν τη μη αυτόματη αντιστοίχιση κλειδιών, μειώνοντας τον κίνδυνο σφαλμάτων και απλοποιώντας την απορρόφηση δεδομένων. Οι μοναδικές τιμές που διαχειρίζεται το σύστημα είναι ιδανικές ως υποκατάστατα κλειδιά και πρωτεύοντα κλειδιά. Σε σύγκριση με τις μη αυτόματες προσεγγίσεις, οι στήλες προσφέρουν καλύτερη απόδοση, IDENTITY επειδή τα μοναδικά κλειδιά δημιουργούνται αυτόματα χωρίς επιπλέον λογική ερωτήματος.

Ο τύπος δεδομένων bigint , που απαιτείται για IDENTITY στήλες, μπορεί να αποθηκεύσει έως και 9,223,372,036,854,775,807 θετικές ακέραιες τιμές. Αυτό το εύρος διασφαλίζει ότι κάθε γραμμή λαμβάνει μια μοναδική τιμή στη στήλη της IDENTITY καθ' όλη τη διάρκεια ζωής του πίνακα.

Για ένα σχέδιο μετεγκατάστασης δεδομένων με υποκατάστατα κλειδιά από άλλες πλατφόρμες βάσεων δεδομένων, ανατρέξτε στο θέμα Μετεγκατάσταση στηλών IDENTITY στο Fabric αποθήκη δεδομένων.

Σύνταξη

Για να ορίσετε μια IDENTITY στήλη στο Fabric αποθήκη δεδομένων, χρησιμοποιήστε την IDENTITY ιδιότητα στον ορισμό στήλης:

CREATE TABLE { warehouse_name.schema_name.table_name | schema_name.table_name | table_name } (
    [ column_name ] BIGINT IDENTITY ,
    [ ,...n ]
    -- Other columns here
);

Η στήλη ταυτότητας δεν χρειάζεται να είναι η πρώτη στήλη στον ορισμό του πίνακα.

Πώς λειτουργούν οι στήλες IDENTITY

Στο Fabric αποθήκη δεδομένων, δεν μπορείτε να καθορίσετε μια προσαρμοσμένη αρχική τιμή ή αύξηση. Το σύστημα διαχειρίζεται τις αξίες εσωτερικά για να εξασφαλίσει τη μοναδικότητα. IDENTITY Οι στήλες παράγουν πάντα θετικές ακέραιες τιμές. Κάθε νέα σειρά λαμβάνει μια νέα τιμή και η μοναδικότητα είναι εγγυημένη για όσο διάστημα υπάρχει ο πίνακας. Μόλις χρησιμοποιηθεί μια τιμή, IDENTITY δεν χρησιμοποιεί ξανά την ίδια τιμή. Μπορεί να εμφανιστούν κενά στις τιμές που παράγει η IDENTITY στήλη.

Κατανομή αξιών

Λόγω της κατανεμημένης αρχιτεκτονικής της μηχανής αποθήκης, η IDENTITY ιδιότητα δεν εγγυάται τη σειρά με την οποία κατανέμονται οι υποκατάστατες αξίες. Η ιδιότητα κλιμακώνεται σε όλους τους υπολογιστικούς κόμβους για να μεγιστοποιήσει τον παραλληλισμό χωρίς να επηρεάζει την απόδοση φορτίου. Ως αποτέλεσμα, τα εύρη τιμών από διαφορετικές εργασίες πρόσληψης ενδέχεται να μην είναι διαδοχικά.

Το παρακάτω παράδειγμα απεικονίζει αυτήν τη συμπεριφορά:

-- Create a table with an IDENTITY column
CREATE TABLE dbo.Table1(
    Column1 BIGINT IDENTITY,
    Column2 VARCHAR(30) NULL
)

-- Ingestion task A
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);

-- Ingestion task B
INSERT INTO dbo.Table1
VALUES (NULL), (NULL), (NULL), (NULL);

-- Review the data
SELECT * FROM dbo.Table1;

Δείγμα αποτελέσματος:

Στιγμιότυπο οθόνης του συνόλου αποτελεσμάτων ενός ερωτήματος ενός πίνακα με δύο στήλες με την ετικέτα Στήλη1 και Στήλη2, που εμφανίζει οκτώ γραμμές δεδομένων. Η στήλη1 περιέχει μεγάλες αριθμητικές τιμές, η στήλη2 περιέχει το κείμενο.

Σε αυτό το παράδειγμα, Ingestion task A και Ingestion task B εκτελούνται διαδοχικά ως ανεξάρτητες εργασίες. Παρόλο που οι εργασίες εκτελούνται διαδοχικά, η πρώτη και οι τελευταίες τέσσερις γραμμές έχουν διαφορετικές περιοχές κλειδιών ταυτότητας στο dbo.Table1.Column1. Μπορεί επίσης να προκύψουν κενά μεταξύ των περιοχών που έχουν ανατεθεί στην εργασία Α και στην εργασία Β.

IDENTITYΤο Fabric αποθήκη δεδομένων εγγυάται ότι όλες οι τιμές σε μια IDENTITY στήλη είναι μοναδικές, εφόσον IDENTITY_INSERT δεν χρησιμοποιείται, αλλά μπορεί να προκύψουν κενά στις περιοχές που παράγονται για μια εργασία πρόσληψης.

Αντικείμενα μεταδεδομένων συστήματος

Τα ακόλουθα αντικείμενα μετα-δεδομένων συστήματος είναι διαθέσιμα και χρήσιμα κατά τη σχεδίαση και την εργασία με τιμές ταυτότητας σε Fabric αποθήκη δεδομένων.

Λίστα στηλών ταυτότητας με την προβολή συστήματος sys.identity_columns

Χρησιμοποιήστε την προβολή καταλόγου sys.identity_columns για να παραθέσετε όλες τις στήλες ταυτότητας σε μια αποθήκη. Το παρακάτω παράδειγμα παραθέτει όλους τους πίνακες που περιέχουν μια IDENTITY στήλη, συμπεριλαμβανομένων των ονομάτων στηλών σχήματος, πίνακα και ταυτότητας:

SELECT
    s.name AS SchemaName,
    t.name AS TableName,
    c.name AS IdentityColumnName
FROM
    sys.identity_columns AS ic
INNER JOIN
    sys.columns AS c ON ic.[object_id] = c.[object_id]
    AND ic.column_id = c.column_id
INNER JOIN
    sys.tables AS t ON ic.[object_id] = t.[object_id]
INNER JOIN
    sys.schemas AS s ON t.[schema_id] = s.[schema_id]
ORDER BY
    s.name, t.name;

Στο Fabric αποθήκη δεδομένων, οι seed_value στήλες και increment_value της επιστροφής NULL και δεν ενημερώνονται μετά τη δημιουργία της sys.identity_columns στήλης ταυτότητας. Η last_value στήλη επιστρέφει NULL από προεπιλογή, αλλά αλλάζει μόνιμα σε -1 μετά την πρώτη λειτουργία εισαγωγής ταυτότητας στον πίνακα.

Εισαγωγή τιμών με IDENTITY_INSERT

Από προεπιλογή, δεν μπορείτε να εισαγάγετε τιμές σε μια IDENTITY στήλη. Ωστόσο, ίσως χρειαστεί να εισαγάγετε συγκεκριμένες τιμές κατά τη μετεγκατάσταση δεδομένων, την αποκατάσταση καταστροφών ή όταν συμπληρώνετε τιμές φρουρού, όπως -1 για το "Άγνωστο" σε πίνακες διαστάσεων.

Χρησιμοποιήστε το SET IDENTITY_INSERT για να επιτρέψετε προσωρινά ρητές εισαγωγές σε μια στήλη ταυτότητας:

SET IDENTITY_INSERT dbo.DimCustomer ON;

INSERT INTO dbo.DimCustomer (CustomerKey, CustomerName, Email)
VALUES (-1, 'John Doe', 'john@contoso.com');

SET IDENTITY_INSERT dbo.DimCustomer OFF;

Πότε IDENTITY_INSERT είναι ON:

  • Απαιτείται μια λίστα στηλών με την INSERT πρόταση.
  • Μόνο ένας πίνακας ανά συνεδρία μπορεί να έχει IDENTITY_INSERT οριστεί σε ON κάθε φορά.

Σημαντικό

Μετά την απενεργοποίησηIDENTITY_INSERT, επαναφέρετε τις τιμές ταυτότητας με το DBCC CHECKIDENT.

Επανατοποθετήστε τις τιμές ταυτότητας με το DBCC CHECKIDENT

Αφού εισαγάγετε ρητές τιμές με IDENTITY_INSERTτο , χρησιμοποιήστε το DBCC CHECKIDENT για να ανασυστήσετε τη στήλη ταυτότητας. Η RESEED λειτουργία σαρώνει όλα τα χρησιμοποιούμενα και δεσμευμένα εύρη ταυτότητας σε κατανεμημένους υπολογιστικούς κόμβους για να προσδιορίσει τις σωστές επόμενες τιμές, διασφαλίζοντας τη μοναδικότητα και αποτρέποντας τις συγκρούσεις κλειδιών.

DBCC CHECKIDENT('dbo.DimProduct', RESEED);

Στην Fabric αποθήκη δεδομένων, DBCC CHECKIDENT υποστηρίζει μόνο την RESEED επιλογή. Η αποθήκη καθορίζει αυτόματα τις σωστές περιοχές επόμενης τιμής και δεν μπορείτε να καθορίσετε μια προσαρμοσμένη τιμή επανασποράς. Για περισσότερες πληροφορίες, ανατρέξτε στην ενότητα ΕΛΕΓΧΟΣ DBCC.

Limitations

Για περισσότερες πληροφορίες, ανατρέξτε στις ενότητες Στήλες ΤΑΥΤΟΤΗΤΑ, ΤΑΥΤΟΤΗΤΑ (Transact-SQL) και Δημιουργία πινάκων στην Αποθήκη στο Microsoft Fabric.

  • Μόνο ο τύπος δεδομένων bigint υποστηρίζεται για IDENTITY στήλες στο Fabric αποθήκη δεδομένων. Άλλοι τύποι δεδομένων οδηγούν σε σφάλμα.
  • Ο ορισμός σπόρου και προσαύξησης δεν υποστηρίζεται. Το σύστημα διαχειρίζεται τις αξίες εσωτερικά.
  • Η προσθήκη στήλης IDENTITY σε έναν υπάρχοντα πίνακα με ALTER TABLE δεν υποστηρίζεται. Εξετάστε το ενδεχόμενο να χρησιμοποιήσετε το CREATE TABLE AS SELECT (CTAS) ή το SELECT... INTO για να δημιουργήσετε ένα αντίγραφο ενός υπάρχοντος πίνακα και να προσθέσετε μια IDENTITY στήλη.
  • Ισχύουν περιορισμοί για τον τρόπο IDENTITY διατήρησης των στηλών όταν δημιουργείτε έναν πίνακα, επιλέγοντας από έναν άλλο πίνακα με CTAS ή SELECT...INTO. Για περισσότερες πληροφορίες, ανατρέξτε στην ενότητα Τύποι δεδομένων του όρου SELECT - INTO (Transact-SQL).
  • DBCC CHECKIDENT υποστηρίζει μόνο την RESEED επιλογή. Ο καθορισμός μιας προσαρμοσμένης τιμής επανασποράς ή η χρήση NORESEED δεν υποστηρίζεται.
  • IDENTITY Οι στήλες παράγουν τιμές που είναι εγγυημένα μοναδικές, αλλά οι τιμές δεν είναι απαραίτητα διαδοχικές ή ταξινομημένες και μπορεί να προκύψουν κενά.

Παραδείγματα

Ένας. Δημιουργία πίνακα με στήλη IDENTITY

CREATE TABLE Employees (
    EmployeeID BIGINT IDENTITY,
    FirstName VARCHAR(50),
    LastName VARCHAR(50)
);

Αυτή η δήλωση δημιουργεί έναν Employees πίνακα όπου κάθε νέα σειρά λαμβάνει αυτόματα μια μοναδική EmployeeID τιμή ως bigint .

B. Εισαγωγή γραμμών σε πίνακα με στήλη ταυτότητας

Όταν παρέχετε τιμές για κάθε στήλη μη ταυτότητας με την καθορισμένη σειρά τους, δεν χρειάζεται να καθορίσετε μια λίστα στηλών:

INSERT INTO Employees VALUES ('Quarantino', 'Esposito');

Μπορείτε επίσης να παρέχετε μια λίστα στηλών που παραλείπει τη στήλη ταυτότητας:

INSERT INTO Employees (FirstName, LastName)
VALUES ('Ensi', 'Vasala');

Γ. Εισαγωγή ρητών τιμών με IDENTITY_INSERT

SET IDENTITY_INSERT dbo.Employees ON;

INSERT INTO dbo.Employees (EmployeeID, FirstName, LastName)
VALUES (100, 'Sentinel', 'Row');

SET IDENTITY_INSERT dbo.Employees OFF;

Δ. Εισαγωγή ρητών τιμών με COPY INTO

Η COPY INTO δήλωση υποστηρίζει την IDENTITY_INSERT επιλογή πρόσληψης ρητών τιμών εντός της εντολής. COPY INTO Οι επιλογές παρακάμπτουν οποιαδήποτε ρύθμιση σε επίπεδο συνεδρίας για IDENTITY_INSERTτο .

COPY INTO dbo.Employees (EmployeeID 1, FirstName 2, LastName 3)
FROM 'https://myaccount.blob.core.windows.net/myblobcontainer/folder1/'
WITH (
    FILE_TYPE = 'CSV',
    IDENTITY_INSERT = 'ON'
);

E. Επανασπορά πίνακα μετά από ρητά ένθετα

DBCC CHECKIDENT('dbo.Employees', RESEED);

F. Δημιουργία πίνακα με ΔΗΜΙΟΥΡΓΙΑ ΠΙΝΑΚΑ ΩΣ SELECT

Χρησιμοποιήστε το CTAS για να δημιουργήσετε ένα αντίγραφο ενός πίνακα και να διατηρήσετε την IDENTITY ιδιότητα στον πίνακα προορισμού:

CREATE TABLE RetiredEmployees
AS SELECT * FROM Employees;

Η στήλη στον πίνακα προορισμού κληρονομεί την IDENTITY ιδιότητα από τον πίνακα προέλευσης. Για περιορισμούς, ανατρέξτε στην ενότητα Τύποι δεδομένων του όρου SELECT - INTO.

G. Δημιουργήστε έναν πίνακα με το SELECT... ΣΕ

Χρησιμοποιήστε το SELECT...INTO για να δημιουργήσετε ένα αντίγραφο ενός πίνακα και να διατηρήσετε την IDENTITY ιδιότητα στον πίνακα προορισμού:

SELECT *
INTO dbo.RetiredEmployees
FROM dbo.Employees
WHERE LastName = 'Esposito';

Η στήλη στον πίνακα προορισμού κληρονομεί την IDENTITY ιδιότητα από τον πίνακα προέλευσης. Για περιορισμούς, ανατρέξτε στην ενότητα Τύποι δεδομένων του όρου SELECT - INTO.

Επόμενο βήμα