Aracılığıyla paylaş


Azure Synapse Analytics'te sunucusuz SQL havuzunu kullanarak görünüm oluşturma ve kullanma

Bu bölümde, sunucusuz SQL havuzu sorgularını sarmak için görünümleri oluşturmayı ve kullanmayı öğreneceksiniz. Görünümler, bu sorguları yeniden kullanmanıza olanak sağlar. Power BI gibi araçları sunucusuz SQL havuzuyla birlikte kullanmak istiyorsanız görünümler de gereklidir.

Önkoşullar

İlk adımınız, görünümün oluşturulacağı bir veritabanı oluşturmak ve bu veritabanında kurulum betiğini yürüterek Azure depolamada kimlik doğrulaması yapmak için gereken nesneleri başlatmaktır. Bu makaledeki tüm sorgular örnek veritabanınızda yürütülür.

Dış veriler üzerinde görünümler

Görünümleri, normal SQL Server görünümleri oluşturduğunuz gibi oluşturabilirsiniz. Aşağıdaki sorgu ,population.csv dosyasını okuyan bir görünüm oluşturur.

Not

Oluşturduğunuz veritabanını kullanmak için sorgudaki ilk satırı ([mydbname] gibi) değiştirin.

USE [mydbname];
GO

DROP VIEW IF EXISTS populationView;
GO

CREATE VIEW populationView AS
SELECT * 
FROM OPENROWSET(
        BULK 'csv/population/population.csv',
        DATA_SOURCE = 'SqlOnDemandDemo',
        FORMAT = 'CSV', 
        FIELDTERMINATOR =',', 
        ROWTERMINATOR = '\n'
    )
WITH (
    [country_code] VARCHAR (5) COLLATE Latin1_General_BIN2,
    [country_name] VARCHAR (100) COLLATE Latin1_General_BIN2,
    [year] smallint,
    [population] bigint
) AS [r];

Görünüm, depolama alanınızın kök URL'sini bir olarak DATA_SOURCE kullanır EXTERNAL DATA SOURCE ve dosyalara göreli bir dosya yolu ekler.

Delta Lake görünümleri

Delta Lake klasörünün en üstünde görünümler oluşturuyorsanız, dosya yolunu belirtmek yerine seçenek sonrasında kök klasörün BULK konumunu belirtmeniz gerekir.

ECDC COVID-19 Delta Lake klasörü

OPENROWSET Delta Lake klasöründeki verileri okuyan işlev, klasör yapısını inceler ve dosya konumlarını otomatik olarak tanımlar.

create or alter view CovidDeltaLake
as
select *
from openrowset(
           bulk 'covid',
           data_source = 'DeltaLakeStorage',
           format = 'delta'
    ) with (
           date_rep date,
           cases int,
           geo_id varchar(6)
           ) as rows

Daha fazla bilgi için Synapse sunucusuz SQL havuzu kendi kendine yardım sayfasını ve Azure Synapse Analytics bilinen sorunları gözden geçirin.

Bölümlenmiş görünümler

Hiyerarşik klasör yapısında bölümlenmiş bir dosya kümeniz varsa, dosya yolundaki joker karakterleri kullanarak bölüm desenini açıklayabilirsiniz. Klasör yolunun FILEPATH bölümlerini bölümleme sütunları olarak göstermek için işlevini kullanın.

CREATE VIEW TaxiView
AS SELECT *, nyc.filepath(1) AS [year], nyc.filepath(2) AS [month]
FROM
    OPENROWSET(
        BULK 'parquet/taxi/year=*/month=*/*.parquet',
        DATA_SOURCE = 'sqlondemanddemo',
        FORMAT='PARQUET'
    ) AS nyc

Bölümlenmiş görünümler, bölümleme sütunlarında filtrelerle sorguladığınızda bölüm eleme gerçekleştirerek sorgularınızın performansını artırabilir. Ancak, tüm sorgular bölüm eleme desteğine sahiptir, bu nedenle bazı en iyi yöntemleri izlemek önemlidir.

Bölümün ortadan kaldırılmasını sağlamak için, alt sorguları filtrelerde kullanmaktan kaçının, çünkü bunlar bölümleri ortadan kaldırma özelliğini engelleyebilir. Bunun yerine, alt sorgunun sonucunu filtreye değişken olarak geçirin.

SQL sorgularında JOIN'leri kullanırken, sorgu planının karmaşıklığını azaltmak ve doğru bölüm eleme olasılığını artırmak için filtre koşulunu NVARCHAR olarak bildirin. Bölüm sütunları genellikle NVARCHAR(1024) olarak çıkarılır, bu nedenle koşul için aynı türün kullanılması örtük atama gereksinimini önler ve bu da sorgu planının karmaşıklığını artırabilir.

Delta Lake bölümlenmiş görünümleri

Delta Lake depolamanın üzerinde bölümlenmiş görünümler oluşturuyorsanız, yalnızca bir kök Delta Lake klasörü belirtebilirsiniz ve işlevini kullanarak FILEPATH bölümleme sütunlarını açıkça göstermeniz gerekmez:

CREATE OR ALTER VIEW YellowTaxiView
AS SELECT *
FROM  
    OPENROWSET(
        BULK 'yellow',
        DATA_SOURCE = 'DeltaLakeStorage',
        FORMAT='DELTA'
    ) nyc

OPENROWSET işlevi temel delta lake klasörünün yapısını inceler ve bölümleme sütunlarını otomatik olarak tanımlayıp kullanıma sunar. Bölümleme sütununu WHERE bir sorgunun yan tümcesine yerleştirirseniz bölüm eleme otomatik olarak yapılır.

İşlevdeki (yellowbu örnekte) veri kaynağında DeltaLakeStorageOPENROWSET tanımlanan URI ile LOCATION birleştirilen klasör adı, adlı _delta_logalt klasörü içeren kök Delta Lake klasörüne başvurmalıdır.

Yellow Taxi Delta Lake klasörü

Daha fazla bilgi için Synapse sunucusuz SQL havuzu kendi kendine yardım sayfasını ve Azure Synapse Analytics bilinen sorunları gözden geçirin.

JSON görünümleri

Dosyalardan getirilen sonuç kümesinin üzerinde bazı ek işlemler yapmanız gerekiyorsa görünümler iyi bir seçimdir. Bir örnek, JSON belgelerindeki değerleri ayıklamak için JSON işlevlerini uygulamamız gereken JSON dosyalarını ayrıştırmak olabilir:

CREATE OR ALTER VIEW CovidCases
AS 
select
    *
from openrowset(
        bulk 'latest/ecdc_cases.jsonl',
        data_source = 'covid',
        format = 'csv',
        fieldterminator ='0x0b',
        fieldquote = '0x0b'
    ) with (doc nvarchar(max)) as rows
    cross apply openjson (doc)
        with (  date_rep datetime2,
                cases int,
                fatal int '$.deaths',
                country varchar(100) '$.countries_and_territories')

İşlev, OPENJSON her satırda bir JSON belgesi içeren JSONL dosyasındaki her satırı metin biçiminde ayrıştırıyor.

Kapsayıcılarda Azure Cosmos DB görünümleri

Kapsayıcıda Azure Cosmos DB analiz depolama alanı etkinleştirildiyse görünümler Azure Cosmos DB kapsayıcılarının üzerinde oluşturulabilir. Azure Cosmos DB hesap adı, veritabanı adı ve kapsayıcı adı görünümün bir parçası olarak eklenmelidir ve salt okunur erişim anahtarı görünümün başvurduğu veritabanı kapsamlı kimlik bilgilerine yerleştirilmelidir.

CREATE DATABASE SCOPED CREDENTIAL MyCosmosDbAccountCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 's5zarR2pT0JWH9k8roipnWxUYBegOuFGjJpSjGlR36y86cW0GQ6RaaG8kGjsRAQoWMw1QKTkkX8HQtFpJjC8Hg==';
GO
CREATE OR ALTER VIEW Ecdc
AS SELECT *
FROM OPENROWSET(
      PROVIDER = 'CosmosDB',
      CONNECTION = 'Account=synapselink-cosmosdb-sqlsample;Database=covid',
      OBJECT = 'Ecdc',
      CREDENTIAL = 'MyCosmosDbAccountCredential'
    ) with ( date_rep varchar(20), cases bigint, geo_id varchar(6) ) as rows

Daha fazla bilgi için bkz. Azure Synapse Link'te Sunucusuz SQL havuzuyla Azure Cosmos DB verilerini sorgulama.

Görünüm kullanma

Sorgularınızdaki görünümleri, SQL Server sorgulardaki görünümleri kullandığınız gibi kullanabilirsiniz.

Aşağıdaki sorgu, Görünüm oluşturma bölümünde oluşturduğumuz population_csvgörünümünü kullanmayı gösterir. 2019 yılında nüfuslarıyla birlikte ülke/bölge adlarını azalan düzende döndürür.

Not

Oluşturduğunuz veritabanını kullanmak için sorgudaki ilk satırı ([mydbname] gibi) değiştirin.

USE [mydbname];
GO

SELECT
    country_name, population
FROM populationView
WHERE
    [year] = 2019
ORDER BY
    [population] DESC;

Görünümü sorguladığınızda hatalarla veya beklenmeyen sonuçlarla karşılaşabilirsiniz. Bu büyük olasılıkla görünümün değiştirilmiş veya artık mevcut olmayan sütunlara veya nesnelere başvurduğunu gösterir. Görünüm tanımını, temel alınan şema değişiklikleriyle uyumlu olacak şekilde el ile ayarlamanız gerekir.

Sonraki adımlar

Farklı dosya türlerini sorgulama hakkında bilgi için Tek CSV dosyasını sorgulama, Parquet dosyalarını sorgulama ve JSON dosyalarını sorgulama makalelerine bakın.