Udostępnij przez


Udostępnione tabele metadanych usługi Azure Synapse Analytics

Usługa Azure Synapse Analytics umożliwia różnym aparatom obliczeniowym obszarów roboczych udostępnianie baz danych i tabel między pulami platformy Apache Spark i bezserwerową pulą SQL.

Po utworzeniu bazy danych przez zadanie Spark, możesz utworzyć w niej tabele za pomocą Spark, które używają formatu przechowywania Parquet, Delta lub CSV. Nazwy tabel zostaną przekonwertowane na małe litery i należy wykonać zapytanie przy użyciu nazwy małej litery. Te tabele natychmiast staną się dostępne do zapytań przez dowolne pule Spark w obszarze roboczym Azure Synapse. Mogą być one również używane z dowolnego zadania platformy Spark, o ile są dostępne odpowiednie uprawnienia.

Tabele tworzone, zarządzane i zewnętrzne w Spark są również udostępniane jako zewnętrzne tabele o tej samej nazwie w odpowiedniej zsynchronizowanej bazie danych w bezserwerowej puli SQL. Uwidacznianie tabeli Platformy Spark w języku SQL zawiera bardziej szczegółowe informacje na temat synchronizacji tabel.

Ponieważ tabele są synchronizowane z bezserwerową pulą SQL asynchronicznie, do momentu ich wyświetlenia będzie niewielkie opóźnienie.

Zarządzanie utworzoną tabelą platformy Spark

Użyj Spark do zarządzania bazami danych stworzonymi przez Spark. Na przykład utwórz bazę danych za pomocą zadania w bezserwerowej puli Apache Spark i utwórz tabele w bazie danych za pomocą Spark.

Nie można modyfikować obiektów w zsynchronizowanych bazach danych z bezserwerowej puli SQL.

Uwidacznianie tabeli Spark w języku SQL

Udostępnione tabele platformy Spark

Platforma Spark udostępnia dwa typy tabel, które usługa Azure Synapse uwidacznia automatycznie w usłudze SQL:

  • Tabele zarządzane

    Platforma Spark oferuje wiele opcji przechowywania danych w zarządzanych tabelach, takich jak TEXT, CSV, JSON, JDBC, PARQUET, ORC, HIVE, DELTA i LIBSVM. Te pliki są zwykle przechowywane w katalogu, w warehouse którym przechowywane są dane tabeli zarządzanej.

  • Tabele zewnętrzne

    Platforma Spark udostępnia również sposoby tworzenia tabel zewnętrznych na podstawie istniejących danych, podając opcję LOCATION lub używając formatu Hive. Takie tabele zewnętrzne mogą być w różnych formatach danych, w tym "Parquet".

Usługa Azure Synapse obecnie udostępnia tylko zarządzane i zewnętrzne tabele Spark, które przechowują swoje dane w formacie Parquet, DELTA lub CSV, z aparatami SQL. Tabele wspierane przez inne formaty nie są automatycznie synchronizowane. Możesz samodzielnie zsynchronizować takie tabele jawnie jako tabelę zewnętrzną we własnej bazie danych SQL, jeśli silnik SQL obsługuje podstawowy format tabeli.

Uwaga

Obecnie tylko formaty Parquet i CSV są w pełni obsługiwane w bezserwerowej puli SQL. Tabele Delta Spark są również dostępne w bezserwerowej puli SQL, ale ta funkcja jest w publicznej wersji zapoznawczej. Tabele zewnętrzne utworzone na platformie Spark nie są dostępne w dedykowanych bazach danych puli SQL.

Udostępnianie tabel platformy Spark

Udostępnione tabele zarządzane i zewnętrzne Spark są widoczne w aparacie SQL jako tabele zewnętrzne o następujących właściwościach:

  • Źródło danych tabeli zewnętrznej SQL to źródło danych reprezentujące folder lokalizacji tabeli Spark.
  • Format pliku tabeli zewnętrznej SQL to Parquet, Delta lub CSV.
  • Poświadczenia dostępu do tabeli zewnętrznej SQL są typu pass-through.

Ponieważ wszystkie nazwy tabel platformy Spark są prawidłowymi nazwami tabel SQL, a wszystkie nazwy kolumn platformy Spark są prawidłowe, nazwy tabel i kolumn platformy Spark będą używane dla tabeli zewnętrznej SQL.

Tabele platformy Spark oferują inne typy danych niż silniki SQL Synapse. Poniższa tabela przyporządkowuje typy danych tabeli Spark do typów SQL.

Typ danych platformy Spark Typ danych SQL Komentarze
LongType, long, bigint bigint Spark: LongType reprezentuje 8-bajtowe liczby całkowite ze znakiem.
SQL: Zobacz int, bigint, smallint i tinyint.
BooleanType, boolean bit (Parquet), varchar(6) (CSV) Spark: wartość logiczna.
SQL: zobacz [/sql/t-sql/data-types/bit-transact-sql).
DecimalType, , decimal, , decnumeric decimal Spark: DecimalType reprezentuje liczby dziesiętne z dowolną precyzją. Wspierane wewnętrznie przez java.math.BigDecimal. BigDecimal składa się z wartości nieprzeskalowanej jako liczby całkowitej o dowolnej precyzji oraz skali będącej 32-bitową liczbą całkowitą.
SQL: Liczby o stałej precyzji i skali. Gdy jest używana maksymalna precyzja, prawidłowe wartości to od - 10^38 +1 do 10^38 -1. Synonimy ISO dla dziesiętnych to dec oraz dec(p, s). numeryczny jest funkcjonalnie identyczny z dziesiętnym. Zobacz dziesiętne i liczbowe.
IntegerType Integer int int Typ liczb całkowitych platformy Sparkreprezentuje 4 liczby całkowite ze znakiem bajtu.
SQL: Zobacz int, bigint, smallint i tinyint.
ByteType, Byte, tinyint smallint Spark: ByteType reprezentuje 1-bajtowe liczby całkowite ze znakiem [-128 do 127], a ShortType reprezentuje 2-bajtowe liczby całkowite ze znakiem [-32768 do 32767].
SQL: Tinyint reprezentuje 1 liczby całkowite ze znakiem bajtu [0, 255] i smallint reprezentuje 2 liczby całkowite ze znakiem bajtu [-32768, 32767]. Zobacz int, bigint, smallint i tinyint.
ShortType, Short, smallint smallint Jak wyżej.
DoubleType, Double float Spark: DoubleType reprezentuje 8-bajtowe liczby zmiennoprzecinkowe o podwójnej precyzji. SQL: Zobacz float i real.
FloatType, float, real real Spark: FloatType reprezentuje 4-bajtowe liczby zmiennoprzecinkowe o podwójnej precyzji. SQL: Zobacz float i real.
DateType, date date Spark: Typ daty reprezentuje wartości składające się z wartości pól roku, miesiąca i dnia bez strefy czasowej.
SQL: Zobacz datę.
TimestampType, timestamp datetime2 Spark: TimestampType reprezentuje wartości składające się z wartości pól rok, miesiąc, dzień, godzina, minuta i sekunda z lokalną strefą czasową sesji. Wartość znacznika czasu reprezentuje bezwzględny punkt w czasie.
SQL: Zobacz datetime2.
char char
StringType, String, varchar Varchar(n) Spark: StringType reprezentuje wartości ciągów znaków. VarcharType(n) to wariant typu StringType, który ma ograniczenie długości. Zapisywanie danych zakończy się niepowodzeniem, jeśli ciąg wejściowy przekroczy ograniczenie długości. Tego typu można używać tylko w schemacie tabeli, a nie w funkcjach/operatorach.
CharType(n) jest wariantem VarcharType(n), który jest stałą długością. Odczytywanie kolumny typu CharType(n) zawsze zwraca wartości ciągu długości n. Porównanie kolumn CharType(n) spowoduje wypełnienie krótkiej wartości do dłuższej długości.
SQL: Jeśli z platformy Spark jest podana długość, n w varchar(n) zostanie ustawiona do tej długości. Jeśli kolumna jest podzielona na partycje, n może być maksymalnie 2048. W przeciwnym razie będzie to varchar(max). Zobacz char i varchar.
Użyj tego z funkcją sortowania Latin1_General_100_BIN2_UTF8.
BinaryType, binary varbinary(n) SQL: Jeśli z platformy Spark jest podana długość, n w zmiennej Varbinary(n) zostanie ustawiona ta długość. Jeśli kolumna jest podzielona na partycje, n może być maksymalnie 2048. W przeciwnym razie będzie to Varbinary(max). Zobacz binary i varbinary.
array, map, struct varchar(max) SQL: Serializuje dane w formacie JSON z sortowaniem Latin1_General_100_BIN2_UTF8. Zobacz Dane JSON.

Uwaga

Sortowanie na poziomie bazy danych to Latin1_General_100_CI_AS_SC_UTF8.

Model zabezpieczeń

Bazy danych i tabele platformy Spark oraz ich zsynchronizowane reprezentacje w aparacie SQL zostaną zabezpieczone na poziomie podstawowym magazynu. Ponieważ nie mają obecnie uprawnień do obiektów, obiekty można zobaczyć w Eksploratorze obiektów.

Podmiot zabezpieczeń tworzący zarządzaną tabelę jest traktowany jako właściciel tej tabeli i ma wszystkie prawa do tabeli, a także do bazowych folderów i plików. Ponadto właściciel bazy danych automatycznie stanie się współwłaścicielem tabeli.

Jeśli utworzysz zewnętrzną tabelę platformy Spark lub SQL z przekazywaniem uwierzytelnienia, dane będą zabezpieczone tylko na poziomie folderu i pliku. Jeśli zgłoszono zapytanie do tego typu tabeli zewnętrznej, tożsamość zapytującego jest przekazywana do systemu plików, co powoduje sprawdzenie praw dostępu.

Aby uzyskać więcej informacji na temat ustawiania uprawnień w folderach i plikach, zobacz Udostępniona baza danych usługi Azure Synapse Analytics.

Przykłady

Tworzenie tabeli zarządzanej na platformie Spark i wykonywanie zapytań na podstawie bezserwerowej puli SQL

W tym scenariuszu masz bazę danych Spark o nazwie mytestdb. Zobacz Tworzenie bazy danych Spark i nawiązywanie połączenia z bezserwerową pulą SQL.

Utwórz zarządzaną tabelę Spark za pomocą usługi SparkSQL, uruchamiając następujące polecenie:

    CREATE TABLE mytestdb.myparquettable(id int, name string, birthdate date) USING Parquet

To polecenie tworzy tabelę myparquettable w bazie danych mytestdb. Nazwy tabel zostaną przekonwertowane na małe litery. Po krótkim opóźnieniu tabela będzie widoczna w bezserwerowej puli SQL. Na przykład uruchom następującą instrukcję z bezserwerowej puli SQL.

    USE mytestdb;
    SELECT * FROM sys.tables;

Sprawdź, czy myparquettable znajduje się on w wynikach.

Uwaga

Tabela, która nie korzysta z Delta, Parquet lub CSV jako formatu przechowywania, nie zostanie zsynchronizowana.

Następnie wstaw kilka wartości do tabeli z platformy Spark, na przykład przy użyciu następujących instrukcji platformy Spark w języku C# w notesie języka C#:

using Microsoft.Spark.Sql.Types;

var data = new List<GenericRow>();

data.Add(new GenericRow(new object[] { 1, "Alice", new Date(2010, 1, 1)}));
data.Add(new GenericRow(new object[] { 2, "Bob", new Date(1990, 1, 1)}));

var schema = new StructType
    (new List<StructField>()
        {
            new StructField("id", new IntegerType()),
            new StructField("name", new StringType()),
            new StructField("birthdate", new DateType())
        }
    );

var df = spark.CreateDataFrame(data, schema);
df.Write().Mode(SaveMode.Append).InsertInto("mytestdb.myparquettable");

Teraz możesz odczytać dane z bezserwerowej puli SQL w następujący sposób:

SELECT * FROM mytestdb.myparquettable WHERE name = 'Alice';

Powinien zostać wyświetlony następujący wiersz w wyniku:

id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01

Tworzenie tabeli zewnętrznej na platformie Spark i wykonywanie zapytań na podstawie bezserwerowej puli SQL

W tym przykładzie utworzymy zewnętrzną tabelę Spark na plikach danych Parquet utworzonych w poprzednim przykładzie dla tabeli zarządzanej.

Na przykład użyj SparkSQL, aby uruchomić:

CREATE TABLE mytestdb.myexternalparquettable
    USING Parquet
    LOCATION "abfss://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/"

Zastąp symbol zastępczy <storage-name> nazwą konta magazynu ADLS Gen2, którego używasz, <fs> nazwą systemu plików, którego używasz, a symbol zastępczy <synapse_ws> nazwą obszaru roboczego usługi Azure Synapse, którego używasz do uruchomienia tego przykładu.

W poprzednim przykładzie utworzono tabelę myextneralparquettable w bazie danych mytestdb. Po krótkim opóźnieniu tabela będzie widoczna w bezserwerowej puli SQL. Na przykład uruchom następującą instrukcję z bezserwerowej puli SQL.

USE mytestdb;
SELECT * FROM sys.tables;

Sprawdź, czy myexternalparquettable znajduje się on w wynikach.

Teraz możesz odczytać dane z bezserwerowej puli SQL w następujący sposób:

SELECT * FROM mytestdb.dbo.myexternalparquettable WHERE name = 'Alice';

Powinien zostać wyświetlony następujący wiersz w wyniku:

id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01

Następne kroki