데이터 형식(Azure 스트림 분석)

Azure Stream Analytics에서 각 레코드에는 관련 데이터 형식이 있습니다. 데이터 형식은 해당 형식의 레코드가 보유할 수 있는 값 집합 또는 해당 형식의 식이 생성할 수 있는 값 집합을 설명하고 제한합니다.

열이 아닌 형식이 있는 레코드입니다. 열의 각 레코드에는 다른 형식이 있을 수 있습니다. 대부분의 애플리케이션에 대해 투명하게 표시되면 스키마 드리프트 시나리오 및 기타 비정상적인 입력 패턴을 간단하게 처리할 수 있습니다.

지원되는 데이터 형식

아래에는 지원되는 데이터 형식 목록이 나와 있습니다.

데이터 형식 설명
bigint -2^63(-9,223,372,036,854,775,808)에서 2^63-1(9,223,372,036,854,775,807) 범위의 정수입니다.
float - 1.79E+308에서 -2.23E-308, 0 범위와 2.23E-308에서 1.79E+308 범위의 부동 소수점 숫자입니다. 일반적으로 부동 소수점 10진수 값에는 정확히 일치하는 이진 표현이 없습니다. 정밀도의 손실을 경험할 수 있습니다. 이는 Azure Stream Analytics와 관련이 없지만 모든 부동 소수점 숫자 구현에서 발생합니다.
nvarchar(max) 유니코드 문자로 구성된 텍스트 값입니다. 참고: max 이외의 값은 지원되지 않습니다.
Datetime 24시간 클록을 기반으로 하고 UTC(표준 시간대 오프셋 0)를 기준으로 하는 소수 자릿수 초(7자리, 100나노초 정밀도)와 하루 중 시간과 결합되는 날짜를 정의합니다.
bit 1, 0 또는 NULL 값을 사용할 수 있는 정수입니다. 호환 성 수준 1.2 이상에서 지원됩니다.
레코드(record) 이름/값 쌍의 집합입니다. 값은 지원되는 데이터 형식이어야 합니다.
array 값의 정렬된 컬렉션입니다. 값은 지원되는 데이터 형식이어야 합니다.

bigint 및 float 데이터 형식을 조인(또는 비교)할 수 있습니다. 나타낼 수 없는 매우 큰 bigint 값의 경우를 제외하고 모든 경우에 올바르게 작동합니다.

참고

범위 밖에서 bigint 데이터 형식을 읽을 때 Azure Stream Analytics는 를 지원합니다. Stream Analytics 작업은 InputDeserializationError 오류 메시지로 이벤트를 역직렬화하지 못합니다. 데이터를 미리 처리하고 문자열로 변환할 수 있습니다. 한 가지 옵션은 Azure 함수를 사용하여 데이터를 미리 처리하고 이러한 큰 정수 를 문자열로 변환하는 것입니다.

형식 변환

다음은 데이터 형식 변환을 제어하는 규칙입니다.

  • 입력 읽기 및 출력 쓰기 작업 중 정밀도 손실이 없는 변환은 암시적이며 항상 성공합니다.
  • 출력 쓰기 작업 내의 정밀도 손실 및 오버플로는 구성된 오류 정책(Drop 또는 Retry로 설정)에 의해 처리됩니다.
  • 출력 쓰기 작업 중에 발생하는 형식 변환 오류는 오류 정책에 의해 처리됩니다.
  • 입력 읽기 작업 중에 발생하는 형식 변환 오류로 인해 작업이 이벤트를 삭제합니다.

값을 float로 변환할 때 정밀도 손실이 발생할 수 있습니다. Azure Stream Analytics에만 국한된 것이 아니라 일반적으로 float 데이터 형식에만 해당됩니다. 따라서 오류로 간주되지 않습니다. 모든 숫자를 보존해야 하는 경우 데이터를 문자열로 읽어야 합니다.

데이터 캐스팅

스트리밍 SQL 언어에는 데이터의 데이터 형식을 관찰하고 조정하는 데 유용한 네 가지 함수가 있습니다.

  • CAST : 단일 열을 지정된 형식으로 캐스팅하면 변환 오류가 발생할 경우 작업이 실패합니다.
  • TRY_CAST : 단일 열을 지정된 형식으로 캐스팅합니다. 오류는 NULL로 허용됩니다. 가장 잘 사용하는 방법은 입력 유효성 검사를 참조하세요. TRY_CAST
  • CREATE TABLE : 입력에 대한 단일 명시적 스키마를 정의합니다. 변환 오류가 있는 행이 스트림에서 제거됩니다.
  • GetType : 열의 형식을 반환합니다.

대부분의 사용 사례에서 권장되는 옵션은 TRY_CAST 사용하는 것입니다. 이 함수는 출력 형식을 보장하여 다운스트림 처리를 보호하는 동시에 오류 값을 NULL로 바꿔 데이터 손실을 방지합니다. 행은 삭제되지 않으며 원래 값은 다른 열에 계속 프로젝트될 수 있습니다.

강력한 보장을 위해 CREATE TABLE을 사용하는 것이 좋습니다. 이 방법을 사용하면 편차의 위험 없이 지정된 입력의 스키마를 작업에 알릴 수 있습니다. 주어진 입력에서 단일 스키마만 정의할 수 있고 비준수 행이 삭제된다는 단점이 있습니다.

가능하면 모든 캐스팅 작업은 다른 함수에서 암시적으로(자동으로) 수행되지 않고 이러한 함수를 통해 명시적으로 수행해야 합니다. 이렇게 하면 SQL 데이터베이스와 같이 강력한 형식의 출력에 대한 형식 불일치, 예기치 않은 동작 및 삽입 오류를 방지할 수 있습니다. 이러한 오류로부터 기본 쿼리 논리를 보호하는 방법은 입력 유효성 검사를 참조하세요.

비트로 변환

값은 다음 규칙을 사용하여 float와 bit 간에 변환됩니다.

시작 대상
(BIT) 1 (FLOAT) 1.0
(BIT) 0 (FLOAT) 0.0
(BIT) Null (FLOAT) Null
(FLOAT) 0.0 (BIT) 0
(FLOAT) 다른 모든 값 (BIT) 1
(FLOAT) Null (BIT) Null

형식 매핑 및 serialization 형식

데이터 형식 의 CSV CSV 출력 의 JSON JSON out Avro in Avro out
bigint 64비트 부호 있는 정수로 변환된 문자열 작업 문화권을 사용하여 문자열로 변환된 64비트 부 서명된 정수 number: 부호 있는 64비트 정수로 변환된 정수입니다.

부울: 호환성 수준 1.1 이하에서 "false"가 0으로 변환되고 "true"가 1로 변환됩니다.
number: 정수 long 및 int를 64비트 부명 정수로 변환합니다.

부울: 호환성 수준 1.1 이하에서 false는 0으로 변환되고 true는 1로 변환됩니다.
long
float 64비트 부호 있는 부동 소수점 숫자로 변환된 문자열 작업 문화권을 사용하여 문자열로 변환된 64비트 부호 있는 부동 소수점 번호 number: 64비트 부호 있는 부동 소수점 숫자로 변환된 분수 number: fraction 64비트 부호 있는 부동 소수점 숫자로 변환된 double 및 float double
nvarchar(max) 문자열 문자열 문자열 문자열 문자열 문자열
datetime ISO 8601 표준을 따르는 날짜/시간으로 변환된 문자열 ISO 8601 표준을 사용하는 문자열 ISO 8601 표준을 따르는 날짜/시간으로 변환된 문자열 ISO 8601 표준을 사용하는 문자열로 변환된 날짜/시간 ISO 8601 표준을 따르는 날짜/시간으로 변환된 문자열 ISO 8601 표준을 사용하는 문자열로 변환된 날짜/시간
bit (호환성 수준 1.2 이상) 문자열 "true", "false" 또는 "null"은 해당하는 정수 값 1, 0 또는 null로 변환됩니다. "true" 또는 "false" 문자열로 변환됨 부울: "false"는 0으로 변환되고 "true"는 1로 변환됩니다. 부울: 부울 값 부울: false는 0으로 변환되고, true는 1로 변환됩니다. boolean
record 해당 없음 지원되지 않음, "Record" 문자열이 출력됩니다. JSON 개체 JSON 개체 Avro 레코드 종류 Avro 레코드 종류
array 해당 없음 지원되지 않습니다. "Array" 문자열이 출력됩니다. JSON 개체 JSON 개체 Avro 레코드 종류 Avro 레코드 종류

참고

Parquet에는 데이터 형식 변환이 필요하지 않습니다.

구조적 데이터 저장소에 쓸 때 형식 매핑

데이터 형식 SQL Power BI Azure Cosmos DB PostgreSQL Azure Data Explorer
bigint bigint, int, smallint, tinyint, 모든 문자열 형식(ntext, nvarchar, char, ...) numeric: 정수 bigint dynamic, int, long
float float, real, decimal, numeric, all string types ( ntext, nvarchar, char, ...) number: fraction 배정밀도, 숫자입니다. 1.78E+308로 제한 dynamic, real, double
nvarchar(max) 모든 문자열 형식(ntext, nvarchar, char, uniqueidentifier...) 문자열 문자 변경, 텍스트 동적, 문자열
datetime datetime, datetime2, datetimeoffset, 모든 문자열 형식( ntext, nvarchar, char, ...) ISO 8601 표준을 사용하는 문자열로 변환된 날짜/시간 timestamp, time. 표준 시간대 옵션이 지원되지만 표준 시간대는 제공되지 않습니다. 동적, 문자열, datetime
bit (호환성 수준 1.2 이상) bigint, int, smallint, tinyint, bit, 모든 문자열 형식(ntext, nvarchar, char, ...) boolean: 1은 true로 변환되고 0은 false로 변환됩니다. bit dynamic, bool
record 지원되지 않음, "Record" 문자열이 출력됩니다. 지원되지 않음, "Record" 문자열이 출력됩니다. JSON 개체 지원되지 않음 dynamic, bool, long, datetime, byte array, real, double, string
array 지원되지 않습니다. "Array" 문자열이 출력됩니다. 지원되지 않습니다. "Array" 문자열이 출력됩니다. JSON 개체 지원되지 않음 동적, 문자열