Hive 使用配置单元将数据从文件读入表

Hive 使用配置单元将数据从文件读入表,hive,hiveql,Hive,Hiveql,在HDFS中,我有大量的文件和文件夹。我想使用ApacheHive将文件中的数据读取到表中。 如果相应的数据块位于文件夹中,我将使用以下代码: CREATE EXTERNAL TABLE IPRegions ( -- some fields ) ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ( -- regexp ) STORED AS TEXTFI

在HDFS中,我有大量的文件和文件夹。我想使用ApacheHive将文件中的数据读取到表中。 如果相应的数据块位于文件夹中,我将使用以下代码:

CREATE EXTERNAL TABLE IPRegions (
    -- some fields
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
    -- regexp
)
STORED AS TEXTFILE
LOCATION '/data/user_logs/ipdata_folder'; --this is a path to the folder with data
如果对应的数据块位于单个文件中,我应该如何更改此代码(我想,只有最后2个字符串会被更改)

另外,我没有在HDFS中创建新文件夹和移动文件的权限

UPD。简而言之,只有当数据源是文件夹时,我的代码才能正常工作(例如
/data/user\u logs/ipdata\u folder
)。但是如果我想使用单个文件(例如
/data/user\u logs/ipdata\u folder/logs.txt
),我会发现一个错误:

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:hdfs://bds11.vdi.mipt.ru:8020/data/user_logs/user_logs_S/logS.txt is not a directory or unable to create one)

配置单元表在文件夹级别工作,因此不能将文件指定为有效位置

也就是说,如果您在
/data/user_logs/ipdata_folder
中有多个文件,并且您只想将特定文件中的数据添加到表中(忽略其他文件),那么您需要将此类文件复制到另一个文件夹中,并将该替代文件夹指定为表定义中的位置


但是,您说您没有创建文件夹或移动文件的权限。这是非常有限的。。。因此,我认为您唯一能做的就是保持表定义的原样,这意味着所有数据文件都将添加到表中,并在查询数据时对数据执行某种过滤。

您能更清楚地阐述您的问题吗?我什么也没得到,是的。简单地说,只有当数据源是文件夹(例如
/data/user\u logs/ipdata\u folder
)时,我的代码才能正常工作。但是如果我想处理单个文件(例如
/data/user\u logs/ipdata\u folder/logs.txt
),我会发现一个错误:
失败:执行错误,从org.apache.hadoop.hive.ql.exec.ddlstask返回代码1。元异常(消息:hdfs://bds11.vdi.mipt.ru:8020/data/user_logs/user_logs_S/logS.txt 不是目录或无法创建目录)