按非第一列分区
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。
希望对您有所帮助。
我有一个 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。
希望对您有所帮助。