Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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. Hozzon létre például egy adatbázist egy kiszolgáló nélküli Apache Spark-készletfeladaton keresztül, és hozzon létre táblákat az adatbázisban 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
warehousefelügyelt táblaadatokat tárolják.Külső táblák
A Spark a lehetőség megadásával
LOCATIONvagy 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.
Note
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
A SQL-motorban külső táblákként megjelenített, megosztható felügyelt és külső Spark-táblák a következő tulajdonságokkal rendelkeznek:
- 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: LongType represents 8-byte signed integer numbers. SQL: Lásd : int, bigint, smallint és tinyint. |
BooleanType, boolean |
bit (Parquet), varchar(6) (CSV) |
Spark: Boolean. 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. Az ISO szinonimái a decimálisra a dec és a dec(p, s). A numerikus funkcionálisan megegyezik a tizedessel. See decimal and numeric. |
IntegerType, Integer, int |
int |
SparkIntegerType represents 4 byte signed integer numbers. 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: DoubleType 8 bájtos dupla pontosságú lebegőpontos számokat jelöl. SQL: See float and real. |
FloatType, float, real |
real |
Spark: FloatType 4 bájtos dupla pontosságú lebegőpontos számokat jelöl. SQL: See float and real. |
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: 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) egy változata, amely rögzített hosszúságú. A CharType(n) típusú olvasóoszlop mindig n hosszúságú sztringértékeket ad vissza. CharType(n) column comparison will pad the short one to the longer length. 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) lesz. Lásd a char és varchar-t. Use it with collation 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: A JSON szerializálása kollációval Latin1_General_100_BIN2_UTF8 történik. Lásd: JSON-adatok. |
Note
Database level collation is 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.
Examples
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.
Note
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