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.
platí pro: SQL Server 2022 (16.x) a novější verze
SQL Server 2022 (16.x) může dotazovat data přímo ze souborů CSV. Tento koncept, běžně označovaný jako virtualizace dat, umožňuje, aby data zůstala v původním umístění, ale dají se dotazovat z instance SQL Serveru pomocí příkazů T-SQL, jako jsou všechny ostatní tabulky. Tato funkce používá konektory PolyBase a minimalizuje potřebu kopírování dat prostřednictvím procesů ETL.
V následujícím příkladu je soubor CSV uložený ve službě Azure Blob Storage a přistupuje se k němu přes OPENROWSET nebo externí tabulku.
Další informace o virtualizaci dat představujeme virtualizaci dat pomocí PolyBase.
Předkonfigurace
1. Povolení PolyBase v sp_configure
exec sp_configure @configname = 'polybase enabled', @configvalue = 1;
RECONFIGURE;
2. Vytvoření uživatelské databáze
Toto cvičení vytvoří ukázkovou databázi s výchozím nastavením a umístěním. Tuto prázdnou ukázkovou databázi použijete k práci s daty a uložení vymezených přihlašovacích údajů. V tomto příkladu se použije nová prázdná databáze s názvem CSV_Demo .
CREATE DATABASE [CSV_Demo];
3. Vytvořte hlavní klíč a přihlašovací údaje omezené na databázi
Hlavní klíč databáze v uživatelské databázi je nutný k šifrování tajného klíče přihlašovacích údajů s vymezeným oborem databáze. blob_storage
USE [CSV_Demo];
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password';
CREATE DATABASE SCOPED CREDENTIAL blob_storage
WITH IDENTITY = '<user_name>', Secret = '<password>';
4. Vytvoření externího zdroje dat
Přihlašovací údaje s vymezeným oborem databáze se používají pro externí zdroj dat. V tomto příkladu se soubor CSV nachází ve službě Azure Blob Storage, takže použijte předponu abs a metodu SHARED ACCESS SIGNATURE identity. Další informace o konektorech a předponách, včetně nových nastavení pro SQL Server 2022 (16.x), najdete v tématu VYTVOŘENÍ EXTERNÍHO ZDROJE DAT.
CREATE EXTERNAL DATA SOURCE Blob_CSV
WITH
(
LOCATION = 'abs://<container>@<storage_account>.blob.core.windows.net'
,CREDENTIAL = blob_storage
);
Pokud je například váš účet úložiště pojmenovaný s3sampledata a kontejner má název import, kód by byl:
CREATE EXTERNAL DATA SOURCE Blob_CSV
WITH
(
LOCATION = 'abs://import@s3sampledata.blob.core.windows.net'
,CREDENTIAL = blob_storage
)
Použití OPENROWSET pro přístup k datům
V tomto příkladu je soubor pojmenován call_center.csva data začínají na druhém řádku.
Vzhledem k tomu, že externí zdroj Blob_CSV dat je mapován na úroveň kontejneru. Nachází se call_center.csv v podsložce nazvané 2022 v kořenovém adresáři kontejneru. Pokud chcete dotazovat soubor ve struktuře složek, zadejte mapování složek vzhledem k parametru LOCATION externího zdroje dat.
SELECT * FROM OPENROWSET
(
BULK '/2022/call_center.csv',
FORMAT = 'CSV',
DATA_SOURCE = 'Blob_CSV',
FIRSTROW = 2
)
WITH (
cc_call_center_sk INT,
cc_call_center_id CHAR(16),
cc_rec_start_date DATE,
cc_rec_end_date DATE,
cc_closed_date_sk INT,
cc_open_date_sk INT,
cc_name VARCHAR(50),
cc_class VARCHAR(50),
cc_employees INT,
cc_sq_ft INT,
cc_hours CHAR(20),
cc_manager VARCHAR(40),
cc_mkt_id INT,
cc_mkt_class CHAR(50),
cc_mkt_desc VARCHAR(100),
cc_market_manager VARCHAR(40),
cc_division INT,
cc_division_name VARCHAR(50),
cc_company INT,
cc_company_name CHAR(50),
cc_street_number CHAR(10),
cc_street_name VARCHAR(60),
cc_street_type CHAR(15),
cc_suite_number CHAR(10),
cc_city VARCHAR(60),
cc_county VARCHAR(30),
cc_state CHAR(2),
cc_zip CHAR(10),
cc_country VARCHAR(20),
cc_gmt_offset DECIMAL(5, 2),
cc_tax_percentage DECIMAL(5, 2)
) AS [cc];
Dotazování dat pomocí externí tabulky
CREATE EXTERNAL TABLE lze také použít k virtualizaci dat CSV na SQL Serveru. Sloupce musí být definovány a silně typovány. I když externí tabulky zabírají větší úsilí při vytváření, poskytují také další výhody při dotazování externího zdroje dat pomocí OPENROWSET. Můžete:
- Posílení definice zadávání dat pro daný sloupec
- Definování nulovatelnosti
- Definujte kolaci
- Vytvořte statistiky pro sloupec k optimalizaci kvality dotazovacího plánu
- Vytvoření podrobnějšího modelu v RÁMCI SQL Serveru pro přístup k datům za účelem vylepšení modelu zabezpečení
Další informace naleznete v tématu VYTVOŘENÍ EXTERNÍ TABULKY.
V následujícím příkladu se používá stejný zdroj dat.
1. Vytvoření formátu externího souboru
K definování formátování souboru se vyžaduje externí formát souboru. Z důvodu opakovaného použití se doporučují také formáty externích souborů.
V následujícím příkladu začínají data na druhém řádku.
CREATE EXTERNAL FILE FORMAT csv_ff
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS(
FIELD_TERMINATOR = ',',
STRING_DELIMITER = '"',
FIRST_ROW = 2)
);
2. Vytvoření externí tabulky
LOCATION je složka a cesta k call_center.csv souboru vzhledem k cestě umístění v externím zdroji dat definovaná DATA_SOURCE. V tomto případě soubor leží v podsložce s názvem 2022. Pomocí FILE_FORMAT zadejte cestu k formátu externího csv_ff souboru v SQL Serveru.
CREATE EXTERNAL TABLE extCall_Center_csv (
cc_call_center_sk INT NOT NULL,
cc_call_center_id CHAR(16) NOT NULL,
cc_rec_start_date DATE,
cc_rec_end_date DATE,
cc_closed_date_sk INT,
cc_open_date_sk INT,
cc_name VARCHAR(50),
cc_class VARCHAR(50),
cc_employees INT,
cc_sq_ft INT,
cc_hours CHAR(20),
cc_manager VARCHAR(40),
cc_mkt_id INT,
cc_mkt_class CHAR(50),
cc_mkt_desc VARCHAR(100),
cc_market_manager VARCHAR(MAX),
cc_division VARCHAR(50),
cc_division_name VARCHAR(50),
cc_company VARCHAR(60),
cc_company_name CHAR(50),
cc_street_number CHAR(10),
cc_street_name VARCHAR(60),
cc_street_type CHAR(15),
cc_suite_number CHAR(10),
cc_city VARCHAR(60),
cc_county VARCHAR(30),
cc_state CHAR(20),
cc_zip CHAR(20),
cc_country VARCHAR(MAX),
cc_gmt_offset DECIMAL(5, 2),
cc_tax_percentage DECIMAL(5, 2)
)
WITH (
LOCATION = '/2022/call_center.csv',
DATA_SOURCE = Blob_CSV,
FILE_FORMAT = csv_ff
);
GO