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 , , long bigint |
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 , dec numeric |
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 , , Integer int |
int |
A Spark IntegerType 4 bájtos aláírt egész számokat jelöl. SQL: Lásd : int, bigint, smallint és tinyint. |
ByteType , , Byte tinyint |
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 , , Short smallint |
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 , , float real |
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 , , String varchar |
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 , , map struct |
varchar(max) |
SQL: Rendezéssel Latin1_General_100_BIN2_UTF8 szerializá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