Erstellen von Ansichten
In diesem Artikel erfahren Sie, wie Sie Ansichten in Unity Catalog erstellen.
Eine Sicht ist ein schreibgeschütztes Objekt, das aus einer oder mehreren Tabellen und Sichten in einem Metastore besteht. Sie befindet sich in der dritten Ebene des Namespace mit drei Ebenen von Unity Catalog. Eine Sicht kann aus Tabellen und anderen Sichten in mehreren Schemas oder Katalogen erstellt werden.
Dynamische Ansichten können verwendet werden, um zusätzlich zur Datenmaskierung eine Zugriffskontrolle auf Zeilen- und Spaltenebene bereitzustellen.
Beispielsyntax zum Erstellen einer Ansicht:
CREATE VIEW main.default.experienced_employee
(id COMMENT 'Unique identification number', Name)
COMMENT 'View for experienced employees'
AS SELECT id, name
FROM all_employee
WHERE working_years > 5;
Hinweis
Ansichten weisen möglicherweise unterschiedliche Ausführungssemantik auf, wenn sie von anderen Datenquellen als Delta-Tabellen gesichert werden. Databricks empfiehlt, Ansichten immer durch Verweisen auf Datenquellen mithilfe eines Tabellen- oder Ansichtsnamens zu definieren. Das Definieren von Ansichten für Datasets durch Angeben eines Pfads oder URI kann zu verwirrenden Datengovernanceanforderungen führen.
Anforderungen
So erstellen Sie eine Sicht:
- Sie benötigen die
USE CATALOG
-Berechtigung für den übergeordneten Katalog und dieUSE SCHEMA
- undCREATE TABLE
-Berechtigungen für das übergeordnete Schema. Ein Metastoreadministrator oder der Katalogbesitzer kann Ihnen all diese Berechtigungen gewähren. Ein Schemabesitzer kann Ihnen die BerechtigungenUSE SCHEMA
undCREATE TABLE
für das Schema erteilen. - Sie müssen in der Lage sein, die Tabellen und Ansichten zu lesen, auf die in der Ansicht verwiesen wird (
SELECT
sowohl in der Tabelle oder Ansicht als auchUSE CATALOG
im Katalog undUSE SCHEMA
im Schema). - Wenn eine Ansicht auf Tabellen im arbeitsbereichslokalen Hive-Metastore verweist, kann auf die Ansicht nur von dem Arbeitsbereich aus zugegriffen werden, der die arbeitsbereichslokalen Tabellen enthält. Aus diesem Grund empfiehlt Databricks, Ansichten nur aus Tabellen oder Ansichten zu erstellen, die sich im Metastore von Unity Catalog befinden.
- Sie können keine Ansicht erstellen, die auf eine Ansicht verweist, die mit Delta Sharing für Sie freigegeben wurde. Weitere Informationen unter Sicheres Freigeben von Daten und KI-Ressourcen mithilfe von Delta Sharing.
Zum Lesen einer Ansicht hängen die erforderlichen Berechtigungen vom Computetyp und Zugriffsmodus ab:
- Für freigegebene Cluster und SQL Warehouses benötigen Sie
SELECT
in der Ansicht selbst,USE CATALOG
im übergeordneten Katalog undUSE SCHEMA
im übergeordneten Schema. - Bei Einzelbenutzerclustern müssen Sie auch über
SELECT
in allen Tabellen und Ansichten verfügen, auf welche die Ansicht verweist, zusätzlich zuUSE CATALOG
in ihren übergeordneten Katalogen undUSE SCHEMA
in ihren übergeordneten Schemas.
So erstellen oder lesen Sie dynamische Ansichten:
- Die Anforderungen für dynamische Ansichten sind identisch mit denen, die in den vorherigen Abschnitten aufgeführt sind, mit der Ausnahme, dass Sie einen freigegebenen Cluster oder ein SQL Warehouse zum Erstellen oder Lesen einer dynamischen Ansicht verwenden müssen. Sie können keine Einzelbenutzercluster verwenden.
Erstellen einer Ansicht
Führen Sie den folgenden SQL Befehl aus, um eine Ansicht zu erstellen. Elemente in Klammern sind optional. Ersetzen Sie folgende Platzhalterwerte:
<catalog-name>
: Der Name des Katalogs.<schema-name>
: Der Name des Schemas.<view-name>
: Ein Name für die Ansicht.<query>
: Die Abfrage, Spalten, Tabellen und Ansichten, die zum Zusammenstellen der Ansicht verwendet werden.
SQL
CREATE VIEW <catalog-name>.<schema-name>.<view-name> AS
SELECT <query>;
Python
spark.sql("CREATE VIEW <catalog-name>.<schema-name>.<view-name> AS "
"SELECT <query>")
R
library(SparkR)
sql(paste("CREATE VIEW <catalog-name>.<schema-name>.<view-name> AS ",
"SELECT <query>",
sep = ""))
Scala
spark.sql("CREATE VIEW <catalog-name>.<schema-name>.<view-name> AS " +
"SELECT <query>")
So erstellen Sie beispielsweise eine Ansicht namens sales_redacted
aus Spalten in der sales_raw
-Tabelle:
SQL
CREATE VIEW sales_metastore.sales.sales_redacted AS
SELECT
user_id,
email,
country,
product,
total
FROM sales_metastore.sales.sales_raw;
Python
spark.sql("CREATE VIEW sales_metastore.sales.sales_redacted AS "
"SELECT "
" user_id, "
" email, "
" country, "
" product, "
" total "
"FROM sales_metastore.sales.sales_raw")
R
library(SparkR)
sql(paste("CREATE VIEW sales_metastore.sales.sales_redacted AS ",
"SELECT ",
" user_id, ",
" email, ",
" country, ",
" product, ",
" total ",
"FROM sales_metastore.sales.sales_raw",
sep = ""))
Scala
spark.sql("CREATE VIEW sales_metastore.sales.sales_redacted AS " +
"SELECT " +
" user_id, " +
" email, " +
" country, " +
" product, " +
" total " +
"FROM sales_metastore.sales.sales_raw")
Sie können auch eine Ansicht erstellen, indem Sie den Databricks-Terraform-Anbieter und databricks_table verwenden. Sie können eine Liste der vollständigen Namen der Ansichten mithilfe von databricks_views abrufen.
Erstellen einer dynamischen Ansicht
In Unity Catalog können Sie dynamische Ansichten verwenden, um eine differenzierte Zugriffssteuerung zu konfigurieren, die unter anderem Folgendes ermöglicht:
- Sicherheit auf Spalten- oder Zeilenebene
- Datenmaskierung
Hinweis
Eine differenzierte Zugriffssteuerung mit dynamischen Ansichten ist in Clustern mit dem Zugriffsmodus für Einzelbenutzer nicht verfügbar.
Unity Catalog führt die folgenden Funktionen ein, mit denen Sie dynamisch einschränken können, welche Benutzer*innen auf eine Zeile, Spalte oder einen Datensatz in einer Ansicht zugreifen können:
current_user()
: Gibt die E-Mail-Adresse des oder der aktuellen Benutzer*in zurückis_account_group_member()
: GibtTRUE
zurück, wenn der oder die aktuelle Benutzer*in Mitglied einer bestimmten Gruppe auf Kontoebene ist Diese Option wird empfohlen, wenn dynamische Ansichten mit Unity Catalog-Daten verwendet werden.is_member()
: GibtTRUE
zurück, wenn der oder die aktuelle Benutzer*in Mitglied einer bestimmten Gruppe auf Arbeitsbereichebene ist Diese Funktion soll für Kompatibilität mit dem vorhandenen Hive-Metastore sorgen. Sie sollten sie nicht für Ansichten mit Unity Catalog-Daten verwenden, da sie die Gruppenmitgliedschaft nicht auf Kontoebene auswertet.
Azure Databricks empfiehlt, Benutzern nicht die Möglichkeit zu gewähren, die Tabellen und Ansichten zu lesen, auf die in der Ansicht verwiesen wird.
Die folgenden Beispiele veranschaulichen, wie dynamische Ansichten in Unity Catalog erstellt werden.
Berechtigungen auf Spaltenebene
Mit einer dynamischen Ansicht können Sie die Spalten einschränken, auf die ein*e bestimmte*r Benutzer*in oder eine bestimmte Gruppe zugreifen kann. Im folgenden Beispiel können nur Mitglieder der Gruppe auditors
über die Tabelle sales_raw
auf E-Mail-Adressen zugreifen. Während der Abfrageanalyse ersetzt Apache Spark die CASE
-Anweisung entweder durch die Literalzeichenfolge REDACTED
oder den tatsächlichen Inhalt der Spalte für E-Mail-Adressen. Andere Spalten werden wie gewohnt zurückgegeben. Diese Strategie hat keine negativen Auswirkungen auf die Abfrageleistung.
SQL
-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
user_id,
CASE WHEN
is_account_group_member('auditors') THEN email
ELSE 'REDACTED'
END AS email,
country,
product,
total
FROM sales_raw
Python
# Alias the field 'email' to itself (as 'email') to prevent the
# permission logic from showing up directly in the column name results.
spark.sql("CREATE VIEW sales_redacted AS "
"SELECT "
" user_id, "
" CASE WHEN "
" is_account_group_member('auditors') THEN email "
" ELSE 'REDACTED' "
" END AS email, "
" country, "
" product, "
" total "
"FROM sales_raw")
R
library(SparkR)
# Alias the field 'email' to itself (as 'email') to prevent the
# permission logic from showing up directly in the column name results.
sql(paste("CREATE VIEW sales_redacted AS ",
"SELECT ",
" user_id, ",
" CASE WHEN ",
" is_account_group_member('auditors') THEN email ",
" ELSE 'REDACTED' ",
" END AS email, ",
" country, ",
" product, ",
" total ",
"FROM sales_raw",
sep = ""))
Scala
// Alias the field 'email' to itself (as 'email') to prevent the
// permission logic from showing up directly in the column name results.
spark.sql("CREATE VIEW sales_redacted AS " +
"SELECT " +
" user_id, " +
" CASE WHEN " +
" is_account_group_member('auditors') THEN email " +
" ELSE 'REDACTED' " +
" END AS email, " +
" country, " +
" product, " +
" total " +
"FROM sales_raw")
Zeilenspezifische Berechtigungen
Mit einer dynamischen Ansicht können Sie Berechtigungen bis auf Zeilen- oder Feldebene festlegen. Im folgenden Beispiel können nur Mitglieder der Gruppe managers
Transaktionsbeträge anzeigen, wenn diese 1.000.000 USD überschreiten. Übereinstimmende Ergebnisse werden für andere Benutzer*innen herausgefiltert.
SQL
CREATE VIEW sales_redacted AS
SELECT
user_id,
country,
product,
total
FROM sales_raw
WHERE
CASE
WHEN is_account_group_member('managers') THEN TRUE
ELSE total <= 1000000
END;
Python
spark.sql("CREATE VIEW sales_redacted AS "
"SELECT "
" user_id, "
" country, "
" product, "
" total "
"FROM sales_raw "
"WHERE "
"CASE "
" WHEN is_account_group_member('managers') THEN TRUE "
" ELSE total <= 1000000 "
"END")
R
library(SparkR)
sql(paste("CREATE VIEW sales_redacted AS ",
"SELECT ",
" user_id, ",
" country, ",
" product, ",
" total ",
"FROM sales_raw ",
"WHERE ",
"CASE ",
" WHEN is_account_group_member('managers') THEN TRUE ",
" ELSE total <= 1000000 ",
"END",
sep = ""))
Scala
spark.sql("CREATE VIEW sales_redacted AS " +
"SELECT " +
" user_id, " +
" country, " +
" product, " +
" total " +
"FROM sales_raw " +
"WHERE " +
"CASE " +
" WHEN is_account_group_member('managers') THEN TRUE " +
" ELSE total <= 1000000 " +
"END")
Datenmaskierung
Da Ansichten in Unity Catalog Spark SQL verwenden, können Sie die erweiterte Datenmaskierung implementieren, indem Sie komplexere SQL-Ausdrücke und reguläre Ausdrücke verwenden. Im folgenden Beispiel können alle Benutzer*innen E-Mail-Domänen analysieren, aber nur Mitglieder der Gruppe auditors
können die ganze E-Mail-Adresse eines oder einer Benutzer*in anzeigen.
SQL
-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.
CREATE VIEW sales_redacted AS
SELECT
user_id,
region,
CASE
WHEN is_account_group_member('auditors') THEN email
ELSE regexp_extract(email, '^.*@(.*)$', 1)
END
FROM sales_raw
Python
# The regexp_extract function takes an email address such as
# user.x.lastname@example.com and extracts 'example', allowing
# analysts to query the domain name.
spark.sql("CREATE VIEW sales_redacted AS "
"SELECT "
" user_id, "
" region, "
" CASE "
" WHEN is_account_group_member('auditors') THEN email "
" ELSE regexp_extract(email, '^.*@(.*)$', 1) "
" END "
" FROM sales_raw")
R
library(SparkR)
# The regexp_extract function takes an email address such as
# user.x.lastname@example.com and extracts 'example', allowing
# analysts to query the domain name.
sql(paste("CREATE VIEW sales_redacted AS ",
"SELECT ",
" user_id, ",
" region, ",
" CASE ",
" WHEN is_account_group_member('auditors') THEN email ",
" ELSE regexp_extract(email, '^.*@(.*)$', 1) ",
" END ",
" FROM sales_raw",
sep = ""))
Scala
// The regexp_extract function takes an email address such as
// user.x.lastname@example.com and extracts 'example', allowing
// analysts to query the domain name.
spark.sql("CREATE VIEW sales_redacted AS " +
"SELECT " +
" user_id, " +
" region, " +
" CASE " +
" WHEN is_account_group_member('auditors') THEN email " +
" ELSE regexp_extract(email, '^.*@(.*)$', 1) " +
" END " +
" FROM sales_raw")
Löschen einer Sicht
Sie müssen der Besitzer der Ansicht sein, um eine Ansicht löschen zu können. Führen Sie den folgenden SQL Befehl aus, um eine Ansicht abzulegen.
DROP VIEW IF EXISTS catalog_name.schema_name.view_name;
Nächste Schritte
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für