Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: SQL Server 2022 (16.x) és újabb verziók
Az SQL Server 2022 (16.x) közvetlenül CSV-fájlokból tud adatokat lekérdezni. Ez az adatvirtualizálásnak nevezett fogalom lehetővé teszi, hogy az adatok az eredeti helyen maradjanak, de lekérdezhetők egy SQL Server-példányból T-SQL-parancsokkal, mint bármely más tábla. Ez a funkció PolyBase-összekötőket használ, és minimálisra csökkenti az adatok ETL-folyamatokon keresztüli másolásának szükségességét.
Az alábbi példában a CSV-fájl az Azure Blob Storage-ban van tárolva, és openROWSET-en vagy külső táblán keresztül érhető el.
Az adatvirtualizálással kapcsolatos további információkért tekintse meg az adatvirtualizálást a PolyBase használatával.
Előre konfigurálás
1. A PolyBase engedélyezése sp_configure
exec sp_configure @configname = 'polybase enabled', @configvalue = 1;
RECONFIGURE;
2. Felhasználói adatbázis létrehozása
Ez a gyakorlat létrehoz egy mintaadatbázist az alapértelmezett beállításokkal és helyekkel. Ezzel az üres mintaadatbázissal dolgozhat az adatokkal, és tárolhatja a hatókörön belüli hitelesítő adatokat. Ebben a példában egy új, üres, névvel ellátott CSV_Demo adatbázist használunk.
CREATE DATABASE [CSV_Demo];
3. Főkulcs és adatbázis hatókörű hitelesítő adatok létrehozása
A felhasználói adatbázisban lévő adatbázis főkulcsa szükséges az adatbázis hatókörébe tartozó hitelesítőadat-titkos kulcs titkosításához. 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. Külső adatforrás létrehozása
A külső adatforráshoz adatbázis-hatókörű hitelesítő adatokat használunk. Ebben a példában a CSV-fájl az Azure Blob Storage-ban található, ezért használja az előtagot abs és az identitásmetódust SHARED ACCESS SIGNATURE . Az összekötőkkel és előtagokkal kapcsolatos további információkért, beleértve az SQL Server 2022 új beállításait (16.x), tekintse meg a CREATE EXTERNAL DATA SOURCE (KÜLSŐ ADATFORRÁS LÉTREHOZÁSA) című témakört.
CREATE EXTERNAL DATA SOURCE Blob_CSV
WITH
(
LOCATION = 'abs://<container>@<storage_account>.blob.core.windows.net'
,CREDENTIAL = blob_storage
);
Ha például a tárfiók neve el van nevezve s3sampledata , és a tároló neve el van nevezve import, a kód a következő lesz:
CREATE EXTERNAL DATA SOURCE Blob_CSV
WITH
(
LOCATION = 'abs://import@s3sampledata.blob.core.windows.net'
,CREDENTIAL = blob_storage
)
Az adatok elérése az OPENROWSET használatával
Ebben a példában a fájl neve el van nevezve call_center.csv, és az adatok a második sorban kezdődnek.
Mivel a külső adatforrás Blob_CSV tárolószintre van leképezve. A call_center.csv tároló gyökerében lévő 2022 almappában található. Egy mappastruktúrában lévő fájl lekérdezéséhez adjon meg egy mappaleképezést a külső adatforrás LOCATION paraméteréhez képest.
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];
Adatok lekérdezése külső táblával
A CREATE EXTERNAL TABLE az SQL Server CSV-adatainak virtualizálására is használható. Az oszlopokat meg kell határozni és szigorúan típusozottnak kell lenniük. Bár a külső táblák létrehozása nagyobb erőfeszítést igényel, a külső adatforrás openROWSET-lel való lekérdezése további előnyöket is biztosít. Ön megteheti:
- Az adott oszlop adatbeviteli definíciójának megerősítése
- Nullability definiálása
- COLLATION definiálása
- Statisztikai adatok létrehozása egy oszlophoz a lekérdezési terv minőségének optimalizálásához
- Részletesebb modell létrehozása az SQL Serveren az adathozzáféréshez a biztonsági modell továbbfejlesztése érdekében
További információ: CREATE EXTERNAL TABLE.
Az alábbi példában ugyanazt az adatforrást használja a rendszer.
1. Külső fájlformátum létrehozása
A fájl formázásának meghatározásához külső fájlformátum szükséges. A külső fájlformátumok is ajánlottak az újrahasználhatóság miatt.
Az alábbi példában az adatok a második sorban kezdődnek.
CREATE EXTERNAL FILE FORMAT csv_ff
WITH (
FORMAT_TYPE = DELIMITEDTEXT,
FORMAT_OPTIONS(
FIELD_TERMINATOR = ',',
STRING_DELIMITER = '"',
FIRST_ROW = 2)
);
2. Külső tábla létrehozása
A LOCATION a call_center.csv fájl mappa- és fájlútvonala a külső adatforrás helyéhez viszonyítva, amelyet a DATA_SOURCE határoz meg. Ebben az esetben a fájl egy almappában található, a neve 2022. A FILE_FORMAT használatával adja meg az csv_ff SQL Server külső fájlformátumának elérési útját.
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