다음을 통해 공유


변형이 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 출력 및 poskeyvalue 열 배열을 분해할 때 출력 키는 항상 null입니다.
variant_explode_outer explode_outer 출력 및 poskeyvalue 열 배열을 분해할 때 출력 키는 항상 null입니다.

변형은 캐스팅을 처리하고 JSON 문자열과 NULL다르게 처리합니다. Variant 형식 캐스팅 규칙 및 Variant null 규칙을 참조하세요.