impala建立parquet檔案的外表及兩個容易忽略的陷阱
阿新 • • 發佈:2019-02-06
impala外表的建立方法
impala建立外表有兩種方式,一種由impala-shell 進行建立,一種通過hive shell進行建立。
impala-shell 進行建立
準備工作
- 連線impala-shell
- 在文字中書寫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
- 命令: refresh
- 例子: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
具體原因:
imapala在TIMESTAMP中沒有做好相容性,存在時區問題。