tabele udostępnionych metadanych usługi Azure Synapse Analytics

Azure Synapse Analytics umożliwia różnym aparatom obliczeniowym obszaru roboczego udostępnianie baz danych i tabel między pulami platformy Apache Spark i bezserwerową pulą SQL.

Po utworzeniu bazy danych przez zadanie platformy Spark możesz utworzyć w niej tabele za pomocą platformy Spark, które używają formatu magazynu 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 będą natychmiast dostępne do wykonywania zapytań przez dowolną z Azure Synapse pul platformy Spark. Mogą być one również używane z dowolnego zadania platformy Spark z uprawnieniami.

Tabele tworzone, zarządzane i zewnętrzne platformy Spark są również udostępniane jako tabele zewnętrzne o tej samej nazwie w odpowiedniej zsynchronizowanej bazie danych w bezserwerowej puli SQL. Uwidacznianie tabeli Spark w języku SQL zawiera więcej szczegółów dotyczących synchronizacji tabel.

Ponieważ tabele są synchronizowane z bezserwerową pulą SQL asynchronicznie, do momentu ich pojawienia się wystąpi niewielkie opóźnienie.

Zarządzanie utworzoną tabelą platformy Spark

Zarządzanie utworzonymi bazami danych platformy Spark za pomocą platformy Spark. Na przykład usuń je za pomocą zadania puli platformy Apache Spark bezserwerowego i utwórz w nim tabele z platformy Spark.

Obiektów w zsynchronizowanych bazach danych nie można modyfikować 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 Azure Synapse automatycznie uwidaczniać w programie 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 istniejących danych przez udostępnienie LOCATION opcji lub użycie formatu Hive. Takie tabele zewnętrzne mogą być w różnych formatach danych, w tym Parquet.

Azure Synapse obecnie udostępnia tylko zarządzane i zewnętrzne tabele platformy Spark, które przechowują dane w formacie Parquet, DELTA lub CSV za pomocą aparatów SQL. Tabele wspierane przez inne formaty nie są automatycznie synchronizowane. Możesz zsynchronizować takie tabele samodzielnie jako tabelę zewnętrzną we własnej bazie danych SQL, jeśli aparat 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 platformy Spark są również dostępne w bezserwerowej puli SQL, ale ta funkcja jest dostępna 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

Tabele zarządzane zarządzane i zewnętrzne platformy Spark udostępniane w aucie 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ą przekazywane.

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 udostępniają różne typy danych niż aparaty Synapse SQL. Poniższa tabela mapuje typy danych tabeli platformy Spark na typy 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, dec, numeric decimal Spark: DecimalType reprezentuje dowolną precyzję cyfr dziesiętnych ze znakiem. Wspierane wewnętrznie przez java.math.BigDecimal. Funkcja BigDecimal składa się z dowolnej liczby całkowitej precyzji nieskalowanej i 32-bitowej skali całkowitej.
SQL: stała precyzja i liczby skalowania. Gdy jest używana maksymalna precyzja, prawidłowe wartości to od - 10^38 +1 do 10^38-1. Synonimy ISO dla dziesiętnych są dziesiętne i dziesiętne. wartość liczbowa jest funkcjonalnie identyczna z dziesiętną. Zobacz wartości dziesiętne i liczbowe.
IntegerType, Integer, int int SparkIntegerType reprezentuje 4-bajtowe liczby całkowite ze znakiem.
SQL: zobacz int, bigint, smallint i tinyint.
ByteType, Byte, tinyint smallint Spark: Funkcja ByteType reprezentuje liczby całkowite ze znakiem 1 bajtów [-128 do 127], a parametr ShortType reprezentuje liczby całkowite ze znakiem 2 bajtów [-32768 do 32767].
SQL: Tinyint reprezentuje liczby całkowite ze znakiem 1 bajtów [0, 255] i smallint reprezentuje liczby całkowite ze znakiem 2 bajtów [-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 liczba zmiennoprzecinkowa i rzeczywista.
FloatType, float, real real Spark: FloatType reprezentuje 4-bajtowe liczby zmiennoprzecinkowe o podwójnej precyzji. SQL: zobacz liczba zmiennoprzecinkowa i rzeczywista.
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 roku, miesiąca, dnia, godziny, minuty i sekundy z lokalną strefą czasową sesji. Wartość znacznika czasu reprezentuje bezwzględny punkt w czasie.
SQL: zobacz data/godzina2.
char char
StringType, String, varchar Varchar(n) Spark: StringType reprezentuje wartości ciągu 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 o 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 zmiennej varchar(n) zostanie ustawiona na 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 go z sortowaniem Latin1_General_100_BIN2_UTF8.
BinaryType, binary varbinary(n) SQL: Jeśli z platformy Spark jest podana długość, n w polu 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 dane binarne 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, a także ich zsynchronizowane reprezentacje w aucie SQL zostaną zabezpieczone na poziomie magazynu bazowego. Ponieważ nie mają obecnie uprawnień do samych 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 uwierzytelniania, dane będą zabezpieczone tylko na poziomach folderów i plików. Jeśli ktoś wysyła zapytanie do tego typu tabeli zewnętrznej, tożsamość zabezpieczeń przesyłającego zapytanie 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 Azure Synapse Analytics shared database (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 z nią 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 element znajduje się w wynikach.

Uwaga

Tabela, która nie używa funkcji Delta, Parquet lub CSV jako formatu magazynu, 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.dbo.myparquettable WHERE name = 'Alice';

W wyniku tego powinien zostać wyświetlony następujący wiersz:

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 dla plików danych Parquet utworzonych w poprzednim przykładzie dla tabeli zarządzanej.

Na przykład za pomocą polecenia SparkSQL uruchom polecenie:

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ą używanego konta magazynu usługi ADLS Gen2, <fs> a nazwą używanego systemu plików i symbolem <synapse_ws> zastępczym o nazwie obszaru roboczego 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 element znajduje się 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';

W wyniku tego powinien zostać wyświetlony następujący wiersz:

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

Następne kroki