데이터 레이크 테이블의 식별자 처리

데이터 레이크 테이블의 식별자 처리는 일반 Db2 식별자보다 더 제한적입니다. 이러한 테이블은 Db2 카탈로그 테이블과 Hive 메타스토어(HMS)에서 모두 유지 관리되기 때문입니다. 따라서 식별자 의미는 Db2 와 Hive 에서 모두 지원되는 것의 하위 집합으로 제한됩니다.

Db2 식별자 처리에 대한 자세한 내용은 식별자를 참조하세요.

Hive 와 Db2 의 식별자 처리에서 가장 분명한 차이점은 Hive 에서 구분된 식별자라도 대소문자를 구분하지 않고 소문자로 작성된 것처럼 취급한다는 것입니다. 예를 들어, 일반적인 Db2 테이블 이름 `AaAa` 과 `aAaA` 은 모두 `aaaa`라는 동일한 데이터레이크 테이블로 식별됩니다. 즉, 테이블 이름이나 스키마 이름의 대소문자 구분으로 인해 데이터 레이크 테이블을 생성할 때 SQLSTATE 42710 오류가 발생할 수 있습니다. MySchema 스키마 아래에 MYTABLE 테이블을 만드는 다음 예제를 살펴보겠습니다:
create datalake table "MySchema"."MYTABLE" (c1 int) location 'db2remote://odfdefault//default/MYTAB'
를 반환합니다:
DB20000I The SQL command completed successfully.
이제 CREATE Datalake TABLE 문을 다시 실행하여 다른 테이블(TABLEXX)을 생성하되 다음 예제와 같이 스키마 이름의 대소문자를 Myschema 로 변경해 보겠습니다:
create datalake table "Myschema"."TABLEXX" (c1 int) location 'db2remote://odfdefault//default/MYTAB'
를 반환합니다:

DB21034E The command was processed as an SQL statement because it was not a
valid Command Line Processor command. During SQL processing it returned:
SQL0601N The name of the object to be created is identical to the existing
name "myschema" of type "SCHEMA". SQLSTATE=42710
스키마 이름이 CREATE Datalake TABLE 문을 처음 실행한 경우와 대/소문자만 다르기 때문에 CREATE Datalake TABLE 문의 두 번째 실행이 실패했습니다.
다음 SELECT 문 예제는 Db2 및 Hive 에서 이미 사용 중인 스키마 및 테이블 이름을 보여줍니다:
select varchar(tabschema,25) as db2_schema, varchar(hiveschema,25) as hive_schema, varchar(tabname,25) as db2_tabname, varchar(hivetab,25) as hive_tabname from syshadoop.hcat_tables where upper(tabschema) = upper('myschema') and upper(tabname) = upper('mytab')
를 반환합니다:

DB2_SCHEMA                HIVE_SCHEMA               DB2_TABNAME               HIVE_TABNAME
------------------------- ------------------------- ------------------------- -------------------------
MySchema                  myschema                  MyTab                     mytab

1 record(s) selected.
SELECT 출력에서 사용할 수 있는 유일한 '대/소문자' 버전의 "myschema"는 "MySchema" 입니다.

Hive 의 일반 식별자는 하나 이상의 영숫자(A-Z, 0-9)와 밑줄로 시작하면 안 되는 밑줄로 구성된 시퀀스입니다. Hive 의 구분 식별자는 백틱으로 묶인 하나 이상의 UTF-8 문자로 이루어진 시퀀스입니다. 그러나 식별자가 사용되는 컨텍스트에 따라 UTF-8 문자 집합의 하위 집합만 허용됩니다. 시퀀스의 선행 및 후행 공백은 식별자의 컨텍스트에 따라 다르게 처리됩니다. 예를 들어 스키마 및 테이블 이름에서는 선행 및 후행 공백이 제거되지만 열 이름에서는 공백이 유지됩니다.

스키마 및 테이블 이름에는 다음과 같은 지원 문자를 포함할 수 있습니다: A-Z, a-z, 0-9, '"', '%', '&','\'', '(', ')', '*', '+', ',', '-', '/', ':', ';', '<', '=', '>', '?', '[', ']','_', '|', '{', '}', '$', '^', '!', '~', '#', '@', '', or ' '. 스키마 이름 또는 테이블 이름에 지원되지 않는 문자가 포함되어 있으면 오류가 발생합니다. 또한 스키마 및 테이블 이름에 '.' 이 포함되어 있거나 스키마 이름이 '@' 으로 시작하거나 스키마 이름이 '#' or '!' 으로 끝나는 경우 오류가 발생합니다.

일반적으로 열 이름에는 UTF-8 문자를 포함할 수 있습니다. 그러나 스키마 및 테이블 이름과 마찬가지로 지원되지 않는 문자가 몇 가지 있습니다. 문자 '.' 및 ':'는 지원되지 않습니다. 사용하는 스토리지 핸들러와 스토리지 형식에 따라 추가적인 제한 사항이 있습니다:

  • Hive 의 제한으로 인해 쪽모이 세공 파일 형식을 사용하는 Hive 데이터레이크 테이블의 열 이름에는 공백을 포함한 많은 특수 문자가 지원되지 않습니다.

  • Avro 파일 형식을 사용하는 Hive 데이터레이크 테이블의 열 이름에는 C 식별자(문자로 시작한 다음 문자, 숫자 또는 밑줄로 시작해야 함) 만 사용할 수 있습니다.

지원되지 않는 식별자를 사용하면 SQL0113N 오류가 반환됩니다.