Hive 다이얼렉트

Hive 다이얼렉트 (Hive Dialect)

Flink는 Hive 다이얼렉트를 사용할 때 Hive 구문으로 SQL 문을 작성할 수 있게 해줘요. Hive 구문과의 호환성을 제공함으로써 Hive와의 상호운용성을 높이고, 사용자가 서로 다른 문을 실행하기 위해 Flink와 Hive 사이를 오갈 필요가 있는 상황을 줄이는 것을 목표로 해요. Flink는 현재 defaulthive 두 가지 SQL 다이얼렉트를 지원해요.

출처: 문서

본문

Hive 다이얼렉트 사용하기 (Use Hive Dialect)

Hive 구문으로 작성하려면 먼저 Hive 다이얼렉트로 전환해야 해요. 아래는 SQL Client, HiveServer2 엔드포인트로 구성된 SQL Gateway, 그리고 Table API에서 다이얼렉트를 설정하는 방법을 설명해요. 실행하는 각 문에 대해 다이얼렉트를 동적으로 전환할 수 있고, 다른 다이얼렉트를 사용하기 위해 세션을 재시작할 필요는 없어요.

주의 (Note):

  • Hive 다이얼렉트를 사용하려면 Hive 관련 의존성을 추가해야 해요. Hive 의존성을 참고해요.
  • 현재 카탈로그가 HiveCatalog인지 확인해요. 그렇지 않으면 Flink의 기본 다이얼렉트로 대체(fall back)돼요. HiveServer2 엔드포인트로 구성된 SQL Gateway를 사용할 때 현재 카탈로그는 기본적으로 HiveCatalog가 돼요.
  • 더 나은 구문·의미 호환성을 위해 HiveModule을 로드해서 모듈 목록의 첫 번째에 두는 것이 좋아요. 그래야 함수 해석 시 Hive 내장 함수를 찾을 수 있어요. HiveServer2 엔드포인트로 구성된 SQL Gateway를 사용할 때는 Hive 모듈이 자동으로 로드돼요.
  • Hive 다이얼렉트는 2-파트 식별자만 지원하므로 식별자에 카탈로그를 지정할 수 없어요.
  • 모든 Hive 버전이 같은 구문을 지원하지만 특정 기능을 쓸 수 있는지는 사용하는 Hive 버전에 따라 달라져요. 예를 들어 데이터베이스 위치를 갱신하는 것은 Hive 2.4.0 이상에서만 지원돼요.
  • Hive 다이얼렉트는 주로 배치 모드에서 사용돼요. 일부 Hive 구문(Sort/Cluster/Distributed BY, Transform 등)은 아직 스트리밍 모드에서 지원되지 않아요.

SQL Client

SQL 다이얼렉트는 table.sql-dialect 프로퍼티로 지정할 수 있어요. 따라서 SQL Client가 실행된 후 다이얼렉트를 설정할 수 있어요.

Flink SQL> SET table.sql-dialect = hive; -- to use Hive dialect
[INFO] Session property has been set.

Flink SQL> SET table.sql-dialect = default; -- to use Flink default dialect
[INFO] Session property has been set.

HiveServer2 엔드포인트로 구성된 SQL Gateway

HiveServer2 엔드포인트로 구성된 SQL Gateway를 사용할 때 다이얼렉트는 기본적으로 Hive 다이얼렉트가 돼요. Flink 기본 다이얼렉트로 바꿀 수도 있어요.

# assuming has connected to SQL Gateway with beeline
jdbc:hive2> SET table.sql-dialect = default; -- to use Flink default dialect

jdbc:hive2> SET table.sql-dialect = hive; -- to use Hive dialect

Table API

Table API로 TableEnvironment의 다이얼렉트를 설정할 수 있어요.

Java:

EnvironmentSettings settings = EnvironmentSettings.inStreamingMode();
TableEnvironment tableEnv = TableEnvironment.create(settings);

// to use hive dialect
tableEnv.getConfig().setSqlDialect(SqlDialect.HIVE);

// to use default dialect
tableEnv.getConfig().setSqlDialect(SqlDialect.DEFAULT);

Python:

from pyflink.table import *
settings = EnvironmentSettings.in_batch_mode()
t_env = TableEnvironment.create(settings)

# to use Hive dialect
t_env.get_config().set_sql_dialect(SqlDialect.HIVE)

# to use Flink default dialect
t_env.get_config().set_sql_dialect(SqlDialect.DEFAULT)

더 알아보기 (Learn more)