Hive Dialect

Hive Dialect

Hive dialect 을 사용할 때 Flink 는 사용자가 Hive 문법으로 SQL 문을 작성할 수 있게 해줍니다. Hive 문법과의 호환성을 제공함으로써 Hive 와의 상호 운용성을 개선하고, 서로 다른 문을 실행하기 위해 Flink 와 Hive 사이를 전환해야 하는 시나리오를 줄이는 것을 목표로 합니다.

출처: 문서

본문

Hive dialect 을 사용할 때 Flink 는 사용자가 Hive 문법으로 SQL 문을 작성할 수 있게 해줍니다. Hive 문법과의 호환성을 제공함으로써 Hive 와의 상호 운용성을 개선하고, 서로 다른 문을 실행하기 위해 Flink 와 Hive 사이를 전환해야 하는 시나리오를 줄이는 것을 목표로 합니다.

Hive Dialect 사용하기

Flink 는 현재 defaulthive 두 가지 SQL dialect 를 지원합니다. Hive 문법으로 작성하려면 Hive dialect 로 전환해야 합니다. 다음은 SQL Client, HiveServer2 Endpoint 로 구성된 SQL Gateway, Table API 를 사용해 dialect 를 설정하는 방법을 설명합니다. 또한 실행하는 각 문에 대해 dialect 를 동적으로 전환할 수 있습니다. 다른 dialect 를 사용하기 위해 세션을 다시 시작할 필요는 없습니다.

참고:

  • Hive dialect 을 사용하려면 Hive 관련 의존성을 추가해야 합니다. 의존성 추가 방법은 Hive dependencies 를 참고하세요.
  • 현재 카탈로그가 HiveCatalog 인지 확인하세요. 그렇지 않으면 Flink 의 default dialect 로 폴백됩니다. HiveServer2 Endpoint 로 구성된 SQL Gateway 를 사용할 때 현재 카탈로그는 기본적으로 HiveCatalog 가 됩니다.
  • 더 나은 문법 및 의미 호환성을 위해 HiveModule 을 로드하고 모듈 목록의 첫 번째에 배치하는 것이 매우 권장됩니다. 그래야 함수 해석 중에 Hive 내장 함수가 선택될 수 있습니다. 해석 순서를 변경하는 방법은 여기 를 참고하세요. 하지만 HiveServer2 Endpoint 로 구성된 SQL Gateway 를 사용할 때는 Hive 모듈이 자동으로 로드됩니다.
  • Hive dialect 는 2-part 식별자만 지원하므로 식별자에 catalog 를 지정할 수 없습니다.
  • 모든 Hive 버전이 같은 문법을 지원하지만, 특정 기능을 사용할 수 있는지 여부는 여전히 사용하는 Hive 버전 에 달려 있습니다. 예를 들어 데이터베이스 위치 업데이트는 Hive-2.4.0 이상에서만 지원됩니다.
  • Hive dialect 는 주로 배치 모드에서 사용됩니다. 일부 Hive 문법(Sort/Cluster/Distributed BY, Transform 등)은 아직 스트리밍 모드에서 지원되지 않습니다.

SQL Client

SQL dialect 은 table.sql-dialect 속성으로 지정할 수 있습니다. 따라서 SQL Client 가 시작된 후 dialect 를 설정할 수 있습니다:

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 Endpoint 로 구성된 SQL Gateway

HiveServer2 Endpoint 로 구성된 SQL Gateway 를 사용할 때 dialect 는 기본적으로 Hive dialect 가 되므로, Hive dialect 를 사용하려면 아무것도 할 필요가 없습니다. 하지만 여전히 dialect 를 Flink 기본 dialect 로 변경할 수 있습니다:

# 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 의 dialect 를 설정할 수 있습니다.

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)