从分区文件结构创建impala外部表

cotxawn7  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(334)

提供了分区fs结构,如下所示:

logs
└── log_type
    └── 2013
        ├── 07
        │   ├── 28
        │   │   ├── host1
        │   │   │   └── log_file_1.csv
        │   │   └── host2
        │   │       ├── log_file_1.csv
        │   │       └── log_file_2.csv
        │   └── 29
        │       ├── host1
        │       │   └── log_file_1.csv
        │       └── host2
        │           └── log_file_1.csv
        └── 08

我一直在尝试在impala中创建一个外部表:

create external table log_type (
    field1    string,
    field2    string,
    ...
)
row format delimited fields terminated by '|' location '/logs/log_type/2013/08';

我希望 Impala 将递归到子目录和加载所有的csv文件;但没有雪茄。不会抛出错误,但不会将数据加载到表中。
不同的地球像 /logs/log_type/2013/08/*/* 或者 /logs/log_type/2013/08/*/*/* 也不起作用。
有办法吗?或者我应该重组金融服务-有什么建议吗?

6rqinv9w

6rqinv9w1#

另一种方法是使用 LOAD DATA 在 Impala 中的作用。如果您的数据是sequencefile或其他对impala不太友好的格式(impala文件格式),那么您可以像joey在上面所做的那样创建外部表,而不是 ALTER TABLE ,你可以这样做

LOAD DATA INPATH '/logs/log_type/2013/07/28/host1/log_file_1.csv' INTO TABLE log_type PARTITION (year=2013, month=07, day=28, host=host1);
hjqgdpho

hjqgdpho2#

有了新版的 Impala ,你可以使用

ALTER TABLE name RECOVER PARTITIONS

命令。更多信息
您需要注意的是,分区字段必须是小写的,因为目录结构是区分大小写的,而impala查询则不是。

zte4gxcn

zte4gxcn3#

以防你还在寻找答案。您需要手动注册每个分区。
有关注册外部表的详细信息,请参见此处
需要调整表的架构

create external table log_type (
        field1    string,
        field2    string,
...)
  partitioned by (year int, month int, day int, host string)
  row format delimited fields terminated by '|';

在您更改了您的模式(包括年、月、日和主机)之后,您必须递归地将每个分区添加到表中。
像这样的

ALTER TABLE log_type ADD PARTITION (year=2013, month=07, day=28, host="host1")
    LOCATION '/logs/log_type/2013/07/28/host1';

之后你需要刷新 Impala 表。

invalidate log_type;
refresh log_type;

相关问题