Databricks 런타임의 ANSI 규정 준수
적용 대상: Databricks 런타임
이 문서에서는 Databricks Runtime의 ANSI 규정 준수에 대해 설명합니다. Databricks SQL의 ANSI 모드는 ANSI_MODE참조하세요.
Spark SQL에는 ANSI SQL 표준 준수를 지원하는 두 가지 옵션, spark.sql.ansi.enabled
와 spark.sql.storeAssignmentPolicy
가 있습니다.
spark.sql.ansi.enabled
가 true
로 설정되면 Spark SQL은 Hive 규격 대신 ANSI 규격 언어를 사용합니다. 예를 들어 Spark는 SQL 연산자/함수에 대한 입력이 잘못된 경우 null 결과를 반환하는 대신 런타임에 예외를 throw합니다. 일부 ANSI 언어 기능은 ANSI SQL 표준에서 직접 사용할 수 없지만 동작은 ANSI SQL 스타일과 일치합니다.
또한 Spark SQL에는 테이블에 행을 저장할 때 암시적 캐스팅 동작을 제어하는 독립적인 옵션이 있습니다. 캐스팅 동작은 표준의 저장소 할당 규칙으로 정의됩니다.
spark.sql.storeAssignmentPolicy
가 ANSI
로 설정되면 Spark SQL가 ANSI 저장 할당 규칙을 준수합니다. 이 구성은 기본값이 ANSI
이므로 별도의 구성이지만 spark.sql.ansi.enabled
구성은 기본적으로 사용하지 않도록 설정됩니다.
다음 표에서는 동작을 요약해서 보여 줍니다.
속성 이름 | 기본값 | 의미 |
---|---|---|
spark.sql.ansi.enabled |
거짓 | true이면 Spark가 ANSI SQL 사양을 준수하려고 합니다.
|
spark.sql.storeAssignmentPolicy |
ANSI | 다른 데이터 형식의 열에 값을 저장할 때 Spark는 형식 변환을 수행합니다. 형식 강제 변환 규칙에는 ANSI , legacy , strict 의 세 가지 정책이 있습니다.
|
다음 하위 섹션에서는 ANSI 모드를 사용할 때 산술 연산, 형식 변환 및 SQL 구문 분석의 동작 변경 내용을 나타냅니다. 세 가지 종류의 Spark SQL 형식 변환이 있으며 이 문서에서는 캐스트, 저장 할당 및 형식 강제 변환을 하나씩 소개합니다.
산술 연산
Spark SQL에서 숫자 형식(10진 제외)으로 수행되는 산술 연산은 기본적으로 오버플로를 확인하지 않습니다.
즉, 연산이 오버플로를 발생시키는 경우 Java 또는 Scala 프로그램의 해당 연산과 결과와 동일합니다(예: 2개의 정수의 합계가 표현 가능한 최댓값보다 높은 경우 결과는 음수). 반면 Spark SQL 10진 오버플로에 대해 null을 반환합니다.
spark.sql.ansi.enabled
가 true
로 설정되고 오버플로가 숫자 및 간격 산술 연산에서 발생하는 경우 런타임에 산술 예외를 throw합니다.
-- `spark.sql.ansi.enabled=true`
> SELECT 2147483647 + 1;
error: integer overflow
-- `spark.sql.ansi.enabled=false`
> SELECT 2147483647 + 1;
-2147483648
캐스트
spark.sql.ansi.enabled
가 true
로 설정된 경우, CAST
구문을 사용한 명시적 형 변환은 문자열을 정수로 캐스팅하는 것과 같이 표준에 정의된 잘못된 캐스트 패턴에 대해 런타임 예외를 발생시킵니다.
Spark ANSI 모드의 CAST
절은 ISO/IEC 9075-2:2011 — 데이터베이스 언어 - SQL — 파트2: 기본 사항(SQL/기본 사항)의 섹션 6.13 “캐스트 사양” 구문 규칙을 따릅니다. 단, ANSI 표준에 따라 허용되지 않는 다음과 같은 간단한 형식 변환을 특별히 허용합니다.
- NumericType <=> BooleanType
- 문자열 유형 <=> 이진 유형
다음 표는 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.storeAssignmentPolicy
가 LEGACY
로 설정되면 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.enabled
가 true
로 설정되면 Spark SQL는 데이터 형식 간의 충돌을 해결하는 방법을 제어하는 여러 규칙을 사용합니다.
지정된 데이터 형식의 값을 암시적으로 다른 데이터 형식으로 승격할 수 있는지 여부를 정의하는 형식 우선 순위 목록이 이 충돌 해결의 핵심입니다.
데이터 형식 | 우선 순위 목록(좁은 목록에서 넓은 목록으로) |
---|---|
바이트 | Byte -> Short -> Int -> Long -> Decimal -> Float* -> Double |
짧은 | 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 |
---|---|---|---|
추가하기 | 비예약된 | 비예약 | 비예약된 |
후에 | 미예약 | 비예약 | 비예약된 |
모두 | 예약됨 | 예약되지 않음 | 예약된 |
변경 | 예약되지 않음 | 비예약된 | 예약된 |
항상 | 비 예약 | 예약되지 않음 | 비 예약 |
분석 | 예약되지 않은 | 미예약 | 예약되지 않음 |
및 | 예약된 | 비예약 | 예약된 |
안티 | 예약되지 않은 | 엄격-비예약 | 미예약된 |
어떤 | 예약됨 | 예약되지 않은 | 예약됨 |
아카이브 | 비예약 | 비예약된 | 비예약 |
ARRAY | 예약되지 않은 | 예약되지 않은 | 예약됨 |
AS | 예약된 | 예약 안 됨 | 예약됨 |
ASC | 예약되지 않은 | 비예약된 | 미예약 |
AT | 비예약제 | 비예약 | 예약됨 |
권한 부여 | 예약됨 | 비예약된 | 예약된 |
사이 | 미예약 | 예약되지 않음 | 예약됨 |
둘 다 | 예약됨 | 예약되지 않은 | 예약됨 |
양동이 | 비예약 | 비예약된 | 비예약 |
버킷 | 미예약 | 예약되지 않음 | 비예약 |
BY | 미예약 | 예약되지 않음 | 예약됨 |
CACHE | 비예약된 | 비예약 | 비예약 |
계단식 | 예약되지 않은 | 미예약 | 비예약 |
케이스 (상황/사례) | 예약된 | 비지정 | 예약됨 |
캐스트 | 예약된 | 비예약됨 | 예약됨 |
변경 | 예약되지 않음 | 예약되지 않음 | 예약되지 않은 |
확인 | 예약됨 | 비 예약 | 예약됨 |
CLEAR | 예약되지 않은 | 예약되지 않음 | 비예약된 |
클러스터 | 비예약 | 예약되지 않은 | 예약되지 않은 |
클러스터드 | 예약되지 않음 | 예약되지 않은 | 예약되지 않음 |
CODEGEN | 예약되지 않음 | 비예약 | 비예약된 |
COLLATE | 예약됨 | 예약되지 않은 | 예약됨 |
컬렉션 | 예약되지 않음 | 예약되지 않은 | 비예약됨 |
COLUMN | 예약됨 | 예약되지 않은 | 예약된 |
COLUMNS | 예약되지 않은 | 비예약 | 비 예약 |
댓글 | 예약되지 않은 | 예약되지 않은 | 예약되지 않음 |
약속하다 | 예약되지 않은 | 미예약 | 예약됨 |
COMPACT | 미예약 | 예약되지 않음 | 미예약 |
압축 | 예약되지 않은 | 비예약 | 비예약된 |
계산 | 비예약됨 | 예약되지 않은 | 예약되지 않음 |
CONCATENATE | 예약되지 않은 | 예약 불필요 | 예약되지 않음 |
CONSTRAINT | 예약됨 | 예약되지 않음 | 예약됨 |
비용 | 미 예약된 | 미지정 | 예약되지 않음 |
생성 | 예약됨 | 비예약됨 | 예약된 |
교차 | 예약됨 | 엄격히 비예약된 | 예약됨 |
큐브 | 예약 불필요 | 예약되지 않음 | 예약됨 |
CURRENT | 비 예약 | 예약되지 않음 | 예약된 |
현재 날짜 | 예약됨 | 미예약 | 예약됨 |
현재_시간 | 예약됨 | 예약되지 않은 | 예약됨 |
현재_타임스탬프 | 예약된 | 예약 불필요 | 예약됨 |
현재 사용자 | 예약된 | 예약되지 않은 | 예약됨 |
데이터 | 예약되지 않음 | 예약되지 않음 | 예약되지 않은 |
데이터베이스 | 예약되지 않은 | 비예약된 | 예약되지 않음 |
데이터베이스 | 비예약된 | 예약되지 않음 | 예약되지 않음 |
일 | 예약되지 않음 | 예약되지 않은 | 예약되지 않음 |
DBPROPERTIES | 예약되지 않음 | 예약되지 않음 | 예약 없음 |
정의됨 | 예약되지 않음 | 예약되지 않음 | 예약되지 않음 |
삭제 | 비예약 | 비예약된 | 예약된 |
경계가 설정됨 | 비예약 | 예약되지 않은 | 예약되지 않음 |
DESC | 예약되지 않음 | 예약되지 않은 | 비예약 |
묘사하다 | 미예약 | 예약되지 않음 | 예약됨 |
DFS | 예약되지 않은 | 비예약 | 예약되지 않은 |
디렉터리 | 미예약된 | 비예약된 | 비예약 |
디렉터리 | 예약되지 않은 | 미예약 | 비예약된 |
독특한 | 예약됨 | 미예약 | 예약된 |
배포하다 | 비 예약 | 예약되지 않은 | 예약되지 않음 |
디브 | 비예약된 | 예약되지 않은 | 키워드 아님 |
떨어뜨리다 | 미지정 | 비예약된 | 예약된 |
그 외에 | 예약됨 | 예약되지 않은 | 예약됨 |
끝 | 예약됨 | 예약되지 않은 | 예약됨 |
탈출 | 예약됨 | 예약되지 않은 | 예약됨 |
탈출함 | 비예약 | 비예약 | 예약되지 않음 |
제외 | 예약된 | 엄격한 비할당 | 예약됨 |
교환 | 예약되지 않음 | 예약되지 않은 | 비예약 |
존재하다 | 비예약된 | 비 예약 | 예약됨 |
EXPLAIN | 비예약된 | 비예약됨 | 예약되지 않음 |
수출 | 예약되지 않음 | 비 예약 | 비예약된 |
연장됨 | 비제한 | 예약되지 않은 | 비 예약 |
외부 | 예약되지 않은 | 예약되지 않음 | 예약됨 |
추출 | 비전용 | 미예약 | 예약된 |
거짓 | 예약된 | 비예약된 | 예약된 |
가져와 | 예약됨 | 비예약된 | 예약된 |
필드 | 비예약 | 예약되지 않은 | 미예약 |
필터 | 예약됨 | 예약되지 않음 | 예약된 |
파일 형식 | 예약되지 않은 | 미예약 | 예약되지 않은 |
첫 번째 | 예약되지 않음 | 예약되지 않음 | 예약 되지 않은 |
FN | 미지정 | 비제한 | 예약되지 않음 |
다음 | 비 예약 | 비예약 | 비예약된 |
위해 | 예약됨 | 예약되지 않은 | 예약됨 |
외국의 | 예약됨 | 예약되지 않음 | 예약됨 |
포맷 | 비 예약 | 비 예약 | 비예약된 |
FORMATTED | 예약되지 않은 | 미지정 | 미예약 |
부터 | 예약된 | 비예약 | 예약됨 |
가득 찬 | 예약됨 | 엄격한 비 할당 | 예약됨 |
기능 | 미예약 | 비예약된 | 예약됨 |
기능 | 예약되지 않은 | 비 지정 | 비 예약 |
생성됨 | 비예약 | 비예약 | 예약되지 않음 |
글로벌 | 할당되지 않음 | 예약되지 않은 | 예약된 |
GRANT | 예약됨 | 미예약된 | 예약됨 |
보조금 | 미예약 | 미예약 | 예약되지 않음 |
그룹 | 예약됨 | 비예약 | 예약됨 |
그룹화 | 비예약된 | 미예약 | 예약된 |
HAVING | 예약된 | 비 예약 | 예약된 |
시간 | 미배정 | 예약되지 않은 | 예약되지 않은 |
만약 (If) | 예약되지 않은 | 예약되지 않음 | 키워드 아님 |
IGNORE | 예약되지 않음 | 예약되지 않은 | 예약되지 않은 |
수입 | 비예약된 | 비예약된 | 비예약됨 |
인도 | 예약됨 | 예약되지 않음 | 예약됨 |
목차 | 예약되지 않은 | 예약되지 않음 | 예약되지 않은 |
INDEXES | 미예약 | 비예약 | 예약되지 않은 |
내부 | 예약됨 | 엄격한 비예약 상태 | 예약됨 |
INPATH | 비예약된 | 비예약된 | 예약되지 않은 |
INPUTFORMAT | 예약되지 않은 | 비예약된 | 예약되지 않은 |
INSERT | 예약되지 않음 | 비예약된 | 예약됨 |
INTERSECT | 예약됨 | 엄격한 비예약된 | 예약됨 |
간격 | 비예약 | 미예약 | 예약됨 |
INTO | 예약됨 | 비예약 | 예약됨 |
IS | 예약된 | 비전용 | 예약됨 |
항목 | 비예약 | 비 예약 | 예약되지 않음 |
JOIN | 예약됨 | 엄격-비예약 | 예약됨 |
JSON (자바스크립트 객체 표기법) | 비예약 | 비예약 | 비 예약 |
KEY | 비 예약 | 비정기적 | 미지정 |
키들 | 미예약 | 예약되지 않음 | 비예약 |
마지막 | 비 예약 | 예약되지 않음 | 예약되지 않은 |
측면 | 예약된 | 엄격하지만 사전 예약이 필요 없는 | 예약됨 |
게으른 | 미예약 | 예약되지 않음 | 미예약 |
선도하는 | 예약됨 | 예약되지 않음 | 예약된 |
왼쪽 | 예약됨 | 엄격한 비예약 | 예약됨 |
좋아요 | 비지정 | 예약되지 않음 | 예약됨 |
ILIKE | 예약되지 않은 | 비예약된 | 미예약 |
LIMIT | 미예약 | 미예약 | 미예약 |
줄 | 미예약 | 비예약 | 예약되지 않음 |
LIST | 미예약 | 비예약된 | 예약이 없는 |
로드 | 예약되지 않음 | 예약되지 않은 | 비예약된 |
지역 | 예약되지 않은 | 비 예약 | 예약됨 |
위치 | 예약되지 않음 | 미예약 | 예약되지 않음 |
잠금 | 예약되지 않은 | 비예약 | 비예약 |
자물쇠 | 비예약된 | 미예약된 | 비예약된 |
논리적 | 미예약 | 비예약된 | 예약되지 않음 |
매크로 | 미예약 | 예약되지 않은 | 예약되지 않음 |
지도 | 미예약 | 예약되지 않음 | 미배정 |
일치함 | 비예약된 | 비예약된 | 비지정 |
병합 | 미예약 | 미예약 | 비 예약 |
분 | 미예약 | 비 예약 | 비예약된 |
MINUS | 예약되지 않음 | 엄격한 비예약관리가 적용되는 | 비예약 |
월 | 예약되지 않은 | 예약되지 않음 | 비예약된 |
MSCK | 미예약 | 예약되지 않은 | 비예약 |
네임스페이스 | 비예약된 | 미예약 | 예약되지 않은 |
네임스페이스 | 미예약 | 비예약된 | 비예약 |
자연스러운 | 예약됨 | 엄격히 비예약된 | 예약됨 |
아니오 | 예약되지 않은 | 미지정 | 예약됨 |
아님 | 예약됨 | 예약되지 않음 | 예약됨 |
NULL | 예약된 | 비 예약 | 예약된 |
NULLS | 예약되지 않은 | 비예약 | 비예약 |
OF | 비 예약 | 미예약 | 예약됨 |
켜짐 | 예약됨 | 엄격한 비예약 정책 | 예약됨 |
오직 | 예약됨 | 비예약 | 예약된 |
옵션 | 예약되지 않은 | 예약되지 않은 | 예약되지 않은 |
옵션 | 미예약 | 비예약된 | 비예약됨 |
또는 | 예약된 | 미예약 | 예약됨 |
주문 | 예약됨 | 예약되지 않음 | 예약됨 |
아웃 | 예약되지 않음 | 예약되지 않은 | 예약됨 |
아우터 | 예약됨 | 비예약 | 예약됨 |
출력 형식 | 비예약된 | 미예약 | 비예약된 |
끝 | 예약되지 않은 | 미예약 | 비예약 |
중복 | 예약됨 | 예약되지 않은 | 예약됨 |
오버레이 | 미예약 | 예약되지 않은 | 비예약된 |
덮어쓰기 | 예약되지 않음 | 비사용 중 | 비예약된 |
PARTITION | 예약되지 않음 | 비 예약 | 예약됨 |
분할된 | 비예약된 | 비전용 | 비예약 |
파티션 | 예약되지 않은 | 예약되지 않은 | 비예약 |
퍼센트 | 미예약 | 예약되지 않음 | 예약되지 않음 |
PIVOT | 비지정 | 미예약 | 비예약된 |
배치 | 비예약된 | 미 예약된 | 예약되지 않은 |
직위 | 예약되지 않음 | 미예약된 | 예약된 |
이전 | 예약되지 않음 | 예약되지 않은 | 비예약 |
PRIMARY | 예약된 | 예약되지 않음 | 예약됨 |
교장 | 비예약된 | 비예약된 | 예약되지 않은 |
속성 | 예약되지 않은 | 예약되지 않음 | 예약되지 않은 |
정화 | 미예약된 | 예약되지 않음 | 예약되지 않은 |
QUALIFY | 예약됨 / 내성적인 | 예약되지 않은 | 예약된 |
질의 | 예약되지 않음 | 예약되지 않음 | 미예약 or 예약되지 않은 |
범위 | 비예약된 | 예약되지 않은 | 예약됨 |
수령인 | 비예약된 | 비예약 | 미예약 |
RECIPIENTS | 비지정 | 미예약 | 예약되지 않음 |
기록리더 | 미예약된 | 예약되지 않음 | 예약되지 않은 |
레코드라이터 | 미예약 | 예약되지 않음 | 비예약 |
복구 | 예약되지 않음 | 예약되지 않은 | 비예약된 |
감소시키다 | 예약되지 않음 | 비예약된 | 예약되지 않음 |
참고 문헌 | 예약됨 | 예약되지 않은 | 예약된 |
REFRESH | 예약되지 않음 | 예약되지 않은 | 미예약 |
REGEXP | 비예약 | 예약되지 않음 | 키워드 아님 |
REMOVE | 미지정 | 비예약된 | 예약되지 않음 |
이름 변경 | 예약되지 않음 | 예약되지 않음 | 미예약 |
수리 | 예약되지 않음 | 미예약 | 비예약 |
대체 | 예약되지 않은 | 예약되지 않은 | 비제한적 |
RESET | 예약되지 않음 | 예약되지 않은 | 예약되지 않음 |
존중 | 예약 불필요 | 비예약 | 예약되지 않음 |
제한 | 비예약 | 미예약된 | 예약되지 않음 |
REVOKE | 예약되지 않음 | 비예약된 | 예약됨 |
올바른 | 예약됨 | 엄격-비예약 | 예약된 |
RLIKE | 미예약 | 미예약 | 예약되지 않음 |
역할 | 예약되지 않은 | 미예약 | 예약되지 않음 |
역할 | 미예약된 | 예약되지 않음 | 비예약된 |
롤백 | 예약되지 않은 | 예약되지 않음 | 예약됨 |
롤업 | 비예약된 | 미예약 | 예약된 |
ROW | 예약되지 않은 | 비예약 | 예약된 |
ROWS | 미리 예약되지 않음 | 예약되지 않은 | 예약됨 |
SCHEMA | 예약되지 않음 | 예약되지 않은 | 예약되지 않음 |
스키마 | 미예약 | 예약되지 않음 | 키워드 아님 |
초 | 비예약 | 예약되지 않음 | 예약되지 않음 |
SELECT | 예약됨 | 비예약 상태 | 예약됨 |
SEMI | 비 지정 | 엄격한 비 예약 | 비 예약 |
분리된 | 비예약 | 미예약 | 비예약됨 |
SERDE | 예약되지 않은 | 예약되지 않은 | 비예약된 |
SERDEPROPERTIES | 예약되지 않은 | 비예약된 | 예약되지 않음 |
SESSION_USER | 예약된 | 비예약 | 예약됨 |
SET | 미예약된 | 비예약된 | 예약됨 |
설정 | 비예약 | 비 예약 | 예약되지 않음 |
공유 | 예약되지 않음 | 예약되지 않은 | 예약되지 않은 |
SHARES | 미예약 | 미예약 | 비예약 |
보이기 | 예약되지 않음 | 예약되지 않음 | 비예약된 |
기울어진 | 미예약 | 예약되지 않은 | 비예약 |
일부 | 예약된 | 예약되지 않은 | 예약됨 |
정렬 | 예약되지 않은 | 비예약 | 예약되지 않은 |
정리됨 | 비예약된 | 비예약된 | 예약되지 않음 |
시작 | 예약되지 않음 | 비예약 | 예약됨 |
통계 | 예약되지 않은 | 예약되지 않은 | 비예약 |
저장됨 | 비지정 | 미예약 | 미예약 |
계층화하다 | 사전 예약 불필요 | 비지정 | 비 예약 |
구조체 | 예약되지 않은 | 미예약 | 비 예약 |
SUBSTR (서브스트) | 비예약 | 비예약 | 예약되지 않음 |
부분 문자열 | 예약되지 않음 | 비 예약 | 비지정 |
SYNC | 예약되지 않음 | 미 예약된 | 예약되지 않음 |
TABLE | 예약됨 | 비예약 | 예약됨 |
TABLES | 예약되지 않은 | 미예약된 | 비 예약 |
TABLESAMPLE | 예약되지 않음 | 예약되지 않은 | 예약된 |
TBLPROPERTIES | 비예약된 | 비 예약 | 미 예약 |
온도 | 비예약된 | 미예약 | 키워드 아님 |
임시 | 예약 불필요 | 비예약된 | 예약되지 않은 |
종료 | 비예약 | 미예약 | 비예약 |
그때 | 예약됨 | 비예약 | 예약됨 |
시간 | 예약됨 | 비예약 | 예약됨 |
TO | 예약됨 | 예약되지 않은 | 예약된 |
터치 | 예약되지 않은 | 비예약 | 비 예약 |
뒤따르는 | 예약됨 | 비예약된 | 예약됨 |
거래 | 예약되지 않음 | 예약되지 않음 | 비 예약 |
거래 | 미예약 | 미예약 | 미예약 |
변형 | 비예약된 | 예약되지 않음 | 예약되지 않음 |
TRIM | 비 예약 | 예약되지 않은 | 미예약 |
TRUE | 비 예약 | 비 예약 | 예약됨 |
잘라내다 | 예약되지 않음 | 비예약 | 예약됨 |
TRY_CAST | 예약되지 않음 | 비 예약 | 예약되지 않음 |
유형 | 비예약 | 미예약 | 비예약된 |
보관 해제 | 예약되지 않음 | 예약되지 않은 | 예약되지 않은 |
무한한 | 예약 불필요 | 예약되지 않음 | 비예약 |
캐시 해제 | 비 예약 | 미예약 | 비예약 |
연합 | 예약됨 | 엄격한 비 예약 | 예약됨 |
UNIQUE | 예약됨 | 예약되지 않음 | 예약된 |
알 수 없음 | 예약된 | 예약되지 않은 | 예약됨 |
잠금 해제 | 예약되지 않음 | 비 예약 | 비예약 |
설정되지 않음 | 비예약된 | 예약되지 않음 | 비예약 |
UPDATE | 예약되지 않은 | 예약되지 않은 | 예약됨 |
사용 | 예약되지 않음 | 비예약 | 비예약된 |
사용자 | 예약됨 | 비 예약 | 예약됨 |
사용 | 예약됨 | 엄격한 비예약 허용 | 예약됨 |
VALUES | 예약되지 않음 | 예약되지 않음 | 예약된 |
보기 | 예약되지 않음 | 미예약 | 비예약된 |
VIEWS | 미예약된 | 미예약된 | 예약되지 않음 |
다음과 같은 경우... | 예약된 | 비지정 | 예약된 |
WHERE | 예약됨 | 비예약 | 예약된 |
WINDOW | 비지정 | 비예약된 | 예약된 |
함께 | 예약됨 | 예약되지 않음 | 예약됨 |
년 | 비예약 | 미예약 | 예약되지 않음 |
구역 | 예약 불필요 | 예약 불필요 | 예약되지 않음 |