【问题标题】:Creating Impala external table from a partitioned file structure从分区文件结构创建 Impala 外部表
【发布时间】:2013-08-07 16:42:41
【问题描述】:

提供了一个分区的 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/*/*/* 等不同的 glob 也不起作用。

有没有办法做到这一点?或者我应该重组 fs - 对此有何建议?

【问题讨论】:

    标签: hadoop bigdata cloudera impala


    【解决方案1】:

    如果您仍在寻找答案。 您需要手动注册每个单独的分区。

    详情请看这里Registering External Table

    您的表架构需要调整

    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;
    

    【讨论】:

      【解决方案2】:

      另一种方法是使用 Impala 中的 LOAD DATA 函数。如果您的数据是 SequenceFile 或其他不太适合 Impala 的格式 (Impala file formats),您可以像上面 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);
      

      【讨论】:

        【解决方案3】:

        有了新版本的 impala,您可以使用

        ALTER TABLE name RECOVER PARTITIONS
        

        命令。 More info

        您需要注意的是,分区字段必须小写,因为目录结构区分大小写,但 impala 查询不区分。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-10-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多