Udostępnij za pośrednictwem


OPENROWSET BULK (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Polecenie OPENROWSET języka T-SQL zawiera wszystkie informacje o połączeniu wymagane do uzyskiwania dostępu do danych zdalnych z zewnętrznego źródła danych. OPENROWSET obsługuje również operacje zbiorcze za pośrednictwem wbudowanego dostawcy BULK, który umożliwia odczytywanie i zwracanie danych z pliku jako zestawu wierszy. OPENROWSET BULK program jest przeznaczony do odczytu z zewnętrznych plików danych, OPENROWSET bez zbiorczego odczytu z innego aparatu bazy danych.

Funkcję OPENROWSET można odwołać w klauzuli FROM zapytania tak, jakby była to nazwa tabeli. Funkcję OPENROWSET można również odwołać jako element docelowy instrukcji INSERT, UPDATElub DELETE , z zastrzeżeniem możliwości dostawcy danych. Chociaż zapytanie może zwrócić wiele zestawów wyników, OPENROWSET zwraca tylko pierwszy zestaw wyników.

OPENROWSET BULK bez operatora jest dostępny tylko w programie SQL Server, aby uzyskać więcej informacji, zobacz OPENROWSET (Transact-SQL).

Szczegóły i linki do podobnych przykładów na innych platformach:

Transact-SQL konwencje składni

Syntax

OPENROWSET(BULK) składni służy do odczytywania plików zewnętrznych:

OPENROWSET( BULK 'data_file' ,
            { FORMATFILE = 'format_file_path' [ <bulk_options> ]
              | SINGLE_BLOB | SINGLE_CLOB | SINGLE_NCLOB }
)

<bulk_options> ::=
   [ , DATA_SOURCE = 'data_source_name' ]

   -- bulk_options related to input file format
   [ , CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ]
   [ , FORMAT = { 'CSV' | 'PARQUET' | 'DELTA' } ]
   [ , FIELDQUOTE = 'quote_character' ]
   [ , FORMATFILE = 'format_file_path' ]
   [ , FORMATFILE_DATA_SOURCE = 'data_source_name' ]

   [ , FIRSTROW = first_row ]
   [ , LASTROW = last_row ]

   [ , MAXERRORS = maximum_errors ]
   [ , ERRORFILE = 'file_name' ]
   [ , ERRORFILE_DATA_SOURCE = 'data_source_name' ]

   [ , ROWS_PER_BATCH = rows_per_batch ]
   [ , ORDER ( { column [ ASC | DESC ] } [ , ...n ] ) [ UNIQUE ] ]

Arguments

BULK arguments

Używa dostawcy zestawów wierszy BULK dla OPENROWSET do odczytywania danych z pliku. W programie SQL Server OPENROWSET mogą odczytywać dane z pliku danych bez ładowania danych do tabeli docelowej. Dzięki temu można użyć OPENROWSET z podstawową instrukcją SELECT.

Argumenty opcji BULK umożliwiają znaczącą kontrolę nad tym, gdzie rozpocząć i zakończyć odczytywanie danych, jak radzić sobie z błędami i jak dane są interpretowane. Można na przykład określić, że plik danych jest odczytywany jako pojedynczy wiersz, jednokolumny zestaw wierszy typu varbinary, varchar lub nvarchar. Domyślne zachowanie zostało opisane w poniższych opisach argumentów.

Aby uzyskać informacje o sposobie korzystania z BULK opcji, zobacz sekcję Uwagi w dalszej części tego artykułu. Aby uzyskać informacje o uprawnieniach wymaganych przez BULK tę opcję, zobacz sekcję Uprawnienia w dalszej części tego artykułu.

Note

W przypadku importowania danych z modelem pełnego odzyskiwania OPENROWSET (BULK ...) nie optymalizuje rejestrowania.

Aby uzyskać informacje na temat przygotowywania danych do importowania zbiorczego, zobacz Prepare data for bulk export or import.

BULK 'data_file'

Pełna ścieżka pliku danych, którego dane mają zostać skopiowane do tabeli docelowej.

SELECT * FROM OPENROWSET(
   BULK 'C:\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB
) AS DATA;

Począwszy od programu SQL Server 2017 (14.x), data_file może znajdować się w usłudze Azure Blob Storage. Aby zapoznać się z przykładami, zobacz Przykłady zbiorczego dostępu do danych w usłudze Azure Blob Storage.

Opcje obsługi błędów ZBIORCZYCH

ERRORFILE = 'file_name'

Określa plik używany do zbierania wierszy, które mają błędy formatowania i nie można przekonwertować na zestaw wierszy OLE DB. Te wiersze są kopiowane do tego pliku błędu z pliku danych "tak, jak to jest".

Plik błędu jest tworzony na początku wykonywania polecenia. Jeśli plik już istnieje, zostanie zgłoszony błąd. Ponadto tworzony jest plik kontrolny z rozszerzeniem .ERROR.txt. Ten plik odwołuje się do każdego wiersza w pliku błędu i zapewnia diagnostykę błędów. Po skorygowaniu błędów można załadować dane.

Począwszy od programu SQL Server 2017 (14.x), error_file_path może znajdować się w usłudze Azure Blob Storage.

ERRORFILE_DATA_SOURCE_NAME

Począwszy od programu SQL Server 2017 (14.x), ten argument jest nazwanym zewnętrznym źródłem danych wskazującym lokalizację magazynu obiektów blob platformy Azure w pliku błędu, który będzie zawierać błędy znalezione podczas importowania. Zewnętrzne źródło danych musi zostać utworzone przy użyciu TYPE = BLOB_STORAGE. Aby uzyskać więcej informacji, zobacz CREATE EXTERNAL DATA SOURCE (Transact-SQL).

MAXERRORS = maximum_errors

Określa maksymalną liczbę błędów składniowych lub niekonformujących wierszy, zgodnie z definicją w pliku formatu, które mogą wystąpić przed OPENROWSET zgłasza wyjątek. Dopóki MAXERRORS nie zostanie osiągnięty, OPENROWSET ignoruje każdy zły wiersz, nie ładuje go i zlicza zły wiersz jako jeden błąd.

Wartość domyślna dla maximum_errors to 10.

Note

MAX_ERRORS nie ma zastosowania do CHECK ograniczeń ani do konwertowania typów danychbigint i pieniędzy.

Opcje przetwarzania danych ZBIORCZYCH

DATA_SOURCE

DATA_SOURCE to lokalizacja zewnętrzna utworzona za pomocą polecenia CREATE EXTERNAL DATA SOURCE.

FIRSTROW = first_row

Określa liczbę pierwszego wiersza do załadowania. Wartość domyślna to 1. Wskazuje to pierwszy wiersz w określonym pliku danych. Liczby wierszy są określane przez zliczanie terminatorów wierszy. FIRSTROW jest oparty na 1.

LASTROW = last_row

Określa liczbę ostatniego wiersza do załadowania. Wartość domyślna to 0. Wskazuje to ostatni wiersz w określonym pliku danych.

ROWS_PER_BATCH = rows_per_batch

Określa przybliżoną liczbę wierszy danych w pliku danych. Ta wartość powinna być taka sama jak rzeczywista liczba wierszy.

OPENROWSET zawsze importuje plik danych jako pojedynczą partię. Jeśli jednak określisz rows_per_batch z wartością > 0, procesor zapytań używa wartości rows_per_batch jako wskazówki dotyczącej przydzielania zasobów w planie zapytania.

Domyślnie ROWS_PER_BATCH jest nieznany. Określanie ROWS_PER_BATCH = 0 jest takie samo jak pominięcie ROWS_PER_BATCH.

ORDER ( { kolumna [ ASC | DESC ] } [ ,... n ] [ UNIQUE ] )

Opcjonalna wskazówka określająca sposób sortowania danych w pliku danych. Domyślnie operacja zbiorcza zakłada, że plik danych jest nieurządkowany. Wydajność może poprawić, jeśli optymalizator zapytań może wykorzystać zamówienie w celu wygenerowania bardziej wydajnego planu zapytań. Poniższa lista zawiera przykłady dotyczące określania sortowania może być korzystne:

  • Wstawianie wierszy do tabeli zawierającej indeks klastrowany, w którym dane zestawu wierszy są sortowane w kluczu indeksu klastrowanego.
  • Łączenie zestawu wierszy z inną tabelą, w której pasują kolumny sortowania i sprzężenia.
  • Agregowanie danych zestawu wierszy według kolumn sortowania.
  • Użycie zestawu wierszy jako tabeli źródłowej w klauzuli FROM zapytania, gdzie pasują kolumny sortowania i sprzężenia.

UNIQUE

Określa, że plik danych nie ma zduplikowanych wpisów.

Jeśli rzeczywiste wiersze w pliku danych nie są sortowane zgodnie z określoną kolejnością lub jeśli określono wskazówkę UNIQUE, a klucze duplikatów są obecne, zwracany jest błąd.

Aliasy kolumn są wymagane w przypadku użycia ORDER. Lista aliasów kolumn musi odwoływać się do tabeli pochodnej, która jest uzyskiwana przez klauzulę BULK. Nazwy kolumn określone w klauzuli ORDER odwołują się do tej listy aliasów kolumn. Nie można określić dużych typów wartości (varchar(max), nvarchar(max), varbinary(max)i xml) i dużych typów obiektów (tekst, ntext i obraz).

SINGLE_BLOB

Zwraca zawartość data_file jako jednokolumtowy zestaw wierszy typu varbinary(max).

Important

Zalecamy importowanie danych XML tylko przy użyciu opcji SINGLE_BLOB, a nie SINGLE_CLOB i SINGLE_NCLOB, ponieważ tylko SINGLE_BLOB obsługuje wszystkie konwersje kodowania systemu Windows.

SINGLE_CLOB

Odczytując data_file jako ASCII, zwraca zawartość jako pojedynczy wiersz, jednokolumny zestaw wierszy typu varchar(max), używając sortowania bieżącej bazy danych.

SINGLE_NCLOB

Odczytując data_file jako Unicode, zwraca zawartość jako pojedynczy wiersz, jednokolumny zestaw wierszy typu nvarchar(max), używając sortowania bieżącej bazy danych.

SELECT * FROM OPENROWSET(
    BULK N'C:\Text1.txt',
    SINGLE_NCLOB
) AS Document;

Opcje formatu pliku wejściowego BULK

CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | "code_page" }

Określa stronę kodów danych w pliku danych. CODEPAGE ma zastosowanie tylko wtedy, gdy dane zawierają znaki, varchar lub kolumny tekstowe z wartościami znaków większymi niż 127 lub mniejsze niż 32.

Important

CODEPAGE nie jest obsługiwaną opcją w systemie Linux.

Note

Zalecamy określenie nazwy sortowania dla każdej kolumny w pliku formatu, z wyjątkiem sytuacji, gdy opcja 65001 ma mieć priorytet w specyfikacji sortowania/strony kodowej.

CODEPAGE value Description
ACP Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej ANSI/Microsoft Windows (ISO 1252) na stronę kodową programu SQL Server.
OEM (ustawienie domyślne) Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej systemu OEM na stronę kodów programu SQL Server.
RAW Żadna konwersja nie występuje z jednej strony kodu do innej. Jest to najszybsza opcja.
code_page Wskazuje stronę kodu źródłowego, na której są kodowane dane znaków w pliku danych; na przykład 850.

Ważny Wersje przed programem SQL Server 2016 (13.x) nie obsługują strony kodowej 65001 (kodowanie UTF-8).

FORMAT = { 'CSV' | "PARQUET" | "DELTA" }

Począwszy od programu SQL Server 2017 (14.x), ten argument określa plik wartości rozdzielonych przecinkami zgodny ze standardem RFC 4180 .

Począwszy od programu SQL Server 2022 (16.x), obsługiwane są zarówno formaty Parquet, jak i Delta.

SELECT *
FROM OPENROWSET(BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt',
    FIRSTROW=2,
    FORMAT='CSV') AS cars;

FORMATFILE = 'format_file_path'

Określa pełną ścieżkę pliku formatu. Program SQL Server obsługuje dwa typy plików formatu: XML i inne niż XML.

Plik formatu jest wymagany do definiowania typów kolumn w zestawie wyników. Jedynym wyjątkiem jest określenie SINGLE_CLOB, SINGLE_BLOBlub SINGLE_NCLOB; w tym przypadku plik formatu nie jest wymagany.

Aby uzyskać informacje o formatowaniu plików, zobacz Używanie pliku formatu do zbiorczego importowania danych (SQL Server).

Począwszy od programu SQL Server 2017 (14.x), format_file_path może znajdować się w usłudze Azure Blob Storage. Aby zapoznać się z przykładami, zobacz Przykłady zbiorczego dostępu do danych w usłudze Azure Blob Storage.

FIELDQUOTE = 'field_quote'

Począwszy od programu SQL Server 2017 (14.x), ten argument określa znak używany jako znak cudzysłowu w pliku CSV. Jeśli nie zostanie określony, znak cudzysłowu (") jest używany jako znak cudzysłowu zdefiniowany w standardzie RFC 4180 . Jako wartość tej opcji można określić tylko jeden znak.

Remarks

OPENROWSET Może służyć do uzyskiwania dostępu do danych zdalnych ze źródeł danych OLE DB tylko wtedy, gdy opcja rejestru DisallowAdhocAccess jest jawnie ustawiona 0 dla określonego dostawcy, a opcja zaawansowana konfiguracji zapytań rozproszonych ad hoc jest włączona. Jeśli te opcje nie są ustawione, domyślne zachowanie nie zezwala na dostęp ad hoc.

Gdy uzyskujesz dostęp do zdalnych źródeł danych OLE DB, tożsamość logowania zaufanych połączeń nie jest automatycznie delegowana z serwera, na którym klient jest połączony z serwerem, do którego jest wykonywane zapytanie. Należy skonfigurować delegowanie uwierzytelniania.

Nazwy wykazu i schematu są wymagane, jeśli dostawca danych obsługuje wiele katalogów i schematów w określonym źródle danych. Wartości dla catalog i schema można pominąć, gdy dostawca danych ich nie obsługuje. Jeśli dostawca obsługuje tylko nazwy schematów, należy określić dwuczęściową nazwę formularza schema.object . Jeśli dostawca obsługuje tylko nazwy wykazu, należy określić trzyczęściową nazwę formularza catalog.schema.object . Aby uzyskać więcej informacji, zobacz Transact-SQL konwencje składni.

W przypadku zapytań przekazywanych korzystających z dostawcy OLE DB klienta natywnego programu SQL Server należy określić trzyczęściowe nazwy.

OPENROWSET nie akceptuje zmiennych dla argumentów.

Każde wywołanie OPENDATASOURCE, OPENQUERYlub OPENROWSET w klauzuli FROM jest oceniane oddzielnie i niezależnie od dowolnego wywołania tych funkcji używanych jako element docelowy aktualizacji, nawet jeśli do dwóch wywołań są dostarczane identyczne argumenty. W szczególności warunki filtrowania lub sprzężenia zastosowane w wyniku jednego z tych wywołań nie mają wpływu na wyniki drugiego.

Użyj funkcji OPENROWSET z opcją BULK

Następujące ulepszenia Transact-SQL obsługują funkcję OPENROWSET(BULK...):

  • Klauzula FROM używana z SELECT może wywoływać OPENROWSET(BULK...) zamiast nazwy tabeli z pełną funkcjonalnością SELECT.

    OPENROWSET z opcją BULK wymaga nazwy korelacji, znanej również jako zmienna zakresu lub alias, w klauzuli FROM. Można określić aliasy kolumn. Jeśli lista aliasów kolumn nie jest określona, plik formatu musi mieć nazwy kolumn. Określanie aliasów kolumn zastępuje nazwy kolumn w pliku formatu, na przykład:

    • FROM OPENROWSET(BULK...) AS table_alias
    • FROM OPENROWSET(BULK...) AS table_alias(column_alias,...n)

    Important

    Nie można dodać AS <table_alias> spowoduje błąd: Msg 491, Level 16, State 1, Line 20 Nazwa korelacji musi być określona dla zbiorczego zestawu wierszy w klauzuli from.

  • Instrukcja SELECT...FROM OPENROWSET(BULK...) wysyła zapytanie do danych w pliku bezpośrednio bez importowania danych do tabeli. SELECT...FROM OPENROWSET(BULK...) instrukcje mogą również wyświetlać listę aliasów kolumn zbiorczych przy użyciu pliku formatu do określania nazw kolumn, a także typów danych.

  • Używanie OPENROWSET(BULK...) jako tabeli źródłowej w instrukcji INSERT lub MERGE zbiorczo importuje dane z pliku danych do tabeli programu SQL Server. Aby uzyskać więcej informacji, zobacz Use BULK INSERT or OPENROWSET(BULK...) to import data to SQL Server.

  • Gdy opcja OPENROWSET BULK jest używana z instrukcją INSERT, klauzula BULK obsługuje wskazówki dotyczące tabeli. Oprócz zwykłych wskazówek tabeli, takich jak TABLOCK, klauzula BULK może akceptować następujące wyspecjalizowane wskazówki tabeli: IGNORE_CONSTRAINTS (ignoruje tylko ograniczenia CHECK i FOREIGN KEY), IGNORE_TRIGGERS, KEEPDEFAULTSi KEEPIDENTITY. Aby uzyskać więcej informacji, zobacz Wskazówki dotyczące tabel (Transact-SQL).

    Aby uzyskać informacje na temat używania instrukcji INSERT...SELECT * FROM OPENROWSET(BULK...), zobacz zbiorcze importowanie i eksportowanie danych (SQL Server). Aby uzyskać informacje o tym, kiedy operacje wstawiania wierszy wykonywane przez importowanie zbiorcze są rejestrowane w dzienniku transakcji, zobacz Wymagania wstępne dotyczące minimalnego rejestrowania w importowaniu zbiorczym.

Note

W przypadku używania OPENROWSETważne jest, aby zrozumieć, jak program SQL Server obsługuje personifikację. Aby uzyskać informacje na temat zagadnień dotyczących zabezpieczeń, zobacz Use BULK INSERT or OPENROWSET(BULK...) to import data to SQL Server.

Zbiorcze importowanie danych SQLCHAR, SQLNCHAR lub SQLBINARY

OPENROWSET(BULK...) zakłada, że jeśli nie określono, maksymalna długość SQLCHAR, SQLNCHARlub SQLBINARY danych nie przekracza 8000 bajtów. Jeśli importowane dane znajdują się w polu danych LOB zawierającym dowolną wartość varchar(max), nvarchar(max)lub obiekty varbinary(max ), które przekraczają 8000 bajtów, należy użyć pliku formatu XML, który definiuje maksymalną długość pola danych. Aby określić maksymalną długość, zmodyfikuj plik formatu i zadeklaruj atrybut MAX_LENGTH.

Note

Automatycznie wygenerowany plik formatu nie określa długości ani maksymalnej długości pola LOB. Można jednak edytować plik formatu i ręcznie określić długość lub maksymalną długość.

Zbiorcze eksportowanie lub importowanie dokumentów SQLXML

Aby zbiorczo wyeksportować lub zaimportować dane SQLXML, użyj jednego z następujących typów danych w pliku formatu.

Data type Effect
SQLCHAR lub SQLVARYCHAR Dane są wysyłane na stronie kodu klienta lub na stronie kodowej implikowanej przez sortowanie.
SQLNCHAR lub SQLNVARCHAR Dane są wysyłane jako Unicode.
SQLBINARY lub SQLVARYBIN Dane są wysyłane bez żadnej konwersji.

Permissions

OPENROWSET w przypadku zewnętrznych źródeł danych wymagane są następujące uprawnienia:

  • ADMINISTER DATABASE BULK OPERATIONS

    or

  • ADMINISTER BULK OPERATIONS

Poniższy przykład przyznaje ADMINISTEER DATABASE BULK OPERATIONS podmiotowi zabezpieczeń.

GRANT ADMINISTER DATABASE BULK OPERATIONS TO [<principal_name>];

Jeśli docelowe konto magazynu jest prywatne, podmiot zabezpieczeń musi mieć również rolę Czytelnik danych obiektu blob usługi Storage (lub nowszą) przypisaną na poziomie kontenera lub konta magazynu.

Examples

Ta sekcja zawiera ogólne przykłady, aby zademonstrować sposób używania OPENROWSET BULK składni.

A. Używanie funkcji OPENROWSET do zbiorczego wstawiania danych pliku do kolumny varbinary(max)

Dotyczy: Tylko program SQL Server.

Poniższy przykład tworzy małą tabelę do celów demonstracyjnych i wstawia dane plików z pliku o nazwie Text1.txt znajdującej C: się w katalogu głównym do kolumny varbinary(max).

CREATE TABLE myTable (
    FileName NVARCHAR(60),
    FileType NVARCHAR(60),
    Document VARBINARY(MAX)
);
GO

INSERT INTO myTable (
    FileName,
    FileType,
    Document
)
SELECT 'Text1.txt' AS FileName,
    '.txt' AS FileType,
    *
FROM OPENROWSET(
    BULK N'C:\Text1.txt',
    SINGLE_BLOB
) AS Document;
GO

B. Użyj dostawcy ZBIORCZEgo OPENROWSET z plikiem formatu, aby pobrać wiersze z pliku tekstowego

Dotyczy: Tylko program SQL Server.

W poniższym przykładzie użyto pliku formatu do pobrania wierszy z pliku tekstowego rozdzielanego tabulatorami, values.txt zawierającego następujące dane:

1     Data Item 1
2     Data Item 2
3     Data Item 3

Plik formatu values.fmtopisuje kolumny w values.txt:

9.0
2
1  SQLCHAR  0  10 "\t"    1  ID           SQL_Latin1_General_Cp437_BIN
2  SQLCHAR  0  40 "\r\n"  2  Description  SQL_Latin1_General_Cp437_BIN

To zapytanie pobiera te dane:

SELECT a.* FROM OPENROWSET(
    BULK 'C:\test\values.txt',
   FORMATFILE = 'C:\test\values.fmt'
) AS a;

C. Określanie pliku formatu i strony kodowej

Dotyczy: Tylko program SQL Server.

W poniższym przykładzie pokazano, jak używać jednocześnie opcji formatowania pliku i strony kodu.

INSERT INTO MyTable
SELECT a.* FROM OPENROWSET (
    BULK N'D:\data.csv',
    FORMATFILE = 'D:\format_no_collation.txt',
    CODEPAGE = '65001'
) AS a;

D. Uzyskiwanie dostępu do danych z pliku CSV przy użyciu pliku formatu

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.

SELECT * FROM OPENROWSET(
    BULK N'D:\XChange\test-csv.csv',
    FORMATFILE = N'D:\XChange\test-csv.fmt',
    FIRSTROW = 2,
    FORMAT = 'CSV'
) AS cars;

E. Uzyskiwanie dostępu do danych z pliku CSV bez pliku formatu

Dotyczy: Tylko program SQL Server.

SELECT * FROM OPENROWSET(
   BULK 'C:\Program Files\Microsoft SQL Server\MSSQL14.CTP1_1\MSSQL\DATA\inv-2017-01-19.csv',
   SINGLE_CLOB
) AS DATA;
SELECT *
FROM OPENROWSET('MSDASQL',
    'Driver={Microsoft Access Text Driver (*.txt, *.csv)}',
    'SELECT * FROM E:\Tlog\TerritoryData.csv'
);

Important

Sterownik ODBC powinien być 64-bitowy. Otwórz kartę Sterowniki w aplikacji Połącz ze źródłem danych ODBC (Kreator importu i eksportu programu SQL Server) w systemie Windows, aby to sprawdzić. Istnieje 32-bitowa Microsoft Text Driver (*.txt, *.csv), która nie będzie działać z 64-bitową wersją sqlservr.exe.

F. Uzyskiwanie dostępu do danych z pliku przechowywanego w usłudze Azure Blob Storage

Dotyczy: SQL Server 2017 (14.x) i nowsze wersje.

W programie SQL Server 2017 (14.x) i nowszych wersjach w poniższym przykładzie użyto zewnętrznego źródła danych wskazującego kontener na koncie usługi Azure Storage i poświadczenie o zakresie bazy danych utworzone na potrzeby sygnatury dostępu współdzielonego.

SELECT * FROM OPENROWSET(
   BULK 'inv-2017-01-19.csv',
   DATA_SOURCE = 'MyAzureInvoices',
   SINGLE_CLOB
) AS DataFile;

Aby uzyskać pełne OPENROWSET przykłady, w tym konfigurowanie poświadczeń i zewnętrznego źródła danych, zobacz Przykłady zbiorczego dostępu do danych w usłudze Azure Blob Storage.

G. Importowanie do tabeli z pliku przechowywanego w usłudze Azure Blob Storage

W poniższym przykładzie pokazano, jak za pomocą polecenia OPENROWSET załadować dane z pliku CSV w lokalizacji magazynu obiektów blob platformy Azure, na której został utworzony klucz SYGNATURY dostępu współdzielonego. Lokalizacja usługi Azure Blob Storage jest skonfigurowana jako zewnętrzne źródło danych. Wymaga to poświadczenia o zakresie bazy danych przy użyciu sygnatury dostępu współdzielonego szyfrowanej przy użyciu klucza głównego w bazie danych użytkownika.

-- Optional: a MASTER KEY is not required if a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

-- Optional: a DATABASE SCOPED CREDENTIAL is not required because the blob is configured for public (anonymous) access!
CREATE DATABASE SCOPED CREDENTIAL MyAzureBlobStorageCredential
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '******srt=sco&sp=rwac&se=2017-02-01T00:55:34Z&st=2016-12-29T16:55:34Z***************';

-- Make sure that you don't have a leading ? in the SAS token, and that you
-- have at least read permission on the object that should be loaded srt=o&sp=r,
-- and that expiration period is valid (all dates are in UTC time)
CREATE EXTERNAL DATA SOURCE MyAzureBlobStorage
WITH (
    TYPE = BLOB_STORAGE,
    LOCATION = 'https://****************.blob.core.windows.net/curriculum',
    -- CREDENTIAL is not required if a blob is configured for public (anonymous) access!
    CREDENTIAL = MyAzureBlobStorageCredential
);

INSERT INTO achievements
WITH (TABLOCK) (
    id,
    description
)
SELECT * FROM OPENROWSET(
    BULK 'csv/achievements.csv',
    DATA_SOURCE = 'MyAzureBlobStorage',
    FORMAT = 'CSV',
    FORMATFILE = 'csv/achievements-c.xml',
    FORMATFILE_DATA_SOURCE = 'MyAzureBlobStorage'
) AS DataFile;

H. Używanie tożsamości zarządzanej dla źródła zewnętrznego

Dotyczy: Azure SQL Managed Instance i Azure SQL Database

Poniższy przykład tworzy poświadczenia przy użyciu tożsamości zarządzanej, tworzy źródło zewnętrzne, a następnie ładuje dane z woluminu CSV hostowanego w źródle zewnętrznym.

Najpierw utwórz poświadczenie i określ magazyn obiektów blob jako źródło zewnętrzne:

CREATE DATABASE SCOPED CREDENTIAL sampletestcred
WITH IDENTITY = 'MANAGED IDENTITY';

CREATE EXTERNAL DATA SOURCE SampleSource
WITH (
    LOCATION = 'abs://****************.blob.core.windows.net/curriculum',
    CREDENTIAL = sampletestcred
);

Następnie załaduj dane z pliku CSV hostowanego w magazynie obiektów blob:

SELECT * FROM OPENROWSET(
    BULK 'Test - Copy.csv',
    DATA_SOURCE = 'SampleSource',
    SINGLE_CLOB
) as test;

I. Używanie zestawu OPENROWSET do uzyskiwania dostępu do kilku plików Parquet przy użyciu magazynu obiektów zgodnego z protokołem S3

Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.

W poniższym przykładzie użyto dostępu do kilku plików Parquet z innej lokalizacji, wszystkie przechowywane w magazynie obiektów zgodnym z usługą S3:

CREATE DATABASE SCOPED CREDENTIAL s3_dsc
WITH IDENTITY = 'S3 Access Key',
SECRET = 'contosoadmin:contosopwd';
GO

CREATE EXTERNAL DATA SOURCE s3_eds
WITH
(
    LOCATION = 's3://10.199.40.235:9000/movies',
    CREDENTIAL = s3_dsc
);
GO

SELECT * FROM OPENROWSET(
    BULK (
        '/decades/1950s/*.parquet',
        '/decades/1960s/*.parquet',
        '/decades/1970s/*.parquet'
    ),
    FORMAT = 'PARQUET',
    DATA_SOURCE = 's3_eds'
) AS data;

J. Uzyskiwanie dostępu do kilku tabel delty z usługi Azure Data Lake Gen2 przy użyciu zestawu OPENROWSET

Dotyczy: SQL Server 2022 (16.x) i nowszych wersjach.

W tym przykładzie kontener tabeli danych nosi nazwę Contosoi znajduje się na koncie magazynu usługi Azure Data Lake Gen2.

CREATE DATABASE SCOPED CREDENTIAL delta_storage_dsc
WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
SECRET = '<SAS Token>';

CREATE EXTERNAL DATA SOURCE Delta_ED
WITH (
    LOCATION = 'adls://<container>@<storage_account>.dfs.core.windows.net',
    CREDENTIAL = delta_storage_dsc
);

SELECT *
FROM OPENROWSET(
    BULK '/Contoso',
    FORMAT = 'DELTA',
    DATA_SOURCE = 'Delta_ED'
) AS result;

K. Używanie zestawu danych OPENROWSET do wykonywania zapytań dotyczących publicznego anonimowego zestawu danych

W poniższym przykładzie użyto publicznie dostępnej publicznie żółtej podróży taksówką rekordy otwierania zestawu danych.

Najpierw utwórz źródło danych:

CREATE EXTERNAL DATA SOURCE NYCTaxiExternalDataSource
WITH (LOCATION = 'abs://nyctlc@azureopendatastorage.blob.core.windows.net');

Wykonaj zapytanie o wszystkie pliki z rozszerzeniem parquet w folderach pasujących do wzorca nazwy:

SELECT TOP 10 *
FROM OPENROWSET(
 BULK 'yellow/puYear=*/puMonth=*/*.parquet',
 DATA_SOURCE = 'NYCTaxiExternalDataSource',
 FORMAT = 'parquet'
) AS filerows;

More examples

Aby uzyskać więcej przykładów pokazujących korzystanie z INSERT...SELECT * FROM OPENROWSET(BULK...), zobacz następujące artykuły:

Dotyczy:Punkt końcowy analizy SQL i magazyn w usłudze Microsoft Fabric

Funkcja OPENROWSET języka T-SQL odczytuje zawartość pliku w usłudze Azure Data Lake Storage. Możesz odczytywać formaty plików tekstowych/CSV, Parquet lub JSON, które są przechowywane w usłudze Azure Data Lake lub Azure Blob Storage.

Funkcja OPENROWSET odczytuje dane z pliku i zwraca je jako zestaw wierszy. Funkcję OPENROWSET można odwołać w klauzuli FROM zapytania tak, jakby była to nazwa tabeli.

Ten artykuł dotyczy tylko usługi Microsoft Fabric Warehouse. Istnieją różnice funkcjonalne między funkcją OPENROWSET w usłudze Fabric Warehouse i elementami punktu końcowego analizy SQL.

Szczegóły i linki do podobnych przykładów na innych platformach:

Syntax

SELECT <columns>
FROM OPENROWSET(
    BULK 'https://<storage>.blob.core.windows.net/path/folder1=*/folder2=*/<filename>'
    [, FORMAT = ('PARQUET' | 'CSV' | 'JSONL') ]

    -- execution options
    [, ROWS_PER_BATCH=number_of_rows]

    -- Text/CSV encoding options
    [, DATAFILETYPE = {'char' | 'widechar' }     ]
    [, CODEPAGE = {'ACP' | 'OEM' | 'raw' | '<code_page>' } ]

    -- Text/CSV formatting options
    [, ROWTERMINATOR = 'row_terminator' ]
    [, FIELDTERMINATOR =  'field_terminator' ]
    [, FIELDQUOTE = 'string_delimiter' ]
    [ , PARSER_VERSION = 'parser_version' ]
    [, ESCAPECHAR = 'escape_char' ]
    [, HEADER_ROW = [true|false] ]
    [, FIRSTROW = first_row ]
    [, LASTROW = last_row ]

    -- execution options
    [, ROWS_PER_BATCH=number_of_rows]
) 
[
    WITH (  ( <column_name> <sql_datatype> [ '<column_path>' | <column_ordinal> ] )+ )
]
[ AS <alias> ]

Arguments

BULK 'data_file'

Identyfikator URI plików danych, których dane mają być odczytywane i zwracane jako zestaw wierszy. Identyfikator URI może odwoływać się do usługi Azure Data Lake Storage lub Azure Blob Storage.

Identyfikator URI może zawierać * znak zgodny z dowolną sekwencją znaków, co pozwala OPENROWSET dopasować wzorzec do identyfikatora URI. Ponadto może kończyć /** się w celu włączenia cyklicznego przechodzenia przez wszystkie podfoldery.

Dane można odczytywać OPENROWSET(BULK) bezpośrednio z plików przechowywanych w usłudze Fabric OneLake, w szczególności z folderu Files w usłudze Fabric Lakehouse. Eliminuje to konieczność użycia zewnętrznych kont przejściowych (takich jak USŁUGA ADLS Gen2 lub Blob Storage) i umożliwia zarządzanie obszarem roboczym, natywne pozyskiwanie w modelu SaaS przy użyciu uprawnień sieci szkieletowej. Ta funkcja obsługuje:

  • Odczytywanie z Files folderów w usłudze Lakehouse
  • Obciążenia między obszarami roboczymi w ramach tej samej dzierżawy
  • Natywne wymuszanie tożsamości przy użyciu identyfikatora Entra firmy Microsoft

Note

Magazyn OneLake sieci szkieletowej jest w wersji zapoznawczej. Zapoznaj się z ograniczeniami , które mają zastosowanie zarówno do , jak COPY INTO i OPENROWSET(BULK).

Obsługiwane formaty identyfikatora URI to:

  • https://{storage}.blob.core.windows.net/[container}/{file path}
  • https://{storage}.dfs.core.windows.net/[container}/{file path}
  • abfss://[container}@{storage}.dfs.core.windows.net/{file path}
  • https://onelake.dfs.fabric.microsoft.com/<workspaceId>/<lakehouseId>/Files/{file path} — obecnie w wersji zapoznawczej

For example:

SELECT TOP 10 *
FROM OPENROWSET(
    BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/*.parquet'
);

Opcje formatu pliku wejściowego BULK

FORMAT = { 'CSV' | "PARQUET" | "JSONL" }

Określa format przywoływnego pliku. Jeśli rozszerzenie pliku w ścieżce kończy się ciągiem .csv, , .tsv.parquet.parq.jsonl.ldjsonlub .ndjson, FORMAT opcja nie musi być określona.

Note

Funkcja OPENROWSET może odczytywać tylko nowy format JSON rozdzielany wierszami . Ta funkcja jest obecnie dostępna w wersji zapoznawczej. Znak nowego wiersza musi być używany jako separator między dokumentami JSON i nie można go umieścić w środku dokumentu JSON.

For example:

SELECT *
FROM OPENROWSET(
    BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);

Jeśli ścieżka pliku nie kończy się jednym z tych rozszerzeń, musisz określić element FORMAT, na przykład:

SELECT TOP 10 *
FROM OPENROWSET(
      BULK 'abfss://nyctlc@azureopendatastorage.blob.core.windows.net/yellow/**',
      FORMAT='PARQUET'
)

ROWS_PER_BATCH = rows_per_batch

Określa przybliżoną liczbę wierszy danych w pliku danych. Ta wartość jest oszacowaniem i powinna być przybliżeniem (w obrębie jednej wielkości) rzeczywistej liczby wierszy. Domyślnie ROWS_PER_BATCH jest szacowana na podstawie właściwości pliku (liczba plików, rozmiary plików, rozmiar zwracanych typów danych). Określanie ROWS_PER_BATCH = 0 jest takie samo jak pominięcie ROWS_PER_BATCH.

For example:

SELECT TOP 10 *
FROM OPENROWSET(
    BULK 'abfss://public@pandemicdatalake.dfs.core.windows.net/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet',
    ROWS_PER_BATCH = 100000
);

Opcje kodowania tekstu/CSV

DATAFILETYPE = { 'char' | "widechar" }

Określa, że OPENROWSET(BULK) powinien odczytywać zawartość pliku z jednym bajtem (ASCII, UTF8) lub wiele bajtów (UTF16).

DATAFILETYPE value Wszystkie dane reprezentowane w:
char (default) Character format.

Aby uzyskać więcej informacji, zobacz Używanie formatu znaków do importowania lub eksportowania danych.
widechar Unicode characters.

Aby uzyskać więcej informacji, zobacz Używanie formatu znaków Unicode do importowania lub eksportowania danych.

CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | "code_page" }

Określa stronę kodów danych w pliku danych. CODEPAGE ma zastosowanie tylko wtedy, gdy dane zawierają znaki, varchar lub kolumny tekstowe z wartościami znaków większymi niż 127 lub mniejsze niż 32.

CODEPAGE value Description
ACP Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej ANSI/Microsoft Windows (ISO 1252) na stronę kodową programu SQL Server.
OEM (ustawienie domyślne) Konwertuje kolumny typu danych char, varchar lub text ze strony kodowej systemu OEM na stronę kodów programu SQL Server.
RAW Żadna konwersja nie występuje z jednej strony kodu do innej. Jest to najszybsza opcja.
code_page Wskazuje stronę kodu źródłowego, na której są kodowane dane znaków w pliku danych; na przykład 850.

Ważny Wersje przed programem SQL Server 2016 (13.x) nie obsługują strony kodowej 65001 (kodowanie UTF-8).

Opcje formatowania tekstu/CSV

ROWTERMINATOR = 'row_terminator'

Określa terminator wierszy, który ma być używany dla plików danych char i widechar . Domyślny terminator wierszy to \r\n (znak nowego wiersza). Aby uzyskać więcej informacji, zobacz Określanie terminatorów pól i wierszy.

FIELDTERMINATOR = 'field_terminator'

Określa terminator pola, który ma być używany dla plików danych char i widechar . Domyślnym terminatorem pola jest , (przecinek). Aby uzyskać więcej informacji, zobacz Określanie pól i terminatorów wierszy.

Na przykład aby odczytać dane rozdzielane tabulatorami z pliku:

SELECT *
FROM OPENROWSET(
    BULK '{file path}',
    ROWTERMINATOR = '\t'
);

FIELDQUOTE = 'field_quote'

Określa znak, który jest używany jako znak cudzysłowu w pliku CSV. Jeśli nie zostanie określony, znak cudzysłowu (") jest używany jako znak cudzysłowu zdefiniowany w standardzie RFC 4180 . Znak FIELDTERMINATOR (na przykład przecinek) można umieścić w cudzysłowie pól i będzie traktowany jako zwykły znak w komórce opakowanej znakami FIELDQUOTE .

Na przykład użyj FIELDQUOTE = '"' następującego zestawu danych wartości rozdzielanej przecinkami (CSV) z przecinkami w polu adresu. Wartości pola adresu będą zachowywane jako pojedyncza wartość, a nie podzielone na wiele wartości według przecinków w znakach " (cudzysłowu).

SELECT *
FROM OPENROWSET(
    BULK '{file path}',
    FIELDQUOTE = '"',
    FIELDTERMINATOR = ','
);
Empire State Building,40.748817,-73.985428,"20 W 34th St, New York, NY 10118","\icons\sol.png"
Statue of Liberty,40.689247,-74.044502,"Liberty Island, New York, NY 10004","\icons\sol.png"

PARSER_VERSION = 'parser_version'

Określa wersję analizatora, która ma być używana podczas odczytywania plików. Obecnie obsługiwane wersje analizatora CSV to 1.0 i 2.0:

  • PARSER_VERSION = '1.0'
  • PARSER_VERSION = '2.0'

Analizator CSV w wersji 1.0 jest domyślny i rozbudowany. Wersja 2.0 została utworzona pod kątem wydajności i nie obsługuje wszystkich opcji i kodowań.

Specyfikator analizatora CSV w wersji 1.0:

  • Następujące opcje nie są obsługiwane: HEADER_ROW.
  • Domyślne terminatory to \r\n, \n i \r.
  • Jeśli określisz \n (nowy wiersz) jako terminator wiersza, zostanie on automatycznie poprzedzony znakiem \r (powrotu karetki), co powoduje zakończenie wiersza .\r\n

Specyfikator analizatora CSV w wersji 2.0:

  • Nie wszystkie typy danych są obsługiwane.
  • Maksymalna długość kolumny znaków wynosi 8000.
  • Maksymalny limit rozmiaru wiersza wynosi 8 MB.
  • Następujące opcje nie są obsługiwane: DATA_COMPRESSION.
  • Pusty ciąg zapisany jako ("") jest interpretowany jako pusty ciąg.
  • Opcja DATEFORMAT SET nie jest honorowana.
  • Obsługiwany format dla typu danych daty : YYYY-MM-DD
  • Obsługiwany format dla typu danych czasu : HH:MM:SS[.fractional seconds]
  • Obsługiwany format dla typu danych datetime2 : YYYY-MM-DD HH:MM:SS[.fractional seconds]
  • Domyślne terminatory to \r\n i \n.

ESCAPE_CHAR = 'char'

Określa znak w pliku, który jest używany jako znak ucieczki dla siebie i wszystkich wartości ograniczników w pliku. Jeśli po znaku ucieczki występuje wartość inna niż sam znak ucieczki lub którykolwiek z wartości ograniczników, znak ucieczki jest pomijany podczas odczytywania wartości.

Parametr ESCAPECHAR zostanie zastosowany niezależnie od tego, czy FIELDQUOTE parametr jest włączony, czy nie jest włączony. Nie będzie używany do omijania znaku cudzysłowu. Znak cudzysłowu musi być zastąpiony innym znakiem cudzysłowu. Znak cudzysłów może pojawić się w wartości kolumny tylko wtedy, gdy wartość jest hermetyzowana znakami cudzysłów.

W poniższym przykładzie przecinek (,) i ukośnik odwrotny (\) są ucieczki i reprezentowane jako \, i :\\

SELECT *
FROM OPENROWSET(
    BULK '{file path}',
    ESCAPECHAR = '\'
);
Place,Address,Icon
Empire State Building,20 W 34th St\, New York\, NY 10118,\\icons\\sol.png
Statue of Liberty,Liberty Island\, New York\, NY 10004,\\icons\\sol.png

HEADER_ROW = { TRUE | FALSE }

Określa, czy plik CSV zawiera wiersz nagłówka. Wartość domyślna to FALSE. Obsługiwane w programie PARSER_VERSION='2.0'. Jeśli TRUEnazwy kolumn będą odczytywane z pierwszego wiersza zgodnie z argumentem FIRSTROW . Jeśli TRUE i schemat jest określony przy użyciu , WITHpowiązanie nazw kolumn będzie wykonywane według nazwy kolumny, a nie pozycji porządkowych.

Określa, czy plik CSV zawiera wiersz nagłówka, który nie powinien być zwracany z innymi wierszami danych. Wartość domyślna to FALSE. Obsługiwane w programie PARSER_VERSION='2.0'. Jeśli TRUEnazwy kolumn będą odczytywane z pierwszego wiersza zgodnie z argumentem FIRSTROW . Jeśli TRUE i schemat jest określony przy użyciu , WITHpowiązanie nazw kolumn będzie wykonywane według nazwy kolumny, a nie pozycji porządkowych.

SELECT *
FROM OPENROWSET(
    BULK '{file path}',
    HEADER_ROW = TRUE
);
Place,Latitude,Longitude,Address,Area,State,Zipcode
Empire State Building,40.748817,-73.985428,20 W 34th St,New York,NY,10118
Statue of Liberty,40.689247,-74.044502,Liberty Island,New York,NY,10004

FIRSTROW = first_row

Określa liczbę pierwszego wiersza do załadowania. Wartość domyślna to 1. Wskazuje to pierwszy wiersz w określonym pliku danych. Liczby wierszy są określane przez zliczanie terminatorów wierszy. FIRSTROW jest oparty na 1.

LASTROW = last_row

Określa liczbę ostatniego wiersza do załadowania. Wartość domyślna to 0. Wskazuje to ostatni wiersz w określonym pliku danych.

Execution options

ROWS_PER_BATCH = rows_per_batch

Określa przybliżoną liczbę wierszy danych w pliku danych. Ta wartość powinna być taka sama jak rzeczywista liczba wierszy.

Domyślnie ROWS_PER_BATCH jest szacowana na podstawie właściwości pliku (liczba plików, rozmiary plików, rozmiar zwracanych typów danych). Określanie ROWS_PER_BATCH = 0 jest takie samo jak pominięcie ROWS_PER_BATCH.

WITH Schema

Schemat WITH określa kolumny definiujące zestaw wyników funkcji OPENROWSET. Zawiera definicje kolumn dla każdej kolumny, która zostanie zwrócona w wyniku i przedstawia reguły mapowania, które wiążą kolumny pliku bazowego z kolumnami w zestawie wyników.

W poniższym przykładzie:

  • Kolumna country_region ma typ varchar(50) i odwołuje się do kolumny bazowej o tej samej nazwie
  • Kolumna date odwołuje się do kolumny CSV/Parquet lub właściwości JSONL o innej nazwie fizycznej
  • Kolumna cases odwołuje się do trzeciej kolumny w pliku
  • Kolumna fatal_cases odwołuje się do zagnieżdżonej właściwości Parquet lub obiektu podrzędnego JSONL
SELECT *
FROM OPENROWSET(<...>) 
WITH (
        country_region varchar(50), --> country_region column has varchar(50) type and referencing the underlying column with the same name
        [date] DATE '$.updated',   --> date is referencing a CSV/Parquet column or JSONL property with a different physical name
        cases INT 3,             --> cases is referencing third column in the file
        fatal_cases INT '$.statistics.deaths'  --> fatal_cases is referencing a nested Parquet property or JSONL sub-object
     );

<column_name>

Nazwa kolumny, która zostanie zwrócona w zestawie wierszy wyników. Dane tej kolumny są odczytywane z podstawowej kolumny pliku o tej samej nazwie, chyba że zostaną zastąpione przez <column_path> lub <column_ordinal>. Nazwa kolumny musi być zgodna z regułami dotyczącymi identyfikatorów nazw kolumn.

<column_type>

Typ języka T-SQL kolumny w zestawie wyników. Wartości z pliku bazowego są konwertowane na ten typ, gdy OPENROWSET zwraca wyniki. Aby uzyskać więcej informacji, zobacz Typy danych w magazynie sieci szkieletowej.

<column_path>

Ścieżka rozdzielona kropką (na przykład $.description.location.lat) używana do odwołowania się do zagnieżdżonych pól w typach złożonych, takich jak Parquet.

<column_ordinal>

Liczba reprezentująca fizyczny indeks kolumny, która zostanie zamapowana na kolumnę w klauzuli WITH.

Remarks

Obsługiwane funkcje zostały podsumowane w tabeli:

Feature Supported Not available
File formats Parquet, CSV, JSONL (wersja zapoznawcza) Delta, Azure Cosmos DB, JSON, relacyjne bazy danych
Authentication EntraID/SPN passthrough, public storage Sygnatura dostępu współdzielonego/SAK, nazwa SPN, dostęp zarządzany
Storage Azure Blob Storage, Azure Data Lake Storage, Fabric OneLake (wersja zapoznawcza)
Options Tylko pełny/bezwzględny identyfikator URI w OPENROWSET Ścieżka względnego identyfikatora URI w elemecie OPENROWSET, DATA_SOURCE
Partitioning Możesz użyć funkcji filepath() w zapytaniu.

Examples

A. Odczytywanie pliku parquet z usługi Azure Blob Storage

W poniższym przykładzie przedstawiono sposób odczytywania 100 wierszy z pliku Parquet:

SELECT TOP 100 * 
FROM OPENROWSET(
    BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet'
);

B. Odczytywanie niestandardowego pliku CSV

W poniższym przykładzie widać, jak odczytywać wiersze z pliku CSV z wierszem nagłówka i jawnie określonymi znakami terminatora oddzielającym wiersze i pola:

SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.csv',
 HEADER_ROW = TRUE,
 ROW_TERMINATOR = '\n',
 FIELD_TERMINATOR = ',');

C. Określanie schematu kolumny pliku podczas odczytywania pliku

W poniższym przykładzie pokazano, jak jawnie określić schemat wiersza, który zostanie zwrócony w wyniku OPENROWSET funkcji:

SELECT *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.blob.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.parquet') 
WITH (
        updated DATE
        ,confirmed INT
        ,deaths INT
        ,iso2 VARCHAR(8000)
        ,iso3 VARCHAR(8000)
        );

D. Odczytywanie partycjonowanych zestawów danych

W poniższym przykładzie można zobaczyć, jak używać funkcji filepath() do odczytywania części identyfikatora URI ze dopasowanej ścieżki pliku:

SELECT TOP 10 
  files.filepath(2) AS area
, files.*
FROM OPENROWSET(
BULK 'https://synapseaisolutionsa.blob.core.windows.net/public/NYC_Property_Sales_Dataset/*_*.csv',
 HEADER_ROW = TRUE) 
AS files
WHERE files.filepath(1) = '2009';

E. Określanie schematu kolumny pliku podczas odczytywania pliku JSONL

W poniższym przykładzie można zobaczyć, jak jawnie określić schemat wiersza, który zostanie zwrócony w wyniku OPENROWSET funkcji:

SELECT TOP 10 *
FROM OPENROWSET(
BULK 'https://pandemicdatalake.dfs.core.windows.net/public/curated/covid-19/bing_covid-19_data/latest/bing_covid-19_data.jsonl') 
WITH (
        country_region varchar(50),
        date DATE '$.updated',
        cases INT '$.confirmed',
        fatal_cases INT '$.deaths'
     );

Jeśli nazwa kolumny nie jest zgodna z fizyczną nazwą kolumny we właściwościach, jeśli plik JSONL, możesz określić nazwę fizyczną w ścieżce JSON po definicji typu. Można użyć wielu właściwości. Aby na przykład $.location.latitude odwołać się do zagnieżdżonych właściwości w typach złożonych parquet lub obiektach podrzędnych JSON.