Aracılığıyla paylaş


Azure Synapse Analytics paylaşılan meta veri tabloları

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. Ayrıca izinlere tabi spark işlerinin herhangi birinden de kullanılabilirler.

Oluşturulan, yönetilen ve dış tablolar, sunucusuz SQL havuzundaki karşılık gelen eşitlenmiş veritabanında aynı ada sahip dış tablolar olarak da kullanılabilir 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 silin ve Spark'tan tablo 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 warehouse depolandığı dizinde depolanır.

  • Dış tablolar

    Spark, seçeneği sağlayarak LOCATION veya 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çimlerinin üzerinde olabilir.

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 geçiştir.

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 duyarlık ve ölçek 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 Spark IntegerType , 4 bayt işaretli tamsayı sayılarını temsil eder.
SQL: Bkz . int, bigint, smallint ve tinyint.
ByteType, Byte, tinyint smallint Spark: ByteType 1 bayt imzalı tamsayı sayılarını [-128 - 127] ve ShortType 2 bayt imzalı tamsayı sayılarını temsil eder [-32768 - 32767].
SQL: Tinyint 1 bayt imzalı tamsayı sayılarını [0, 255] ve smallint 2 bayt işaretli tamsayı sayılarını [-32768, 32767] temsil eder. 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 . kayan ve gerçek.
FloatType, float, real real Spark: FloatType , 4 baytlık çift duyarlıklı kayan nokta sayılarını temsil eder. SQL: Bkz . kayan ve gerçek.
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ütun ise, n en fazla 2048 olabilir. Aksi takdirde, varchar(max) olur. Bkz . char ve varchar.
Harmanlama Latin1_General_100_BIN2_UTF8ile 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ütun ise, n en fazla 2048 olabilir. Aksi takdirde, Varbinary (max) olur. Bkz. ikili 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ın yanı sıra SQL altyapısındaki eşitlenmiş gösterimleri temel depolama düzeyinde 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 myparquettable mytestdboluş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;

Sonuçlara dahil olduğunu myparquettable 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.dbo.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 mytestdbtabloyu myextneralparquettable 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;

Sonuçlara dahil olduğunu myexternalparquettable 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

Sonraki adımlar