Udostępnij za pośrednictwem


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] totableexternalTableName
[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ą sizeLimitwartość . 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ą .
  • 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 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śli sizeLimit 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. Ustawienie distributed 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.