1. 程式人生 > >impala建立parquet檔案的外表及兩個容易忽略的陷阱

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中沒有做好相容性,存在時區問題。