按非第一列分区

Partitioned by non-first column

我有一个 table,它是使用以下 hiveQl 脚本创建的:

CREATE EXTERNAL TABLE Logs 
(
    ip STRING,
    time STRING,
    query STRING,
    pageSize STRING,
    statusCode STRING,
    browser STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
   -- some regexps
)
STORED AS TEXTFILE
LOCATION '/path';

我需要按 time 字段创建分区。但在我看到的所有示例中,分区仅按第一个字段或从第一个开始的字段序列创建。我还看到,如果我把字段写在 PARTITIONED BY 部分,我一定不能把它写在 CREATE TABLE 部分。

我尝试以多种方式按时间创建分区,但总是出现不同的异常。

例如:

ParseException line 11:20 cannot recognize input near ')' 'ROW' 'FORMAT' in column type

或者这个:

ParseException line 16:0 missing EOF at 'PARTITIONED' near ')'

等等。

那么,在我的案例中,如何按 time 字段创建分区?

hive 中的分区列不是真实的column.It 只是给 hive 提示在哪里可以找到特定分区的文件。

因此,如果您有一个文件,您希望根据此中的一列将文件存储到不同的分区中 file.There 无法自动执行此操作,您必须自己拆分输入文件并将拆分文件加载到不同的分区。(如果您不知道如何根据列拆分文件,请使用 awk {print [=10=]>>"filebase.";}

或者您可以将输入加载到未分区的 table first.And,然后使用查询将这些数据插入到另一个分区的 table。

希望对您有所帮助。