Aracılığıyla paylaş


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

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

Bu makalede Azure SQL Yönetilen Örneği'nin veri sanallaştırma özelliği açıklanmaktadır. Veri sanallaştırma, Azure Data Lake Storage 2. Nesil veya Azure Blob Depolama'da verileri ortak veri biçimlerinde depolayan dosyalarda Transact-SQL (T-SQL) sorguları yürütmenizi sağlar. Birleştirmeleri kullanarak bu verileri yerel olarak depolanan ilişkisel verilerle birleştirebilirsiniz. Veri sanallaştırma ile, dış verilere salt okunur modda saydam bir şekilde erişebilir ve bunu özgün biçiminde ve konumunda tutabilirsiniz.

Genel bakış

Veri sanallaştırma, farklı senaryo kümelerine yönelik dosyaları sorgulamak için iki yol 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. Analitik iş yükleri ve raporlama için dış tabloları kullanın.

Her iki durumda da, bu makalede gösterildiği gibi CREATE EXTERNAL DATA SOURCE T-SQL söz dizimini kullanarak bir dış veri kaynağı oluşturun.

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

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 JSON_VALUEkullanarak OPENJSON satırları daha fazla ayrıştırabilirsiniz.

Depolama türleri

Dosyaları Azure Data Lake Storage 2. Nesil'de veya Azure Blob Depolama'da depolayın. Dosyaları sorgulamak için konumu belirli bir biçimde sağlayın ve aşağıdaki örnekler gibi dış kaynak ve uç nokta veya protokol türüne karşılık gelen konum türü ön ekini kullanın:

--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ş özellikleri kullanmak 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 bulunan 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:

  • Parke: 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 bir T-SQL sorgusu ç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 dayalı olarak WHERE, GROUP BY ve diğer yan tümceleri ekleyerek veri kümesi keşfine devam edebilirsiniz.

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

Genel veri kümelerini sorgulama hakkında bilgi sahibi olduğunuzda, kimlik bilgileri sağlama, erişim hakları verme ve güvenlik duvarı kurallarını yapılandırma 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ışırsınız.

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

SQL yönetilen örneğinde oturum açan 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ı, SQL yönetilen örneğinin depolama hesabına nasıl kimlik doğruladığına bağlıdır. Kimlik doğrulaması türü ve ilgili parametreler doğrudan her sorguyla birlikte sağlanmamıştır. Kullanıcı veritabanında depolanan veritabanı kapsamlı kimlik bilgisi nesnesi bu bilgileri kapsüller. Veritabanı, sorgu yürütülürken depolama hesabına erişmek için kimlik bilgilerini kullanır.

Azure SQL Yönetilen Örneği aşağıdaki kimlik doğrulama türlerini destekler:

  • İdare edilen kimlik
  • Paylaşılan erişim imzası (SAS)

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 kimliği, abonelik dışı depolama hesaplarında veri erişimi isteklerini yetkilendirmek için kullanabilirsiniz. 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. SQL yönetilen örneğinin sistem tarafından atanan yönetilen kimliğine, diğer Microsoft Entra kullanıcılarına izin verdiğiniz gibi izni 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 Blobu Veri Okuyucusu yerleşik Azure RBAC rolünü seçin. Bu rol, 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 verilerdeki tek tek dosyaları okuma erişimine sahip olması 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. Daha fazla bilgi için bkz. Azure Data Lake Storage 2. Nesil'de ACL'leri ayarlama.
  3. Sonraki sayfada Yönetilen kimliğe erişim ata'yıseçin. + Üye seç'i 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 doğrulaması için veritabanı kapsamı kimlik bilgisini oluşturun. 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ğı, birden çok sorguda bir dosya konumuna kolay başvuru sağlayan bir soyutlamadır. Genel konumları sorgulamak için, dış veri kaynağı oluştururken dosya konumunu belirtin:

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

Genel olmayan depolama hesaplarına erişmek için konumu belirtin ve sarmalanmış kimlik doğrulama parametrelerine sahip veritabanı kapsamlı bir kimlik bilgisine başvurun. Aşağıdaki betik, dosya yoluna işaret eden ve veritabanı kapsamında bir kimlik bilgisine başvuran bir dış veri kaynağı oluşturur.

-- Create external data source that points to the file path, and that references a 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 uzantılı .parquet tüm dosyaları sorgulayabilirsiniz. Örneğin, aşağıdaki sorgu yalnızca bir ad deseni ile eşleşen dosyalar içindir:

--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 olmadığından, çı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ı belirtin:

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 her zaman şu yan tümcesini WITH kullanarak sütunları belirtin:

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 filepath() işlevlerini kullanabilirsinizfilename():

--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ı dosya sayısını ve veri miktarını azaltabilir; görünümün en üstündeki sorgunun bu sütunlardan herhangi birine göre filtrelendiğinde okunması ve işlenmesi gerekir:

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, bu nedenle bunları sorgulamak, kullanıcı tablolarında depolanan yerel ilişkisel verileri sorgulamayla neredeyse aynı olur. Dış tablo oluşturmak için, bir dış veri kaynağı ve dış dosya biçimi nesnelerinin yerinde 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ış tabloyu oluşturduktan sonra, diğer tablolarda olduğu gibi sorgulayabilirsiniz:

SELECT TOP 10 *
FROM tbl_TaxiRides;

gibi OPENROWSET, dış tablolar da joker karakterlerle birden çok dosya ve klasör sorgulamayı destekler. Ancak, dış tablolar şema çıkarımı desteklemez.

Performans değerlendirmeleri

Dosya sayısı veya sorgulayabileceğiniz veri miktarıyla ilgili sabit bir sınır yoktur, ancak sorgu performansı veri miktarına, veri biçimine, verilerin düzenlenip düzenlenebileceğine 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örler halinde düzenlenir. SQL yönetilen örneğine 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 yan tümcesindeki filepath() meta veri işlevini WHERE 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ı kullanıyorsanız filepath() ve filename() işlevleri destekleniyor ancak WHERE cümlesinde desteklenmiyor. Aşağıdaki örnekte gösterildiği gibi, hesaplanan sütunlarda filename veya filepath kullanarak filtrelemeye devam edebilirsiniz.

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

Tek sütunlu istatistikler, OPENROWSET dizini için sys.sp_create_openrowset_statistics saklı yordamı kullanılarak oluşturulabilir; burada, tek sütunlu bir SELECT sorgusu parametre olarak geçirilir.

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 FULLSCAN yüzdesidirSAMPLE n.

  • 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 SQL yönetilen örneği dosya konumuna erişemiyorsa oluşur. İlgili hata iletileri yetersiz erişim hakları, var olmayan bir konum, başka bir işlem tarafından kullanılan dosya veya bu dizin listelenemez. Çoğu durumda, bu hatalar ağ trafiği denetim ilkelerinin dosyalara erişimi engellediğini veya kullanıcının erişim hakları olmadığını gösterir. Aşağıdaki öğeleri denetleyin:

  • Yanlış veya yazım hatası içeren konum yolu.
  • SAS anahtarı geçerliliği. Süresi dolmuş, yazım hatası içeriyor veya soru işaretiyle başlatılabilir.
  • SAS anahtarı izinlerine izin verilir. En azından okuyun ve joker karakterler kullanılıyorsa listeleyin.
  • Depolama hesabında gelen trafik engellendi. Ayrıntılar için Azure Depolama için sanal ağ kurallarını yönetme bölümüne bakın ve erişimin SQL Yönetilen Örneği VNet üzerinden sağlandığından emin olun.
  • Depolama uç noktası ilkesi kullanılarak SQL yönetilen örneğinde giden trafik engellendi. Depolama hesabına giden trafiğe izin verin.
  • Yönetilen kimlik erişim hakları. Örneğin yönetilen kimliğinin depolama hesabına erişim haklarına sahip olduğundan 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.

SELECT OLARAK DıŞ TABLO OLUŞTURMA (CETAS)

CREATE EXTERNAL TABLE AS SELECT (CETAS), SQL yönetilen örneğinizdeki verileri bir dış depolama hesabına aktarmanıza olanak tanır. Azure Blob depolama veya Azure Data Lake Storage (ADLS) 2. Nesil'de Parquet veya CSV dosyalarının üzerinde bir 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 Azure SQL Yönetilen Örneği, CETAS'ı varsayılan olarak devre dışı bırakı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.