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:Azure SQL Managed Instance
Ez a cikk a felügyelt Azure SQL-példány adatvirtualizálási funkcióját ismerteti. Az adatvirtualizálás lehetővé teszi Transact-SQL (T-SQL)-lekérdezések végrehajtását olyan fájlokon, amelyek az Adatokat az Azure Data Lake Storage Gen2 vagy az Azure Blob Storage általános adatformátumaiban tárolják. Ezeket az adatokat összekapcsolásokkal kombinálhatja helyileg tárolt relációs adatokkal. Az adatvirtualizálással átláthatóan és írásvédett módban férhet hozzá a külső adatokhoz, miközben azok az eredeti formátumukban és helyükön maradnak.
Áttekintés
Az adatvirtualizálás kétféleképpen kérdezhet le különböző forgatókönyvekhez szánt fájlokat:
- OPENROWSET szintaxis: Fájlok alkalmi lekérdezésére van optimalizálva. Általában egy új fájlkészlet tartalmának és szerkezetének gyors feltárására szolgál.
- CREATE EXTERNAL TABLE szintaxis: A fájlok ismétlődő lekérdezésére van optimalizálva ugyanazzal a szintaxissal, mintha az adatok helyben lennének tárolva az adatbázisban. A külső táblák az OPENROWSET szintaxishoz képest több előkészítési lépést igényelnek, de lehetővé teszik az adathozzáférés nagyobb szabályozását. Külső táblák használata elemzési számítási feladatokhoz és jelentéskészítéshez.
Mindkét esetben hozzon létre egy külső adatforrást a CREATE EXTERNAL DATA SOURCE T-SQL szintaxissal, ahogyan az ebben a cikkben is látható.
A CREATE EXTERNAL TABLE AS SELECT szintaxis az Azure SQL Managed Instance esetében is elérhető. Ez egy T-SQL-utasítás SELECT eredményeit exportálja az Azure Blob Storage vagy az Azure Data Lake Storage (ADLS) Gen 2 parquet- vagy CSV-fájljaiba, és létrehoz egy külső táblát ezekre a fájlokra.
Fájlformátumok
A parquet és a tagolt szöveg (CSV) fájlformátumok közvetlenül támogatottak. A JSON-fájlformátum közvetetten támogatott a CSV fájlformátum megadásával, ahol a lekérdezések minden dokumentumot külön sorként adnak vissza. A sorokat tovább feldolgozhatja JSON_VALUE és OPENJSON használatával.
Tárolási típusok
Fájlok tárolása az Azure Data Lake Storage Gen2-ben vagy az Azure Blob Storage-ban. Fájlok lekérdezéséhez adja meg a helyet egy adott formátumban, és használja a külső forrás és végpont vagy protokoll típusának megfelelő helytípus-előtagot, például az alábbi példákat:
--Blob Storage endpoint
abs://<container>@<storage_account>.blob.core.windows.net/<path>/<file_name>.parquet
--Data Lake endpoint
adls://<container>@<storage_account>.dfs.core.windows.net/<path>/<file_name>.parquet
Fontos
A megadott helytípus-előtag a kommunikáció optimális protokolljának kiválasztására és az adott tártípus által kínált speciális képességek használatára szolgál.
Az általános https:// előtag használata le van tiltva. Mindig használjon végpontspecifikus előtagokat.
Első lépések
Ha még nem ismerkedik az adatvirtualizálással, és szeretné gyorsan tesztelni a funkciókat, kezdje az Azure Open Datasetsben elérhető nyilvános adatkészletek lekérdezésével, például a névtelen hozzáférést lehetővé tevő Bing COVID-19-adatkészlettel .
A Bing COVID-19-adatkészletek lekérdezéséhez használja a következő végpontokat:
- Parketta:
abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet - CSV:
abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv
Első lépésként futtasson egy T-SQL-lekérdezést az adatkészlet első elemzéséhez. Ez a lekérdezés OPENROWSET használatával kérdez le egy nyilvánosan elérhető tárfiókban tárolt fájlt:
--Quick query on a file stored in a publicly available storage account:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
FORMAT = 'parquet'
) AS filerows
Az adatkészletek feltárását az első lekérdezés eredményhalmaza alapján hozzáfűzve WHEREGROUP BYés más záradékokkal folytathatja.
Ha az első lekérdezés meghiúsul a felügyelt SQL-példányon, az adott példány valószínűleg korlátozott hozzáféréssel rendelkezik az Azure Storage-fiókokhoz. Mielőtt folytatná a lekérdezést, forduljon a hálózatkezelési szakértőhöz a hozzáférés engedélyezéséhez.
Ha már ismeri a nyilvános adatkészletek lekérdezését, érdemes lehet olyan nem nyilvános adatkészletekre váltani, amelyek hitelesítő adatok megadását, hozzáférési jogosultságok megadását és tűzfalszabályok konfigurálását igénylik. Számos valós forgatókönyvben elsősorban privát adatkészletekkel dolgozik.
Hozzáférés nem nyilvános tárfiókokhoz
A felügyelt SQL-példányra bejelentkező felhasználónak engedélyeznie kell a nem nyilvános tárfiókban tárolt fájlok elérését és lekérdezését. Az engedélyezési lépések attól függenek, hogy a felügyelt SQL-példány hogyan hitelesíti magát a tárfiókban. A hitelesítés típusa és a kapcsolódó paraméterek nincsenek közvetlenül megadva az egyes lekérdezésekhez. A felhasználói adatbázisban tárolt adatbázis-hatókörű hitelesítőadat-objektum tartalmazza ezeket az információkat. Az adatbázis a hitelesítő adatokat használja a tárfiók eléréséhez a lekérdezés végrehajtásakor.
A felügyelt Azure SQL-példány a következő hitelesítési típusokat támogatja:
- Felügyelt identitás
- Közös hozzáférésű jogosultságkód (SAS)
A felügyelt identitás a Microsoft Entra ID (korábbi nevén Azure Active Directory) szolgáltatása, amely Azure-szolgáltatásokat – például felügyelt Azure SQL-példányt – biztosít a Microsoft Entra ID-ban felügyelt identitással. Ezzel az identitással engedélyezheti az adathozzáférési kérelmeket a nem nyilvános tárfiókokban. Az olyan szolgáltatások, mint az Azure SQL Managed Instance, rendszer által hozzárendelt felügyelt identitással rendelkeznek, és egy vagy több felhasználó által hozzárendelt felügyelt identitással is rendelkezhetnek. A rendszer által kiosztott vagy a felhasználó által kijelölt, felügyelt identitásokat használhat adatvirtualizáláshoz az Azure SQL Felügyelt Példánnyal.
Az Azure Storage rendszergazdájának először engedélyt kell adnia a felügyelt identitásnak az adatok eléréséhez. Adjon engedélyeket a felügyelt SQL-példány rendszer által hozzárendelt felügyelt identitásának ugyanúgy, mint bármely más Microsoft Entra-felhasználónak. Például:
- Az Azure Portalon, egy tárfiók Hozzáférés-vezérlés (IAM) lapján válassza a Szerepkör-hozzárendelés hozzáadása lehetőséget.
- Válassza ki az Azure RBAC beépített szerepkörét: Storage Blob Data Reader. Ez a szerepkör olvasási hozzáférést biztosít a felügyelt identitáshoz a szükséges Azure Blob Storage-tárolókhoz.
- Ahelyett, hogy a felügyelt identitásnak megadná a Storage Blob Data Reader Azure RBAC szerepkört, részletesebb engedélyeket is adhat a fájlok egy részhalmazára. Minden felhasználónak, akinek hozzá kell férnie az adatokban található fájlok eléréséhez, futtatási engedéllyel kell rendelkeznie a szülőmappákon keresztül a gyökérig (a tárolóig). További információ: ACL-ek beállítása az Azure Data Lake Storage Gen2-ben.
- A következő lapon válassza a Hozzáférés hozzárendelésefelügyelt identitáshoz lehetőséget. Válassza a + Tagok kijelölése lehetőséget, majd a Felügyelt identitás legördülő lista alatt válassza ki a kívánt felügyelt identitást. További információ: Azure-szerepkörök hozzárendelése az Azure Portal használatával.
- Ezután hozza létre az adatbázis hatókörébe tartozó hitelesítő adatokat a felügyelt identitás hitelesítéséhez. Az alábbi példában jegyezze fel, hogy
'Managed Identity'ez egy kemény kóddal rendelkező sztring.
-- Optional: Create MASTER KEY if it doesn't exist in the database:
-- CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Some Very Strong Password Here>'
GO
CREATE DATABASE SCOPED CREDENTIAL MyCredential
WITH IDENTITY = 'Managed Identity'
Külső adatforrás
A külső adatforrások olyan absztrakciók, amelyek több lekérdezésben is könnyen hivatkoznak egy fájl helyére. A nyilvános helyek lekérdezéséhez adja meg a fájl helyét külső adatforrás létrehozásakor:
CREATE EXTERNAL DATA SOURCE MyExternalDataSource
WITH (
LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
)
A nem nyilvános tárfiókok eléréséhez adja meg a helyet, és hivatkozzon egy adatbázis-hatókörű hitelesítő adatokra a beágyazott hitelesítési paraméterekkel. A következő szkript létrehoz egy külső adatforrást, amely a fájl elérési útjára mutat, és egy adatbázis-hatókörű hitelesítő adatra hivatkozik:
-- Create external data source that points to the file path, and that references a database scoped credential:
CREATE EXTERNAL DATA SOURCE MyPrivateExternalDataSource
WITH (
LOCATION = 'abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest'
CREDENTIAL = [MyCredential];
)
Adatforrások lekérdezése AZ OPENROWSET használatával
Az OPENROWSET szintaxis azonnali alkalmi lekérdezést tesz lehetővé, miközben csak a szükséges minimális számú adatbázis-objektumot hozza létre.
OPENROWSET csak a külső adatforrás (és esetleg a hitelesítő adatok) létrehozását igényli, szemben a külső tábla megközelítésével, amely külső fájlformátumot és magát a külső táblát igényli.
A DATA_SOURCE paraméter értéke automatikusan hozzáadódik a BULK paraméterhez, hogy a fájl teljes elérési útját képezze.
Ha ezt használja OPENROWSET, adja meg a fájl formátumát, például az alábbi példát, amely egyetlen fájlt lekérdez:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'bing_covid-19_data.parquet',
DATA_SOURCE = 'MyExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
Több fájl és mappa lekérdezése
A OPENROWSET parancs lehetővé teszi több fájl vagy mappa lekérdezését helyettesítő karakterek használatával a BULK elérési úton.
Az alábbi példa a NYC sárga taxiút rekordokat használja a nyílt adatkészletből.
Először hozza létre a külső adatforrást:
--Create the data source first:
CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');
Most a mappákban lévő bővítményt tartalmazó .parquet összes fájlt lekérdezheti. A következő lekérdezés például csak a névmintának megfelelő fájlokra vonatkozik:
--Query all files with .parquet extension in folders matching name pattern:
SELECT TOP 10 *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows;
Több fájl vagy mappa lekérdezésekor az egyetlen OPENROWSET fájlhoz hozzáférő összes fájlnak ugyanazzal a struktúrával kell rendelkeznie (például ugyanannyi oszlopnak és adattípusnak). A mappákat nem lehet rekurzív módon bejárni.
Sémakövetkeztetés
Az automatikus sémakövetkeztetés segít a lekérdezések gyors írásában és az adatok feltárásában, ha nem ismeri a fájlsémákat. A sémakövetkeztetés csak parquet-fájlokkal működik.
Bár kényelmes, a kikövetkeztetett adattípusok nagyobbak lehetnek a tényleges adattípusoknál, mivel előfordulhat, hogy a forrásfájlokban nem áll rendelkezésre elegendő információ a megfelelő adattípus használatához. Ez gyenge lekérdezési teljesítményt okozhat. A parquet-fájlok például nem tartalmaznak metaadatokat a karakteroszlopok maximális hosszáról, ezért a példány varchar(8000) értékként értelmezi.
Az sp_describe_first_results_set tárolt eljárással ellenőrizze a lekérdezés eredményeként kapott adattípusokat, mint az alábbi példában:
EXEC sp_describe_first_result_set N'
SELECT
vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
BULK ''yellow/*/*/*.parquet'',
DATA_SOURCE = ''NYCTaxiExternalDataSource'',
FORMAT=''parquet''
) AS nyc';
Miután megismerte az adattípusokat, adja meg őket a záradék használatával a WITH teljesítmény javítása érdekében:
SELECT TOP 100
vendorID, tpepPickupDateTime, passengerCount
FROM
OPENROWSET(
BULK 'yellow/*/*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT='PARQUET'
)
WITH (
vendorID varchar(4), -- we're using length of 4 instead of the inferred 8000
tpepPickupDateTime datetime2,
passengerCount int
) AS nyc;
Mivel a CSV-fájlok sémája nem határozható meg automatikusan, mindig adjon meg oszlopokat a WITH záradék használatával:
SELECT TOP 10 id, updated, confirmed, confirmed_change
FROM OPENROWSET(
BULK 'bing_covid-19_data.csv',
DATA_SOURCE = 'MyExternalDataSource',
FORMAT = 'CSV',
FIRSTROW = 2
)
WITH (
id int,
updated date,
confirmed int,
confirmed_change int
) AS filerows;
Fájl metaadat-függvényei
Több fájl vagy mappa lekérdezésekor használhatja a filepath() és filename() funkciókat a fájl metaadatainak olvasására, illetve az elérési út egy részének vagy a teljes elérési út és fájlnév lekérésére, amelyekből az eredményhalmaz sora származik.
--Query all files and project file path and file name information for each row:
SELECT TOP 10 filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder],
filerows.filename() as [File_name], filerows.filepath() as [Full_Path], *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet') AS filerows;
--List all paths:
SELECT DISTINCT filerows.filepath(1) as [Year_Folder], filerows.filepath(2) as [Month_Folder]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet') AS filerows;
Ha paraméter nélkül hívjuk meg, a filepath() függvény visszaadja annak a fájlnak az elérési útját, amelyből a sor származik. Amikor DATA_SOURCE a rendszer használja OPENROWSET, az a fájl elérési útját adja vissza a DATA_SOURCEfájlhoz viszonyítva, ellenkező esetben a teljes fájl elérési útját adja vissza.
Ha paraméterrel hívjuk meg, az az elérési út azon részét adja vissza, amely megfelel a paraméterben megadott pozíció helyettesítő karakterének. Az 1. paraméter például az első helyettesítő karakternek megfelelő elérési út egy részét adja vissza.
A filepath() függvény sorok szűrésére és összesítésére is használható:
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS r
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Nézet létrehozása az OPENROWSET tetején
Nézeteket hozhat létre és használhat az OPENROWSET-lekérdezések burkolásához, hogy könnyen újra felhasználhassa az alapul szolgáló lekérdezést:
CREATE VIEW TaxiRides AS
SELECT *
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows
A funkcióval a könnyebb és hatékonyabb szűrés érdekében a fájlhelyadatokat tartalmazó oszlopokat is hozzáadhatja egy filepath() nézethez. A nézetek használata csökkentheti a fájlok számát és az adatok mennyiségét, a nézet tetején lévő lekérdezésnek olvasásra és feldolgozásra van szüksége, amikor az oszlopok bármelyike szűri:
CREATE VIEW TaxiRides AS
SELECT *
, filerows.filepath(1) AS [year]
, filerows.filepath(2) AS [month]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
) AS filerows
A nézetek lehetővé teszik a jelentéskészítést és az analitikai eszközöket, például a Power BI-t, a OPENROWSET eredményeinek felhasználására.
Külső táblák
A külső táblák beágyazják a fájlokhoz való hozzáférést, így a lekérdezésük szinte ugyanúgy működik, mint a felhasználói táblákban tárolt helyi relációs adatok lekérdezése. Külső tábla létrehozásához külső adatforrást és külső fájlformátum objektumokat kell létrehoznia:
--Create external file format
CREATE EXTERNAL FILE FORMAT DemoFileFormat
WITH (
FORMAT_TYPE=PARQUET
)
GO
--Create external table:
CREATE EXTERNAL TABLE tbl_TaxiRides(
vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
tpepPickupDateTime DATETIME2,
tpepDropoffDateTime DATETIME2,
passengerCount INT,
tripDistance FLOAT,
puLocationId VARCHAR(8000),
doLocationId VARCHAR(8000),
startLon FLOAT,
startLat FLOAT,
endLon FLOAT,
endLat FLOAT,
rateCodeId SMALLINT,
storeAndFwdFlag VARCHAR(8000),
paymentType VARCHAR(8000),
fareAmount FLOAT,
extra FLOAT,
mtaTax FLOAT,
improvementSurcharge VARCHAR(8000),
tipAmount FLOAT,
tollsAmount FLOAT,
totalAmount FLOAT
)
WITH (
LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = NYCTaxiExternalDataSource,
FILE_FORMAT = DemoFileFormat
);
GO
A külső tábla létrehozása után ugyanúgy kérdezheti le, mint bármely más táblát:
SELECT TOP 10 *
FROM tbl_TaxiRides;
A külső táblák például OPENROWSETtámogatják több fájl és mappa lekérdezését helyettesítő karakterekkel. A külső táblák azonban nem támogatják a sémakövetkeztetést.
Teljesítménnyel kapcsolatos szempontok
Nincs korlátozva a fájlok száma vagy a lekérdezhető adatok mennyisége, de a lekérdezési teljesítmény az adatok mennyiségétől, az adatformátumtól, az adatok rendszerezésének módjától és a lekérdezések és illesztések összetettségétől függ.
Particionált adatok lekérdezése
Az adatokat gyakran almappákba, más néven partíciókba rendezik. Utasíthatja a felügyelt SQL-példányt, hogy csak bizonyos mappákat és fájlokat kérdez le. Ez csökkenti a fájlok számát és a lekérdezéshez szükséges adatok mennyiségét, ami jobb teljesítményt eredményez. Ezt a lekérdezésoptimalizálási típust partíciómetszetnek vagy partícióeltörlésnek nevezzük. A partíciókat a lekérdezés záradékában található metaadat-függvény filepath() használatával távolíthatja el a WHERE lekérdezés végrehajtásából.
Az alábbi minta lekérdezés csak 2017 utolsó három hónapjára vonatkozóan olvassa be az NYC Yellow Taxi adatfájljait:
SELECT
r.filepath() AS filepath
,r.filepath(1) AS [year]
,r.filepath(2) AS [month]
,COUNT_BIG(*) AS [rows]
FROM OPENROWSET(
BULK 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = 'NYCTaxiExternalDataSource',
FORMAT = 'parquet'
)
WITH (
vendorID INT
) AS [r]
WHERE
r.filepath(1) IN ('2017')
AND r.filepath(2) IN ('10', '11', '12')
GROUP BY
r.filepath()
,r.filepath(1)
,r.filepath(2)
ORDER BY
filepath;
Ha a tárolt adatok nincsenek particionálva, fontolja meg a particionálást a lekérdezési teljesítmény javítása érdekében.
Ha külső táblákat használ, a filepath() és filename() függvények támogatottak, de nem a WHERE záradékban. Továbbra is szűrhet, filename vagy filepath ha számítási oszlopokban használja őket, például az alábbi példa bemutatja:
CREATE EXTERNAL TABLE tbl_TaxiRides (
vendorID VARCHAR(100) COLLATE Latin1_General_BIN2,
tpepPickupDateTime DATETIME2,
tpepDropoffDateTime DATETIME2,
passengerCount INT,
tripDistance FLOAT,
puLocationId VARCHAR(8000),
doLocationId VARCHAR(8000),
startLon FLOAT,
startLat FLOAT,
endLon FLOAT,
endLat FLOAT,
rateCodeId SMALLINT,
storeAndFwdFlag VARCHAR(8000),
paymentType VARCHAR(8000),
fareAmount FLOAT,
extra FLOAT,
mtaTax FLOAT,
improvementSurcharge VARCHAR(8000),
tipAmount FLOAT,
tollsAmount FLOAT,
totalAmount FLOAT,
[Year] AS CAST(filepath(1) AS INT), --use filepath() for partitioning
[Month] AS CAST(filepath(2) AS INT) --use filepath() for partitioning
)
WITH (
LOCATION = 'yellow/puYear=*/puMonth=*/*.parquet',
DATA_SOURCE = NYCTaxiExternalDataSource,
FILE_FORMAT = DemoFileFormat
);
GO
SELECT *
FROM tbl_TaxiRides
WHERE
[year]=2017
AND [month] in (10,11,12);
Ha a tárolt adatok nincsenek particionálva, fontolja meg a particionálást a lekérdezési teljesítmény javítása érdekében.
statisztika
A külső adatok statisztikáinak gyűjtése az egyik legfontosabb teendő a lekérdezésoptimalizáláshoz. Minél többet tud a példány az adatokról, annál gyorsabban hajthat végre lekérdezéseket. Az SQL-motor lekérdezésoptimalizálója egy költségalapú optimalizáló. Összehasonlítja a különböző lekérdezési tervek költségeit, majd a legalacsonyabb költséggel választja ki a csomagot. A legtöbb esetben a leggyorsabban végrehajtó tervet választja ki.
Statisztikák automatikus létrehozása
A felügyelt Azure SQL-példány a hiányzó statisztikák bejövő felhasználói lekérdezéseit elemzi. Ha a statisztikák hiányoznak, a lekérdezésoptimalizáló automatikusan létrehozza a lekérdezési predikátum vagy illesztés feltétel egyes oszlopainak statisztikáit a lekérdezésterv számosságbecsléseinek javítása érdekében. A statisztikák automatikus létrehozása szinkron módon történik, így kismértékben csökkenhet a lekérdezési teljesítmény, ha az oszlopokból hiányoznak statisztikák. Az egyetlen oszlop statisztikáinak létrehozásához szükséges idő a megcélzott fájlok méretétől függ.
OPENROWSET manuális statisztikák
Az elérési út egyoszlopos statisztikái a OPENROWSETsys.sp_create_openrowset_statistics tárolt eljárással hozhatók létre úgy, hogy paraméterként egyetlen oszlopot adnak át a választó lekérdezésnek:
EXEC sys.sp_create_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
FORMAT = ''parquet'') AS filerows
';
A példány alapértelmezés szerint az adathalmazban megadott adatok 100% használ statisztikák létrehozásához. Opcionálisan megadhatja a minta nagyságát százalékban a TABLESAMPLE beállítások használatával. Több oszlophoz egyoszlopos statisztikák létrehozásához hajtsa végre a sys.sp_create_openrowset_statistics parancsot az egyes oszlopoknál. Nem hozhat létre többoszlopos statisztikát az OPENROWSET elérési úthoz.
A meglévő statisztikák frissítéséhez először törölje őket a sys.sp_drop_openrowset_statistics tárolt eljárással, majd hozza létre újra őket a sys.sp_create_openrowset_statistics segítségével.
EXEC sys.sp_drop_openrowset_statistics N'
SELECT pickup_datetime
FROM OPENROWSET(
BULK ''abs://public@pandemicdatalake.blob.core.windows.net/curated/covid-19/bing_covid-19_data/latest/*.parquet'',
FORMAT = ''parquet'') AS filerows
';
Külső táblázat manuális statisztikái
A külső táblák statisztikáinak létrehozásához használt szintaxis a szokásos felhasználói táblákhoz hasonló. Ha statisztikákat szeretne létrehozni egy oszlopon, adja meg a statisztikai objektum nevét és az oszlop nevét:
CREATE STATISTICS sVendor
ON tbl_TaxiRides (vendorID)
WITH FULLSCAN, NORECOMPUTE;
A WITH opciók kötelezőek, és a mintaméretnél az engedélyezett opciók a FULLSCAN és SAMPLE n százalék.
- Több oszlophoz egyoszlopos statisztikák létrehozásához hajtsa végre a
CREATE STATISTICSparancsot az egyes oszlopoknál. - A többoszlopos statisztikák nem támogatottak.
Hibaelhárítás
A lekérdezések végrehajtásával kapcsolatos problémák általában akkor fordulnak elő, ha a felügyelt SQL-példány nem fér hozzá a fájl helyéhez. A kapcsolódó hibaüzenetek azt jelezhetik, hogy nem elegendő hozzáférési jogosultságokkal rendelkezik, a hely nem létezik, a fájlt egy másik folyamat használja, vagy a könyvtárat nem lehet megjeleníteni. A legtöbb esetben ezek a hibák azt jelzik, hogy a hálózati forgalomvezérlő házirendek blokkolják a fájlok elérését, vagy a felhasználó nem rendelkezik hozzáférési jogosultságokkal. Ellenőrizze a következő elemeket:
- Hibás vagy elgépelt elérési út.
- SAS-kulcs érvényessége. Lehet, hogy lejárt, elírást tartalmaz, vagy kérdőjellel kezdődik.
- SAS-kulcsengedélyek engedélyezettek. Olvassa el legalább, és sorolja fel, hogy használ-e helyettesítő karaktereket.
- Blokkolt bejövő forgalom a tárfiókban. A részletekért tekintse meg az Azure Storage virtuális hálózati szabályainak kezelését , és győződjön meg arról, hogy engedélyezett a hozzáférés a felügyelt SQL-példány virtuális hálózatáról.
- Blokkolta a felügyelt SQL-példány kimenő forgalmát a tárvégpont-szabályzat használatával. Engedélyezze a tárfiók kimenő forgalmát.
- Kezelt identitás hozzáférési jogosultságok. Győződjön meg arról, hogy a példány felügyelt identitása rendelkezik hozzáférési jogosultságokkal a tárfiókhoz.
- Az adatbázis kompatibilitási szintjének 130-nak vagy annál magasabbnak kell lennie ahhoz, hogy az adatvirtualizálási lekérdezések működjenek.
KÜLSŐ TÁBLA LÉTREHOZÁSA KIVÁLASZTÁSKÉNT (CETAS)
CREATE EXTERNAL TABLE AS SELECT (CETAS) lehetővé teszi adatok exportálását a felügyelt SQL-példányból egy külső tárfiókba. A CETAS használatával létrehozhat egy külső táblát parquet- vagy CSV-fájlok tetején az Azure Blob Storage-ban vagy az Azure Data Lake Storage (ADLS) Gen2-ben. A CETAS ezzel párhuzamosan egy T-SQL-utasítás SELECT eredményeit is exportálhatja a létrehozott külső táblába. Ezekkel a képességekkel adatkiszivárgási kockázatot jelenthet, ezért az Azure SQL Managed Instance alapértelmezés szerint letiltja a CETAS-t. Az engedélyezéshez lásd KÜLSŐ TÁBLA LÉTREHOZÁSA SELECT-KÉNT (CETAS).
Korlátozások
- A sorszintű biztonsági funkció külső táblákkal nem támogatott.
- A dinamikus adatmaszkolási szabály nem definiálható külső tábla oszlopaihoz.
Ismert problémák
- Ha az Always Encrypted paraméterezése engedélyezve van az SQL Server Management Studióban (SSMS), az adatvirtualizálási lekérdezések hibaüzenettel
Incorrect syntax near 'PUSHDOWN'meghiúsulnak.