Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure Synapse Analytics, farklı çalışma alanı hesaplama altyapılarının Apache Spark havuzları ile sunucusuz SQL havuzu arasında veritabanlarını ve tabloları paylaşmasına olanak tanır.
Spark işi tarafından bir veritabanı oluşturulduktan sonra, Spark ile depolama biçimi olarak Parquet, Delta veya CSV kullanan tablolar oluşturabilirsiniz. Tablo adları küçük harfe dönüştürülür ve küçük harf adı kullanılarak sorgulanması gerekir. Bu tablolar, Azure Synapse çalışma alanı Spark havuzlarından herhangi biri tarafından sorgulanabilir duruma gelir. İzinlere tabi olmak kaydıyla Spark işlerinin herhangi birinden de kullanılabilirler.
Spark tarafından oluşturulan, yönetilen ve dış tablolar, sunucusuz SQL havuzundaki karşılık gelen eşitlenmiş veritabanında aynı adla dış tablolar olarak da erişilebilir hale getirilir. SPARK tablosunu SQL'de görüntülemek, tablo eşitlemesi hakkında daha fazla ayrıntı sağlar.
Tablolar sunucusuz SQL havuzuna zaman uyumsuz olarak eşitlenmiş olduğundan, görüntülenene kadar küçük bir gecikme olacaktır.
Spark tarafından oluşturulan tabloyu yönetme
Spark tarafından oluşturulan veritabanlarını yönetmek için Spark'ı kullanın. Örneğin sunucusuz bir Apache Spark havuz işi aracılığıyla bir veritabanı oluşturun ve Spark'tan veritabanında tablolar oluşturun.
Eşitlenmiş veritabanlarındaki nesneler sunucusuz SQL havuzundan değiştirilemez.
SQL'de Spark tablosunu kullanıma sunma
Paylaşılan Spark tabloları
Spark, Azure Synapse'in SQL'de otomatik olarak kullanıma sunduğu iki tür tablo sağlar:
Yönetilen tablolar
Spark, text, CSV, JSON, JDBC, PARQUET, ORC, HIVE, DELTA ve LIBSVM gibi yönetilen tablolarda veri depolamaya yönelik birçok seçenek sağlar. Bu dosyalar normalde yönetilen tablo verilerinin
warehousedepolandığı dizinde depolanır.Dış tablolar
Spark, seçeneği sağlayarak
LOCATIONveya Hive biçimini kullanarak mevcut veriler üzerinde dış tablolar oluşturmanın yollarını da sağlar. Bu tür dış tablolar, Parquet de dahil olmak üzere çeşitli veri biçimlerini destekleyebilir.
Azure Synapse şu anda yalnızca verilerini Parquet, DELTA veya CSV biçiminde depolayan yönetilen ve dış Spark tablolarını SQL altyapılarıyla paylaşır. Diğer biçimler tarafından yedeklenen tablolar otomatik olarak eşitlenmez. SQL altyapısı tablonun temel biçimini destekliyorsa, bu tür tabloları kendi SQL veritabanınızda bir dış tablo olarak açıkça eşitleyebilirsiniz.
Not
Şu anda sunucusuz SQL havuzunda yalnızca Parquet ve CSV biçimleri tam olarak desteklenmektedir. Spark Delta tabloları sunucusuz SQL havuzunda da kullanılabilir, ancak bu özellik genel önizleme aşamasındadır. Spark'ta oluşturulan dış tablolar ayrılmış SQL havuzu veritabanlarında kullanılamaz.
Spark tablolarını paylaşma
SQL altyapısında aşağıdaki özelliklere sahip dış tablolar olarak kullanıma sunulan paylaşılabilir yönetilen ve dış Spark tabloları:
- SQL dış tablosunun veri kaynağı, Spark tablosunun konum klasörünü temsil eden veri kaynağıdır.
- SQL dış tablosunun dosya biçimi Parquet, Delta veya CSV'dir.
- SQL dış tablosunun erişim kimlik bilgileri doğrudan iletme olarak ayarlanmıştır.
Tüm Spark tablo adları geçerli SQL tablo adları ve tüm Spark sütun adları geçerli SQL sütun adları olduğundan, SPARK tablosu ve sütun adları SQL dış tablosu için kullanılır.
Spark tabloları Synapse SQL altyapılarından farklı veri türleri sağlar. Aşağıdaki tabloda Spark tablosu veri türleri SQL türleriyle eşlenmiştir:
| Spark veri türü | SQL veri türü | Açıklamalar |
|---|---|---|
LongType, long, bigint |
bigint |
Spark: LongType , 8 bayt imzalı tamsayı sayılarını temsil eder. SQL: Bkz . int, bigint, smallint ve tinyint. |
BooleanType, boolean |
bit (Parquet), varchar(6) (CSV) |
Spark: Boole. SQL: Bkz. [/sql/t-sql/data-types/bit-transact-sql). |
DecimalType, decimal, dec, numeric |
decimal |
Spark: DecimalType rastgele duyarlıklı imzalı ondalık sayıları temsil eder. java.math.BigDecimal tarafından dahili olarak yedeklendi. BigDecimal, rastgele bir duyarlık tamsayı ölçeklendirilmemiş değerden ve 32 bit tamsayı ölçeğinden oluşur. SQL: Sabit hassasiyet ve ölçekli sayılar. En yüksek duyarlık kullanıldığında, geçerli değerler - 10^38 +1 ile 10^38 - 1 arasında olur. Ondalık için ISO eş anlamlıları dec ve dec(p, s) şeklindedir. sayısal, işlevsel olarak ondalıkla aynıdır. Bkz. ondalık ve sayısal. |
IntegerType, Integer, int |
int |
SparkIntegerType , 4 bayt imzalı tamsayı sayısını temsil eder. SQL: Bkz . int, bigint, smallint ve tinyint. |
ByteType, Byte, tinyint |
smallint |
Spark: ByteType 1 bayt işaretli tamsayı sayısını temsil eder [-128 - 127] ve ShortType 2 bayt işaretli tamsayı sayısını [-32768 ile 32767] temsil eder. SQL: Tinyint 1 bayt işaretli tamsayı sayısını temsil eder [0, 255] ve smallint 2 bayt işaretli tamsayı sayısını temsil eder [-32768, 32767]. Bkz . int, bigint, smallint ve tinyint. |
ShortType, Short, smallint |
smallint |
Yukarıdakiyle aynıdır. |
DoubleType, Double |
float |
Spark: DoubleType , 8 baytlık çift duyarlıklı kayan nokta sayılarını temsil eder. SQL: Bkz float ve real. |
FloatType, float, real |
real |
Spark: FloatType , 4 baytlık çift duyarlıklı kayan nokta sayılarını temsil eder. SQL: float ve real konularına bakın. |
DateType, date |
date |
Spark: DateType , saat dilimi olmadan yıl, ay ve gün alanlarının değerlerini içeren değerleri temsil eder. SQL: Tarihe bakın. |
TimestampType, timestamp |
datetime2 |
Spark: TimestampType , oturum yerel saat dilimiyle yıl, ay, gün, saat, dakika ve saniye alanlarının değerlerini içeren değerleri temsil eder. Zaman damgası değeri, zaman içinde mutlak bir noktayı temsil eder. SQL: Bkz . datetime2. |
char |
char |
|
StringType, String, varchar |
Varchar(n) |
Spark: StringType , karakter dizesi değerlerini temsil eder.
VarcharType(n), uzunluk sınırlaması olan bir StringType değişkenidir. Giriş dizesi uzunluk sınırlamasını aşarsa veri yazma işlemi başarısız olur. Bu tür yalnızca tablo şemasında kullanılabilir, işlevlerde/işleçlerde kullanılamaz. CharType(n), sabit uzunlukta bir VarcharType(n) değişkenidir. CharType(n) türünde okuma sütunu her zaman n uzunluğunda dize değerleri döndürür. CharType(n) sütun karşılaştırması, kısa olanı uzun uzunluğa ekler. SQL: Spark'tan sağlanan bir uzunluk varsa, varchar(n) cinsinden n bu uzunluğa ayarlanır. Bölümlenmiş sütunsa, n en fazla 2048 olabilir. Aksi takdirde, varchar(max) olur. Bkz char ve varchar. Harmanlama Latin1_General_100_BIN2_UTF8 ile kullanın. |
BinaryType, binary |
varbinary(n) |
SQL: Spark'tan sağlanan bir uzunluk varsa, n Varbinary(n) içinde bu uzunluğa ayarlanır. Bölümlenmiş sütunsa, n en fazla 2048 olabilir. Aksi takdirde, Varbinary (max) olur. Bkz. binary ve varbinary. |
array, map, struct |
varchar(max) |
SQL: Harmanlama ile JSON olarak seri hale getirmektedir Latin1_General_100_BIN2_UTF8. Bkz. JSON Verileri. |
Not
Veritabanı düzeyinde harmanlama şeklindedir Latin1_General_100_CI_AS_SC_UTF8.
Güvenlik modeli
Spark veritabanları ve tabloları ile bunların SQL motorundaki eşitlenmiş gösterimleri, verinin depolandığı alt seviyede güvenli hale getirilecektir. Şu anda nesneler üzerinde izinleri olmadığından, nesneler nesne gezgininde görülebilir.
Yönetilen tabloyu oluşturan güvenlik sorumlusu o tablonun sahibi kabul edilir ve hem o tablo hem de temel klasörler ve dosyalar üzerinde tüm haklara sahip olur. Buna ek olarak, veritabanının sahibi otomatik olarak tablonun ikincil sahibi olur.
Kimlik doğrulaması geçişiyle bir Spark veya SQL dış tablosu oluşturursanız, veriler yalnızca klasör ve dosya düzeylerinde güvenlik altına alır. Birisi bu tür bir dış tabloyu sorgularsa, sorguyu gönderenin güvenlik kimliği dosya sistemine geçirilir ve orada erişim hakları denetlenir.
Klasörler ve dosyalar üzerinde izinleri ayarlama hakkında daha fazla bilgi için bkz . Azure Synapse Analytics paylaşılan veritabanı.
Örnekler
Spark'ta yönetilen tablo oluşturma ve sunucusuz SQL havuzundan sorgulama
Bu senaryoda adlı mytestdbbir Spark veritabanınız vardır. Bkz. Sunucusuz SQL havuzuyla Spark veritabanı oluşturma ve veritabanına bağlanma.
Aşağıdaki komutu çalıştırarak SparkSQL ile yönetilen bir Spark tablosu oluşturun:
CREATE TABLE mytestdb.myparquettable(id int, name string, birthdate date) USING Parquet
Bu komut veritabanında tabloyu myparquettablemytestdboluşturur. Tablo adları küçük harfe dönüştürülür. Kısa bir gecikmeden sonra, tabloyu sunucusuz SQL havuzunuzda görebilirsiniz. Örneğin sunucusuz SQL havuzunuzdan aşağıdaki deyimi çalıştırın.
USE mytestdb;
SELECT * FROM sys.tables;
myparquettable'nin sonuçlara dahil olduğunu doğrulayın.
Not
Depolama biçimi olarak Delta, Parquet veya CSV kullanmayan bir tablo eşitlenmez.
Ardından Spark'tan tabloya bazı değerler ekleyin; örneğin, C# not defterindeki aşağıdaki C# Spark deyimleriyle:
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");
Artık sunucusuz SQL havuzunuzdaki verileri aşağıdaki gibi okuyabilirsiniz:
SELECT * FROM mytestdb.myparquettable WHERE name = 'Alice';
Sonuç olarak aşağıdaki satırı almanız gerekir:
id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01
Spark'ta dış tablo oluşturma ve sunucusuz SQL havuzundan sorgulama
Bu örnekte, yönetilen tablo için önceki örnekte oluşturulan Parquet veri dosyalarının üzerinde bir dış Spark tablosu oluşturacağız.
Örneğin, SparkSQL ile şunu çalıştırın:
CREATE TABLE mytestdb.myexternalparquettable
USING Parquet
LOCATION "abfss://<storage-name>.dfs.core.windows.net/<fs>/synapse/workspaces/<synapse_ws>/warehouse/mytestdb.db/myparquettable/"
Yer tutucusunu <storage-name> kullandığınız ADLS 2. Nesil depolama hesabı adıyla, <fs> kullandığınız dosya sistemi adıyla ve yer tutucusunu <synapse_ws> da bu örneği çalıştırmak için kullandığınız Azure Synapse çalışma alanının adıyla değiştirin.
Önceki örnek, veritabanında myextneralparquettabletabloyu mytestdb oluşturur. Kısa bir gecikmeden sonra, tabloyu sunucusuz SQL havuzunuzda görebilirsiniz. Örneğin sunucusuz SQL havuzunuzdan aşağıdaki deyimi çalıştırın.
USE mytestdb;
SELECT * FROM sys.tables;
myexternalparquettable sonuçlarda yer aldığını doğrulayın.
Artık sunucusuz SQL havuzunuzdaki verileri aşağıdaki gibi okuyabilirsiniz:
SELECT * FROM mytestdb.dbo.myexternalparquettable WHERE name = 'Alice';
Sonuç olarak aşağıdaki satırı almanız gerekir:
id | name | birthdate
---+-------+-----------
1 | Alice | 2010-01-01