다음을 통해 공유


Databricks 런타임의 ANSI 규정 준수

적용 대상:체크표시가 된 예 Databricks 런타임

이 문서에서는 Databricks Runtime의 ANSI 규정 준수에 대해 설명합니다. Databricks SQL의 ANSI 모드는 ANSI_MODE참조하세요.

Spark SQL에는 ANSI SQL 표준 준수를 지원하는 두 가지 옵션, spark.sql.ansi.enabledspark.sql.storeAssignmentPolicy가 있습니다.

spark.sql.ansi.enabledtrue로 설정되면 Spark SQL은 Hive 규격 대신 ANSI 규격 언어를 사용합니다. 예를 들어 Spark는 SQL 연산자/함수에 대한 입력이 잘못된 경우 null 결과를 반환하는 대신 런타임에 예외를 throw합니다. 일부 ANSI 언어 기능은 ANSI SQL 표준에서 직접 사용할 수 없지만 해당 동작은 ANSI SQL의 스타일과 일치합니다.

또한 Spark SQL에는 테이블에 행을 저장할 때 암시적 캐스팅 동작을 제어하는 독립적인 옵션이 있습니다. 캐스팅 동작은 표준의 저장소 할당 규칙으로 정의됩니다.

spark.sql.storeAssignmentPolicyANSI로 설정되면 Spark SQL가 ANSI 저장 할당 규칙을 준수합니다. 이 구성은 기본값이 ANSI이므로 별도의 구성이지만 spark.sql.ansi.enabled 구성은 기본적으로 사용하지 않도록 설정됩니다.

다음 표에서는 동작을 요약해서 보여 줍니다.

속성 이름 기본값 의미
spark.sql.ansi.enabled 거짓 true이면 Spark가 ANSI SQL 사양을 준수하려고 합니다.
  • 정수 또는 소수점 필드의 모든 작업에서 오버플로가 발생하는 경우 런타임 예외를 throw합니다.
  • ANSI SQL의 예약된 키워드를 SQL 파서의 식별자로 사용하는 것을 금지합니다.
spark.sql.storeAssignmentPolicy 미국 국가 표준 협회 (ANSI) 다른 데이터 형식의 열에 값을 저장할 때 Spark는 형식 변환을 수행합니다. 형식 강제 변환 규칙에는 ANSI, legacy, strict의 세 가지 정책이 있습니다.
  • ANSI: Spark는 ANSI SQL에 따라 형식 강제 변환을 수행합니다. 실제로 동작은 PostgreSQL과 대부분 동일합니다. 문자열을 정수로 변환하거나 double을 부울로 변환하는 것과 같은 특정 불합리한 형식 변환을 허용하지 않습니다.
  • legacy: Spark는 매우 느슨한 유효한 캐스트인 경우 형식 강제 변환을 허용합니다. 예를 들어 문자열을 정수로 또는 double을 부울로 변환할 수 있습니다. 또한 Spark 2.x의 유일한 동작이며 Hive와 호환됩니다.
  • strict: Spark는 형식 강제 변환에서 가능한 전체 자릿수 손실 또는 데이터 잘림을 허용하지 않습니다. 예를 들어, double을 int로 변환하거나 decimal을 double로 변환하는 것은 허용되지 않습니다.

다음 하위 섹션에서는 ANSI 모드를 사용할 때 산술 연산, 형식 변환 및 SQL 구문 분석의 동작 변경 내용을 나타냅니다. 세 가지 종류의 Spark SQL 형식 변환이 있으며 이 문서에서는 캐스트, 저장 할당 및 형식 강제 변환을 하나씩 소개합니다.

산술 연산

Spark SQL에서 숫자 형식(10진 제외)으로 수행되는 산술 연산은 기본적으로 오버플로를 확인하지 않습니다. 즉, 연산이 오버플로를 발생시키는 경우 Java 또는 Scala 프로그램의 해당 연산과 결과와 동일합니다(예: 2개의 정수의 합계가 표현 가능한 최댓값보다 높은 경우 결과는 음수). 반면 Spark SQL 10진 오버플로에 대해 null을 반환합니다. spark.sql.ansi.enabledtrue로 설정되고 오버플로가 숫자 및 간격 산술 연산에서 발생하는 경우 런타임에 산술 예외를 throw합니다.

-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
 error: integer overflow

-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
  -2147483648

캐스트

spark.sql.ansi.enabledtrue로 설정된 경우, CAST 구문을 사용한 명시적 형 변환은 문자열을 정수로 캐스팅하는 것과 같이 표준에 정의된 잘못된 캐스트 패턴에 대해 런타임 예외를 발생시킵니다.

Spark ANSI 모드의 CAST 절은 ISO/IEC 9075-2:2011 — 데이터베이스 언어 - SQL — 파트2: 기본 사항(SQL/기본 사항)의 섹션 6.13 “캐스트 사양” 구문 규칙을 따릅니다. 단, ANSI 표준에 따라 허용되지 않는 다음과 같은 간단한 형식 변환을 특별히 허용합니다.

  • 숫자형 <=> 불리언형
  • 문자열 유형 <=> 이진 유형

다음 표는 CAST 식에서의 원본 및 대상 데이터 형식의 유효한 조합을 나타냅니다. “Y”는 조합이 제한 없이 구문상 유효함을, “N”은 조합이 유효하지 않음을 나타냅니다.

SourceTarget 숫자 문자열 날짜 타임스탬프 간격 불리언 (Boolean) 이진 배열 지도 구조체
숫자 Y Y N N N Y N N N N
문자열 Y Y Y Y Y Y Y N N N
날짜 N Y Y Y N N N N N N
타임스탬프 N Y Y Y N N N N N N
간격 N Y N N Y N N N N N
불리언 (Boolean) Y Y N N N Y N N N N
이진 Y N N N N N Y N N N
배열 N N N N N N N Y N N
지도 N N N N N N N N Y N
구조체 N N N N N N N N N Y
-- Examples of explicit casting

-- `spark.sql.ansi.enabled=true`
> SELECT CAST('a' AS INT);
  ERROR: [CAST_INVALID_INPUT] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed.

> SELECT CAST(2147483648L AS INT);
  ERROR: [CAST_OVERFLOW] The value 2147483648L of the type "BIGINT" cannot be cast to "INT" due to an overflow.

> SELECT CAST(DATE'2020-01-01' AS INT)
  ERROR: [DATATYPE_MISMATCH.CAST_WITH_FUNC_SUGGESTION] Cannot resolve "CAST(DATE '2020-01-01' AS INT)" due to data type mismatch: cannot cast "DATE" to "INT".

-- `spark.sql.ansi.enabled=false` (This is a default behavior)
> SELECT cast('a' AS INT);
  null

> SELECT CAST(2147483648L AS INT);
  -2147483648

> SELECT CAST(DATE'2020-01-01' AS INT);
  null

저장 할당

이 설정 spark.sql.storeAssignmentPolicy은 기본적으로 ANSI로 설정됩니다. 이 설정을 사용하면 원본 값의 데이터 형식이 대상 열 형식과 일치하지 않는 경우 Spark SQL은 문에 ANSI CAST 절을 INSERT 자동으로 추가합니다. 이 정책에 따라 테이블 삽입 중에 Spark는 잘못된 캐스트를 확인하고 거부하여 데이터 품질을 보장하기 위해 예외를 throw합니다. 즉, 형식 불일치로 인해 삽입 시도가 실패하는 경우 테이블에 데이터가 부분적으로 기록되지 않습니다.

예:

-- spark.sql.storeAssignmentPolicy=ANSI
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
  ERROR: [CAST_OVERFLOW_IN_TABLE_INSERT] Fail to insert a value of "BIGINT" type into the "INT" type column `i` due to an overflow.

> INSERT INTO test VALUES ('a');
  ERROR: [CAST_INVALID_INPUT ERROR] The value 'a' of the type "STRING" cannot be cast to "INT" because it is malformed

다음 예제에서는 호환되지 않는 데이터가 삽입되지 않도록 하는 Spark SQL을 보여 줍니다. 따라서 데이터 무결성이 유지됩니다.

spark.sql.storeAssignmentPolicyLEGACY로 설정되면 Spark SQL은 이전의 동작으로 돌아갑니다. 이 모드에서는 ANSI CAST를 사용하는 대신 레거시 CAST 작업을 적용합니다. 이 정책에서 테이블 삽입 중에 잘못된 캐스트가 발생하면 예외를 throw하는 대신 NULL 값이나 잘못된 값이 삽입됩니다. 예:

-- spark.sql.storeAssignmentPolicy=LEGACY
> CREATE TABLE test(i INT);
> INSERT INTO test VALUES (2147483648L);
> INSERT INTO test VALUES ('a');
> SELECT * FROM test;

-- Results
--  -2147483648 (incorrect value due to overflow)
--  null (cannot cast 'a' to INT)

형식 강제 변환

형식 승격 및 우선 순위

spark.sql.ansi.enabledtrue로 설정되면 Spark SQL는 데이터 형식 간의 충돌을 해결하는 방법을 제어하는 여러 규칙을 사용합니다. 지정된 데이터 형식의 값을 암시적으로 다른 데이터 형식으로 승격할 수 있는지 여부를 정의하는 형식 우선 순위 목록이 이 충돌 해결의 핵심입니다.

데이터 형식 우선 순위 목록(좁은 목록에서 넓은 목록으로)
바이트 바이트 -> 숏 -> 정수 -> 롱 -> 소수 -> 부동 소수점* -> 더블
짧은 Short -> Int(정수) -> Long(긴 정수) -> Decimal(십진수) -> Float*(부동소수점) -> Double(배정밀도 부동소수점)
정수 Int -> Long -> 소수 -> 부동 소수점* -> 더블
롱 -> 십진수 -> 부동소수* -> 더블
소수 Decimal (십진법) -> Float (부동소수점)* -> Double (배정밀도 부동소수점)
부유 Float -> Double
두 배 두 배
날짜 날짜 -> 타임스탬프
타임스탬프 타임스탬프
문자열 문자열
이진 이진
불리언 (Boolean) 불리언 (Boolean)
간격 간격
지도 맵**
배열 배열**
구조체 구조체**
  • 가장 낮은 공통 타입을 결정할 때, 플로트를 생략하여 정밀도 손실을 방지합니다.

** 복합 형식의 경우 우선 순위 규칙은 해당 구성 요소에 재귀적으로 적용됩니다.

특수 규칙은 문자열 형식 및 형식이 지정되지 않은 NULL에 적용됩니다. NULL은 다른 형식으로 승격될 수 있지만 문자열은 모든 단순 데이터 형식으로 승격될 수 있습니다.

다음은 우선 순위 목록을 지시된 트리로 그래픽으로 보여 주는 것입니다. 우선 순위 규칙의 그래픽 표현

최소 공통 형식 해상도

형식 집합에서 가장 덜 일반적인 형식은 형식 집합의 모든 요소가 우선 순위 목록에서 도달할 수 있는 가장 좁은 형식입니다.

가장 흔하지 않은 형식 해상도는 다음 작업을 수행하기 위해 사용됩니다.

  • 형식의 매개 변수를 예상하는 함수가 더 좁은 형식의 인수를 사용하여 호출될 수 있는지 여부를 결정합니다.
  • coalesce, least 또는 greatest와 같은 여러 매개 변수에 대한 공유 인수 형식을 예상하는 함수의 인수 형식을 파생합니다.
  • 산술 연산 또는 비교와 같은 연산자에 대한 피연산자 형식을 파생합니다.
  • 사례 식과 같은 식의 결과 형식을 파생합니다.
  • 배열 및 맵 생성자에 대한 요소, 키 또는 값 형식을 파생합니다.

최소 일반 형식이 FLOAT로 확인되는 경우 특수 규칙이 적용됩니다. FLOAT 형식 값을 사용하면 형식이 하나라도 INT, BIGINT 또는 DECIMAL에 해당하는 경우 잠재적인 자릿수 손실을 방지하기 위해 가장 일반적인 형식이 DOUBLE로 푸시됩니다.

-- The coalesce function accepts any set of argument types as long as they share a least common type.
-- The result type is the least common type of the arguments.
> SET spark.sql.ansi.enabled=true;

> SELECT typeof(coalesce(1Y, 1L, NULL));
BIGINT

> SELECT typeof(coalesce(1, DATE'2020-01-01'));
Error: Incompatible types [INT, DATE]

> SELECT typeof(coalesce(ARRAY(1Y), ARRAY(1L)));
ARRAY<BIGINT>

> SELECT typeof(coalesce(1, 1F));
DOUBLE

> SELECT typeof(coalesce(1L, 1F));
DOUBLE

> SELECT (typeof(coalesce(1BD, 1F)));
DOUBLE

-- The substring function expects arguments of type INT for the start and length parameters.
> SELECT substring('hello', 1Y, 2);
he

> SELECT substring('hello', '1', 2);
he

> SELECT substring('hello', 1L, 2);
Error: Argument 2 requires an INT type.

> SELECT substring('hello', str, 2) FROM VALUES(CAST('1' AS STRING)) AS T(str);
Error: Argument 2 requires an INT type.

SQL 함수

일부 SQL 함수의 동작은 ANSI 모드(spark.sql.ansi.enabled=true)에서 다를 수 있습니다.

  • size: 이 함수는 ANSI 모드에서 null 입력에 대해 null을 반환합니다.
  • element_at:
    • 이 함수는 잘못된 인덱스를 사용하는 경우 ArrayIndexOutOfBoundsException을 throw합니다.
    • 이 함수는 키가 맵에 없는 경우 NoSuchElementException을 throw합니다.
  • elt: 잘못된 인덱스를 사용하는 경우 ArrayIndexOutOfBoundsException을 throw합니다.
  • make_date: 결과 날짜가 잘못된 경우 이 함수는 예외와 함께 실패합니다.
  • make_timestamp: 결과 타임스탬프가 잘못된 경우 이 함수는 예외와 함께 실패합니다.
  • make_interval: 결과 간격이 잘못된 경우 이 함수는 예외와 함께 실패합니다.
  • next_day: 입력이 유효한 요일이 아니면 IllegalArgumentException을 throw합니다.
  • parse_url: 입력 문자열이 유효한 url이 아니면 IllegalArgumentException을 throw합니다.
  • to_date: 입력 문자열을 구문 분석할 수 없거나 패턴 문자열이 잘못된 경우 예외로 이 함수가 실패합니다.
  • to_timestamp: 입력 문자열을 구문 분석할 수 없거나 패턴 문자열이 잘못된 경우 예외로 이 함수가 실패합니다.
  • to_unix_timestamp: 입력 문자열을 구문 분석할 수 없거나 패턴 문자열이 잘못된 경우 예외로 이 함수가 실패합니다.
  • unix_timestamp: 입력 문자열을 구문 분석할 수 없거나 패턴 문자열이 잘못된 경우 예외로 이 함수가 실패합니다.

SQL 연산자

일부 SQL 연산자의 동작은 ANSI 모드(spark.sql.ansi.enabled=true)에서 다를 수 있습니다.

  • array_col[index]: 잘못된 인덱스를 사용하는 경우 이 연산자는 ArrayIndexOutOfBoundsException을 throw합니다.
  • map_col[key]: 이 연산자는 키가 맵에 없는 경우 NoSuchElementException을 throw합니다.
  • CAST(string_col AS TIMESTAMP): 입력 문자열을 구문 분석할 수 없는 경우 예외로 이 연산자가 실패합니다.
  • CAST(string_col AS DATE): 입력 문자열을 구문 분석할 수 없는 경우 예외로 이 연산자가 실패합니다.

ANSI 모드에 유용한 함수

ANSI 모드가 켜지면 잘못된 연산에 대해 예외가 발생합니다. 다음 SQL 함수를 사용하여 이러한 예외를 표시하지 않을 수 있습니다.

  • try_cast: 런타임 오류 시 예외를 throw하는 대신CAST을 반환한다는 점을 제외하고 NULL와 동일합니다.
  • try_add: 정수 값 오버플로 시 예외를 throw하는 대신+을 반환한다는 점을 제외하고 더하기 연산자NULL와 동일합니다.
  • try_divide: 0으로 나눌 때 예외를 throw하는 대신/을 반환한다는 점을 제외하고 나누기 연산자NULL와 동일합니다.

SQL 키워드

spark.sql.ansi.enabled가 true이면 Spark SQL는 ANSI 모드 파서를 사용합니다. 이 모드에서 Spark SQL에는 다음과 같은 두 종류의 키워드가 있습니다.

  • 예약된 키워드: 예약되어 있고 테이블, 뷰, 열, 함수, 별칭 등에 대한 식별자로 사용할 수 없는 키워드입니다.
  • 비 예약 키워드: 특정 컨텍스트에서만 특별한 의미를 가지며 다른 컨텍스트에서 식별자로 사용할 수 있는 키워드입니다. 예를 들어 EXPLAIN SELECT ... 명령이지만 EXPLAIN 다른 위치에서 식별자로 사용할 수 있습니다.

ANSI 모드를 사용하지 않도록 설정하면 Spark SQL에는 다음과 같은 두 종류의 키워드가 있습니다.

  • 비 예약 키워드: ANSI 모드를 사용하도록 설정한 경우와 정의가 동일합니다.
  • 엄격한 비 예약 키워드: 테이블 별칭으로 사용할 수 없는 비 예약 키워드의 엄격한 버전입니다.

기본적으로 spark.sql.ansi.enabled는 false입니다.

다음은 Spark SQL의 모든 키워드 목록입니다.

키워드 Spark SQL ANSI 모드 Spark SQL 기본 모드 SQL-2016
추가하기 비예약된 비예약된 비예약된
후에 비예약된 비예약된 비예약된
모두 예약됨 비예약된 예약됨
변경 비예약된 비예약된 예약됨
항상 비예약된 비예약된 비예약된
분석 비예약된 비예약된 비예약된
예약됨 비예약된 예약됨
안티 비예약된 엄격-비예약 비예약된
어떤 예약됨 비예약된 예약됨
아카이브 비예약된 비예약된 비예약된
배열 비예약된 비예약된 예약됨
로서 예약됨 비예약된 예약됨
ASC 비예약된 비예약된 비예약된
비예약된 비예약된 예약됨
권한 부여 예약됨 비예약된 예약됨
사이 비예약된 비예약된 예약됨
둘 다 예약됨 비예약된 예약됨
양동이 비예약된 비예약된 비예약된
버킷 비예약된 비예약된 비예약된
에 의해 비예약된 비예약된 예약됨
캐시 비예약된 비예약된 비예약된
계단식 비예약된 비예약된 비예약된
케이스 (상황/사례) 예약됨 비예약된 예약됨
캐스트 예약됨 비예약된 예약됨
변경 비예약된 비예약된 비예약된
확인 예약됨 비예약된 예약됨
맑다 비예약된 비예약된 비예약된
클러스터 비예약된 비예약된 비예약된
클러스터드 비예약된 비예약된 비예약된
CODEGEN 비예약된 비예약된 비예약된
콜레이트 예약됨 비예약된 예약됨
컬렉션 비예약된 비예약된 비예약된
COLUMN 예약됨 비예약된 예약됨
COLUMNS 비예약된 비예약된 비예약된
댓글 비예약된 비예약된 비예약된
약속하다 비예약된 비예약된 예약됨
콤팩트 비예약된 비예약된 비예약된
압축 비예약된 비예약된 비예약된
계산 비예약된 비예약된 비예약된
문자열 연결 비예약된 비예약된 비예약된
CONSTRAINT 예약됨 비예약된 예약됨
비용 비예약된 비예약된 비예약된
생성 예약됨 비예약된 예약됨
교차 예약됨 엄격-비예약 예약됨
큐브 비예약된 비예약된 예약됨
전류 비예약된 비예약된 예약됨
현재 날짜 예약됨 비예약된 예약됨
현재_시간 예약됨 비예약된 예약됨
현재_타임스탬프 예약됨 비예약된 예약됨
현재 사용자 예약됨 비예약된 예약됨
데이터 비예약된 비예약된 비예약된
데이터베이스 비예약된 비예약된 비예약된
데이터베이스 비예약된 비예약된 비예약된
비예약된 비예약된 비예약된
DBPROPERTIES 비예약된 비예약된 비예약된
정의됨 비예약된 비예약된 비예약된
삭제 비예약된 비예약된 예약됨
경계가 설정됨 비예약된 비예약된 비예약된
DESC 비예약된 비예약된 비예약된
묘사하다 비예약된 비예약된 예약됨
DFS (분산 파일 시스템) 비예약된 비예약된 비예약된
디렉터리 비예약된 비예약된 비예약된
디렉터리 비예약된 비예약된 비예약된
독특한 예약됨 비예약된 예약됨
배포하다 비예약된 비예약된 비예약된
디브 비예약된 비예약된 키워드 아님
떨어뜨리다 비예약된 비예약된 예약됨
그 외에 예약됨 비예약된 예약됨
예약됨 비예약된 예약됨
탈출 예약됨 비예약된 예약됨
탈출함 비예약된 비예약된 비예약된
제외 예약됨 엄격-비예약 예약됨
교환 비예약된 비예약된 비예약된
존재하다 비예약된 비예약된 예약됨
EXPLAIN 비예약된 비예약된 비예약된
수출 비예약된 비예약된 비예약된
연장됨 비예약된 비예약된 비예약된
외부 비예약된 비예약된 예약됨
추출 비예약된 비예약된 예약됨
거짓 예약됨 비예약된 예약됨
가져와 예약됨 비예약된 예약됨
필드 비예약된 비예약된 비예약된
필터 예약됨 비예약된 예약됨
파일 형식 비예약된 비예약된 비예약된
첫 번째 비예약된 비예약된 비예약된
FN(에프엔) 비예약된 비예약된 비예약된
다음 비예약된 비예약된 비예약된
위해 예약됨 비예약된 예약됨
외국의 예약됨 비예약된 예약됨
포맷 비예약된 비예약된 비예약된
형식화된 비예약된 비예약된 비예약된
부터 예약됨 비예약된 예약됨
가득 찬 예약됨 엄격-비예약 예약됨
기능 비예약된 비예약된 예약됨
기능 비예약된 비예약된 비예약된
생성됨 비예약된 비예약된 비예약된
글로벌 비예약된 비예약된 예약됨
GRANT 예약됨 비예약된 예약됨
보조금 비예약된 비예약된 비예약된
그룹 예약됨 비예약된 예약됨
그룹화 비예약된 비예약된 예약됨
HAVING 예약됨 비예약된 예약됨
시간 비예약된 비예약된 비예약된
만약 (If) 비예약된 비예약된 키워드 아님
무시하다 비예약된 비예약된 비예약된
수입 비예약된 비예약된 비예약된
인도 예약됨 비예약된 예약됨
목차 비예약된 비예약된 비예약된
인덱스 비예약된 비예약된 비예약된
내부 예약됨 엄격-비예약 예약됨
인패스 비예약된 비예약된 비예약된
INPUTFORMAT 비예약된 비예약된 비예약된
INSERT 비예약된 비예약된 예약됨
교차 예약됨 엄격-비예약 예약됨
간격 비예약된 비예약된 예약됨
안으로 예약됨 비예약된 예약됨
아이에스 (IS) 예약됨 비예약된 예약됨
항목 비예약된 비예약된 비예약된
JOIN 예약됨 엄격-비예약 예약됨
JSON (자바스크립트 객체 표기법) 비예약된 비예약된 비예약된
열쇠 비예약된 비예약된 비예약된
키들 비예약된 비예약된 비예약된
마지막 비예약된 비예약된 비예약된
측면 예약됨 엄격-비예약 예약됨
게으른 비예약된 비예약된 비예약된
선도하는 예약됨 비예약된 예약됨
왼쪽 예약됨 엄격-비예약 예약됨
좋아요 비예약된 비예약된 예약됨
일라이크 비예약된 비예약된 비예약된
LIMIT 비예약된 비예약된 비예약된
비예약된 비예약된 비예약된
LIST 비예약된 비예약된 비예약된
로드 비예약된 비예약된 비예약된
지역 비예약된 비예약된 예약됨
위치 비예약된 비예약된 비예약된
잠금 비예약된 비예약된 비예약된
자물쇠 비예약된 비예약된 비예약된
논리적 비예약된 비예약된 비예약된
매크로 비예약된 비예약된 비예약된
지도 비예약된 비예약된 비예약된
일치함 비예약된 비예약된 비예약된
병합 비예약된 비예약된 비예약된
비예약된 비예약된 비예약된
마이너스 비예약된 엄격-비예약 비예약된
비예약된 비예약된 비예약된
MSCK (사용자가 이해할 수 있도록 설명 또는 번역 필요 시 고려) 비예약된 비예약된 비예약된
네임스페이스 비예약된 비예약된 비예약된
네임스페이스 비예약된 비예약된 비예약된
자연스러운 예약됨 엄격-비예약 예약됨
아니오 비예약된 비예약된 예약됨
아님 예약됨 비예약된 예약됨
없음 예약됨 비예약된 예약됨
NULLS 비예약된 비예약된 비예약된
비예약된 비예약된 예약됨
켜짐 예약됨 엄격-비예약 예약됨
오직 예약됨 비예약된 예약됨
옵션 비예약된 비예약된 비예약된
옵션 비예약된 비예약된 비예약된
또는 예약됨 비예약된 예약됨
주문 예약됨 비예약된 예약됨
아웃 비예약된 비예약된 예약됨
아우터 예약됨 비예약된 예약됨
출력 형식 비예약된 비예약된 비예약된
비예약된 비예약된 비예약된
중복 예약됨 비예약된 예약됨
오버레이 비예약된 비예약된 비예약된
덮어쓰기 비예약된 비예약된 비예약된
PARTITION 비예약된 비예약된 예약됨
분할된 비예약된 비예약된 비예약된
파티션 비예약된 비예약된 비예약된
퍼센트 비예약된 비예약된 비예약된
PIVOT 비예약된 비예약된 비예약된
배치 비예약된 비예약된 비예약된
직위 비예약된 비예약된 예약됨
이전 비예약된 비예약된 비예약된
본래의 예약됨 비예약된 예약됨
교장 비예약된 비예약된 비예약된
속성 비예약된 비예약된 비예약된
정화 비예약된 비예약된 비예약된
QUALIFY 예약됨 비예약된 예약됨
질의 비예약된 비예약된 비예약된
범위 비예약된 비예약된 예약됨
수령인 비예약된 비예약된 비예약된
RECIPIENTS 비예약된 비예약된 비예약된
기록리더 비예약된 비예약된 비예약된
레코드라이터 비예약된 비예약된 비예약된
복구 비예약된 비예약된 비예약된
감소시키다 비예약된 비예약된 비예약된
참고 문헌 예약됨 비예약된 예약됨
REFRESH 비예약된 비예약된 비예약된
REGEXP 비예약된 비예약된 키워드 아님
REMOVE 비예약된 비예약된 비예약된
이름 변경 비예약된 비예약된 비예약된
수리 비예약된 비예약된 비예약된
대체 비예약된 비예약된 비예약된
RESET 비예약된 비예약된 비예약된
존중 비예약된 비예약된 비예약된
제한 비예약된 비예약된 비예약된
REVOKE 비예약된 비예약된 예약됨
올바른 예약됨 엄격-비예약 예약됨
RLIKE 비예약된 비예약된 비예약된
역할 비예약된 비예약된 비예약된
역할 비예약된 비예약된 비예약된
롤백 비예약된 비예약된 예약됨
롤업 비예약된 비예약된 예약됨
비예약된 비예약된 예약됨
비예약된 비예약된 예약됨
SCHEMA 비예약된 비예약된 비예약된
스키마 비예약된 비예약된 키워드 아님
비예약된 비예약된 비예약된
SELECT 예약됨 비예약된 예약됨
세미 비예약된 엄격-비예약 비예약된
분리된 비예약된 비예약된 비예약된
SERDE 비예약된 비예약된 비예약된
SERDEPROPERTIES 비예약된 비예약된 비예약된
세션_사용자 예약됨 비예약된 예약됨
SET 비예약된 비예약된 예약됨
설정 비예약된 비예약된 비예약된
공유 비예약된 비예약된 비예약된
SHARES 비예약된 비예약된 비예약된
보이기 비예약된 비예약된 비예약된
기울어진 비예약된 비예약된 비예약된
일부 예약됨 비예약된 예약됨
정렬 비예약된 비예약된 비예약된
정리됨 비예약된 비예약된 비예약된
시작 비예약된 비예약된 예약됨
통계 비예약된 비예약된 비예약된
저장됨 비예약된 비예약된 비예약된
계층화하다 비예약된 비예약된 비예약된
구조체 비예약된 비예약된 비예약된
SUBSTR (서브스트) 비예약된 비예약된 비예약된
부분 문자열 비예약된 비예약된 비예약된
SYNC 비예약된 비예약된 비예약된
TABLE 예약됨 비예약된 예약됨
TABLES 비예약된 비예약된 비예약된
TABLESAMPLE 비예약된 비예약된 예약됨
TBLPROPERTIES 비예약된 비예약된 비예약된
온도 비예약된 비예약된 키워드 아님
임시 비예약된 비예약된 비예약된
종료 비예약된 비예약된 비예약된
그때 예약됨 비예약된 예약됨
시간 예약됨 비예약된 예약됨
에게 예약됨 비예약된 예약됨
터치 비예약된 비예약된 비예약된
뒤따르는 예약됨 비예약된 예약됨
거래 비예약된 비예약된 비예약된
거래 비예약된 비예약된 비예약된
변형 비예약된 비예약된 비예약된
다듬다 비예약된 비예약된 비예약된
진실 비예약된 비예약된 예약됨
잘라내다 비예약된 비예약된 예약됨
TRY_CAST 비예약된 비예약된 비예약된
유형 비예약된 비예약된 비예약된
보관 해제 비예약된 비예약된 비예약된
무한한 비예약된 비예약된 비예약된
캐시 해제 비예약된 비예약된 비예약된
연합 예약됨 엄격-비예약 예약됨
독특한 예약됨 비예약된 예약됨
알 수 없음 예약됨 비예약된 예약됨
잠금 해제 비예약된 비예약된 비예약된
설정되지 않음 비예약된 비예약된 비예약된
UPDATE 비예약된 비예약된 예약됨
사용 비예약된 비예약된 비예약된
사용자 예약됨 비예약된 예약됨
사용 예약됨 엄격-비예약 예약됨
VALUES 비예약된 비예약된 예약됨
보기 비예약된 비예약된 비예약된
VIEWS 비예약된 비예약된 비예약된
다음과 같은 경우... 예약됨 비예약된 예약됨
WHERE 예약됨 비예약된 예약됨
WINDOW 비예약된 비예약된 예약됨
함께 예약됨 비예약된 예약됨
비예약된 비예약된 비예약된
구역 비예약된 비예약된 비예약된