impala创建parquet文件的外表及两个容易忽略的陷阱

impala外表的创建方法

impala创建外表有两种方式,一种由impala-shell 进行创建,一种通过hive shell进行创建。

impala-shell 进行创建

准备工作

  1. 连接impala-shell
  2. 在文本中书写impala的创建表语句
例子
create table stats_xxxx_day(
ID STRING,
STATDATE STRING
)
partition by(p_statsdate STRING)
stored as parquet
LOCATION '/stats/data/live/stats_xxxx_day.parquet'
建表:
  • 在执行批处理任务之前

    • 直接执行建表语句
    • 然后在每次变更数据源中文件时执行刷新元数据
      • 命令:refresh METADATA [table]
      • 例子: refresh metadata stats_xxxx_day
  • 在已有的数据源文件上进行创建impala表

    • 执行建表语句
    • 在hive shell 中按分区添加数据
alter table stats_xxxx_day add partition(p_statsdate='yyyy-mm-dd')
eg:alter table stats_xxxx_day add partition(p_statsdate='2018-04-20')
    • 切换至impala-shell 刷新元数据
      • 命令: refresh  METADATA [table]
      • 例子:refresh METADATA stats_xxxx_day

至此,在impala中创建表完成。


陷阱一

其中需要注意就是在已有的数据源(分区数据)上建表,必须注意,不然很难完成,且找不到任何原因。

衍生出一个问题(陷阱二)

可能会遇到hive的数据和parquet中的数据完全一致(特指数据中的TIMESTAMP格式的数据),然而在impala中显示会存在8小时的差距

解决方案:

在 cloudera manager中找到impala 的配置页面,找到

impala Daemon 命令行参数高级配置代码段(安全阀)

添加以下配置:

-use_local_tz_for_unix_timestamp-conversions=true
-convert_legacy_hive_parquet_utc_timestamps=true

具体原因:

imapalaTIMESTAMP中没有做好兼容性,存在时区问题。

你可能感兴趣的:(impala创建parquet文件的外表及两个容易忽略的陷阱)