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 |