BULK INSERT:
br>
● Opcja BULK INSERT umożliwia importowanie danych z heterogenicznych źródeł. W tym temacie zajmiemy się formatem plików płaskich, do których należą pliki tekstowe, czyli np. „.txt” czy „.csv”.
● Należy zachować szczególną ostrożność podczas importowania danych do tabeli, w której istnieją już inne dane, ponieważ może dojść do błędnej konwersji dotyczącej zazwyczaj danych liczbowych i ich zaokrąglania czy traktowania kropek i przecinków. Mało tego, że zaimportujemy błędne wartości, to istniejące skrypty działając na błędnie zaimportowanych danych będą generowały dalsze błędne wyliczenia.
● Za pomocą tej opcji można importować pliki z maksymalną liczbą pól wynoszącą 1024.
br>
Argumenty opcji: BULK INSERT |
|
BATCHSIZE = BATCH_SIZE | Określenie liczby wierszy partii. Partia to ilość danych objętych transakcją. Wystąpienie błędu importu powoduje wycofanie transakcji. |
CHECK_CONSTRAINTS | Oznacza konieczność sprawdzania ograniczeń CHECK oraz FOREIGN KEY podczas importu danych. Bez użycia tej opcji ograniczenia te są ignorowane a następnie oznaczane jako niezaufane. Natomiast ograniczenia UNIQUE oraz PRIMARY KEY zawsze są sprawdzane. Jeżeli kolumna znakowa ma ograniczenie NOT NULL, a plik nie będzie zawierał danych to zostanie wstawiony pusty łańcuch. |
CODEPAGE | Określenie strony kodowej danych w pliku: ACP – dotyczy danych typu CHAR i VARCHAR, konwertuje dane z pliku ANSI, ISO 1252. OEM – domyślnie, dotyczy danych typu CHAR i VARCHAR, konwertuje dane z pliku OEM. RAW – brak konwersji, najszybsze działanie. CODE_PAGE – dotyczy określonego numeru strony kodowej, np. 850. Brak obsługi strony kodowej 65001 (UTF-8). |
‘DATA_FILE’ | Pełna ścieżka do pliku. |
DATABASE_NAME | Nazwa bazy danych. |
DATAFILETYPE | Określenie typu pliku: CHAR – domyślnie, format znakowy. NATIVE – plik z tożsamymi typami danych jak w SQL Server. Opcja ta jest bardziej wydajna od opcji CHAR. WIDECHAR – format znaków unicode. WIDENATIVE – plik z tożsamymi typami danych jak w SQL Server, ale poza CHAR i VARCHAR z danymi unicode. |
ERRORFILE = ‘FILE_NAME’ | Określa nazwę pliku z błędami importu. Plik ten zawiera wiersze z importowanego pliku, których ze względu na błędy nie udało się zaimportować. |
FIELDTERMINATOR = FIELD_TERMINATOR | Określenie terminatora, czyli znaku jakim oddzielane są pola w pliku. |
FIRE_TRIGGERS | Powoduje uruchomienie wyzwalaczy. |
FIRSTROW = FIRST_ROW | Określenie numeru wiersza, od którego mają być ładowane dane. |
FORMATFILE = FORMAT_FILE_PATH | Pełna ścieżka do pliku formatu. Pliku formatu należy używać w sytuacji, gdy ilość lub kolejność danych w pliku jest różna od miejsca docelowego importowanych danych. |
KEEPIDENTITY | Określa, czy będą importowane wartości identyfikujące (ID). |
KEEPNULLS | Określa, że w przypadku braku danych w pliku importując je do kolumn z wartościami domyślnymi mają być zachowane NULL’e. |
KILOBYTES_PER_BATCH = KILOBYTES_PER_BATCH | Określenie przybliżonej liczby kilobajtów (KB) danych w partii. |
LASTROW = LAST_ROW | Określenie liczby ostatniego wiersza do załadowania danych. Domyślnie jest 0, co oznacza wiersz ostatni. |
MAXERRORS = MAX_ERRORS | Określenie maksymalnej liczby błędów, gdzie 1 wiersz = 1 ewentualny błąd. Domyślne ustawienie to 10. |
ORDER | Określa sposób sortowania danych: ASC (Ascending) – rosnąco. DESC (Descending) – malejąco. |
ROWS_PER_BATCH = ROWS_PER_BATCH | Określenie przybliżonej liczby wierszy danych w pliku. Podanie tej wartości pozwala zoptymalizować import, ale pod warunkiem, że liczba ta będzie przybliżona do faktycznej liczby wierszy. |
ROWTERMINATOR = ROW_TERMINATOR | Określa terminator wiersza w plikach danych typu CHAR i WIDECHAR. Domyślnym terminatorem wiersza jest \ r \ n, czyli znak nowego wiersza. |
SCHEMA_NAME | Nazwa schematu. |
TABLE_NAME | Nazwa tabeli. |
TABLOCK | Zablokowanie tabeli na czas importu. |
VIEW_NAME | Nazwa widoku. |
br>
W SQL Server mamy kilka opcji umożliwiających importowanie (także eksportowanie, jest ono omówione w odrębnej lekcji tego kursu) danych z heterogenicznych źródeł.
Poza opcją BULK INSERT są jeszcze dostępne dwie podobne funkcjonalności:
• OPENROWSET
Za pomocą tej opcji można także zaimportować płaski plik, ale funkcjonalność OPENROWSET jest zdecydowanie bardziej rozbudowana i została omówiona w odrębnej lekcji kursu na poziomie zaawansowanym.
• BCP (Bulk Copy)
Jest to narzędzie dostępne z linii poleceń (CMD) umożliwiające zarówno importowanie jak i eksportowanie danych z SQL Server’a do plików i odwrotnie. W tym temacie skupimy się jednak na rozwiązaniach związanych bezpośrednio z SSMS.
br>
Import danych z pliku płaskiego za pomocą SSMS – krok po kroku:
Jest to sposób bez implementowania kodu, czyli za pomocą „wyklikania”.
Temat ten jest dokładnie opracowany w pełnym kursie zaawansowanym.
br>
br>
PLIKI DO ŚCIĄGNIĘCIA:
1. 013_Import_Danych_Z_Pliku.sql
2. 013_Import_Danych_Z_Pliku_Nazwiska.txt
3. 013_Import_Danych_Z_Pliku_Miasta.txt
br>