Udostępnij za pośrednictwem


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 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 natychmiast staną się dostępne do wykonywania zapytań przez dowolne pule platformy Spark obszaru roboczego usługi Azure Synapse. 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 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 platformy Spark do zarządzania utworzonymi bazami danych 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 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 LOCATION opcję lub używając formatu Programu 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 jawnie zsynchronizować takie tabele 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 różnicowe 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

Udostępnione tabele zarządzane i zewnętrzne platformy Spark uwidocznione w a aparatze 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 SQL usługi Synapse. Poniższa tabela mapuje typy danych tabeli platformy Spark na typy SQL:

Typ danych platformy Spark Typ danych SQL Komentarze
LongType, , longbigint bigint Spark: LongType reprezentuje liczby całkowite ze znakiem 8 bajtów.
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 dowolnej liczby całkowitej precyzji bez skalowania wartości i 32-bitowej liczby całkowitej.
SQL: Stała precyzja i liczba 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 dziesiętne i liczbowe.
IntegerType, , Integerint int Typ liczb całkowitych platformy Spark reprezentuje liczby całkowite ze znakiem 4 bajtów.
SQL: Zobacz int, bigint, smallint i tinyint.
ByteType, , Bytetinyint smallint Spark: Typ bajtów reprezentuje liczby całkowite ze znakiem 1 bajtów [-128 do 127] i 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, , Shortsmallint smallint Jak wyżej.
DoubleType, Double float Spark: DoubleType reprezentuje 8-bajtowe liczby zmiennoprzecinkowe o podwójnej precyzji. SQL: Zobacz zmiennoprzecinkowe i rzeczywiste.
FloatType, , floatreal real Spark: FloatType reprezentuje 4-bajtowe liczby zmiennoprzecinkowe o podwójnej precyzji. SQL: Zobacz zmiennoprzecinkowe i rzeczywiste.
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 data/godzina2.
char char
StringType, , Stringvarchar 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 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 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 binarne i varbinary.
array, , mapstruct 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 a aparatu SQL zostaną zabezpieczone na podstawowym poziomie magazynu. 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 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 Platformy 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 znajduje się on w wynikach.

Uwaga

Tabela, która nie korzysta z funkcji Delta, Parquet lub CSV jako jej format 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';

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 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 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