변형이 JSON 문자열과 어떻게 다른가요?
Important
이 기능은 공개 미리 보기 상태입니다.
이 문서에서는 변형 데이터 형식으로 작업할 때 구문과 의미 체계의 동작 변경 및 차이점에 대해 설명합니다. 이 문서에서는 Azure Databricks에서 JSON 문자열 데이터를 사용하는 데 익숙하다고 가정합니다. Azure Databricks를 접하는 사용자의 경우 변경 또는 알 수 없는 스키마에 대한 유연성이 필요한 반구조화된 데이터를 저장할 때마다 JSON 문자열보다 변형을 사용해야 합니다. 반구조화된 데이터 모델을 참조하세요.
Databricks Runtime 15.3 이상에서는 변형 데이터 형식을 사용하여 반구조화된 데이터를 인코딩하고 쿼리할 수 있습니다. Databricks는 JSON 문자열을 사용하여 반구조화된 데이터를 저장하는 대신 변형을 권장합니다. 변형에 대한 향상된 읽기 및 쓰기 성능을 통해 일부 사용 사례에서 구조체 및 배열과 같은 네이티브 Spark 복합 형식을 대체할 수 있습니다.
변형 데이터를 쿼리하려면 어떻게 해야 합니까?
Variant 데이터는 동일한 연산자를 사용하여 필드, 하위 필드 및 배열 요소를 쿼리합니다.
필드를 쿼리하려면 .를 사용합니다 :
. 예들 들어 column_name:field_name
입니다.
하위 필드를 쿼리하려면 .를 사용합니다 .
. 예들 들어 column_name:field_name.subfield_name
입니다.
배열 요소를 쿼리하려면 요소의 정수 인덱스 값은 어디에 있는지 [n]
사용합니다n
. 예를 들어 배열 column_name:array_name[0]
의 첫 번째 값을 쿼리하려면 .
JSON 문자열에서 variant로 업그레이드할 때 다음과 같은 차이점으로 기존 쿼리가 중단될 수 있습니다.
- 모든 변형 경로 요소는 대/소문자를 구분하는 방식으로 일치합니다. JSON 문자열은 대/소문자를 구분하지 않습니다. 즉,
column_name:FIELD_NAME
변형의column_name:field_name
경우 저장된 데이터에서 다른 필드를 찾습니다. - 구문은
[*]
배열의 모든 요소를 식별하거나 압축을 푸는 데 지원되지 않습니다. - Variant는 JSON 문자열과
NULL
다르게 값을 인코딩합니다. Variant null 규칙을 참조하세요. - 변형 열에는 일부 작업에 대한 제한 사항이 있습니다. 제한 사항참조하세요.
변형에서 JSON 문자열 변환
Databricks Runtime 15.3 이상 to_json
에서 함수에는 형식을 JSON 문자열로 캐스팅 VARIANT
하는 추가 기능이 있습니다. JSON 문자열로 변환할 VARIANT
때 옵션은 무시됩니다. to_json 참조하세요.
이 함수는 parse_json
JSON 문자열을 형식으로 변환합니다 VARIANT
.
parse_json(json_string_column)
논리적 역방향to_json(variant_column)
이지만 다음 변환 규칙은 정확한 역이 아닌 이유를 설명합니다.
- 공백은 완벽하게 보존되지 않습니다.
- 키 순서는 임의입니다.
- 숫자의 후행 0은 잘려질 수 있습니다.
parse_json
JSON 문자열의 형식이 잘못되었거나 변형 크기 제한을 초과하면 함수가 오류를 반환합니다.
try_parse_json
대신 구문 분석 오류가 발생할 때 함수를 사용하여 반환 NULL
합니다.
변형 작업을 위한 SQL 함수는 무엇인가요?
Databricks Runtime 15.3 이상에서 사용할 수 있는 Apache Spark SQL 함수는 변형 데이터와 상호 작용하기 위한 메서드를 제공합니다. 다음 표에는 새 함수, 해당 JSON 문자열 함수 및 동작의 차이점에 대한 메모가 포함되어 있습니다.
참고 항목
이러한 함수를 PySpark DataFrames와 함께 사용하려면 .에서 pyspark.sql.functions
가져옵니다.
variant_explode
PySpark variant_explode_outer
에서 지원되지 않습니다.
Variant 함수 | JSON 문자열 함수 | 주의 |
---|---|---|
variant_get | 캐스트 및 get_json_object | 식, 경로 및 형식을 사용합니다. 변형 경로, 캐스팅 및 null에 대한 모든 규칙을 따릅니다. |
try_variant_get | try_cast 및 get_json_object | 식, 경로 및 형식을 사용합니다. 변형 경로, 캐스팅 및 null에 대한 모든 규칙을 따릅니다. |
is_variant_null | is null | 식이 인코딩된 저장 VARIANT 중인지 여부를 확인합니다 NULL . 입력 식이 .인지 확인 하는 데 사용 is null 합니다 NULL . |
schema_of_variant | schema_of_json | 스키마 ARRAY<elementType> elementType 를 결정할 때 데이터에 충돌하는 형식이 있는 것처럼 VARIANT 유추될 수 있습니다. |
schema_of_variant_agg | schema_of_json_agg | 최소 일반 형식이 식별되지 않으면 형식은 .로 VARIANT 파생됩니다. |
variant_explode | explode | 출력 및 pos key value 열 배열을 분해할 때 출력 키는 항상 null입니다. |
variant_explode_outer | explode_outer | 출력 및 pos key value 열 배열을 분해할 때 출력 키는 항상 null입니다. |
변형은 캐스팅을 처리하고 JSON 문자열과 NULL
다르게 처리합니다. Variant 형식 캐스팅 규칙 및 Variant null 규칙을 참조하세요.