Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tip
Microsoft Fabric Data Warehouse je relační sklad v podnikovém měřítku na základu datového jezera s architekturou připravenou pro budoucnost, integrovanou AI a novými funkcemi. Pokud s datovými sklady začínáte, začněte pracovat s Fabric Data Warehouse. Stávající úlohy fondu dedikované SQL můžou upgradovat na Fabric a získat tak přístup k novým funkcím napříč datovou vědou, analýzou v reálném čase a reportováním.
V tomto článku se dozvíte, jak napsat dotaz pomocí bezserverového fondu SQL, který bude číst soubory Parquet.
Příklad rychlého startu
OPENROWSET funkce umožňuje číst obsah parquet souboru tím, že poskytnete adresu URL souboru.
Čtení souboru parquet
Nejjednodušší způsob, jak zobrazit obsah PARQUET souboru, je zadat adresu URL souboru do OPENROWSET funkce a specifikovat formát parquet FORMAT. Pokud je soubor veřejně dostupný nebo pokud má vaše Microsoft Entra identita přístup k tomuto souboru, měli byste být schopni zobrazit obsah souboru pomocí dotazu, jako je ten zobrazený v následujícím příkladu:
select top 10 *
from openrowset(
bulk 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases/latest/ecdc_cases.parquet',
format = 'parquet') as rows
Ujistěte se, že máte přístup k tomuto souboru. Pokud je váš soubor chráněný klíčem SAS nebo vlastní identitou Azure, musíte pro přihlášení SQL nastavit přihlašovací údaje na úrovni serveru .
Důležité
Ujistěte se, že používáte kolaci databáze UTF-8 (například Latin1_General_100_BIN2_UTF8), protože řetězcové hodnoty v souborech PARQUET jsou kódovány pomocí kódování UTF-8.
Neshoda mezi kódováním textu v souboru PARQUET a kolací může způsobit neočekávané chyby převodu.
Výchozí kolaci aktuální databáze můžete snadno změnit pomocí následujícího příkazu T-SQL:
ALTER DATABASE CURRENT COLLATE Latin1_General_100_BIN2_UTF8; Další informace o kolacích najdete v tématu Podporované typy kolací pro Synapse SQL.
Pokud použijete Latin1_General_100_BIN2_UTF8 kolaci, získáte dodatečné zvýšení výkonu ve srovnání s ostatními kolacemi. Kolace Latin1_General_100_BIN2_UTF8 je kompatibilní s pravidly řazení řetězců parquet. Fond SQL dokáže eliminovat některé části souborů typu parquet, které nebudou obsahovat data potřebná v dotazech (prořezávání souborů/segmentů sloupců). Pokud použijete jiné kolace, všechna data ze souborů parquet se načtou do Synapse SQL a filtrování probíhá v rámci procesu SQL. Kolace Latin1_General_100_BIN2_UTF8 obsahuje další optimalizaci výkonu, která funguje jenom pro Parquet a Cosmos DB. Nevýhodou je, že ztratíte jemná porovnávací pravidla, jako je necitlivost na velikost písmen.
Využití zdroje dat
Předchozí příklad používá úplnou cestu k souboru. Jako alternativu můžete vytvořit externí zdroj dat s umístěním, které odkazuje na kořenovou složku úložiště, a použít tento zdroj dat a relativní cestu k souboru ve OPENROWSET funkci:
create external data source covid
with ( location = 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/ecdc_cases' );
go
select top 10 *
from openrowset(
bulk 'latest/ecdc_cases.parquet',
data_source = 'covid',
format = 'parquet'
) as rows
Pokud je zdroj dat chráněný klíčem SAS nebo vlastní identitou, můžete zdroj dat nakonfigurovat s přihlašovacími údaji v oboru databáze.
Explicitní zadání schématu
OPENROWSET umožňuje explicitně určit, které sloupce chcete ze souboru číst pomocí WITH klauzule:
select top 10 *
from openrowset(
bulk 'latest/ecdc_cases.parquet',
data_source = 'covid',
format = 'parquet'
) with ( date_rep date, cases int, geo_id varchar(6) ) as rows
Důležité
Ujistěte se, že explicitně zadáváte určitou kolaci UTF-8 (například Latin1_General_100_BIN2_UTF8) pro všechny řetězcové sloupce v WITH klauzuli nebo nastavte určitou kolaci UTF-8 na úrovni databáze.
Neshoda mezi kódováním textu v souboru a kolací řetězcových sloupců může způsobit neočekávané chyby převodu.
Výchozí kolaci aktuální databáze můžete snadno změnit pomocí následujícího příkazu T-SQL:
ALTER DATABASE CURRENT COLLATE Latin1_General_100_BIN2_UTF8; Kolaci můžete snadno nastavit u typů sloupců, například:
geo_id varchar(6) collate Latin1_General_100_BIN2_UTF8 Další informace o kolacích najdete v tématu Podporované typy kolací pro Synapse SQL.
V následujících částech se dozvíte, jak dotazovat různé typy souborů PARQUET.
Prerequisites
Prvním krokem je vytvoření databáze se zdrojem dat, který odkazuje na úložišťový účet NYC Yellow Taxi. Potom objekty inicializujete spuštěním skriptu setup v této databázi. Tento instalační skript vytvoří zdroje dat, přihlašovací údaje s oborem databáze a formáty externích souborů, které se používají v těchto ukázkách.
Datová sada
V této ukázce se používá datová sada NYC Yellow Taxi. Soubory Parquet můžete dotazovat stejným způsobem jako soubory CSV. Jediným rozdílem je, že FILEFORMAT parametr by měl být nastaven na PARQUET. Příklady v tomto článku ukazují specifika čtení souborů Parquet.
Sada dotazů souborů parquet
Při dotazování na soubory Parquet můžete zadat pouze sloupce, které vás zajímají.
SELECT
YEAR(tpepPickupDateTime),
passengerCount,
COUNT(*) AS cnt
FROM
OPENROWSET(
BULK 'puYear=2018/puMonth=*/*.snappy.parquet',
DATA_SOURCE = 'YellowTaxi',
FORMAT='PARQUET'
) WITH (
tpepPickupDateTime DATETIME2,
passengerCount INT
) AS nyc
GROUP BY
passengerCount,
YEAR(tpepPickupDateTime)
ORDER BY
YEAR(tpepPickupDateTime),
passengerCount;
Automatické odvození schématu
Při čtení souborů Parquet nemusíte používat klauzuli OPENROWSET WITH. Názvy sloupců a datové typy se automaticky čtou ze souborů Parquet.
Mějte na paměti, že pokud čtete počet souborů najednou, schéma, názvy sloupců a datové typy se odvozují z první souborové služby z úložiště. To může znamenat, že některé z očekávaných sloupců jsou vynechány, protože soubor používaný službou k definování schématu tyto sloupce neobsahuje. Pokud chcete explicitně zadat schéma, použijte klauzuli OPENROWSET WITH.
Následující ukázka ukazuje možnosti automatického odvozování schématu pro soubory Parquet. Vrátí počet řádků v září 2018 bez zadání schématu.
Note
Při čtení souborů Parquet nemusíte zadávat sloupce v klauzuli OPENROWSET WITH. V takovém případě bude bezserverová služba dotazů fondu SQL využívat metadata v souboru Parquet a svázat sloupce podle názvu.
SELECT TOP 10 *
FROM
OPENROWSET(
BULK 'puYear=2018/puMonth=9/*.snappy.parquet',
DATA_SOURCE = 'YellowTaxi',
FORMAT='PARQUET'
) AS nyc
Dotazování na rozdělená data
Datová sada poskytnutá v tomto vzorku je rozdělena do samostatných podsložek. Konkrétní oddíly můžete cílit pomocí funkce filepath. Tento příklad ukazuje částky jízdného podle roku, měsíce a payment_type pro první tři měsíce roku 2017.
Note
Dotaz bezserverového fondu SQL je kompatibilní se schématem dělení Hive/Hadoop.
SELECT
YEAR(tpepPickupDateTime),
passengerCount,
COUNT(*) AS cnt
FROM
OPENROWSET(
BULK 'puYear=*/puMonth=*/*.snappy.parquet',
DATA_SOURCE = 'YellowTaxi',
FORMAT='PARQUET'
) nyc
WHERE
nyc.filepath(1) = 2017
AND nyc.filepath(2) IN (1, 2, 3)
AND tpepPickupDateTime BETWEEN CAST('1/1/2017' AS datetime) AND CAST('3/31/2017' AS datetime)
GROUP BY
passengerCount,
YEAR(tpepPickupDateTime)
ORDER BY
YEAR(tpepPickupDateTime),
passengerCount;
Mapování typů
Pro kontrolu mapování typu Parquet na nativní typ SQL vizte mapování typů Parquet.