Typy danych (Azure Stream Analytics)

W usłudze Azure Stream Analytics każdy rekord ma powiązany typ danych. Typ danych opisuje (i ogranicza) zestaw wartości, które może przechowywać rekord tego typu lub wyrażenie tego typu może wygenerować.

Należy pamiętać, że są to rekordy, które mają typ, a nie kolumny. Każdy rekord kolumny może mieć inny typ. Jeśli będzie to niewidoczne dla większości aplikacji, umożliwia prostą obsługę scenariuszy dryfu schematu i innych nietypowych wzorców pisania.

Obsługiwane typy danych

Poniżej znajduje się lista obsługiwanych typów danych.

Typ danych Opis
bigint Liczby całkowite w zakresie -2^63 (-9,223,372,036,854,775,808) do 2^63-1 (9,223,372,036,854,775,807).
float Liczby zmiennoprzecinkowe w zakresie od 1,79E+308 do -2,23E-308, 0 i 2,23E-308 do 1,79E+308. Wartości dziesiętne zmiennoprzecinkowe zazwyczaj nie mają dokładnej reprezentacji binarnej. Można doświadczyć utraty precyzji. Nie jest to specyficzne dla usługi Azure Stream Analytics, ale występuje we wszystkich implementacjach liczb zmiennoprzecinkowych.
Nvarchar(max) Wartości tekstowe składające się ze znaków Unicode. Uwaga: wartość inna niż maksymalna nie jest obsługiwana.
datetime Definiuje datę połączoną z godziną dnia z ułamkami sekund (7 cyfr, precyzja 100 nanosekund), która jest oparta na zegarze 24-godzinnym i względem czasu UTC (przesunięcie strefy czasowej 0).
bit Liczba całkowita, która może przyjmować wartość 1, 0 lub NULL. Jest to obsługiwane na poziomie zgodności 1.2 lub nowszym.
rejestrowanie Zestaw par nazwa/wartość. Wartości muszą być obsługiwanego typu danych.
array Uporządkowana kolekcja wartości. Wartości muszą być obsługiwanego typu danych.

Możesz przyłączyć (lub porównać) bigint i typ danych zmiennoprzecinkowych. Będzie działać poprawnie we wszystkich przypadkach, z wyjątkiem przypadku bardzo dużych wartości bigint, których nie można przedstawić.

Uwaga

Podczas odczytywania typów danych bigint poza zakresem usługa Azure Stream Analytics obsługuje, zadanie usługi Stream Analytics nie może wykonać deserializacji zdarzeń z komunikatem o błędzie: InputDeserializationError. Możesz wstępnie przetworzyć dane i przekonwertować je na ciąg. Jedną z opcji jest użycie funkcji platformy Azure do wstępnego przetwarzania danych i konwertowania takich dużych liczb całkowitych na ciąg.

Konwersje typu

Są to reguły dotyczące konwersji typów danych:

  • Konwersja bez utraty precyzji podczas operacji odczytu i zapisu danych wyjściowych jest niejawna i zawsze kończy się powodzeniem
  • Precyzja utraty i przepełnienia wewnątrz operacji zapisu danych wyjściowych jest obsługiwana przez skonfigurowane zasady błędów (ustawione na drop lub Retry)
  • Błędy konwersji typów występujące podczas operacji zapisu wyjściowego są obsługiwane przez zasady błędów
  • Błędy konwersji typów występujące podczas operacji odczytu danych wejściowych powodują, że zadanie upuszcza zdarzenie

Utrata dokładności może wystąpić podczas konwertowania wartości na zmiennoprzecinkowe. Nie jest ona specyficzna dla usługi Azure Stream Analytics, ale ogólnie dla typu danych zmiennoprzecinkowych. W związku z tym nie jest uważany za błąd. W przypadku, gdy każda cyfra musi być zachowana, dane powinny być odczytywane jako ciąg.

Rzutowanie danych

Istnieją cztery funkcje w języku SQL przesyłania strumieniowego, które są przydatne do obserwacji i dostosowywania typu danych.

  • CAST : rzutowanie pojedynczej kolumny do danego typu — zadanie zakończy się niepowodzeniem w przypadku błędu konwersji
  • TRY_CAST : rzutowanie pojedynczej kolumny do danego typu — błędy są przekazywane jako NULL. Zobacz walidację danych wejściowych , aby dowiedzieć się, jak najlepiej używać TRY_CAST
  • CREATE TABLE : zdefiniuj pojedynczy jawny schemat dla danych wejściowych. Wiersze z błędami konwersji są usuwane ze strumienia
  • GetType : zwraca typ kolumny

W większości przypadków użycia zalecaną opcją jest użycie TRY_CAST. Ta funkcja chroni przetwarzanie podrzędne przez zapewnienie typu danych wyjściowych, jednocześnie zapobiegając utracie danych przez zastąpienie wartości w błędzie przez wartość NULL. Wiersz nie jest porzucony i oryginalna wartość nadal może być rzutowana w innej kolumnie.

W przypadku silnych gwarancji zalecaną opcją jest użycie polecenia CREATE TABLE. Takie podejście umożliwia informowanie o zadaniu schematu danych wejściowych bez ryzyka odchylenia. Kompromis jest taki, że można zdefiniować tylko jeden schemat dla danych wejściowych, a niezgodne wiersze zostaną porzucone.

Jeśli to możliwe, wszystkie operacje rzutu powinny być wykonywane jawnie za pośrednictwem tych funkcji, a nie niejawnie (dyskretnie) w innych funkcjach. Pozwala to uniknąć niezgodności typów, nieoczekiwanych zachowań i błędów wstawiania dla silnie typiowanych danych wyjściowych, takich jak bazy danych SQL. Zobacz walidację danych wejściowych , aby dowiedzieć się, jak chronić główną logikę zapytania przed takimi błędami.

Konwersja na bit

Wartości zostaną przekonwertowane między zmiennoprzecinkami i bitami przy użyciu następujących reguł:

Źródło Działanie
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT) NULL (FLOAT) NULL
(FLOAT) 0.0 (BIT) 0
(FLOAT) dowolna inna wartość (BIT) 1
(FLOAT) NULL (BIT) NULL

Mapowania typów i formaty serializacji

Typ danych Plik CSV w pliku Plik CSV na wyjęcie Kod JSON w pliku Wyjście kodu JSON Avro in Avro out
bigint ciąg przekonwertowany na 64-bitową liczbę całkowitą ze znakiem 64-bitowa liczba całkowita ze znakiem przekonwertowana na ciąg przy użyciu kultury zadania liczba: liczba całkowita przekonwertowana na liczbę całkowitą ze znakiem 64-bitowym;

Wartość logiczna: w poziomie zgodności 1.1 i poniżej wartości "false" jest konwertowany na wartość 0, wartość "true" jest konwertowana na 1
liczba: liczba całkowita long i int przekonwertowane na 64-bitowa liczba całkowita ze znakiem;

Wartość logiczna: w poziomie zgodności 1.1 i poniżej wartości false jest konwertowana na wartość 0, wartość true jest konwertowana na wartość 1
długi
liczba zmiennoprzecinkowa ciąg przekonwertowany na liczbę punktów zmiennoprzecinkowych ze znakiem 64-bitowym 64-bitowy numer punktu zmiennoprzecinkowego przekonwertowany na ciąg przy użyciu kultury zadania liczba: ułamek przekonwertowany na liczbę punktów zmiennoprzecinkowych ze znakiem 64-bitowym liczba: ułamek podwójna liczba zmiennoprzecinkowa przekonwertowana na liczbę punktów zmiennoprzecinkowych ze znakiem 64-bitowym double
Nvarchar(max) ciąg ciąg ciąg ciąg ciąg ciąg
Datetime ciąg przekonwertowany na datę/godzinę zgodnie ze standardem ISO 8601 ciąg przy użyciu standardu ISO 8601 ciąg przekonwertowany na datę/godzinę zgodnie ze standardem ISO 8601 data/godzina przekonwertowana na ciąg przy użyciu standardu ISO 8601 ciąg przekonwertowany na datę/godzinę zgodnie ze standardem ISO 8601 data/godzina przekonwertowana na ciąg przy użyciu standardu ISO 8601
bit (poziom zgodności 1.2 lub nowszy) ciąg "true", "false" lub "null" jest konwertowany na wartość całkowitą 1, 0 lub null odpowiednio przekonwertowany na ciąg "true" lub "false" Wartość logiczna: wartość "false" jest konwertowana na wartość 0, wartość "true" jest konwertowana na wartość 1 Wartość logiczna: wartość logiczna Wartość logiczna: wartość false jest konwertowana na wartość 0, wartość true jest konwertowana na wartość 1 boolean
Rekord Nie dotyczy Nieobsługiwane ciąg "Record" jest zwracany Obiekt JSON Obiekt JSON Typ rekordu Avro Typ rekordu Avro
Tablicy Nie dotyczy Nieobsługiwane ciąg "Array" jest zwracany Obiekt JSON Obiekt JSON Typ rekordu Avro Typ rekordu Avro

Uwaga

W przypadku parquet nie jest wymagana konwersja typu danych.

Mapowanie typów podczas zapisywania w magazynach danych strukturalnych

Typ danych SQL Power BI Azure Cosmos DB PostgreSQL Azure Data Explorer
bigint bigint, int, smallint, tinyint, wszystkie typy ciągów (ntext, nvarchar, char, ...) tak numeryczne: liczba całkowita bigint dynamic, int, long
liczba zmiennoprzecinkowa float, real, decimal, numeryczne, wszystkie typy ciągów ( ntext, nvarchar, char, ...) tak liczba: ułamek podwójna precyzja, numeryczna. Ograniczone do 1,78E+308 dynamiczny, rzeczywisty, podwójny
Nvarchar(max) Wszystkie typy ciągów (ntext, nvarchar, char, uniqueidentifier...) tak ciąg znak o różnym rozmiarze, tekst dynamic, string
Datetime datetime, datetime2, datetimeoffset, wszystkie typy ciągów ( ntext, nvarchar, char, ...) tak data/godzina przekonwertowana na ciąg przy użyciu standardu ISO 8601 sygnatura czasowa, czas. Opcja strefa czasowa jest obsługiwana, ale nie zostanie udostępniona żadna strefa czasowa dynamic, string, datetime
bit (poziom zgodności 1.2 lub nowszy) bigint, int, smallint, tinyint, bit, wszystkie typy ciągów (ntext, nvarchar, char, ...) tak Wartość logiczna: wartość 1 jest konwertowana na wartość true, 0 przekonwertowana na wartość false bit dynamic, bool
Rekord Nieobsługiwane ciąg "Record" jest zwracany Nieobsługiwane ciąg "Record" jest zwracany Obiekt JSON Nieobsługiwane dynamic, bool, long, datetime, byte array, real, double, string
Tablicy Nieobsługiwane ciąg "Array" jest zwracany Nieobsługiwane ciąg "Array" jest zwracany Obiekt JSON Nieobsługiwane dynamic, string