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.
Bu makalede, Azure Synapse Analytics'te sunucusuz SQL havuzunu kullanarak sorgu yazmayı öğreneceksiniz.
Sunucusuz SQL havuzu, Windows'ta kullanılan joker karakterlere benzer joker karakterler kullanarak birden çok dosya veya klasör okumayı destekler. Ancak, birden çok joker karaktere izin verildiğinden daha fazla esneklik sağlanır.
Önkoşullar
İlk adımınız sorguları yürütebileceğiniz bir veritabanı oluşturmaktır. Ardından, bu veritabanında bir kurulum betiği yürüterek nesneleri başlatın. Bu kurulum betiği, bu örneklerde kullanılan veri kaynaklarını, veritabanı kapsamlı kimlik bilgilerini ve dış dosya biçimlerini oluşturur.
Örnek sorguları izlemek için csv/taxi klasörünü kullanın. Temmuz 2016 ile Haziran 2018 arasında NYC Taxi - Yellow Taxi Trip Records verilerini içerir. Csv/taxi dosyasındaki dosyalar, aşağıdaki desen kullanılarak yıl ve aydan sonra adlandırılır:
yellow_tripdata_<year>-<month>.csv*
Klasördeki tüm dosyaları okuma
Aşağıdaki örnek csv/taxi klasöründeki tüm NYC Sarı Taksi veri dosyalarını okur ve ardından yıllık toplam yolcu ve yolculuk sayısını döndürür. Ayrıca toplama işlevlerinin kullanımını da gösterir.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/taxi/*.csv',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
pickup_datetime DATETIME2 2,
passenger_count INT 4
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Klasördeki dosyaların alt kümesini okuma
Aşağıdaki örnek, bir joker karakter kullanarak csv/taxi klasöründen 2017 NYC Yellow Taxi veri dosyalarını okur ve ödeme türü başına toplam ücret tutarını döndürür.
SELECT
payment_type,
SUM(fare_amount) AS fare_total
FROM OPENROWSET(
BULK 'csv/taxi/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
payment_type INT 10,
fare_amount FLOAT 11
) AS nyc
GROUP BY payment_type
ORDER BY payment_type;
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Birden çok dosya yolu kullanarak klasördeki dosyaların alt kümesini okuma
Aşağıdaki örnek, iki dosya yolu kullanarak csv/taxi klasöründen 2017 NYC Yellow Taxi veri dosyalarını okur. İlki, Ocak ayına ait verileri içeren dosyanın tam yolunu, ikincisi ise Ekim, Kasım ve Aralık aylarını okumak için joker karakter kullanır. Her yol için, ödeme türü başına toplam ücret tutarı döndürülür.
SELECT
payment_type,
SUM(fare_amount) AS fare_total
FROM OPENROWSET(
BULK (
'csv/taxi/yellow_tripdata_2017-01.csv',
'csv/taxi/yellow_tripdata_2017-1*.csv'
),
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
payment_type INT 10,
fare_amount FLOAT 11
) AS nyc
GROUP BY payment_type
ORDER BY payment_type;
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Klasörleri okuma
Sağladığınız OPENROWSET yol, bir klasörün yolu da olabilir. Aşağıdaki bölümler bu sorgu türlerini içerir.
Belirli bir klasörden tüm dosyaları okuma
Klasördeki tüm dosyaları okuma bölümünde gösterildiği gibi dosya düzeyinde joker karakteri kullanarak bir klasördeki tüm dosyaları okuyabilirsiniz. Ancak, bir klasörü sorgulamanın ve bu klasördeki tüm dosyaları kullanmanın bir yolu vardır.
Sağlanan OPENROWSET yol bir klasöre işaret ederse, bu klasördeki tüm dosyalar sorgunuz için kaynak olarak kullanılır. Aşağıdaki sorgu csv/taxi klasöründeki tüm dosyaları okur.
Not
Sorgudaki yolun sonunda / ifadesinin varlığına dikkat edin. Bir klasörü belirtir.
/ atlanırsa, sorgu bunun yerine taxi adlı bir dosyayı hedefler.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/taxi/',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Birden çok klasördeki tüm dosyaları okuma
Joker karakter kullanarak birden çok klasördeki dosyaları okumak mümkündür. Aşağıdaki sorgu, csv klasöründe bulunan ve adları t ile başlayan ve i ile biten tüm klasörlerdeki tüm dosyaları okur.
Not
Sorgudaki yolun sonundaki öğesinin varlığına / dikkat edin. Bir klasörü belirtir.
/ atlanırsa, sorgu bunun yerine t*i adlı dosyaları hedefler.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/t*i/',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Ölçütlere uyan tek bir klasörünüz olduğundan, sorgu sonucu Klasördeki tüm dosyaları oku ile aynıdır.
Klasörleri özyinelemeli olarak dolaş
Sunucusuz SQL havuzu, yolun sonunda belirtirseniz /** klasörlerde yinelemeli olarak geçiş yapabilir. Aşağıdaki sorgu, csv/taxi klasöründe bulunan tüm klasörlerdeki ve alt klasörlerdeki tüm dosyaları okur.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/taxi/**',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Birden çok joker karakter kullanma
Farklı yol düzeylerinde birden çok joker karakter kullanabilirsiniz. Örneğin, adların t ile başlayıp i ile bittiği tüm klasörlerden yalnızca 2017 verileriyle dosyaları okumak için önceki bir sorguyu zenginleştirebilirsiniz.
Not
Sorgudaki yolun sonunda / öğesinin varlığına dikkat edin. Bir klasörü belirtir.
/ atlanırsa, sorgu bunun yerine t*i adlı dosyaları hedefler.
Sorgu başına en fazla 10 joker karakter sınırı vardır.
SELECT
YEAR(pickup_datetime) as [year],
SUM(passenger_count) AS passengers_total,
COUNT(*) AS [rides_total]
FROM OPENROWSET(
BULK 'csv/t*i/yellow_tripdata_2017-*.csv',
DATA_SOURCE = 'sqlondemanddemo',
FORMAT = 'CSV', PARSER_VERSION = '2.0',
FIRSTROW = 2
)
WITH (
vendor_id VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_datetime DATETIME2,
dropoff_datetime DATETIME2,
passenger_count INT,
trip_distance FLOAT,
rate_code INT,
store_and_fwd_flag VARCHAR(100) COLLATE Latin1_General_BIN2,
pickup_location_id INT,
dropoff_location_id INT,
payment_type INT,
fare_amount FLOAT,
extra FLOAT,
mta_tax FLOAT,
tip_amount FLOAT,
tolls_amount FLOAT,
improvement_surcharge FLOAT,
total_amount FLOAT
) AS nyc
GROUP BY
YEAR(pickup_datetime)
ORDER BY
YEAR(pickup_datetime);
Not
Tek OPENROWSET ile erişilen tüm dosyalar aynı yapıya (sütun sayısı ve veri türleri) sahip olmalıdır.
Ölçütlere uyan tek bir klasörünüz olduğundan sorgu sonucu, Klasördeki dosyaların alt kümesini okuma ve Belirli bir klasörden tüm dosyaları okuma ile aynıdır. Daha karmaşık joker karakter kullanım senaryoları için bkz . Sorgu Parquet dosyaları.