Eksportowanie danych do tabeli zewnętrznej
Dane można wyeksportować, definiując tabelę zewnętrzną i eksportując do niej dane. Właściwości tabeli są określane podczas tworzenia tabeli zewnętrznej. Polecenie eksportu odwołuje się do tabeli zewnętrznej według nazwy.
Uprawnienia
Aby uruchomić to polecenie, musisz mieć co najmniej uprawnienia administratora tabeli.
Składnia
.export
[async
] to
table
externalTableName
[with
(
propertyName =
propertyValue [,
...]] <|
)
zapytanie
Dowiedz się więcej na temat konwencji składni.
Parametry
Nazwisko | Type | Wymagania | opis |
---|---|---|---|
externalTableName | string |
✔️ | Nazwa tabeli zewnętrznej, do której ma być eksportowany. |
propertyName, propertyValue | string |
Rozdzielona przecinkami lista właściwości opcjonalnych. | |
query | string |
✔️ | Zapytanie eksportu. |
Obsługiwane właściwości
Następujące właściwości są obsługiwane w ramach eksportu do zewnętrznej tabeli polecenia.
Właściwość | Type | Opis | Wartość domyślna |
---|---|---|---|
sizeLimit |
long |
Limit rozmiaru w bajtach zapisywanego pojedynczego artefaktu magazynu (przed kompresją). Przed sprawdzeniem, czy ta grupa wierszy osiągnęła limit rozmiaru parquetRowGroupSize , zostanie zapisana pełna grupa wierszy i powinna rozpocząć nowy artefakt. Prawidłowy zakres: 100 MB (wartość domyślna) do 1 GB. |
|
distributed |
bool |
Wyłącz/włącz eksport rozproszony. Ustawienie wartości false jest równoważne single wskazówce dystrybucji. |
Wartość domyślna to true . |
distribution |
string |
Wskazówka dystrybucji (single , per_node , per_shard ). Zobacz więcej szczegółów w temacie Ustawienia dystrybucji |
Wartość domyślna to per_node . |
distributionKind |
string |
Opcjonalnie przełącza się na jednolitą dystrybucję, gdy tabela zewnętrzna jest partycjonowana przez partycję ciągu. Prawidłowe wartości to uniform i default . Zobacz więcej szczegółów w temacie Ustawienia dystrybucji |
|
concurrency |
Liczba | Wskazuje system, ile partycji ma być uruchamianych równolegle. Zobacz więcej szczegółów w temacie Ustawienia dystrybucji | Wartość domyślna to 16. |
spread |
Liczba | Wskazuje systemowi sposób dystrybucji partycji między węzłami klastra. Zobacz więcej szczegółów w temacie Ustawienia dystrybucji | Domyślna wartość to Min(64, number-of-nodes) . |
parquetRowGroupSize |
int |
Dotyczy tylko wtedy, gdy format danych to Parquet. Steruje rozmiarem grupy wierszy w wyeksportowanych plikach. Ta wartość ma pierwszeństwo przed sizeLimit wartością , co oznacza, że przed sprawdzeniem, czy ta grupa wierszy osiągnęła limit rozmiaru i powinna uruchomić nowy artefakt. |
Domyślny rozmiar grupy wierszy to 100 000 rekordów. |
Ustawienia dystrybucji
Rozkład operacji eksportowania do tabeli zewnętrznej wskazuje liczbę węzłów i wątków zapisywanych jednocześnie w magazynie. Rozkład domyślny zależy od partycjonowania tabeli zewnętrznej:
Partycjonowanie tabeli zewnętrznej | Rozkład domyślny |
---|---|
Tabela zewnętrzna nie jest partycjonowana ani partycjonowana tylko według datetime kolumn |
Eksport jest dystrybuowany per_node — wszystkie węzły w klastrze są eksportowane współbieżnie. Każdy węzeł zapisuje dane przypisane do tego węzła. Liczba plików wyeksportowanych przez węzeł będzie większa niż jedna, tylko wtedy, gdy rozmiar danych z tego węzła przekroczy sizeLimit wartość . |
Tabela zewnętrzna jest partycjonowana według kolumny ciągu | Dane do wyeksportowania są przenoszone między węzłami, tak aby każdy węzeł zapisywał podzestaw wartości partycji. Pojedyncza partycja jest zawsze zapisywana przez jeden węzeł. Liczba plików zapisanych na partycję powinna być większa niż jedna tylko wtedy, gdy dane przekraczają sizeLimit wartość . Jeśli tabela zewnętrzna zawiera kilka partycji ciągów, dane są partycjonowane między węzłem na podstawie pierwszej partycji. Dlatego zaleca się zdefiniowanie partycji z najbardziej jednolitym rozkładem jako pierwszą. |
Zmienianie domyślnych ustawień dystrybucji
Zmiana domyślnych ustawień dystrybucji może być przydatna w następujących przypadkach:
Przypadek użycia | opis | Zalecenie |
---|---|---|
Zmniejsz liczbę wyeksportowanych plików | Eksport tworzy zbyt wiele małych plików i chcesz, aby utworzyć mniejszą liczbę większych plików. | Ustaw distribution =single lub distributed =false (oba są równoważne) we właściwościach polecenia. Eksport wykonuje tylko jeden wątek. Wadą jest to, że operacja eksportowania może być wolniejsza, ponieważ współbieżność jest znacznie zmniejszona. |
Zmniejsz czas trwania eksportu | Zwiększenie współbieżności operacji eksportowania w celu skrócenia czasu trwania operacji. | Ustaw distribution =per_shard we właściwościach polecenia. Oznacza to współbieżność operacji zapisu na fragmenty danych, a nie na węzeł. Jest to istotne tylko w przypadku eksportowania do tabeli zewnętrznej, która nie jest partycjonowana przez partycję ciągu. Może to spowodować zbyt duże obciążenie magazynu, co może spowodować ograniczenie przepustowości. Zobacz Błędy magazynu. |
Zmniejsz czas trwania eksportu dla tabel zewnętrznych, które są partycjonowane przez partycję ciągu | Jeśli partycje nie są równomiernie rozłożone między węzłami, eksportowanie może potrwać dłużej. Jeśli na przykład istnieje jedna partycja, która jest znacznie większa niż inne, większość pracy eksportu jest wykonywana przez pojedynczy węzeł przypisany do tej partycji, podczas gdy inne węzły będą w większości bezczynne. Zobacz Ustawienia dystrybucji. | Istnieje kilka ustawień, które można zmienić: * Jeśli istnieje więcej niż jedna partycja ciągu, zdefiniuj pierwszą partycję z najlepszą dystrybucją. * Ustaw distributionKind =uniform we właściwościach polecenia. To ustawienie wyłącza domyślne ustawienia dystrybucji dla tabel zewnętrznych podzielonych na partycje ciągów. Eksport zostanie uruchomiony z dystrybucją per-node , a każdy węzeł wyeksportuje dane przypisane do węzła. Pojedyncza partycja może być zapisywana przez kilka węzłów, a liczba plików zwiększa się odpowiednio. Aby jeszcze bardziej zwiększyć współbieżność, ustaw distributionKind =uniform wartość wraz z distribution =per_shard największą współbieżnością (kosztem potencjalnie większej liczby zapisanych plików)* Jeśli przyczyną powolnego eksportu nie są wartości odstające w danych, zmniejsz czas trwania, zwiększając współbieżność, bez zmieniania ustawień partycjonowania. hint.spread Użyj właściwości ihint.concurrency , które określają współbieżność partycjonowania. Zobacz operator partycji. Domyślnie liczba węzłów eksportowanych współbieżnie () spread będzie minimalną wartością z zakresu od 64 do liczby węzłów klastra. Ustawienie spread większej liczby niż liczba węzłów zwiększa współbieżność w każdym węźle (maksymalna wartość dla spread to 64). |
Uwierzytelnianie i autoryzacja
Aby wyeksportować do tabeli zewnętrznej, należy skonfigurować uprawnienia do zapisu. Aby uzyskać więcej informacji, zobacz uprawnienia do zapisu dla tabeli zewnętrznej usługi Azure Storage lub tabeli zewnętrznej programu SQL Server.
Wyjście
Parametr wyjściowy | Type | Opis |
---|---|---|
ExternalTableName | string |
Nazwa tabeli zewnętrznej. |
Ścieżka | string |
Ścieżka wyjściowa. |
Liczbarekordów | string |
Liczba rekordów wyeksportowanych do ścieżki. |
Uwagi
Schemat wyjściowy zapytania eksportu musi być zgodny ze schematem tabeli zewnętrznej, w tym ze wszystkimi kolumnami zdefiniowanymi przez partycje. Jeśli na przykład tabela jest partycjonowana według daty/godziny, schemat danych wyjściowych zapytania musi mieć kolumnę Sygnatura czasowa zgodna z nazwą TimestampColumnName. Ta nazwa kolumny jest zdefiniowana w definicji partycjonowania tabeli zewnętrznej.
Nie można zastąpić właściwości tabeli zewnętrznej za pomocą polecenia eksportu. Na przykład nie można eksportować danych w formacie Parquet do tabeli zewnętrznej, której format danych to CSV.
Jeśli tabela zewnętrzna jest partycjonowana, wyeksportowane artefakty są zapisywane w odpowiednich katalogach zgodnie z definicjami partycji, jak pokazano w przykładzie podzielonej tabeli zewnętrznej.
- Jeśli wartość partycji ma wartość null/empty lub jest nieprawidłową wartością katalogu, zgodnie z definicjami magazynu docelowego wartość partycji jest zastępowana wartością
__DEFAULT_PARTITION__
domyślną .
- Jeśli wartość partycji ma wartość null/empty lub jest nieprawidłową wartością katalogu, zgodnie z definicjami magazynu docelowego wartość partycji jest zastępowana wartością
Aby uzyskać sugestie dotyczące rozwiązywania problemów z magazynem podczas wykonywania poleceń eksportu, zobacz błędy podczas eksportowania poleceń.
Kolumny tabeli zewnętrznej są mapowane na odpowiednie typy danych formatu docelowego zgodnie z regułami mapowania typów danych.
Eksport natywny Parquet jest bardziej wydajnym mechanizmem eksportu światła zasobów. Wyeksportowana kolumna "datetime" jest obecnie nieobsługiwana przez usługę Synapse SQL "COPY".
Liczba plików
Liczba plików zapisanych na partycję zależy od ustawień dystrybucji operacji eksportowania:
Jeśli tabela zewnętrzna zawiera tylko partycje daty/godziny lub w ogóle nie ma partycji, liczba zapisanych plików (dla każdej partycji, jeśli istnieje) powinna być podobna do liczby węzłów w klastrze (lub więcej, jeśli
sizeLimit
zostanie osiągnięty). Podczas dystrybucji operacji eksportowania wszystkie węzły w klastrze są eksportowane współbieżnie. Aby wyłączyć dystrybucję, tak aby tylko jeden węzeł wykonuje operacje zapisu, ustaw wartośćdistributed
false. Ten proces tworzy mniej plików, ale zmniejszy wydajność eksportu.Jeśli tabela zewnętrzna zawiera partycję według kolumny ciągu, liczba wyeksportowanych plików powinna być pojedynczym plikiem na partycję (lub więcej, jeśli
sizeLimit
zostanie osiągnięta). Wszystkie węzły nadal uczestniczą w eksporcie (operacja jest dystrybuowana), ale każda partycja jest przypisana do określonego węzła. Ustawieniedistributed
wartości false spowoduje wyeksportowanie tylko jednego węzła, ale zachowanie pozostanie takie samo (pojedynczy plik zapisany na partycję).
Przykłady
Przykład tabeli zewnętrznej bez partycji
ExternalBlob to tabela zewnętrzna, która nie jest partycjonowana.
.export to table ExternalBlob <| T
ExternalTableName | Ścieżka | Liczbarekordów |
---|---|---|
ExternalBlob | http://storage1.blob.core.windows.net/externaltable1cont1/1_58017c550b384c0db0fea61a8661333e.csv | 10 |
Przykład partycjonowanej tabeli zewnętrznej
PartitionedExternalBlob to tabela zewnętrzna zdefiniowana w następujący sposób:
.create external table PartitionedExternalBlob (Timestamp:datetime, CustomerName:string)
kind=blob
partition by (CustomerName:string=CustomerName, Date:datetime=startofday(Timestamp))
pathformat = ("CustomerName=" CustomerName "/" datetime_pattern("yyyy/MM/dd", Date))
dataformat=csv
(
h@'http://storageaccount.blob.core.windows.net/container1;secretKey'
)
.export to table PartitionedExternalBlob <| T
ExternalTableName | Ścieżka | Liczbarekordów |
---|---|---|
ExternalBlob | http://storageaccount.blob.core.windows.net/container1/CustomerName=customer1/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_1_58017c550b384c0db0fea61a8661333e.csv | 10 |
ExternalBlob | http://storageaccount.blob.core.windows.net/container1/CustomerName=customer2/2019/01/01/fa36f35c-c064-414d-b8e2-e75cf157ec35_2_b785beec2c004d93b7cd531208424dc9.csv | 10 |
Jeśli polecenie jest wykonywane asynchronicznie (przy użyciu słowa kluczowego async
), dane wyjściowe są dostępne przy użyciu polecenia pokaż szczegóły operacji.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla