Azure SQL Yönetilen Örneği ile veri sanallaştırma

Şunlar için geçerlidir:Azure SQL Yönetilen Örneği

Azure SQL Yönetilen Örneği'nin veri sanallaştırma özelliği, verileri Azure Data Lake Storage 2. Nesil veya Azure Blob Depolama ortak veri biçimlerinde depolanmış dosyalarda Transact-SQL (T-SQL) sorguları yürütmenize ve birleştirmeleri kullanarak yerel olarak depolanan ilişkisel verilerle birleştirmenize olanak tanır. Bu şekilde, veri sanallaştırma olarak da bilinen özgün biçiminde ve konumunda tutarken dış verilere (salt okunur modda) saydam bir şekilde erişebilirsiniz.

Genel bakış

Veri sanallaştırma, farklı senaryo kümelerine yönelik dosyaları sorgulamanın iki yolunu sağlar:

  • OPENROWSET söz dizimi – dosyaların geçici olarak sorgulanması için iyileştirilmiştir. Genellikle yeni bir dosya kümesinin içeriğini ve yapısını hızla keşfetmek için kullanılır.
  • CREATE EXTERNAL TABLE söz dizimi – veriler veritabanında yerel olarak depolanmış gibi aynı söz dizimi kullanılarak dosyaların tekrar tekrar sorgulanması için iyileştirilmiştir. Dış tablolar OPENROWSET söz dizimine kıyasla birkaç hazırlık adımı gerektirir, ancak veri erişimi üzerinde daha fazla denetime olanak sağlar. Dış tablolar genellikle analitik iş yükleri ve raporlama için kullanılır.

Her iki durumda da, bu makalede gösterildiği gibi CREATE EXTERNAL DATA SOURCE T-SQL söz dizimi kullanılarak bir dış veri kaynağı oluşturulmalıdır.

T-SQL SELECT deyiminin sonuçlarını Azure Blob Depolama veya Azure Data Lake Depolama (ADLS) 2. Nesil'deki Parquet veya CSV dosyalarına dışarı aktarmak ve bu dosyaların üzerinde bir dış tablo oluşturmak için Azure SQL Yönetilen Örneği için CREATE EXTERNAL TABLE AS SELECT söz dizimi de kullanılabilir.

Dosya biçimleri

Parquet ve sınırlandırılmış metin (CSV) dosya biçimleri doğrudan desteklenir. JSON dosya biçimi, sorguların her belgeyi ayrı bir satır olarak döndürdüğü CSV dosya biçimi belirtilerek dolaylı olarak desteklenir. ve OPENJSONkullanarak JSON_VALUE satırları daha fazla ayrıştırabilirsiniz.

Depolama türleri

Dosyalar Azure Data Lake Storage 2. Nesil veya Azure Blob Depolama depolanabilir. Dosyaları sorgulamak için konumu belirli bir biçimde sağlamanız ve aşağıdaki örnekler gibi dış kaynak ve uç nokta/protokol türüne karşılık gelen konum türü ön ekini kullanmanız gerekir:

--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet

--Data Lake endpoint
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.parquet

Önemli

Sağlanan Konum türü ön eki, iletişim için en uygun protokolü seçmek ve belirli bir depolama türü tarafından sunulan gelişmiş özelliklerden yararlanmak için kullanılır. Genel https:// ön ekin kullanılması devre dışı bırakılır. Uç noktaya özgü ön ekleri her zaman kullanın.

Kullanmaya başlayın

Veri sanallaştırmayı yeni kullanmaya başladıysanız ve işlevleri hızla test etmek istiyorsanız, anonim erişime izin veren Bing COVID-19 veri kümesi gibi Azure Açık Veri Kümelerinde kullanılabilen genel veri kümelerini sorgulayarak işe başlayın.

Bing COVID-19 veri kümelerini sorgulamak için aşağıdaki uç noktaları kullanın:

  • Parquet: abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet
  • CSV: abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv

Hızlı başlangıç için bu basit T-SQL sorgusunu çalıştırarak veri kümesiyle ilgili ilk içgörüleri alın. Bu sorgu, genel kullanıma açık bir depolama hesabında depolanan bir dosyayı sorgulamak için OPENROWSET kullanır:

--Quick query on a file stored in a publicly available storage account:
SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
 FORMAT = 'parquet'
) AS filerows

İlk sorgunun sonuç kümesine göre WHERE, GROUP BY ve diğer yan tümceleri ekleyerek veri kümesi keşfine devam edebilirsiniz.

Yönetilen örneğinizde ilk sorgu başarısız olursa bu örneğin Azure depolama hesaplarına erişimi kısıtlanmış olabilir ve sorgulamaya devam etmeden önce erişimi etkinleştirmek için ağ uzmanınızla görüşmeniz gerekir.

Genel veri kümelerini sorgulama hakkında bilgi edindikten sonra, kimlik bilgileri sağlamayı, erişim hakları vermeyi ve güvenlik duvarı kurallarını yapılandırmayı gerektiren abonelik dışı veri kümelerine geçmeyi göz önünde bulundurun. Birçok gerçek dünya senaryosunda öncelikli olarak özel veri kümeleriyle çalışacaksınız.

Abonelik dışı depolama hesaplarına erişim

Yönetilen bir örnekte oturum açmış bir kullanıcının, abonelik dışı bir depolama hesabında depolanan dosyalara erişme ve dosyaları sorgulama yetkisine sahip olması gerekir. Yetkilendirme adımları, yönetilen örneğin depolamada kimlik doğrulamasına bağlıdır. Kimlik doğrulaması türü ve ilgili parametreler doğrudan her sorguyla birlikte sağlanmaz. Bunlar, kullanıcı veritabanında depolanan veritabanı kapsamlı kimlik bilgisi nesnesinde kapsüllenir. Kimlik bilgisi, sorgu yürütülürken depolama hesabına erişmek için veritabanı tarafından kullanılır. Azure SQL Yönetilen Örneği aşağıdaki kimlik doğrulama türlerini destekler:

Yönetilen kimlik, Microsoft Entra Id'de yönetilen bir kimlikle Azure SQL Yönetilen Örneği gibi Azure hizmetleri sağlayan bir Microsoft Entra Id (eski adıyla Azure Active Directory) özelliğidir. Bu kimlik, abonelik dışı depolama hesaplarında veri erişimi isteklerini yetkilendirmek için kullanılabilir. Azure SQL Yönetilen Örneği gibi hizmetlerin sistem tarafından atanan yönetilen kimliği vardır ve kullanıcı tarafından atanan bir veya daha fazla yönetilen kimlik de olabilir. Azure SQL Yönetilen Örneği ile veri sanallaştırma için sistem tarafından atanan yönetilen kimlikleri veya kullanıcı tarafından atanan yönetilen kimlikleri kullanabilirsiniz.

Azure depolama yöneticisinin önce yönetilen kimliğe verilere erişmek için izin vermesi gerekir. Yönetilen örneğin sistem tarafından atanan yönetilen kimliğine izinleri, diğer Microsoft Entra kullanıcılarına verilen izinlerle aynı şekilde verin. Örneğin:

  1. Azure portalında, depolama hesabının Erişim Denetimi (IAM) sayfasında Rol ataması ekle'yi seçin.
  2. Depolama Blob Veri Okuyucusu yerleşik Azure RBAC rolünü seçin. Bu, gerekli Azure Blob Depolama kapsayıcıları için yönetilen kimliğe okuma erişimi sağlar.
    • Yönetilen kimliğe Depolama Blob Veri Okuyucusu Azure RBAC rolü vermek yerine, dosyaların bir alt kümesi üzerinde daha ayrıntılı izinler de vekleyebilirsiniz. Bu kapsayıcıdaki bazı verileri tek tek oku dosyalarına erişmesi gereken tüm kullanıcıların köke (kapsayıcı) kadar olan tüm üst klasörlerde Yürütme iznine de sahip olması gerekir. Azure Data Lake Storage 2. Nesil'da ACL'leri ayarlama hakkında daha fazla bilgi edinin.
  3. Sonraki sayfada Yönetilen kimliğe erişim ata'yıseçin. + Üyeleri seçin ve Yönetilen kimlik açılan listesinin altında istediğiniz yönetilen kimliği seçin. Daha fazla bilgi edinmek için bkz. Azure portal kullanarak Azure rolleri atama.
  4. Ardından, yönetilen kimlik kimlik doğrulaması için veritabanı kapsamlı kimlik bilgilerini oluşturmak kolaydır. Aşağıdaki örnekte sabit kodlanmış bir dize olduğuna 'Managed Identity' dikkat edin.
-- Optional: Create MASTER KEY if it doesn't exist in the database:
-- CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Some Very Strong Password Here>'
GO
CREATE DATABASE SCOPED CREDENTIAL MyCredential
WITH IDENTITY = 'Managed Identity'

Dış veri kaynağı

Dış veri kaynağı, bir dosya konumunun birden çok sorguda kolayca başvurulabilmesini sağlayan bir soyutlamadır. Genel konumları sorgulamak için dış veri kaynağı oluştururken belirtmeniz gereken tek şey dosya konumudur:

CREATE EXTERNAL DATA SOURCE MyExternalDataSource
WITH (
    LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
)

Konumla birlikte, abonelik dışı depolama hesaplarına erişirken, kapsüllenmiş kimlik doğrulama parametreleriyle veritabanı kapsamlı bir kimlik bilgilerine de başvurmanız gerekir. Aşağıdaki betik, dosya yoluna işaret eden ve veritabanı kapsamlı bir kimlik bilgilerine başvuran bir dış veri kaynağı oluşturur.

--Create external data source pointing to the file path, and referencing database-scoped credential:
CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
WITH (
    LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
        CREDENTIAL = [MyCredential];
)

OPENROWSET kullanarak veri kaynaklarını sorgulama

OPENROWSET söz dizimi, anlık geçici sorgulamayı etkinleştirirken yalnızca gerekli veritabanı nesnelerinin en az sayıda oluşturulmasını sağlar.

OPENROWSETdış dosya biçimini ve dış tablonun kendisini gerektiren dış tablo yaklaşımının aksine yalnızca dış veri kaynağının (ve muhtemelen kimlik bilgilerinin) oluşturulmasını gerektirir.

Parametre DATA_SOURCE değeri, dosyanın tam yolunu oluşturmak için bulk parametresine otomatik olarak eklenir.

kullanırken OPENROWSET , tek bir dosyayı sorgulayan aşağıdaki örnek gibi dosyanın biçimini sağlayın:

SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'bing_covid-19_data.parquet',
 DATA_SOURCE = 'MyExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

Birden çok dosya ve klasörü sorgulama

Komutu, OPENROWSET BULK yolunda joker karakterler kullanarak birden çok dosya veya klasörün sorgulanmasına da olanak tanır.

Aşağıdaki örnekte NYC sarı taksi yolculuğu kayıtları açık veri kümesi kullanılır.

İlk olarak dış veri kaynağını oluşturun:

--Create the data source first:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');

Artık klasörlerdeki .parquet uzantısına sahip tüm dosyaları sorgulayabiliriz. Örneğin, burada yalnızca ad deseni ile eşleşen dosyaları sorgulayacağız:

--Query all files with .parquet extension in folders matching name pattern:
SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

Birden çok dosya veya klasör sorgulanırken, tek OPENROWSET ile erişilen tüm dosyaların aynı yapıya (aynı sayıda sütun ve veri türü gibi) sahip olması gerekir. Klasörler özyinelemeli olarak geçirilemiyor.

Şema çıkarımı

Otomatik şema çıkarımı, dosya şemalarını bilmediğiniz durumlarda hızlı bir şekilde sorgu yazmanıza ve verileri keşfetmenize yardımcı olur. Şema çıkarımı yalnızca parquet dosyalarıyla çalışır.

Uygun olsa da, kaynak dosyalarda uygun veri türünün kullanıldığından emin olmak için yeterli bilgi olabileceğinden, çıkarım yapılan veri türleri gerçek veri türlerinden daha büyük olabilir. Bu da düşük sorgu performansına yol açar. Örneğin, parquet dosyaları maksimum karakter sütunu uzunluğuyla ilgili meta veriler içermez, bu nedenle örnek bunu varchar(8000) olarak çıkarsar.

Aşağıdaki örnekte gösterildiği gibi, sorgunuzun sonucunda elde edilen veri türlerini denetlemek için sp_describe_first_results_set saklı yordamını kullanın:

EXEC sp_describe_first_result_set N'
 SELECT
 vendorID, tpepPickupDateTime, passengerCount
 FROM
 OPENROWSET(
  BULK ''yellow/*/*/*.parquet'',
  DATA_SOURCE = ''NYCTaxiExternalDataSource'',
  FORMAT=''parquet''
 ) AS nyc';

Veri türlerini bildiğinizde, performansı geliştirmek için yan tümcesini WITH kullanarak bunları belirtebilirsiniz:

SELECT TOP 100
 vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
 BULK 'yellow/*/*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT='PARQUET'
 )
WITH (
vendorID varchar(4), -- we're using length of 4 instead of the inferred 8000
tpepPickupDateTime datetime2,
passengerCount int
) AS nyc;

CSV dosyalarının şeması otomatik olarak belirlenemediğinden sütunların her zaman şu yan tümcesi WITH kullanılarak belirtilmesi gerekir:

SELECT TOP 10 id, updated, confirmed, confirmed_change
FROM OPENROWSET(
 BULK 'bing_covid-19_data.csv',
 DATA_SOURCE = 'MyExternalDataSource',
 FORMAT = 'CSV',
 FIRSTROW = 2
)
WITH (
 id int,
 updated date,
 confirmed int,
 confirmed_change int
) AS filerows;

Dosya meta veri işlevleri

Birden çok dosya veya klasörü sorgularken, dosya meta verilerini okumak ve sonuç kümesindeki satırın kaynaklandığı dosyanın yolunun veya tam yolunun ve adının bir kısmını almak için ve filename() işlevlerini kullanabilirsinizfilepath():

--Query all files and project file path and file name information for each row:
SELECT TOP 10 filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder],
filerows.filename() as [File_name], filerows.filepath() as [Full_Path], *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet') AS filerows;
--List all paths:
SELECT DISTINCT filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet') AS filerows;

Parametresiz çağrıldığında işlev, filepath() satırın kaynaklandığı dosya yolunu döndürür. DATA_SOURCE içinde OPENROWSETkullanıldığında, yoluna göre DATA_SOURCEyolunu döndürür, aksi takdirde tam dosya yolunu döndürür.

Parametresiyle çağrıldığında, parametresinde belirtilen konumda joker karakterle eşleşen yolun bir bölümünü döndürür. Örneğin, parametre değeri 1, yolun ilk joker karakterle eşleşen bir bölümünü döndürür.

İşlev, filepath() satırları filtrelemek ve toplamak için de kullanılabilir:

SELECT
 r.filepath() AS filepath
 ,r.filepath(1) AS [year]
 ,r.filepath(2) AS [month]
 ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
 ) AS r
WHERE
 r.filepath(1) IN ('2017')
 AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
 r.filepath()
 ,r.filepath(1)
 ,r.filepath(2)
ORDER BY
 filepath;

OPENROWSET'in üzerinde görünüm oluşturma

Temel alınan sorguyu kolayca yeniden kullanabilmek için OPENROWSET sorgularını sarmak için görünümler oluşturabilir ve kullanabilirsiniz:

CREATE VIEW TaxiRides AS
SELECT *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows

Daha kolay ve daha performanslı filtreleme için işlevini kullanarak dosya konumu verilerini içeren sütunları bir görünüme filepath() eklemek de kullanışlıdır. Görünümlerin kullanılması, bu sütunlardan herhangi birine göre filtrelendiğinde, görünümün üstündeki sorgunun okuması ve işlemesi gereken dosya sayısını ve veri miktarını azaltabilir:

CREATE VIEW TaxiRides AS
SELECT *
 , filerows.filepath(1) AS [year]
 , filerows.filepath(2) AS [month]
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows

Görünümler, Power BI gibi raporlama ve analiz araçlarının sonuçlarını kullanmasına OPENROWSETda olanak tanır.

Dış tablolar

Dış tablolar dosyalara erişimi kapsüller ve bu da sorgulama deneyiminin kullanıcı tablolarında depolanan yerel ilişkisel verileri sorgulamayla neredeyse aynı olmasını sağlar. Dış tablo oluşturmak için dış veri kaynağı ve dış dosya biçimi nesnelerinin mevcut olması gerekir:

--Create external file format
CREATE EXTERNAL FILE FORMAT DemoFileFormat
WITH (
 FORMAT_TYPE=PARQUET
)
GO

--Create external table:
CREATE EXTERNAL TABLE tbl_TaxiRides(
 vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
 tpepPickupDateTime DATETIME2,
 tpepDropoffDateTime DATETIME2,
 passengerCount INT,
 tripDistance FLOAT,
 puLocationId VARCHAR(8000),
 doLocationId VARCHAR(8000),
 startLon FLOAT,
 startLat FLOAT,
 endLon FLOAT,
 endLat FLOAT,
 rateCodeId SMALLINT,
 storeAndFwdFlag VARCHAR(8000),
 paymentType VARCHAR(8000),
 fareAmount FLOAT,
 extra FLOAT,
 mtaTax FLOAT,
 improvementSurcharge VARCHAR(8000),
 tipAmount FLOAT,
 tollsAmount FLOAT,
 totalAmount FLOAT
)
WITH (
 LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = NYCTaxiExternalDataSource,
 FILE_FORMAT = DemoFileFormat
);
GO

Dış tablo oluşturulduktan sonra, bunu diğer tüm tablolarda olduğu gibi sorgulayabilirsiniz:

SELECT TOP 10 *
FROM tbl_TaxiRides;

Aynı gibi OPENROWSET, dış tablolar da joker karakterler kullanarak birden çok dosya ve klasörün sorgulanmasına izin verir. Şema çıkarımı dış tablolarda desteklenmez.

Performans değerlendirmeleri

Dosya sayısı veya sorgulanabilecek veri miktarıyla ilgili sabit bir sınır yoktur, ancak sorgu performansı veri miktarına, veri biçimine, verilerin düzenlenme biçimine ve sorguların ve birleştirmelerin karmaşıklığına bağlıdır.

Bölümlenmiş verileri sorgulama

Veriler genellikle bölümler olarak da adlandırılan alt klasörlerde düzenlenir. Yönetilen örneğe yalnızca belirli klasörleri ve dosyaları sorgulamasını sağlayabilirsiniz. Bunun yapılması, dosya sayısını ve sorgunun okuması ve işlemesi gereken veri miktarını azaltarak daha iyi performans sağlar. Bu tür bir sorgu iyileştirmesi, bölüm ayıklama veya bölüm eleme olarak bilinir. Sorgunun WHERE yan tümcesindeki meta veri işlevini filepath() kullanarak bölümleri sorgu yürütmeden kaldırabilirsiniz.

Aşağıdaki örnek sorgu, NYC Yellow Taxi veri dosyalarını yalnızca 2017'nin son üç ayı için okur:

SELECT
    r.filepath() AS filepath
    ,r.filepath(1) AS [year]
    ,r.filepath(2) AS [month]
    ,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
        BULK 'yellow/puYear=*/puMonth=*/*.parquet',
        DATA_SOURCE = 'NYCTaxiExternalDataSource',
        FORMAT = 'parquet'
    )
WITH (
    vendorID INT
) AS [r]
WHERE
    r.filepath(1) IN ('2017')
    AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
    r.filepath()
    ,r.filepath(1)
    ,r.filepath(2)
ORDER BY
    filepath;

Depolanan verileriniz bölümlenmemişse, sorgu performansını geliştirmek için bu verileri bölümlendirebilirsiniz.

Dış tablolar filepath() kullanıyorsanız ve filename() işlevler desteklenir ancak WHERE yan tümcesinde desteklenmez. Yine de veya bunları hesaplanan sütunlarda kullanıyorsanız filtreleyebilirsiniz filenamefilepath . Aşağıdaki örnek bunu gösterir:

CREATE EXTERNAL TABLE tbl_TaxiRides (
 vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
 tpepPickupDateTime DATETIME2,
 tpepDropoffDateTime DATETIME2,
 passengerCount INT,
 tripDistance FLOAT,
 puLocationId VARCHAR(8000),
 doLocationId VARCHAR(8000),
 startLon FLOAT,
 startLat FLOAT,
 endLon FLOAT,
 endLat FLOAT,
 rateCodeId SMALLINT,
 storeAndFwdFlag VARCHAR(8000),
 paymentType VARCHAR(8000),
 fareAmount FLOAT,
 extra FLOAT,
 mtaTax FLOAT,
 improvementSurcharge VARCHAR(8000),
 tipAmount FLOAT,
 tollsAmount FLOAT,
 totalAmount FLOAT,
 [Year]  AS CAST(filepath(1) AS INT), --use filepath() for partitioning
 [Month]  AS CAST(filepath(2) AS INT) --use filepath() for partitioning
)
WITH (
 LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = NYCTaxiExternalDataSource,
 FILE_FORMAT = DemoFileFormat
);
GO

SELECT *
      FROM tbl_TaxiRides
WHERE
      [year]=2017            
      AND [month] in (10,11,12);

Depolanan verileriniz bölümlenmemişse, sorgu performansını geliştirmek için bu verileri bölümlendirebilirsiniz.

İstatistikler

Dış verilerinizle ilgili istatistikleri toplamak, sorgu iyileştirme için yapabileceğiniz en önemli şeylerden biridir. Örneğiniz verileriniz hakkında ne kadar çok bilgi edinebilirse sorguları o kadar hızlı yürütebilir. SQL altyapısı sorgu iyileştiricisi, maliyet tabanlı bir iyileştiricidir. Çeşitli sorgu planlarının maliyetini karşılaştırır ve ardından planı en düşük maliyetle seçer. Çoğu durumda, en hızlı yürüten planı seçer.

İstatistiklerin otomatik olarak oluşturulması

Azure SQL Yönetilen Örneği eksik istatistikler için gelen kullanıcı sorgularını analiz eder. İstatistikler eksikse sorgu iyileştiricisi, sorgu planı için kardinalite tahminlerini geliştirmek için sorgu koşulundaki veya birleştirme koşulundaki tek tek sütunlara ilişkin istatistikleri otomatik olarak oluşturur. İstatistiklerin otomatik olarak oluşturulması zaman uyumlu olarak yapılır, bu nedenle sütunlarınızda istatistik eksikse sorgu performansının biraz düşmesine neden olabilirsiniz. Tek bir sütun için istatistik oluşturma süresi, hedeflenen dosyaların boyutuna bağlıdır.

OPENROWSET el ile istatistikler

Yol için OPENROWSET tek sütunlu istatistikler, saklı yordam kullanılarak sys.sp_create_openrowset_statistics tek sütunlu seçme sorgusu parametre olarak geçirilerek oluşturulabilir:

EXEC sys.sp_create_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
 BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
 FORMAT = ''parquet'') AS filerows
';

Varsayılan olarak, örnek istatistik oluşturmak için veri kümesinde sağlanan verilerin %100'unu kullanır. İsteğe bağlı olarak, seçenekleri kullanarak TABLESAMPLE örnek boyutunu yüzde olarak belirtebilirsiniz. Birden çok sütun için tek sütunlu istatistikler oluşturmak için, sütunların her biri için yürütür sys.sp_create_openrowset_statistics . Yol için OPENROWSET çok sütunlu istatistikler oluşturamazsınız.

Mevcut istatistikleri güncelleştirmek için önce saklı yordamı kullanarak sys.sp_drop_openrowset_statistics bunları bırakın ve ardından kullanarak sys.sp_create_openrowset_statisticsyeniden oluşturun:

EXEC sys.sp_drop_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
 BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
 FORMAT = ''parquet'') AS filerows
';

Dış tablo el ile istatistikler

Dış tablolarda istatistik oluşturmaya yönelik söz dizimi, sıradan kullanıcı tablolarında kullanılana benzer. Bir sütunda istatistik oluşturmak için istatistik nesnesi için bir ad ve sütunun adını belirtin:

CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;

Seçenekler WITH zorunlu olup örnek boyutu için izin verilen seçenekler ve SAMPLE n yüzdesidirFULLSCAN.

  • Birden çok sütun için tek sütunlu istatistikler oluşturmak için, sütunların her biri için yürütür CREATE STATISTICS .
  • Çok sütunlu istatistikler desteklenmez.

Sorun giderme

Sorgu yürütmeyle ilgili sorunlar genellikle yönetilen örneğin dosya konumuna erişemediğinden kaynaklanıyor. İlgili hata iletileri yetersiz erişim hakları, var olmayan konum veya dosya yolu, başka bir işlem tarafından kullanılan dosya veya bu dizin listelenemez. Çoğu durumda bu, dosyalara erişimin ağ trafiği denetim ilkeleri tarafından veya erişim haklarının olmaması nedeniyle engellendiğini gösterir. Denetlenmesi gereken budur:

  • Yanlış veya yazım hatası içeren konum yolu.
  • SAS anahtarı geçerliliği: Soru işaretiyle başlayarak yazım hatası içeren süresi dolmuş olabilir.
  • İzin verilen SAS anahtarı izinleri: En az okuma ve joker karakterler kullanılıyorsa listeleme .
  • Depolama hesabında gelen trafik engellendi. Daha fazla ayrıntı için Azure Depolama için sanal ağ kurallarını yönetme bölümüne bakın ve yönetilen örnek sanal ağından erişime izin verildiğinden emin olun.
  • Depolama uç noktası ilkesi kullanılarak yönetilen örnekte giden trafik engellendi. Depolama hesabına giden trafiğe izin verin.
  • Yönetilen Kimlik erişim hakları: Örneğin yönetilen kimliğine depolama hesabı için erişim hakları verildiğinden emin olun.
  • Veri sanallaştırma sorgularının çalışması için veritabanının uyumluluk düzeyi 130 veya daha yüksek olmalıdır.

CREATE EXTERNAL TABLE AS SELECT (CETAS)

CREATE EXTERNAL TABLE AS SELECT (CETAS), SQL yönetilen örneğinizdeki verileri bir dış depolama hesabına dışarı aktarmanıza olanak tanır. Parquet veya CSV dosyalarının üzerinde Azure Blob depolama veya Azure Data Lake Depolama (ADLS) 2. Nesil üzerinde dış tablo oluşturmak için CETAS kullanabilirsiniz. CETAS, T-SQL SELECT deyiminin sonuçlarını paralel olarak oluşturulan dış tabloya da dışarı aktarabilir. Bu özelliklerle veri sızdırma riski söz konusu olduğundan CETAS, Azure SQL Yönetilen Örneği için varsayılan olarak devre dışı bırakılır. Etkinleştirmek için bkz . CREATE EXTERNAL TABLE AS SELECT (CETAS).

Sınırlamalar

Bilinen sorunlar

  • SQL Server Management Studio'da (SSMS) Always Encrypted parametresi etkinleştirildiğinde veri sanallaştırma sorguları hata iletisiyle Incorrect syntax near 'PUSHDOWN' başarısız olur.