Megosztás a következőn keresztül:


Az Azure Synapse Analytics megosztott metaadat-táblázatai

Az Azure Synapse Analytics lehetővé teszi a különböző munkaterület számítási motorjai számára, hogy adatbázisokat és táblákat osszanak meg az Apache Spark-készletek és a kiszolgáló nélküli SQL-készlet között.

Miután létrehozott egy adatbázist egy Spark-feladattal, létrehozhat benne táblákat a Sparkban, amelyek a Parquet, a Delta vagy a CSV formátumot használják tárolási formátumként. A rendszer kisbetűssé alakítja a táblázatneveket, és a kisbetűs névvel kell lekérdezni. Ezek a táblák azonnal elérhetővé válnak az Azure Synapse-munkaterület Spark-készleteinek lekérdezéséhez. Az engedélyekhez kötött Spark-feladatok bármelyikéből is használhatók.

A Spark által létrehozott, felügyelt és külső táblák külső táblákként is elérhetővé válnak, ugyanazzal a névvel a kiszolgáló nélküli SQL-készlet megfelelő szinkronizált adatbázisában. A Spark-tábla SQL-ben való felfedése részletesebben ismerteti a táblaszinkronizálást.

Mivel a táblák aszinkron módon vannak szinkronizálva a kiszolgáló nélküli SQL-készlettel, kis késéssel jelennek meg.

Létrehozott Spark-tábla kezelése

A Spark használatával kezelheti a Spark által létrehozott adatbázisokat. Törölje például egy kiszolgáló nélküli Apache Spark-készletfeladaton keresztül, és hozzon létre benne táblákat a Sparkból.

A szinkronizált adatbázisok objektumai nem módosíthatók kiszolgáló nélküli SQL-készletből.

Spark-tábla elérhetővé tehető az SQL-ben

Megosztott Spark-táblák

A Spark kétféle táblát biztosít, amelyeket az Azure Synapse automatikusan elérhetővé tesz az SQL-ben:

  • Felügyelt táblák

    A Spark számos lehetőséget kínál az adatok felügyelt táblákban való tárolására, például SZÖVEG, CSV, JSON, JDBC, PARQUET, ORC, HIVE, DELTA és LIBSVM. Ezek a fájlok általában abban a könyvtárban vannak tárolva, ahol a warehouse felügyelt táblaadatokat tárolják.

  • Külső táblák

    A Spark a lehetőség megadásával LOCATION vagy a Hive formátum használatával külső táblákat is létrehozhat a meglévő adatokon keresztül. Az ilyen külső táblák többféle adatformátumon is lehetnek, beleértve a Parquetet is.

Az Azure Synapse jelenleg csak olyan felügyelt és külső Spark-táblákat oszt meg, amelyek parquet, DELTA vagy CSV formátumban tárolják az adataikat az SQL-motorokkal. A más formátumok által támogatott táblák nem szinkronizálódnak automatikusan. Ha az SQL-motor támogatja a tábla alapjául szolgáló formátumot, az ilyen táblákat kifejezetten külső táblaként szinkronizálhatja a saját SQL-adatbázisában.

Feljegyzés

Jelenleg csak a Parquet- és CSV-formátumok támogatottak teljes mértékben a kiszolgáló nélküli SQL-készletben. A Spark Delta-táblák a kiszolgáló nélküli SQL-készletben is elérhetők, de ez a funkció nyilvános előzetes verzióban érhető el. A Sparkban létrehozott külső táblák nem érhetők el dedikált SQL-készlet-adatbázisokban.

Spark-táblák megosztása

Az SQL-motorban külső táblákként közzétett megosztható felügyelt és külső Spark-táblák az alábbi tulajdonságokkal:

  • Az SQL külső tábla adatforrása a Spark-tábla helymappáját képviselő adatforrás.
  • Az SQL külső tábla fájlformátuma Parquet, Delta vagy CSV.
  • Az SQL külső tábla hozzáférési hitelesítő adatai továbbításra kerülnek.

Mivel az összes Spark-táblanév érvényes SQL-táblanév, és minden Spark-oszlopnév érvényes SQL-oszlopnév, a Spark-tábla és az oszlopnevek a külső SQL-táblához lesznek használva.

A Spark-táblák különböző adattípusokat biztosítanak, mint a Synapse SQL-motorok. Az alábbi táblázat a Spark-tábla adattípus-leképezését az SQL-típusokra képezi le:

Spark-adattípus SQL-adattípus Megjegyzések
LongType, , longbigint bigint Spark: A LongType 8 bájtos aláírt egész számokat jelöl.
SQL: Lásd : int, bigint, smallint és tinyint.
BooleanType, boolean bit (Parquet), varchar(6) (CSV) Spark: Logikai.
SQL: Lásd: [/sql/t-sql/data-types/bit-transact-sql).
DecimalType, decimal, decnumeric decimal Spark: DecimalType tetszőleges pontosságú aláírt decimális számokat jelöl. Belsőleg a java.math.BigDecimal által támogatott. A BigDecimal egy tetszőleges pontosságú, skálázatlan értékből és egy 32 bites egész számból áll.
SQL: Rögzített pontosság és skálázási számok. Maximális pontosság használata esetén az érvényes értékek - 10^38 +1 és 10^38 – 1 között vannak. A dec és dec(p) iso szinonimái a dec és a dec(p). a numerikus függvény funkcionálisan megegyezik a tizedes törtel. Lásd a tizedesjelet és a numerikus értéket.
IntegerType, , Integerint int A Spark IntegerType 4 bájtos aláírt egész számokat jelöl.
SQL: Lásd : int, bigint, smallint és tinyint.
ByteType, , Bytetinyint smallint Spark: A ByteType 1 bájt aláírt egész számot jelöl [-128–127], a ShortType pedig 2 bájt aláírt egész számot [-32768–32767].
SQL: A Tinyint 1 bájt aláírt egész számokat jelöl [0, 255], a smallint pedig 2 bájt aláírt egész számot jelöl [-32768, 32767]. Lásd int, bigint, smallint és tinyint.
ShortType, , Shortsmallint smallint Lásd fentebb.
DoubleType, Double float Spark: A DoubleType 8 bájtos dupla pontosságú lebegőpontos számokat jelöl. SQL: Lásd : lebegőpontos és valós.
FloatType, , floatreal real Spark: FloatType 4 bájtos dupla pontosságú lebegőpontos számokat jelöl. SQL: Lásd : lebegőpontos és valós.
DateType, date date Spark: A DateType olyan értékeket jelöl, amelyek az év, a hónap és a nap mező értékeiből állnak, időzóna nélkül.
SQL: Lásd a dátumot.
TimestampType, timestamp datetime2 Spark: TimestampType az év, a hónap, a nap, az óra, a perc és a második mező értékeit jelöli, a munkamenet helyi időzónájával együtt. Az időbélyeg értéke abszolút időpontot jelöl.
SQL: Lásd : datetime2.
char char
StringType, , Stringvarchar Varchar(n) Spark: A StringType karaktersztringértékeket jelöl. A VarcharType(n) a StringType egy olyan változata, amelynek hosszkorlátozása van. Az adatírás sikertelen lesz, ha a bemeneti sztring túllépi a hosszkorlátozást. Ez a típus csak táblázatsémában használható, függvényekben/operátorokban nem.
A CharType(n) a VarcharType(n) változója, amely rögzített hosszúságú. A CharType(n) típusú olvasóoszlop mindig n hosszúságú sztringértékeket ad vissza. A CharType(n) oszlop összehasonlítása a rövidet a hosszabb hosszra fogja kipárnázni.
SQL: Ha a Sparktól megadott hossz van megadva, az n a varchar(n) elemben erre a hosszúságra lesz beállítva. Particionált oszlop esetén n legfeljebb 2048 lehet. Ellenkező esetben varchar(max). Lásd a karaktert és a varchart.
Használja a rendezéssel Latin1_General_100_BIN2_UTF8.
BinaryType, binary varbinary(n) SQL: Ha a Sparktól megadott hossz van megadva, n a Varbinary(n) értéke erre a hosszúságra lesz beállítva. Particionált oszlop esetén n legfeljebb 2048 lehet. Ellenkező esetben varbinary(max) lesz. Lásd: bináris és varbináris.
array, , mapstruct varchar(max) SQL: Rendezéssel Latin1_General_100_BIN2_UTF8szerializálja a JSON-t. Lásd: JSON-adatok.

Feljegyzés

Az adatbázisszintű rendezés a .Latin1_General_100_CI_AS_SC_UTF8

Biztonsági modell

A Spark-adatbázisok és -táblák, valamint az SQL-motor szinkronizált reprezentációi a mögöttes tárolási szinten lesznek biztosítva. Mivel jelenleg nem rendelkeznek az objektumokra vonatkozó engedélyekkel, az objektumok az objektumkezelőben tekinthetők meg.

A felügyelt táblát létrehozó rendszerbiztonsági tag a tábla tulajdonosa, és minden jogosultsággal rendelkezik a táblához, valamint annak mögöttes mappáihoz és fájljaihoz. Az adatbázis tulajdonosa automatikusan a tábla társtulajdonosává válik.

Ha átmenő hitelesítéssel rendelkező külső Spark- vagy SQL-táblát hoz létre, az adatok csak a mappák és a fájlok szintjén vannak védve. Ha valaki lekérdezi az ilyen típusú külső táblákat, a rendszer a lekérés elküldőjének biztonsági identitását a fájlrendszerre továbbítja, amely ellenőrzi a hozzáférési jogosultságokat.

A mappákra és fájlokra vonatkozó engedélyek beállításáról további információt az Azure Synapse Analytics megosztott adatbázisában talál.

Példák

Felügyelt tábla létrehozása a Sparkban és lekérdezés kiszolgáló nélküli SQL-készletből

Ebben a forgatókönyvben egy Spark-adatbázis van elnevezve mytestdb. Lásd: Spark-adatbázis létrehozása és csatlakozás kiszolgáló nélküli SQL-készlettel.

Hozzon létre egy felügyelt Spark-táblát a SparkSQL-lel az alábbi parancs futtatásával:

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

Ez a parancs létrehozza a táblát myparquettable az adatbázisban mytestdb. A rendszer kisbetűssé alakítja a táblázatneveket. Rövid késés után láthatja a táblát a kiszolgáló nélküli SQL-készletben. Futtassa például a következő utasítást a kiszolgáló nélküli SQL-készletből.

    USE mytestdb;
    SELECT * FROM sys.tables;

Ellenőrizze, hogy myparquettable szerepel-e az eredmények között.

Feljegyzés

A delta, parquet vagy CSV tárolóformátumot nem használó táblák nem lesznek szinkronizálva.

Ezután szúrjon be néhány értéket a Sparkból a táblázatba, például a következő C# Spark-utasításokkal egy C#-jegyzetfüzetben:

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");

Most a kiszolgáló nélküli SQL-készletből az alábbi módon olvashatja be az adatokat:

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

Ennek eredményeként a következő sort kell megkapnia:

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

Külső tábla létrehozása a Sparkban és lekérdezés kiszolgáló nélküli SQL-készletből

Ebben a példában egy külső Spark-táblát hozunk létre a felügyelt tábla előző példájában létrehozott Parquet-adatfájlokon keresztül.

Például a SparkSQL futtatásával:

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

Cserélje le a helyőrzőt <storage-name> a használt ADLS Gen2 tárfiók nevére, <fs> a használt fájlrendszernévre, a helyőrzőre <synapse_ws> pedig annak az Azure Synapse-munkaterületnek a nevére, amelyet a példa futtatásához használ.

Az előző példa létrehozza a táblát myextneralparquettable az adatbázisban mytestdb. Rövid késés után láthatja a táblát a kiszolgáló nélküli SQL-készletben. Futtassa például a következő utasítást a kiszolgáló nélküli SQL-készletből.

USE mytestdb;
SELECT * FROM sys.tables;

Ellenőrizze, hogy myexternalparquettable szerepel-e az eredmények között.

Most a kiszolgáló nélküli SQL-készletből az alábbi módon olvashatja be az adatokat:

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

Ennek eredményeként a következő sort kell megkapnia:

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

Következő lépések