Eksportowanie danych do tabeli zewnętrznej
Dotyczy: ✅Microsoft Fabric✅Azure Data Explorer
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 pojedynczego artefaktu magazynu zapisanego przed kompresją. Przed sprawdzeniem, czy ta grupa wierszy osiągnie limit rozmiaru, zostanie zapisana pełna grupa wierszy parquetRowGroupSize i powinna rozpocząć nowy artefakt. Prawidłowy zakres: 100 MB (wartość domyślna) do 1 GB. |
|
distributed |
bool |
Wyłącz lub 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, jak dystrybuować partycje między węzłami. 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 , co oznacza, że przed sprawdzeniem, czy ta grupa wierszy osiągnie 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 są eksportowane współbieżnie. Każdy węzeł zapisuje dane przypisane do tego węzła. Liczba plików wyeksportowanych przez węzeł jest większa niż jedna, tylko wtedy, gdy rozmiar danych z tego węzła przekracza sizeLimit . |
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. W związku z tym zaleca się zdefiniowanie partycji z najbardziej jednolitą dystrybucją 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 zająć więcej czasu. Jeśli jedna partycja jest znacznie większa niż druga, węzeł przypisany do tej partycji wykonuje większość pracy eksportu, podczas gdy pozostałe węzły pozostają w większości bezczynne. Aby uzyskać więcej informacji, zobacz Ustawienia dystrybucji. | Istnieje kilka ustawień, które można zmienić: * Jeśli istnieje więcej niż jedna partycja ciągu, najpierw zdefiniuj 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 jest uruchamiany przy użyciu dystrybucji per-node , a każdy węzeł eksportuje 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 ) jest minimalną wartością z zakresu od 64 do liczby węzłów. 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. Aby zapoznać się z przykładem partycjonowanej tabeli zewnętrznej, zobacz przykład.
- 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 SQLCOPY
.
Liczba plików
Liczba plików zapisanych na partycję zależy od ustawień dystrybucji operacji eksportowania:
Jeśli tabela zewnętrzna zawiera tylko partycje
datetime
lub nie ma partycji, liczba plików zapisanych dla każdej partycji, która istnieje, powinna być podobna do liczby węzłów (lub więcej, jeślisizeLimit
zostanie osiągnięta). Podczas dystrybucji operacji eksportowania wszystkie węzły 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 zmniejsza 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
na wartość false, powoduje, że eksport jest tylko jednym węzłem, ale zachowanie pozostaje takie samo (pojedynczy plik zapisany na partycję).
Przykłady
Przykład tabeli zewnętrznej bez partycji
Poniższy przykład eksportuje dane z tabeli T
do tabeli ExternalBlob
.
ExternalBlob
jest niepartycjonowaną tabelą zewnętrzną.
.export to table ExternalBlob <| T
wyjściowe
ExternalTableName | Ścieżka | Liczbarekordów |
---|---|---|
ExternalBlob | http://storage1.blob.core.windows.net/externaltable1cont1/1_58017c550b384c0db0fea61a8661333e.csv | 10 |
Przykład partycjonowanej tabeli zewnętrznej
Poniższy przykład najpierw tworzy partycjonowaną tabelę zewnętrzną, PartitionedExternalBlob
z określoną lokalizacją magazynu obiektów blob. Dane są przechowywane w formacie CSV z formatem ścieżki, który organizuje dane według nazwy i daty klienta.
.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'
)
Następnie eksportuje dane z tabeli T
do tabeli zewnętrznej PartitionedExternalBlob
.
.export to table PartitionedExternalBlob <| T
wyjściowe
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 pokaż szczegóły operacji polecenia.