云朵 impala PARQUET_FALLBACK_SCHEMA_RESOLUTION

cloudera impala PARQUET_FALLBACK_SCHEMA_RESOLUTION

可以将 Cloudera Impala (5.12) 配置为默认为 name 而不是 position for PARQUET_FALLBACK_SCHEMA_RESOLUTION?

我的 Parquet 文件并不总是具有相同的列集,因此我们需要 Impala 按名称而不是位置来查找它们,在 Hue 中为每个列执行此操作有点麻烦会话:

set PARQUET_FALLBACK_SCHEMA_RESOLUTION=name;

恐怕这在 Impala 端是不可配置的。

  case TImpalaQueryOptions::PARQUET_FALLBACK_SCHEMA_RESOLUTION: {
    if (iequals(value, "position") ||
        iequals(value, to_string(TParquetFallbackSchemaResolution::POSITION))) {
      query_options->__set_parquet_fallback_schema_resolution(
          TParquetFallbackSchemaResolution::POSITION);
    } else if (iequals(value, "name") ||
               iequals(value, to_string(TParquetFallbackSchemaResolution::NAME))) {
      query_options->__set_parquet_fallback_schema_resolution(
          TParquetFallbackSchemaResolution::NAME);
    } else {
      return Status(Substitute("Invalid PARQUET_FALLBACK_SCHEMA_RESOLUTION option: "
          "'[=10=]'. Valid options are 'POSITION' and 'NAME'.", value));
    }
    break;
  }

Impala 服务器没有设置默认查询选项。所有选项都在设置客户端会话的地方设置。因此,您需要配置您使用的任何客户端。例如,参见 shell/impala_shell_config_defaults.py

不过,您仍然可以修改代码并重新编译:)

common/thrift/ImpalaInternalService.thrift

struct TQueryOptions {
    ....
    // Determines how to resolve Parquet files' schemas in the absence of field IDs (which
    // is always, since fields IDs are NYI). Valid values are "position" (default) and
    // "name".
    43: optional TParquetFallbackSchemaResolution parquet_fallback_schema_resolution = 0  <--- change it to 1
    ....
}

感谢阿莫斯提供的信息,

我在 Cloudera 论坛上发布了同样的问题,他们向我指出了一种通过 Cloudera Manager 进行配置的方法。

http://community.cloudera.com/t5/Interactive-Short-cycle-SQL/PARQUET-FALLBACK-SCHEMA-RESOLUTION/m-p/62318#M3883